diff --git a/sample/a-buffer/composite.wgsl b/sample/a-buffer/composite.wgsl index 09ff0af6..72604372 100644 --- a/sample/a-buffer/composite.wgsl +++ b/sample/a-buffer/composite.wgsl @@ -1,5 +1,5 @@ struct Uniforms { - modelViewProjectionMatrix: mat4x4, + modelViewProjectionMatrix: mat4x4f, maxStorableFragments: u32, targetWidth: u32, }; @@ -14,7 +14,7 @@ struct Heads { }; struct LinkedListElement { - color: vec4, + color: vec4f, depth: f32, next: u32 }; @@ -30,8 +30,8 @@ struct LinkedList { // Output a full screen quad @vertex -fn main_vs(@builtin(vertex_index) vertIndex: u32) -> @builtin(position) vec4 { - const position = array, 6>( +fn main_vs(@builtin(vertex_index) vertIndex: u32) -> @builtin(position) vec4f { + const position = array( vec2(-1.0, -1.0), vec2(1.0, -1.0), vec2(1.0, 1.0), @@ -44,8 +44,8 @@ fn main_vs(@builtin(vertex_index) vertIndex: u32) -> @builtin(position) vec4) -> @location(0) vec4 { - let fragCoords = vec2(position.xy); +fn main_fs(@builtin(position) position: vec4f) -> @location(0) vec4f { + let fragCoords = vec2i(position.xy); let headsIndex = u32(fragCoords.y - sliceInfo.sliceStartY) * uniforms.targetWidth + u32(fragCoords.x); // The maximum layers we can process for any pixel diff --git a/sample/a-buffer/main.js b/sample/a-buffer/main.js index 4b13b08f..2bb333f7 100644 --- a/sample/a-buffer/main.js +++ b/sample/a-buffer/main.js @@ -4937,18 +4937,18 @@ const mesh = { mesh.normals = computeSurfaceNormals(mesh.positions, mesh.triangles); var opaqueWGSL = `struct Uniforms { - modelViewProjectionMatrix: mat4x4, + modelViewProjectionMatrix: mat4x4f, }; @binding(0) @group(0) var uniforms: Uniforms; struct VertexOutput { - @builtin(position) position: vec4, + @builtin(position) position: vec4f, @location(0) @interpolate(flat) instance: u32 }; @vertex -fn main_vs(@location(0) position: vec4, @builtin(instance_index) instance: u32) -> VertexOutput { +fn main_vs(@location(0) position: vec4f, @builtin(instance_index) instance: u32) -> VertexOutput { var output: VertexOutput; // distribute instances into a staggered 4x4 grid @@ -4968,8 +4968,8 @@ fn main_vs(@location(0) position: vec4, @builtin(instance_index) instance: } @fragment -fn main_fs(@location(0) @interpolate(flat) instance: u32) -> @location(0) vec4 { - const colors = array,6>( +fn main_fs(@location(0) @interpolate(flat) instance: u32) -> @location(0) vec4f { + const colors = array( vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0), vec3(0.0, 0.0, 1.0), @@ -4983,7 +4983,7 @@ fn main_fs(@location(0) @interpolate(flat) instance: u32) -> @location(0) vec4, + modelViewProjectionMatrix: mat4x4f, maxStorableFragments: u32, targetWidth: u32, }; @@ -4998,7 +4998,7 @@ struct Heads { }; struct LinkedListElement { - color: vec4, + color: vec4f, depth: f32, next: u32 }; @@ -5014,12 +5014,12 @@ struct LinkedList { @binding(4) @group(0) var sliceInfo: SliceInfo; struct VertexOutput { - @builtin(position) position: vec4, + @builtin(position) position: vec4f, @location(0) @interpolate(flat) instance: u32 }; @vertex -fn main_vs(@location(0) position: vec4, @builtin(instance_index) instance: u32) -> VertexOutput { +fn main_vs(@location(0) position: vec4f, @builtin(instance_index) instance: u32) -> VertexOutput { var output: VertexOutput; // distribute instances into a staggered 4x4 grid @@ -5040,8 +5040,8 @@ fn main_vs(@location(0) position: vec4, @builtin(instance_index) instance: } @fragment -fn main_fs(@builtin(position) position: vec4, @location(0) @interpolate(flat) instance: u32) { - const colors = array,6>( +fn main_fs(@builtin(position) position: vec4f, @location(0) @interpolate(flat) instance: u32) { + const colors = array( vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0), vec3(0.0, 0.0, 1.0), @@ -5050,7 +5050,7 @@ fn main_fs(@builtin(position) position: vec4, @location(0) @interpolate(fla vec3(0.0, 1.0, 1.0), ); - let fragCoords = vec2(position.xy); + let fragCoords = vec2i(position.xy); let opaqueDepth = textureLoad(opaqueDepthTexture, fragCoords, 0); // reject fragments behind opaque objects @@ -5076,7 +5076,7 @@ fn main_fs(@builtin(position) position: vec4, @location(0) @interpolate(fla `; var compositeWGSL = `struct Uniforms { - modelViewProjectionMatrix: mat4x4, + modelViewProjectionMatrix: mat4x4f, maxStorableFragments: u32, targetWidth: u32, }; @@ -5091,7 +5091,7 @@ struct Heads { }; struct LinkedListElement { - color: vec4, + color: vec4f, depth: f32, next: u32 }; @@ -5107,8 +5107,8 @@ struct LinkedList { // Output a full screen quad @vertex -fn main_vs(@builtin(vertex_index) vertIndex: u32) -> @builtin(position) vec4 { - const position = array, 6>( +fn main_vs(@builtin(vertex_index) vertIndex: u32) -> @builtin(position) vec4f { + const position = array( vec2(-1.0, -1.0), vec2(1.0, -1.0), vec2(1.0, 1.0), @@ -5121,8 +5121,8 @@ fn main_vs(@builtin(vertex_index) vertIndex: u32) -> @builtin(position) vec4) -> @location(0) vec4 { - let fragCoords = vec2(position.xy); +fn main_fs(@builtin(position) position: vec4f) -> @location(0) vec4f { + let fragCoords = vec2i(position.xy); let headsIndex = u32(fragCoords.y - sliceInfo.sliceStartY) * uniforms.targetWidth + u32(fragCoords.x); // The maximum layers we can process for any pixel @@ -5217,7 +5217,7 @@ const indexBuffer = device.createBuffer({ indexBuffer.unmap(); } // Uniforms contains: -// * modelViewProjectionMatrix: mat4x4 +// * modelViewProjectionMatrix: mat4x4f // * maxStorableFragments: u32 // * targetWidth: u32 const uniformsSize = roundUp(16 * Float32Array.BYTES_PER_ELEMENT + 2 * Uint32Array.BYTES_PER_ELEMENT, 16); @@ -5497,7 +5497,7 @@ const configure = () => { // Determines how much memory is allocated to store linked-list elements const averageLayersPerFragment = 4; // Each element stores - // * color : vec4 + // * color : vec4f // * depth : f32 // * index of next element in the list : u32 const linkedListElementSize = 5 * Float32Array.BYTES_PER_ELEMENT + 1 * Uint32Array.BYTES_PER_ELEMENT; diff --git a/sample/a-buffer/main.js.map b/sample/a-buffer/main.js.map index 28e74c2c..3277e23b 100644 --- a/sample/a-buffer/main.js.map +++ b/sample/a-buffer/main.js.map @@ -1 +1 @@ -{"version":3,"file":"main.js","sources":["../../../node_modules/wgpu-matrix/dist/2.x/wgpu-matrix.module.js","../../../node_modules/dat.gui/build/dat.gui.module.js","../../../node_modules/teapot/teapot.js","../../../../../meshes/utils.ts","../../../../../meshes/teapot.ts","../../../../../sample/a-buffer/main.ts"],"sourcesContent":["/* wgpu-matrix@2.5.1, license MIT */\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nlet EPSILON = 0.000001;\n/**\n * Set the value for EPSILON for various checks\n * @param v - Value to use for EPSILON.\n * @returns previous value of EPSILON;\n */\nfunction setEpsilon(v) {\n const old = EPSILON;\n EPSILON = v;\n return old;\n}\n/**\n * Convert degrees to radians\n * @param degrees - Angle in degrees\n * @returns angle converted to radians\n */\nfunction degToRad(degrees) {\n return degrees * Math.PI / 180;\n}\n/**\n * Convert radians to degrees\n * @param radians - Angle in radians\n * @returns angle converted to degrees\n */\nfunction radToDeg(radians) {\n return radians * 180 / Math.PI;\n}\n/**\n * Lerps between a and b via t\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @returns a + (b - a) * t\n */\nfunction lerp$4(a, b, t) {\n return a + (b - a) * t;\n}\n/**\n * Compute the opposite of lerp. Given a and b and a value between\n * a and b returns a value between 0 and 1. 0 if a, 1 if b.\n * Note: no clamping is done.\n * @param a - start value\n * @param b - end value\n * @param v - value between a and b\n * @returns (v - a) / (b - a)\n */\nfunction inverseLerp(a, b, v) {\n const d = b - a;\n return (Math.abs(b - a) < EPSILON)\n ? a\n : (v - a) / d;\n}\n/**\n * Compute the euclidean modulo\n *\n * ```\n * // table for n / 3\n * -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 <- n\n * ------------------------------------\n * -2 -1 -0 -2 -1 0, 1, 2, 0, 1, 2 <- n % 3\n * 1 2 0 1 2 0, 1, 2, 0, 1, 2 <- euclideanModule(n, 3)\n * ```\n *\n * @param n - dividend\n * @param m - divisor\n * @returns the euclidean modulo of n / m\n */\nfunction euclideanModulo(n, m) {\n return ((n % m) + m) % m;\n}\n\nvar utils = /*#__PURE__*/Object.freeze({\n __proto__: null,\n get EPSILON () { return EPSILON; },\n setEpsilon: setEpsilon,\n degToRad: degToRad,\n radToDeg: radToDeg,\n lerp: lerp$4,\n inverseLerp: inverseLerp,\n euclideanModulo: euclideanModulo\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Vec2 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new Vec2. In other words you can do this\n *\n * const v = vec2.cross(v1, v2); // Creates a new Vec2 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec2.create();\n * vec2.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec2.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet VecType$2 = Float32Array;\n/**\n * Sets the type this library creates for a Vec2\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec2\n */\nfunction setDefaultType$6(ctor) {\n const oldType = VecType$2;\n VecType$2 = ctor;\n return oldType;\n}\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values.\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Vec2's specified type\n * it would be faster to use\n *\n * ```\n * const v = vec2.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Vec2Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `vec2.create` is usually used\n * to create a Vec2 to be filled out as in\n *\n * ```\n * const sum = vec2.create();\n * vec2.add(v1, v2, sum);\n * ```\n *\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nfunction create$5(x = 0, y = 0) {\n const dst = new VecType$2(2);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Vec3 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec3`. In other words you can do this\n *\n * const v = vec3.cross(v1, v2); // Creates a new Vec3 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec3.create();\n * vec3.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec3.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet VecType$1 = Float32Array;\n/**\n * Sets the type this library creates for a Vec3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec3\n */\nfunction setDefaultType$5(ctor) {\n const oldType = VecType$1;\n VecType$1 = ctor;\n return oldType;\n}\n/**\n * Creates a vec3; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nfunction create$4(x, y, z) {\n const dst = new VecType$1(3);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n }\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nconst fromValues$3 = create$5;\n/**\n * Sets the values of a Vec2\n * Also see {@link vec2.create} and {@link vec2.copy}\n *\n * @param x first value\n * @param y second value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set$5(x, y, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = x;\n dst[1] = y;\n return dst;\n}\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nfunction ceil$2(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n return dst;\n}\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nfunction floor$2(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n return dst;\n}\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nfunction round$2(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n return dst;\n}\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nfunction clamp$2(v, min = 0, max = 1, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n return dst;\n}\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nfunction add$3(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n return dst;\n}\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nfunction addScaled$2(a, b, scale, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n return dst;\n}\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nfunction angle$2(a, b) {\n const ax = a[0];\n const ay = a[1];\n const bx = a[0];\n const by = a[1];\n const mag1 = Math.sqrt(ax * ax + ay * ay);\n const mag2 = Math.sqrt(bx * bx + by * by);\n const mag = mag1 * mag2;\n const cosine = mag && dot$3(a, b) / mag;\n return Math.acos(cosine);\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nfunction subtract$3(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nconst sub$3 = subtract$3;\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nfunction equalsApproximately$5(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON;\n}\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nfunction equals$5(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp$3(a, b, t, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n return dst;\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nfunction lerpV$2(a, b, t, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n return dst;\n}\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nfunction max$2(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n return dst;\n}\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nfunction min$2(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n return dst;\n}\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction mulScalar$3(v, k, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n return dst;\n}\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nconst scale$5 = mulScalar$3;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction divScalar$3(v, k, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n return dst;\n}\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nfunction inverse$5(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n return dst;\n}\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nconst invert$4 = inverse$5;\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nfunction cross$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n const z = a[0] * b[1] - a[1] * b[0];\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = z;\n return dst;\n}\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nfunction dot$3(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nfunction length$3(v) {\n const v0 = v[0];\n const v1 = v[1];\n return Math.sqrt(v0 * v0 + v1 * v1);\n}\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nconst len$3 = length$3;\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nfunction lengthSq$3(v) {\n const v0 = v[0];\n const v1 = v[1];\n return v0 * v0 + v1 * v1;\n}\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nconst lenSq$3 = lengthSq$3;\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nfunction distance$2(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return Math.sqrt(dx * dx + dy * dy);\n}\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nconst dist$2 = distance$2;\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nfunction distanceSq$2(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return dx * dx + dy * dy;\n}\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nconst distSq$2 = distanceSq$2;\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nfunction normalize$3(v, dst) {\n dst = dst || new VecType$2(2);\n const v0 = v[0];\n const v1 = v[1];\n const len = Math.sqrt(v0 * v0 + v1 * v1);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n }\n return dst;\n}\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nfunction negate$4(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = -v[0];\n dst[1] = -v[1];\n return dst;\n}\n/**\n * Copies a vector. (same as {@link vec2.clone})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nfunction copy$5(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = v[0];\n dst[1] = v[1];\n return dst;\n}\n/**\n * Clones a vector. (same as {@link vec2.copy})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nconst clone$5 = copy$5;\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nfunction multiply$5(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n return dst;\n}\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nconst mul$5 = multiply$5;\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nfunction divide$2(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n return dst;\n}\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nconst div$2 = divide$2;\n/**\n * Creates a random unit vector * scale\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nfunction random$1(scale = 1, dst) {\n dst = dst || new VecType$2(2);\n const angle = Math.random() * 2 * Math.PI;\n dst[0] = Math.cos(angle) * scale;\n dst[1] = Math.sin(angle) * scale;\n return dst;\n}\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nfunction zero$2(dst) {\n dst = dst || new VecType$2(2);\n dst[0] = 0;\n dst[1] = 0;\n return dst;\n}\n/**\n * transform Vec2 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat4$2(v, m, dst) {\n dst = dst || new VecType$2(2);\n const x = v[0];\n const y = v[1];\n dst[0] = x * m[0] + y * m[4] + m[12];\n dst[1] = x * m[1] + y * m[5] + m[13];\n return dst;\n}\n/**\n * Transforms vec4 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat3$1(v, m, dst) {\n dst = dst || new VecType$2(2);\n const x = v[0];\n const y = v[1];\n dst[0] = m[0] * x + m[4] * y + m[8];\n dst[1] = m[1] * x + m[5] * y + m[9];\n return dst;\n}\n\nvar vec2Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create$5,\n setDefaultType: setDefaultType$6,\n fromValues: fromValues$3,\n set: set$5,\n ceil: ceil$2,\n floor: floor$2,\n round: round$2,\n clamp: clamp$2,\n add: add$3,\n addScaled: addScaled$2,\n angle: angle$2,\n subtract: subtract$3,\n sub: sub$3,\n equalsApproximately: equalsApproximately$5,\n equals: equals$5,\n lerp: lerp$3,\n lerpV: lerpV$2,\n max: max$2,\n min: min$2,\n mulScalar: mulScalar$3,\n scale: scale$5,\n divScalar: divScalar$3,\n inverse: inverse$5,\n invert: invert$4,\n cross: cross$1,\n dot: dot$3,\n length: length$3,\n len: len$3,\n lengthSq: lengthSq$3,\n lenSq: lenSq$3,\n distance: distance$2,\n dist: dist$2,\n distanceSq: distanceSq$2,\n distSq: distSq$2,\n normalize: normalize$3,\n negate: negate$4,\n copy: copy$5,\n clone: clone$5,\n multiply: multiply$5,\n mul: mul$5,\n divide: divide$2,\n div: div$2,\n random: random$1,\n zero: zero$2,\n transformMat4: transformMat4$2,\n transformMat3: transformMat3$1\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * 3x3 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat3.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat3.create();\n * mat3.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat3.identity();\n * const trans = mat3.translation([1, 2, 3]);\n * mat3.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType$1 = Float32Array;\n// This mess is because with Mat3 we have 3 unused elements.\n// For Float32Array and Float64Array that's not an issue\n// but for Array it's troublesome\nconst ctorMap = new Map([\n [Float32Array, () => new Float32Array(12)],\n [Float64Array, () => new Float64Array(12)],\n [Array, () => new Array(12).fill(0)],\n]);\nlet newMat3 = ctorMap.get(Float32Array);\n/**\n * Sets the type this library creates for a Mat3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat3\n */\nfunction setDefaultType$4(ctor) {\n const oldType = MatType$1;\n MatType$1 = ctor;\n newMat3 = ctorMap.get(ctor);\n return oldType;\n}\n/**\n * Create a Mat3 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat3's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat3.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat3Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat3.create` is usually used\n * to create a Mat3 to be filled out as in\n *\n * ```\n * const m = mat3.create();\n * mat3.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @returns matrix created from values.\n */\nfunction create$3(v0, v1, v2, v3, v4, v5, v6, v7, v8) {\n const dst = newMat3();\n // to make the array homogenous\n dst[3] = 0;\n dst[7] = 0;\n dst[11] = 0;\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[4] = v3;\n if (v4 !== undefined) {\n dst[5] = v4;\n if (v5 !== undefined) {\n dst[6] = v5;\n if (v6 !== undefined) {\n dst[8] = v6;\n if (v7 !== undefined) {\n dst[9] = v7;\n if (v8 !== undefined) {\n dst[10] = v8;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return dst;\n}\n/**\n * Sets the values of a Mat3\n * Also see {@link mat3.create} and {@link mat3.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 set from values.\n */\nfunction set$4(v0, v1, v2, v3, v4, v5, v6, v7, v8, dst) {\n dst = dst || newMat3();\n dst[0] = v0;\n dst[1] = v1;\n dst[2] = v2;\n dst[3] = 0;\n dst[4] = v3;\n dst[5] = v4;\n dst[6] = v5;\n dst[7] = 0;\n dst[8] = v6;\n dst[9] = v7;\n dst[10] = v8;\n dst[11] = 0;\n return dst;\n}\n/**\n * Creates a Mat3 from the upper left 3x3 part of a Mat4\n * @param m4 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from m4\n */\nfunction fromMat4(m4, dst) {\n dst = dst || newMat3();\n dst[0] = m4[0];\n dst[1] = m4[1];\n dst[2] = m4[2];\n dst[3] = 0;\n dst[4] = m4[4];\n dst[5] = m4[5];\n dst[6] = m4[6];\n dst[7] = 0;\n dst[8] = m4[8];\n dst[9] = m4[9];\n dst[10] = m4[10];\n dst[11] = 0;\n return dst;\n}\n/**\n * Creates a Mat3 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from q\n */\nfunction fromQuat$1(q, dst) {\n dst = dst || newMat3();\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n dst[0] = 1 - yy - zz;\n dst[1] = yx + wz;\n dst[2] = zx - wy;\n dst[3] = 0;\n dst[4] = yx - wz;\n dst[5] = 1 - xx - zz;\n dst[6] = zy + wx;\n dst[7] = 0;\n dst[8] = zx + wy;\n dst[9] = zy - wx;\n dst[10] = 1 - xx - yy;\n dst[11] = 0;\n return dst;\n}\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nfunction negate$3(m, dst) {\n dst = dst || newMat3();\n dst[0] = -m[0];\n dst[1] = -m[1];\n dst[2] = -m[2];\n dst[4] = -m[4];\n dst[5] = -m[5];\n dst[6] = -m[6];\n dst[8] = -m[8];\n dst[9] = -m[9];\n dst[10] = -m[10];\n return dst;\n}\n/**\n * Copies a matrix. (same as {@link mat3.clone})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nfunction copy$4(m, dst) {\n dst = dst || newMat3();\n dst[0] = m[0];\n dst[1] = m[1];\n dst[2] = m[2];\n dst[4] = m[4];\n dst[5] = m[5];\n dst[6] = m[6];\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n return dst;\n}\n/**\n * Copies a matrix (same as {@link mat3.copy})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nconst clone$4 = copy$4;\n/**\n * Check if 2 matrices are approximately equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are approximately equal\n */\nfunction equalsApproximately$4(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[4] - b[4]) < EPSILON &&\n Math.abs(a[5] - b[5]) < EPSILON &&\n Math.abs(a[6] - b[6]) < EPSILON &&\n Math.abs(a[8] - b[8]) < EPSILON &&\n Math.abs(a[9] - b[9]) < EPSILON &&\n Math.abs(a[10] - b[10]) < EPSILON;\n}\n/**\n * Check if 2 matrices are exactly equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are exactly equal\n */\nfunction equals$4(a, b) {\n return a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[4] === b[4] &&\n a[5] === b[5] &&\n a[6] === b[6] &&\n a[8] === b[8] &&\n a[9] === b[9] &&\n a[10] === b[10];\n}\n/**\n * Creates a 3-by-3 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 3-by-3 identity matrix.\n */\nfunction identity$2(dst) {\n dst = dst || newMat3();\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nfunction transpose$1(m, dst) {\n dst = dst || newMat3();\n if (dst === m) {\n let t;\n // 0 1 2\n // 4 5 6\n // 8 9 10\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n return dst;\n }\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n dst[0] = m00;\n dst[1] = m10;\n dst[2] = m20;\n dst[4] = m01;\n dst[5] = m11;\n dst[6] = m21;\n dst[8] = m02;\n dst[9] = m12;\n dst[10] = m22;\n return dst;\n}\n/**\n * Computes the inverse of a 3-by-3 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nfunction inverse$4(m, dst) {\n dst = dst || newMat3();\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const b01 = m22 * m11 - m12 * m21;\n const b11 = -m22 * m10 + m12 * m20;\n const b21 = m21 * m10 - m11 * m20;\n const invDet = 1 / (m00 * b01 + m01 * b11 + m02 * b21);\n dst[0] = b01 * invDet;\n dst[1] = (-m22 * m01 + m02 * m21) * invDet;\n dst[2] = (m12 * m01 - m02 * m11) * invDet;\n dst[4] = b11 * invDet;\n dst[5] = (m22 * m00 - m02 * m20) * invDet;\n dst[6] = (-m12 * m00 + m02 * m10) * invDet;\n dst[8] = b21 * invDet;\n dst[9] = (-m21 * m00 + m01 * m20) * invDet;\n dst[10] = (m11 * m00 - m01 * m10) * invDet;\n return dst;\n}\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nfunction determinant$1(m) {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n return m00 * (m11 * m22 - m21 * m12) -\n m10 * (m01 * m22 - m21 * m02) +\n m20 * (m01 * m12 - m11 * m02);\n}\n/**\n * Computes the inverse of a 3-by-3 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nconst invert$3 = inverse$4;\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nfunction multiply$4(a, b, dst) {\n dst = dst || newMat3();\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a10 = a[4 + 0];\n const a11 = a[4 + 1];\n const a12 = a[4 + 2];\n const a20 = a[8 + 0];\n const a21 = a[8 + 1];\n const a22 = a[8 + 2];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b10 = b[4 + 0];\n const b11 = b[4 + 1];\n const b12 = b[4 + 2];\n const b20 = b[8 + 0];\n const b21 = b[8 + 1];\n const b22 = b[8 + 2];\n dst[0] = a00 * b00 + a10 * b01 + a20 * b02;\n dst[1] = a01 * b00 + a11 * b01 + a21 * b02;\n dst[2] = a02 * b00 + a12 * b01 + a22 * b02;\n dst[4] = a00 * b10 + a10 * b11 + a20 * b12;\n dst[5] = a01 * b10 + a11 * b11 + a21 * b12;\n dst[6] = a02 * b10 + a12 * b11 + a22 * b12;\n dst[8] = a00 * b20 + a10 * b21 + a20 * b22;\n dst[9] = a01 * b20 + a11 * b21 + a21 * b22;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22;\n return dst;\n}\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nconst mul$4 = multiply$4;\n/**\n * Sets the translation component of a 3-by-3 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nfunction setTranslation$1(a, v, dst) {\n dst = dst || identity$2();\n if (a !== dst) {\n dst[0] = a[0];\n dst[1] = a[1];\n dst[2] = a[2];\n dst[4] = a[4];\n dst[5] = a[5];\n dst[6] = a[6];\n }\n dst[8] = v[0];\n dst[9] = v[1];\n dst[10] = 1;\n return dst;\n}\n/**\n * Returns the translation component of a 3-by-3 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nfunction getTranslation$2(m, dst) {\n dst = dst || create$5();\n dst[0] = m[8];\n dst[1] = m[9];\n return dst;\n}\n/**\n * Returns an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y,\n * @returns The axis component of m.\n */\nfunction getAxis$2(m, axis, dst) {\n dst = dst || create$5();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n return dst;\n}\n/**\n * Sets an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nfunction setAxis$1(m, v, axis, dst) {\n if (dst !== m) {\n dst = copy$4(m, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nfunction getScaling$2(m, dst) {\n dst = dst || create$5();\n const xx = m[0];\n const xy = m[1];\n const yx = m[4];\n const yy = m[5];\n dst[0] = Math.sqrt(xx * xx + xy * xy);\n dst[1] = Math.sqrt(yx * yx + yy * yy);\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which translates by the given vector v.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nfunction translation$1(v, dst) {\n dst = dst || newMat3();\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[8] = v[0];\n dst[9] = v[1];\n dst[10] = 1;\n return dst;\n}\n/**\n * Translates the given 3-by-3 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nfunction translate$1(m, v, dst) {\n dst = dst || newMat3();\n const v0 = v[0];\n const v1 = v[1];\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n if (m !== dst) {\n dst[0] = m00;\n dst[1] = m01;\n dst[2] = m02;\n dst[4] = m10;\n dst[5] = m11;\n dst[6] = m12;\n }\n dst[8] = m00 * v0 + m10 * v1 + m20;\n dst[9] = m01 * v0 + m11 * v1 + m21;\n dst[10] = m02 * v0 + m12 * v1 + m22;\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which rotates by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotation$1(angleInRadians, dst) {\n dst = dst || newMat3();\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c;\n dst[1] = s;\n dst[2] = 0;\n dst[4] = -s;\n dst[5] = c;\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Rotates the given 3-by-3 matrix by the given angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotate$1(m, angleInRadians, dst) {\n dst = dst || newMat3();\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c * m00 + s * m10;\n dst[1] = c * m01 + s * m11;\n dst[2] = c * m02 + s * m12;\n dst[4] = c * m10 - s * m00;\n dst[5] = c * m11 - s * m01;\n dst[6] = c * m12 - s * m02;\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n }\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * 2 entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction scaling$1(v, dst) {\n dst = dst || newMat3();\n dst[0] = v[0];\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = v[1];\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of 2 entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction scale$4(m, v, dst) {\n dst = dst || newMat3();\n const v0 = v[0];\n const v1 = v[1];\n dst[0] = v0 * m[0 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2];\n dst[4] = v1 * m[1 * 4 + 0];\n dst[5] = v1 * m[1 * 4 + 1];\n dst[6] = v1 * m[1 * 4 + 2];\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n }\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which scales uniformly in each dimension\n * @param s - Amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction uniformScaling$1(s, dst) {\n dst = dst || newMat3();\n dst[0] = s;\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = s;\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given.\n * @param m - The matrix to be modified.\n * @param s - Amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction uniformScale$1(m, s, dst) {\n dst = dst || newMat3();\n dst[0] = s * m[0 * 4 + 0];\n dst[1] = s * m[0 * 4 + 1];\n dst[2] = s * m[0 * 4 + 2];\n dst[4] = s * m[1 * 4 + 0];\n dst[5] = s * m[1 * 4 + 1];\n dst[6] = s * m[1 * 4 + 2];\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n }\n return dst;\n}\n\nvar mat3Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setDefaultType: setDefaultType$4,\n create: create$3,\n set: set$4,\n fromMat4: fromMat4,\n fromQuat: fromQuat$1,\n negate: negate$3,\n copy: copy$4,\n clone: clone$4,\n equalsApproximately: equalsApproximately$4,\n equals: equals$4,\n identity: identity$2,\n transpose: transpose$1,\n inverse: inverse$4,\n determinant: determinant$1,\n invert: invert$3,\n multiply: multiply$4,\n mul: mul$4,\n setTranslation: setTranslation$1,\n getTranslation: getTranslation$2,\n getAxis: getAxis$2,\n setAxis: setAxis$1,\n getScaling: getScaling$2,\n translation: translation$1,\n translate: translate$1,\n rotation: rotation$1,\n rotate: rotate$1,\n scaling: scaling$1,\n scale: scale$4,\n uniformScaling: uniformScaling$1,\n uniformScale: uniformScale$1\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a vec3; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nconst fromValues$2 = create$4;\n/**\n * Sets the values of a Vec3\n * Also see {@link vec3.create} and {@link vec3.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set$3(x, y, z, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n return dst;\n}\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nfunction ceil$1(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n return dst;\n}\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nfunction floor$1(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n return dst;\n}\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nfunction round$1(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n return dst;\n}\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nfunction clamp$1(v, min = 0, max = 1, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n return dst;\n}\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nfunction add$2(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n return dst;\n}\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nfunction addScaled$1(a, b, scale, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n return dst;\n}\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nfunction angle$1(a, b) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = a[0];\n const by = a[1];\n const bz = a[2];\n const mag1 = Math.sqrt(ax * ax + ay * ay + az * az);\n const mag2 = Math.sqrt(bx * bx + by * by + bz * bz);\n const mag = mag1 * mag2;\n const cosine = mag && dot$2(a, b) / mag;\n return Math.acos(cosine);\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nfunction subtract$2(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nconst sub$2 = subtract$2;\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nfunction equalsApproximately$3(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON;\n}\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nfunction equals$3(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp$2(a, b, t, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n return dst;\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nfunction lerpV$1(a, b, t, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n return dst;\n}\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nfunction max$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n return dst;\n}\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nfunction min$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n return dst;\n}\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction mulScalar$2(v, k, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n return dst;\n}\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nconst scale$3 = mulScalar$2;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction divScalar$2(v, k, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n return dst;\n}\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nfunction inverse$3(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n return dst;\n}\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nconst invert$2 = inverse$3;\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nfunction cross(a, b, dst) {\n dst = dst || new VecType$1(3);\n const t1 = a[2] * b[0] - a[0] * b[2];\n const t2 = a[0] * b[1] - a[1] * b[0];\n dst[0] = a[1] * b[2] - a[2] * b[1];\n dst[1] = t1;\n dst[2] = t2;\n return dst;\n}\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nfunction dot$2(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]);\n}\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nfunction length$2(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n}\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nconst len$2 = length$2;\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nfunction lengthSq$2(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return v0 * v0 + v1 * v1 + v2 * v2;\n}\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nconst lenSq$2 = lengthSq$2;\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nfunction distance$1(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n}\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nconst dist$1 = distance$1;\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nfunction distanceSq$1(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return dx * dx + dy * dy + dz * dz;\n}\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nconst distSq$1 = distanceSq$1;\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nfunction normalize$2(v, dst) {\n dst = dst || new VecType$1(3);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n }\n return dst;\n}\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nfunction negate$2(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n return dst;\n}\n/**\n * Copies a vector. (same as {@link vec3.clone})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nfunction copy$3(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n return dst;\n}\n/**\n * Clones a vector. (same as {@link vec3.copy})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nconst clone$3 = copy$3;\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nfunction multiply$3(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n return dst;\n}\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nconst mul$3 = multiply$3;\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nfunction divide$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n return dst;\n}\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nconst div$1 = divide$1;\n/**\n * Creates a random vector\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nfunction random(scale = 1, dst) {\n dst = dst || new VecType$1(3);\n const angle = Math.random() * 2 * Math.PI;\n const z = Math.random() * 2 - 1;\n const zScale = Math.sqrt(1 - z * z) * scale;\n dst[0] = Math.cos(angle) * zScale;\n dst[1] = Math.sin(angle) * zScale;\n dst[2] = z * scale;\n return dst;\n}\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nfunction zero$1(dst) {\n dst = dst || new VecType$1(3);\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n return dst;\n}\n/**\n * transform vec3 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat4$1(v, m, dst) {\n dst = dst || new VecType$1(3);\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = (m[3] * x + m[7] * y + m[11] * z + m[15]) || 1;\n dst[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n dst[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n dst[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return dst;\n}\n/**\n * Transform vec4 by upper 3x3 matrix inside 4x4 matrix.\n * @param v - The direction.\n * @param m - The matrix.\n * @param dst - optional Vec3 to store result. If not passed a new one is created.\n * @returns The transformed vector.\n */\nfunction transformMat4Upper3x3(v, m, dst) {\n dst = dst || new VecType$1(3);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n dst[0] = v0 * m[0 * 4 + 0] + v1 * m[1 * 4 + 0] + v2 * m[2 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1] + v1 * m[1 * 4 + 1] + v2 * m[2 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2] + v1 * m[1 * 4 + 2] + v2 * m[2 * 4 + 2];\n return dst;\n}\n/**\n * Transforms vec3 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat3(v, m, dst) {\n dst = dst || new VecType$1(3);\n const x = v[0];\n const y = v[1];\n const z = v[2];\n dst[0] = x * m[0] + y * m[4] + z * m[8];\n dst[1] = x * m[1] + y * m[5] + z * m[9];\n dst[2] = x * m[2] + y * m[6] + z * m[10];\n return dst;\n}\n/**\n * Transforms vec3 by Quaternion\n * @param v - the vector to transform\n * @param q - the quaternion to transform by\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed\n */\nfunction transformQuat(v, q, dst) {\n dst = dst || new VecType$1(3);\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const w2 = q[3] * 2;\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const uvX = qy * z - qz * y;\n const uvY = qz * x - qx * z;\n const uvZ = qx * y - qy * x;\n dst[0] = x + uvX * w2 + (qy * uvZ - qz * uvY) * 2;\n dst[1] = y + uvY * w2 + (qz * uvX - qx * uvZ) * 2;\n dst[2] = z + uvZ * w2 + (qx * uvY - qy * uvX) * 2;\n return dst;\n}\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nfunction getTranslation$1(m, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nfunction getAxis$1(m, axis, dst) {\n dst = dst || new VecType$1(3);\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nfunction getScaling$1(m, dst) {\n dst = dst || new VecType$1(3);\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return dst;\n}\n\nvar vec3Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create$4,\n setDefaultType: setDefaultType$5,\n fromValues: fromValues$2,\n set: set$3,\n ceil: ceil$1,\n floor: floor$1,\n round: round$1,\n clamp: clamp$1,\n add: add$2,\n addScaled: addScaled$1,\n angle: angle$1,\n subtract: subtract$2,\n sub: sub$2,\n equalsApproximately: equalsApproximately$3,\n equals: equals$3,\n lerp: lerp$2,\n lerpV: lerpV$1,\n max: max$1,\n min: min$1,\n mulScalar: mulScalar$2,\n scale: scale$3,\n divScalar: divScalar$2,\n inverse: inverse$3,\n invert: invert$2,\n cross: cross,\n dot: dot$2,\n length: length$2,\n len: len$2,\n lengthSq: lengthSq$2,\n lenSq: lenSq$2,\n distance: distance$1,\n dist: dist$1,\n distanceSq: distanceSq$1,\n distSq: distSq$1,\n normalize: normalize$2,\n negate: negate$2,\n copy: copy$3,\n clone: clone$3,\n multiply: multiply$3,\n mul: mul$3,\n divide: divide$1,\n div: div$1,\n random: random,\n zero: zero$1,\n transformMat4: transformMat4$1,\n transformMat4Upper3x3: transformMat4Upper3x3,\n transformMat3: transformMat3,\n transformQuat: transformQuat,\n getTranslation: getTranslation$1,\n getAxis: getAxis$1,\n getScaling: getScaling$1\n});\n\n/**\n * 4x4 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat4.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat4.create();\n * mat4.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat4.identity();\n * const trans = mat4.translation([1, 2, 3]);\n * mat4.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType = Float32Array;\n/**\n * Sets the type this library creates for a Mat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat4\n */\nfunction setDefaultType$3(ctor) {\n const oldType = MatType;\n MatType = ctor;\n return oldType;\n}\n/**\n * Create a Mat4 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat4's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat4.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat4Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat4.create` is usually used\n * to create a Mat4 to be filled out as in\n *\n * ```\n * const m = mat4.create();\n * mat4.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @returns created from values.\n */\nfunction create$2(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) {\n const dst = new MatType(16);\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[3] = v3;\n if (v4 !== undefined) {\n dst[4] = v4;\n if (v5 !== undefined) {\n dst[5] = v5;\n if (v6 !== undefined) {\n dst[6] = v6;\n if (v7 !== undefined) {\n dst[7] = v7;\n if (v8 !== undefined) {\n dst[8] = v8;\n if (v9 !== undefined) {\n dst[9] = v9;\n if (v10 !== undefined) {\n dst[10] = v10;\n if (v11 !== undefined) {\n dst[11] = v11;\n if (v12 !== undefined) {\n dst[12] = v12;\n if (v13 !== undefined) {\n dst[13] = v13;\n if (v14 !== undefined) {\n dst[14] = v14;\n if (v15 !== undefined) {\n dst[15] = v15;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return dst;\n}\n/**\n * Sets the values of a Mat4\n * Also see {@link mat4.create} and {@link mat4.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 created from values.\n */\nfunction set$2(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, dst) {\n dst = dst || new MatType(16);\n dst[0] = v0;\n dst[1] = v1;\n dst[2] = v2;\n dst[3] = v3;\n dst[4] = v4;\n dst[5] = v5;\n dst[6] = v6;\n dst[7] = v7;\n dst[8] = v8;\n dst[9] = v9;\n dst[10] = v10;\n dst[11] = v11;\n dst[12] = v12;\n dst[13] = v13;\n dst[14] = v14;\n dst[15] = v15;\n return dst;\n}\n/**\n * Creates a Mat4 from a Mat3\n * @param m3 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from m3\n */\nfunction fromMat3(m3, dst) {\n dst = dst || new MatType(16);\n dst[0] = m3[0];\n dst[1] = m3[1];\n dst[2] = m3[2];\n dst[3] = 0;\n dst[4] = m3[4];\n dst[5] = m3[5];\n dst[6] = m3[6];\n dst[7] = 0;\n dst[8] = m3[8];\n dst[9] = m3[9];\n dst[10] = m3[10];\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Creates a Mat4 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from q\n */\nfunction fromQuat(q, dst) {\n dst = dst || new MatType(16);\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n dst[0] = 1 - yy - zz;\n dst[1] = yx + wz;\n dst[2] = zx - wy;\n dst[3] = 0;\n dst[4] = yx - wz;\n dst[5] = 1 - xx - zz;\n dst[6] = zy + wx;\n dst[7] = 0;\n dst[8] = zx + wy;\n dst[9] = zy - wx;\n dst[10] = 1 - xx - yy;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nfunction negate$1(m, dst) {\n dst = dst || new MatType(16);\n dst[0] = -m[0];\n dst[1] = -m[1];\n dst[2] = -m[2];\n dst[3] = -m[3];\n dst[4] = -m[4];\n dst[5] = -m[5];\n dst[6] = -m[6];\n dst[7] = -m[7];\n dst[8] = -m[8];\n dst[9] = -m[9];\n dst[10] = -m[10];\n dst[11] = -m[11];\n dst[12] = -m[12];\n dst[13] = -m[13];\n dst[14] = -m[14];\n dst[15] = -m[15];\n return dst;\n}\n/**\n * Copies a matrix. (same as {@link mat4.clone})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nfunction copy$2(m, dst) {\n dst = dst || new MatType(16);\n dst[0] = m[0];\n dst[1] = m[1];\n dst[2] = m[2];\n dst[3] = m[3];\n dst[4] = m[4];\n dst[5] = m[5];\n dst[6] = m[6];\n dst[7] = m[7];\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n dst[11] = m[11];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n return dst;\n}\n/**\n * Copies a matrix (same as {@link mat4.copy})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nconst clone$2 = copy$2;\n/**\n * Check if 2 matrices are approximately equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are approximately equal\n */\nfunction equalsApproximately$2(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON &&\n Math.abs(a[4] - b[4]) < EPSILON &&\n Math.abs(a[5] - b[5]) < EPSILON &&\n Math.abs(a[6] - b[6]) < EPSILON &&\n Math.abs(a[7] - b[7]) < EPSILON &&\n Math.abs(a[8] - b[8]) < EPSILON &&\n Math.abs(a[9] - b[9]) < EPSILON &&\n Math.abs(a[10] - b[10]) < EPSILON &&\n Math.abs(a[11] - b[11]) < EPSILON &&\n Math.abs(a[12] - b[12]) < EPSILON &&\n Math.abs(a[13] - b[13]) < EPSILON &&\n Math.abs(a[14] - b[14]) < EPSILON &&\n Math.abs(a[15] - b[15]) < EPSILON;\n}\n/**\n * Check if 2 matrices are exactly equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are exactly equal\n */\nfunction equals$2(a, b) {\n return a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[3] === b[3] &&\n a[4] === b[4] &&\n a[5] === b[5] &&\n a[6] === b[6] &&\n a[7] === b[7] &&\n a[8] === b[8] &&\n a[9] === b[9] &&\n a[10] === b[10] &&\n a[11] === b[11] &&\n a[12] === b[12] &&\n a[13] === b[13] &&\n a[14] === b[14] &&\n a[15] === b[15];\n}\n/**\n * Creates a 4-by-4 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 4-by-4 identity matrix.\n */\nfunction identity$1(dst) {\n dst = dst || new MatType(16);\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nfunction transpose(m, dst) {\n dst = dst || new MatType(16);\n if (dst === m) {\n let t;\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n t = m[3];\n m[3] = m[12];\n m[12] = t;\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n t = m[7];\n m[7] = m[13];\n m[13] = t;\n t = m[11];\n m[11] = m[14];\n m[14] = t;\n return dst;\n }\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n dst[0] = m00;\n dst[1] = m10;\n dst[2] = m20;\n dst[3] = m30;\n dst[4] = m01;\n dst[5] = m11;\n dst[6] = m21;\n dst[7] = m31;\n dst[8] = m02;\n dst[9] = m12;\n dst[10] = m22;\n dst[11] = m32;\n dst[12] = m03;\n dst[13] = m13;\n dst[14] = m23;\n dst[15] = m33;\n return dst;\n}\n/**\n * Computes the inverse of a 4-by-4 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nfunction inverse$2(m, dst) {\n dst = dst || new MatType(16);\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n const tmp12 = m20 * m31;\n const tmp13 = m30 * m21;\n const tmp14 = m10 * m31;\n const tmp15 = m30 * m11;\n const tmp16 = m10 * m21;\n const tmp17 = m20 * m11;\n const tmp18 = m00 * m31;\n const tmp19 = m30 * m01;\n const tmp20 = m00 * m21;\n const tmp21 = m20 * m01;\n const tmp22 = m00 * m11;\n const tmp23 = m10 * m01;\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n const d = 1 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\n dst[0] = d * t0;\n dst[1] = d * t1;\n dst[2] = d * t2;\n dst[3] = d * t3;\n dst[4] = d * ((tmp1 * m10 + tmp2 * m20 + tmp5 * m30) -\n (tmp0 * m10 + tmp3 * m20 + tmp4 * m30));\n dst[5] = d * ((tmp0 * m00 + tmp7 * m20 + tmp8 * m30) -\n (tmp1 * m00 + tmp6 * m20 + tmp9 * m30));\n dst[6] = d * ((tmp3 * m00 + tmp6 * m10 + tmp11 * m30) -\n (tmp2 * m00 + tmp7 * m10 + tmp10 * m30));\n dst[7] = d * ((tmp4 * m00 + tmp9 * m10 + tmp10 * m20) -\n (tmp5 * m00 + tmp8 * m10 + tmp11 * m20));\n dst[8] = d * ((tmp12 * m13 + tmp15 * m23 + tmp16 * m33) -\n (tmp13 * m13 + tmp14 * m23 + tmp17 * m33));\n dst[9] = d * ((tmp13 * m03 + tmp18 * m23 + tmp21 * m33) -\n (tmp12 * m03 + tmp19 * m23 + tmp20 * m33));\n dst[10] = d * ((tmp14 * m03 + tmp19 * m13 + tmp22 * m33) -\n (tmp15 * m03 + tmp18 * m13 + tmp23 * m33));\n dst[11] = d * ((tmp17 * m03 + tmp20 * m13 + tmp23 * m23) -\n (tmp16 * m03 + tmp21 * m13 + tmp22 * m23));\n dst[12] = d * ((tmp14 * m22 + tmp17 * m32 + tmp13 * m12) -\n (tmp16 * m32 + tmp12 * m12 + tmp15 * m22));\n dst[13] = d * ((tmp20 * m32 + tmp12 * m02 + tmp19 * m22) -\n (tmp18 * m22 + tmp21 * m32 + tmp13 * m02));\n dst[14] = d * ((tmp18 * m12 + tmp23 * m32 + tmp15 * m02) -\n (tmp22 * m32 + tmp14 * m02 + tmp19 * m12));\n dst[15] = d * ((tmp22 * m22 + tmp16 * m02 + tmp21 * m12) -\n (tmp20 * m12 + tmp23 * m22 + tmp17 * m02));\n return dst;\n}\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nfunction determinant(m) {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n return m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3;\n}\n/**\n * Computes the inverse of a 4-by-4 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nconst invert$1 = inverse$2;\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nfunction multiply$2(a, b, dst) {\n dst = dst || new MatType(16);\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4 + 0];\n const a11 = a[4 + 1];\n const a12 = a[4 + 2];\n const a13 = a[4 + 3];\n const a20 = a[8 + 0];\n const a21 = a[8 + 1];\n const a22 = a[8 + 2];\n const a23 = a[8 + 3];\n const a30 = a[12 + 0];\n const a31 = a[12 + 1];\n const a32 = a[12 + 2];\n const a33 = a[12 + 3];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b03 = b[3];\n const b10 = b[4 + 0];\n const b11 = b[4 + 1];\n const b12 = b[4 + 2];\n const b13 = b[4 + 3];\n const b20 = b[8 + 0];\n const b21 = b[8 + 1];\n const b22 = b[8 + 2];\n const b23 = b[8 + 3];\n const b30 = b[12 + 0];\n const b31 = b[12 + 1];\n const b32 = b[12 + 2];\n const b33 = b[12 + 3];\n dst[0] = a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03;\n dst[1] = a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03;\n dst[2] = a02 * b00 + a12 * b01 + a22 * b02 + a32 * b03;\n dst[3] = a03 * b00 + a13 * b01 + a23 * b02 + a33 * b03;\n dst[4] = a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13;\n dst[5] = a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13;\n dst[6] = a02 * b10 + a12 * b11 + a22 * b12 + a32 * b13;\n dst[7] = a03 * b10 + a13 * b11 + a23 * b12 + a33 * b13;\n dst[8] = a00 * b20 + a10 * b21 + a20 * b22 + a30 * b23;\n dst[9] = a01 * b20 + a11 * b21 + a21 * b22 + a31 * b23;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22 + a32 * b23;\n dst[11] = a03 * b20 + a13 * b21 + a23 * b22 + a33 * b23;\n dst[12] = a00 * b30 + a10 * b31 + a20 * b32 + a30 * b33;\n dst[13] = a01 * b30 + a11 * b31 + a21 * b32 + a31 * b33;\n dst[14] = a02 * b30 + a12 * b31 + a22 * b32 + a32 * b33;\n dst[15] = a03 * b30 + a13 * b31 + a23 * b32 + a33 * b33;\n return dst;\n}\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nconst mul$2 = multiply$2;\n/**\n * Sets the translation component of a 4-by-4 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nfunction setTranslation(a, v, dst) {\n dst = dst || identity$1();\n if (a !== dst) {\n dst[0] = a[0];\n dst[1] = a[1];\n dst[2] = a[2];\n dst[3] = a[3];\n dst[4] = a[4];\n dst[5] = a[5];\n dst[6] = a[6];\n dst[7] = a[7];\n dst[8] = a[8];\n dst[9] = a[9];\n dst[10] = a[10];\n dst[11] = a[11];\n }\n dst[12] = v[0];\n dst[13] = v[1];\n dst[14] = v[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nfunction getTranslation(m, dst) {\n dst = dst || create$4();\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nfunction getAxis(m, axis, dst) {\n dst = dst || create$4();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n/**\n * Sets an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nfunction setAxis(a, v, axis, dst) {\n if (dst !== a) {\n dst = copy$2(a, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n dst[off + 2] = v[2];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nfunction getScaling(m, dst) {\n dst = dst || create$4();\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return dst;\n}\n/**\n * Computes a 4-by-4 perspective transformation matrix given the angular height\n * of the frustum, the aspect ratio, and the near and far clipping planes. The\n * arguments define a frustum extending in the negative z direction. The given\n * angle is the vertical angle of the frustum, and the horizontal angle is\n * determined to produce the given aspect ratio. The arguments near and far are\n * the distances to the near and far clipping planes. Note that near and far\n * are not z coordinates, but rather they are distances along the negative\n * z-axis. The matrix generated sends the viewing frustum to the unit box.\n * We assume a unit box extending from -1 to 1 in the x and y dimensions and\n * from 0 to 1 in the z dimension.\n *\n * Note: If you pass `Infinity` for zFar then it will produce a projection matrix\n * returns -Infinity for Z when transforming coordinates with Z <= 0 and +Infinity for Z\n * otherwise.\n *\n * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians).\n * @param aspect - The aspect ratio width / height.\n * @param zNear - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param zFar - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The perspective matrix.\n */\nfunction perspective(fieldOfViewYInRadians, aspect, zNear, zFar, dst) {\n dst = dst || new MatType(16);\n const f = Math.tan(Math.PI * 0.5 - 0.5 * fieldOfViewYInRadians);\n dst[0] = f / aspect;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = f;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[11] = -1;\n dst[12] = 0;\n dst[13] = 0;\n dst[15] = 0;\n if (zFar === Infinity) {\n dst[10] = -1;\n dst[14] = -zNear;\n }\n else {\n const rangeInv = 1 / (zNear - zFar);\n dst[10] = zFar * rangeInv;\n dst[14] = zFar * zNear * rangeInv;\n }\n return dst;\n}\n/**\n * Computes a 4-by-4 orthogonal transformation matrix that transforms from\n * the given the left, right, bottom, and top dimensions to -1 +1 in x, and y\n * and 0 to +1 in z.\n * @param left - Left side of the near clipping plane viewport.\n * @param right - Right side of the near clipping plane viewport.\n * @param bottom - Bottom of the near clipping plane viewport.\n * @param top - Top of the near clipping plane viewport.\n * @param near - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param far - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The orthographic projection matrix.\n */\nfunction ortho(left, right, bottom, top, near, far, dst) {\n dst = dst || new MatType(16);\n dst[0] = 2 / (right - left);\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 2 / (top - bottom);\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1 / (near - far);\n dst[11] = 0;\n dst[12] = (right + left) / (left - right);\n dst[13] = (top + bottom) / (bottom - top);\n dst[14] = near / (near - far);\n dst[15] = 1;\n return dst;\n}\n/**\n * Computes a 4-by-4 perspective transformation matrix given the left, right,\n * top, bottom, near and far clipping planes. The arguments define a frustum\n * extending in the negative z direction. The arguments near and far are the\n * distances to the near and far clipping planes. Note that near and far are not\n * z coordinates, but rather they are distances along the negative z-axis. The\n * matrix generated sends the viewing frustum to the unit box. We assume a unit\n * box extending from -1 to 1 in the x and y dimensions and from 0 to 1 in the z\n * dimension.\n * @param left - The x coordinate of the left plane of the box.\n * @param right - The x coordinate of the right plane of the box.\n * @param bottom - The y coordinate of the bottom plane of the box.\n * @param top - The y coordinate of the right plane of the box.\n * @param near - The negative z coordinate of the near plane of the box.\n * @param far - The negative z coordinate of the far plane of the box.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The perspective projection matrix.\n */\nfunction frustum(left, right, bottom, top, near, far, dst) {\n dst = dst || new MatType(16);\n const dx = (right - left);\n const dy = (top - bottom);\n const dz = (near - far);\n dst[0] = 2 * near / dx;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 2 * near / dy;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = (left + right) / dx;\n dst[9] = (top + bottom) / dy;\n dst[10] = far / dz;\n dst[11] = -1;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = near * far / dz;\n dst[15] = 0;\n return dst;\n}\nlet xAxis;\nlet yAxis;\nlet zAxis;\n/**\n * Computes a 4-by-4 aim transformation.\n *\n * This is a matrix which positions an object aiming down positive Z.\n * toward the target.\n *\n * Note: this is **NOT** the inverse of lookAt as lookAt looks at negative Z.\n *\n * @param position - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nfunction aim(position, target, up, dst) {\n dst = dst || new MatType(16);\n xAxis = xAxis || create$4();\n yAxis = yAxis || create$4();\n zAxis = zAxis || create$4();\n normalize$2(subtract$2(target, position, zAxis), zAxis);\n normalize$2(cross(up, zAxis, xAxis), xAxis);\n normalize$2(cross(zAxis, xAxis, yAxis), yAxis);\n dst[0] = xAxis[0];\n dst[1] = xAxis[1];\n dst[2] = xAxis[2];\n dst[3] = 0;\n dst[4] = yAxis[0];\n dst[5] = yAxis[1];\n dst[6] = yAxis[2];\n dst[7] = 0;\n dst[8] = zAxis[0];\n dst[9] = zAxis[1];\n dst[10] = zAxis[2];\n dst[11] = 0;\n dst[12] = position[0];\n dst[13] = position[1];\n dst[14] = position[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Computes a 4-by-4 camera aim transformation.\n *\n * This is a matrix which positions an object aiming down negative Z.\n * toward the target.\n *\n * Note: this is the inverse of `lookAt`\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nfunction cameraAim(eye, target, up, dst) {\n dst = dst || new MatType(16);\n xAxis = xAxis || create$4();\n yAxis = yAxis || create$4();\n zAxis = zAxis || create$4();\n normalize$2(subtract$2(eye, target, zAxis), zAxis);\n normalize$2(cross(up, zAxis, xAxis), xAxis);\n normalize$2(cross(zAxis, xAxis, yAxis), yAxis);\n dst[0] = xAxis[0];\n dst[1] = xAxis[1];\n dst[2] = xAxis[2];\n dst[3] = 0;\n dst[4] = yAxis[0];\n dst[5] = yAxis[1];\n dst[6] = yAxis[2];\n dst[7] = 0;\n dst[8] = zAxis[0];\n dst[9] = zAxis[1];\n dst[10] = zAxis[2];\n dst[11] = 0;\n dst[12] = eye[0];\n dst[13] = eye[1];\n dst[14] = eye[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Computes a 4-by-4 view transformation.\n *\n * This is a view matrix which transforms all other objects\n * to be in the space of the view defined by the parameters.\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The look-at matrix.\n */\nfunction lookAt(eye, target, up, dst) {\n dst = dst || new MatType(16);\n xAxis = xAxis || create$4();\n yAxis = yAxis || create$4();\n zAxis = zAxis || create$4();\n normalize$2(subtract$2(eye, target, zAxis), zAxis);\n normalize$2(cross(up, zAxis, xAxis), xAxis);\n normalize$2(cross(zAxis, xAxis, yAxis), yAxis);\n dst[0] = xAxis[0];\n dst[1] = yAxis[0];\n dst[2] = zAxis[0];\n dst[3] = 0;\n dst[4] = xAxis[1];\n dst[5] = yAxis[1];\n dst[6] = zAxis[1];\n dst[7] = 0;\n dst[8] = xAxis[2];\n dst[9] = yAxis[2];\n dst[10] = zAxis[2];\n dst[11] = 0;\n dst[12] = -(xAxis[0] * eye[0] + xAxis[1] * eye[1] + xAxis[2] * eye[2]);\n dst[13] = -(yAxis[0] * eye[0] + yAxis[1] * eye[1] + yAxis[2] * eye[2]);\n dst[14] = -(zAxis[0] * eye[0] + zAxis[1] * eye[1] + zAxis[2] * eye[2]);\n dst[15] = 1;\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which translates by the given vector v.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nfunction translation(v, dst) {\n dst = dst || new MatType(16);\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n dst[11] = 0;\n dst[12] = v[0];\n dst[13] = v[1];\n dst[14] = v[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Translates the given 4-by-4 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nfunction translate(m, v, dst) {\n dst = dst || new MatType(16);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n if (m !== dst) {\n dst[0] = m00;\n dst[1] = m01;\n dst[2] = m02;\n dst[3] = m03;\n dst[4] = m10;\n dst[5] = m11;\n dst[6] = m12;\n dst[7] = m13;\n dst[8] = m20;\n dst[9] = m21;\n dst[10] = m22;\n dst[11] = m23;\n }\n dst[12] = m00 * v0 + m10 * v1 + m20 * v2 + m30;\n dst[13] = m01 * v0 + m11 * v1 + m21 * v2 + m31;\n dst[14] = m02 * v0 + m12 * v1 + m22 * v2 + m32;\n dst[15] = m03 * v0 + m13 * v1 + m23 * v2 + m33;\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the x-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotationX(angleInRadians, dst) {\n dst = dst || new MatType(16);\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = c;\n dst[6] = s;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = -s;\n dst[10] = c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the x-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotateX$1(m, angleInRadians, dst) {\n dst = dst || new MatType(16);\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[4] = c * m10 + s * m20;\n dst[5] = c * m11 + s * m21;\n dst[6] = c * m12 + s * m22;\n dst[7] = c * m13 + s * m23;\n dst[8] = c * m20 - s * m10;\n dst[9] = c * m21 - s * m11;\n dst[10] = c * m22 - s * m12;\n dst[11] = c * m23 - s * m13;\n if (m !== dst) {\n dst[0] = m[0];\n dst[1] = m[1];\n dst[2] = m[2];\n dst[3] = m[3];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the y-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotationY(angleInRadians, dst) {\n dst = dst || new MatType(16);\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c;\n dst[1] = 0;\n dst[2] = -s;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = s;\n dst[9] = 0;\n dst[10] = c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the y-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotateY$1(m, angleInRadians, dst) {\n dst = dst || new MatType(16);\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c * m00 - s * m20;\n dst[1] = c * m01 - s * m21;\n dst[2] = c * m02 - s * m22;\n dst[3] = c * m03 - s * m23;\n dst[8] = c * m20 + s * m00;\n dst[9] = c * m21 + s * m01;\n dst[10] = c * m22 + s * m02;\n dst[11] = c * m23 + s * m03;\n if (m !== dst) {\n dst[4] = m[4];\n dst[5] = m[5];\n dst[6] = m[6];\n dst[7] = m[7];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the z-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotationZ(angleInRadians, dst) {\n dst = dst || new MatType(16);\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c;\n dst[1] = s;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = -s;\n dst[5] = c;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the z-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotateZ$1(m, angleInRadians, dst) {\n dst = dst || new MatType(16);\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c * m00 + s * m10;\n dst[1] = c * m01 + s * m11;\n dst[2] = c * m02 + s * m12;\n dst[3] = c * m03 + s * m13;\n dst[4] = c * m10 - s * m00;\n dst[5] = c * m11 - s * m01;\n dst[6] = c * m12 - s * m02;\n dst[7] = c * m13 - s * m03;\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n dst[11] = m[11];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nfunction axisRotation(axis, angleInRadians, dst) {\n dst = dst || new MatType(16);\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n dst[0] = xx + (1 - xx) * c;\n dst[1] = x * y * oneMinusCosine + z * s;\n dst[2] = x * z * oneMinusCosine - y * s;\n dst[3] = 0;\n dst[4] = x * y * oneMinusCosine - z * s;\n dst[5] = yy + (1 - yy) * c;\n dst[6] = y * z * oneMinusCosine + x * s;\n dst[7] = 0;\n dst[8] = x * z * oneMinusCosine + y * s;\n dst[9] = y * z * oneMinusCosine - x * s;\n dst[10] = zz + (1 - zz) * c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle. (same as axisRotation)\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nconst rotation = axisRotation;\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle.\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction axisRotate(m, axis, angleInRadians, dst) {\n dst = dst || new MatType(16);\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n const r00 = xx + (1 - xx) * c;\n const r01 = x * y * oneMinusCosine + z * s;\n const r02 = x * z * oneMinusCosine - y * s;\n const r10 = x * y * oneMinusCosine - z * s;\n const r11 = yy + (1 - yy) * c;\n const r12 = y * z * oneMinusCosine + x * s;\n const r20 = x * z * oneMinusCosine + y * s;\n const r21 = y * z * oneMinusCosine - x * s;\n const r22 = zz + (1 - zz) * c;\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n dst[0] = r00 * m00 + r01 * m10 + r02 * m20;\n dst[1] = r00 * m01 + r01 * m11 + r02 * m21;\n dst[2] = r00 * m02 + r01 * m12 + r02 * m22;\n dst[3] = r00 * m03 + r01 * m13 + r02 * m23;\n dst[4] = r10 * m00 + r11 * m10 + r12 * m20;\n dst[5] = r10 * m01 + r11 * m11 + r12 * m21;\n dst[6] = r10 * m02 + r11 * m12 + r12 * m22;\n dst[7] = r10 * m03 + r11 * m13 + r12 * m23;\n dst[8] = r20 * m00 + r21 * m10 + r22 * m20;\n dst[9] = r20 * m01 + r21 * m11 + r22 * m21;\n dst[10] = r20 * m02 + r21 * m12 + r22 * m22;\n dst[11] = r20 * m03 + r21 * m13 + r22 * m23;\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle. (same as rotate)\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nconst rotate = axisRotate;\n/**\n * Creates a 4-by-4 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * three entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction scaling(v, dst) {\n dst = dst || new MatType(16);\n dst[0] = v[0];\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = v[1];\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = v[2];\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Scales the given 4-by-4 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of three entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction scale$2(m, v, dst) {\n dst = dst || new MatType(16);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n dst[0] = v0 * m[0 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2];\n dst[3] = v0 * m[0 * 4 + 3];\n dst[4] = v1 * m[1 * 4 + 0];\n dst[5] = v1 * m[1 * 4 + 1];\n dst[6] = v1 * m[1 * 4 + 2];\n dst[7] = v1 * m[1 * 4 + 3];\n dst[8] = v2 * m[2 * 4 + 0];\n dst[9] = v2 * m[2 * 4 + 1];\n dst[10] = v2 * m[2 * 4 + 2];\n dst[11] = v2 * m[2 * 4 + 3];\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which scales a uniform amount in each dimension.\n * @param s - the amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction uniformScaling(s, dst) {\n dst = dst || new MatType(16);\n dst[0] = s;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = s;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = s;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Scales the given 4-by-4 matrix in each dimension by a uniform scale.\n * @param m - The matrix to be modified.\n * @param s - The amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction uniformScale(m, s, dst) {\n dst = dst || new MatType(16);\n dst[0] = s * m[0 * 4 + 0];\n dst[1] = s * m[0 * 4 + 1];\n dst[2] = s * m[0 * 4 + 2];\n dst[3] = s * m[0 * 4 + 3];\n dst[4] = s * m[1 * 4 + 0];\n dst[5] = s * m[1 * 4 + 1];\n dst[6] = s * m[1 * 4 + 2];\n dst[7] = s * m[1 * 4 + 3];\n dst[8] = s * m[2 * 4 + 0];\n dst[9] = s * m[2 * 4 + 1];\n dst[10] = s * m[2 * 4 + 2];\n dst[11] = s * m[2 * 4 + 3];\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n\nvar mat4Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setDefaultType: setDefaultType$3,\n create: create$2,\n set: set$2,\n fromMat3: fromMat3,\n fromQuat: fromQuat,\n negate: negate$1,\n copy: copy$2,\n clone: clone$2,\n equalsApproximately: equalsApproximately$2,\n equals: equals$2,\n identity: identity$1,\n transpose: transpose,\n inverse: inverse$2,\n determinant: determinant,\n invert: invert$1,\n multiply: multiply$2,\n mul: mul$2,\n setTranslation: setTranslation,\n getTranslation: getTranslation,\n getAxis: getAxis,\n setAxis: setAxis,\n getScaling: getScaling,\n perspective: perspective,\n ortho: ortho,\n frustum: frustum,\n aim: aim,\n cameraAim: cameraAim,\n lookAt: lookAt,\n translation: translation,\n translate: translate,\n rotationX: rotationX,\n rotateX: rotateX$1,\n rotationY: rotationY,\n rotateY: rotateY$1,\n rotationZ: rotationZ,\n rotateZ: rotateZ$1,\n axisRotation: axisRotation,\n rotation: rotation,\n axisRotate: axisRotate,\n rotate: rotate,\n scaling: scaling,\n scale: scale$2,\n uniformScaling: uniformScaling,\n uniformScale: uniformScale\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Quat4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Quat4`. In other words you can do this\n *\n * const v = quat4.cross(v1, v2); // Creates a new Quat4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = quat4.create();\n * quat4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * quat4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet QuatType = Float32Array;\n/**\n * Sets the type this library creates for a Quat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Quat4\n */\nfunction setDefaultType$2(ctor) {\n const oldType = QuatType;\n QuatType = ctor;\n return oldType;\n}\n/**\n * Creates a quat4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nfunction create$1(x, y, z, w) {\n const dst = new QuatType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a Quat; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nconst fromValues$1 = create$1;\n/**\n * Sets the values of a Quat\n * Also see {@link quat.create} and {@link quat.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set$1(x, y, z, w, dst) {\n dst = dst || new QuatType(4);\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n return dst;\n}\n/**\n * Sets a quaternion from the given angle and axis,\n * then returns it.\n *\n * @param axis - the axis to rotate around\n * @param angleInRadians - the angle\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The quaternion that represents the given axis and angle\n **/\nfunction fromAxisAngle(axis, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const s = Math.sin(halfAngle);\n dst[0] = s * axis[0];\n dst[1] = s * axis[1];\n dst[2] = s * axis[2];\n dst[3] = Math.cos(halfAngle);\n return dst;\n}\n/**\n * Gets the rotation axis and angle\n * @param q - quaternion to compute from\n * @param dst - Vec3 to hold result. If not passed in a new one is created.\n * @return angle and axis\n */\nfunction toAxisAngle(q, dst) {\n dst = dst || create$4(4);\n const angle = Math.acos(q[3]) * 2;\n const s = Math.sin(angle * 0.5);\n if (s > EPSILON) {\n dst[0] = q[0] / s;\n dst[1] = q[1] / s;\n dst[2] = q[2] / s;\n }\n else {\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n }\n return { angle, axis: dst };\n}\n/**\n * Returns the angle in degrees between two rotations a and b.\n * @param a - quaternion a\n * @param b - quaternion b\n * @return angle in radians between the two quaternions\n */\nfunction angle(a, b) {\n const d = dot$1(a, b);\n return Math.acos(2 * d * d - 1);\n}\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction multiply$1(a, b, dst) {\n dst = dst || new QuatType(4);\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const bw = b[3];\n dst[0] = ax * bw + aw * bx + ay * bz - az * by;\n dst[1] = ay * bw + aw * by + az * bx - ax * bz;\n dst[2] = az * bw + aw * bz + ax * by - ay * bx;\n dst[3] = aw * bw - ax * bx - ay * by - az * bz;\n return dst;\n}\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nconst mul$1 = multiply$1;\n/**\n * Rotates the given quaternion around the X axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction rotateX(q, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const bx = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n dst[0] = qx * bw + qw * bx;\n dst[1] = qy * bw + qz * bx;\n dst[2] = qz * bw - qy * bx;\n dst[3] = qw * bw - qx * bx;\n return dst;\n}\n/**\n * Rotates the given quaternion around the Y axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction rotateY(q, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const by = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n dst[0] = qx * bw - qz * by;\n dst[1] = qy * bw + qw * by;\n dst[2] = qz * bw + qx * by;\n dst[3] = qw * bw - qy * by;\n return dst;\n}\n/**\n * Rotates the given quaternion around the Z axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction rotateZ(q, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const bz = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n dst[0] = qx * bw + qy * bz;\n dst[1] = qy * bw - qx * bz;\n dst[2] = qz * bw + qw * bz;\n dst[3] = qw * bw - qz * bz;\n return dst;\n}\n/**\n * Spherically linear interpolate between two quaternions\n *\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction slerp(a, b, t, dst) {\n dst = dst || new QuatType(4);\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n let bx = b[0];\n let by = b[1];\n let bz = b[2];\n let bw = b[3];\n let cosOmega = ax * bx + ay * by + az * bz + aw * bw;\n if (cosOmega < 0) {\n cosOmega = -cosOmega;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n let scale0;\n let scale1;\n if (1.0 - cosOmega > EPSILON) {\n const omega = Math.acos(cosOmega);\n const sinOmega = Math.sin(omega);\n scale0 = Math.sin((1 - t) * omega) / sinOmega;\n scale1 = Math.sin(t * omega) / sinOmega;\n }\n else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n dst[0] = scale0 * ax + scale1 * bx;\n dst[1] = scale0 * ay + scale1 * by;\n dst[2] = scale0 * az + scale1 * bz;\n dst[3] = scale0 * aw + scale1 * bw;\n return dst;\n}\n/**\n * Compute the inverse of a quaternion\n *\n * @param q - quaternion to compute the inverse of\n * @returns A quaternion that is the result of a * b\n */\nfunction inverse$1(q, dst) {\n dst = dst || new QuatType(4);\n const a0 = q[0];\n const a1 = q[1];\n const a2 = q[2];\n const a3 = q[3];\n const dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n const invDot = dot ? 1 / dot : 0;\n dst[0] = -a0 * invDot;\n dst[1] = -a1 * invDot;\n dst[2] = -a2 * invDot;\n dst[3] = a3 * invDot;\n return dst;\n}\n/**\n * Compute the conjugate of a quaternion\n * For quaternions with a magnitude of 1 (a unit quaternion)\n * this returns the same as the inverse but is faster to calculate.\n *\n * @param q - quaternion to compute the conjugate of.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The conjugate of q\n */\nfunction conjugate(q, dst) {\n dst = dst || new QuatType(4);\n dst[0] = -q[0];\n dst[1] = -q[1];\n dst[2] = -q[2];\n dst[3] = q[3];\n return dst;\n}\n/**\n * Creates a quaternion from the given rotation matrix.\n *\n * The created quaternion is not normalized.\n *\n * @param m - rotation matrix\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nfunction fromMat(m, dst) {\n dst = dst || new QuatType(4);\n /*\n 0 1 2\n 3 4 5\n 6 7 8\n \n 0 1 2\n 4 5 6\n 8 9 10\n */\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n const trace = m[0] + m[5] + m[10];\n if (trace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n const root = Math.sqrt(trace + 1); // 2w\n dst[3] = 0.5 * root;\n const invRoot = 0.5 / root; // 1/(4w)\n dst[0] = (m[6] - m[9]) * invRoot;\n dst[1] = (m[8] - m[2]) * invRoot;\n dst[2] = (m[1] - m[4]) * invRoot;\n }\n else {\n // |w| <= 1/2\n let i = 0;\n if (m[5] > m[0]) {\n i = 1;\n }\n if (m[10] > m[i * 4 + i]) {\n i = 2;\n }\n const j = (i + 1) % 3;\n const k = (i + 2) % 3;\n const root = Math.sqrt(m[i * 4 + i] - m[j * 4 + j] - m[k * 4 + k] + 1.0);\n dst[i] = 0.5 * root;\n const invRoot = 0.5 / root;\n dst[3] = (m[j * 4 + k] - m[k * 4 + j]) * invRoot;\n dst[j] = (m[j * 4 + i] + m[i * 4 + j]) * invRoot;\n dst[k] = (m[k * 4 + i] + m[i * 4 + k]) * invRoot;\n }\n return dst;\n}\n/**\n * Creates a quaternion from the given euler angle x, y, z using the provided intrinsic order for the conversion.\n *\n * @param xAngleInRadians - angle to rotate around X axis in radians.\n * @param yAngleInRadians - angle to rotate around Y axis in radians.\n * @param zAngleInRadians - angle to rotate around Z axis in radians.\n * @param order - order to apply euler angles\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion representing the same rotation as the euler angles applied in the given order\n */\nfunction fromEuler(xAngleInRadians, yAngleInRadians, zAngleInRadians, order, dst) {\n dst = dst || new QuatType(4);\n const xHalfAngle = xAngleInRadians * 0.5;\n const yHalfAngle = yAngleInRadians * 0.5;\n const zHalfAngle = zAngleInRadians * 0.5;\n const sx = Math.sin(xHalfAngle);\n const cx = Math.cos(xHalfAngle);\n const sy = Math.sin(yHalfAngle);\n const cy = Math.cos(yHalfAngle);\n const sz = Math.sin(zHalfAngle);\n const cz = Math.cos(zHalfAngle);\n switch (order) {\n case 'xyz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'xzy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n case 'yxz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n case 'yzx':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'zxy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'zyx':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n default:\n throw new Error(`Unknown rotation order: ${order}`);\n }\n return dst;\n}\n/**\n * Copies a quaternion. (same as {@link quat.clone})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is a copy of q\n */\nfunction copy$1(q, dst) {\n dst = dst || new QuatType(4);\n dst[0] = q[0];\n dst[1] = q[1];\n dst[2] = q[2];\n dst[3] = q[3];\n return dst;\n}\n/**\n * Clones a quaternion. (same as {@link quat.copy})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A copy of q.\n */\nconst clone$1 = copy$1;\n/**\n * Adds two quaternions; assumes a and b have the same dimension.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the sum of a and b.\n */\nfunction add$1(a, b, dst) {\n dst = dst || new QuatType(4);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n return dst;\n}\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nfunction subtract$1(a, b, dst) {\n dst = dst || new QuatType(4);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n return dst;\n}\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nconst sub$1 = subtract$1;\n/**\n * Multiplies a quaternion by a scalar.\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nfunction mulScalar$1(v, k, dst) {\n dst = dst || new QuatType(4);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n return dst;\n}\n/**\n * Multiplies a quaternion by a scalar. (same as mulScalar)\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nconst scale$1 = mulScalar$1;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nfunction divScalar$1(v, k, dst) {\n dst = dst || new QuatType(4);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n return dst;\n}\n/**\n * Computes the dot product of two quaternions\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns dot product\n */\nfunction dot$1(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n/**\n * Performs linear interpolation on two quaternions.\n * Given quaternions a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param t - Interpolation coefficient.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp$1(a, b, t, dst) {\n dst = dst || new QuatType(4);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n return dst;\n}\n/**\n * Computes the length of quaternion\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nfunction length$1(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n/**\n * Computes the length of quaternion (same as length)\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nconst len$1 = length$1;\n/**\n * Computes the square of the length of quaternion\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nfunction lengthSq$1(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n/**\n * Computes the square of the length of quaternion (same as lengthSq)\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nconst lenSq$1 = lengthSq$1;\n/**\n * Divides a quaternion by its Euclidean length and returns the quotient.\n * @param v - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The normalized quaternion.\n */\nfunction normalize$1(v, dst) {\n dst = dst || new QuatType(4);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n return dst;\n}\n/**\n * Check if 2 quaternions are approximately equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are approximately equal\n */\nfunction equalsApproximately$1(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON;\n}\n/**\n * Check if 2 quaternions are exactly equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are exactly equal\n */\nfunction equals$1(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Creates an identity quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns an identity quaternion\n */\nfunction identity(dst) {\n dst = dst || new QuatType(4);\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n return dst;\n}\nlet tempVec3;\nlet xUnitVec3;\nlet yUnitVec3;\n/**\n * Computes a quaternion to represent the shortest rotation from one vector to another.\n *\n * @param aUnit - the start vector\n * @param bUnit - the end vector\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nfunction rotationTo(aUnit, bUnit, dst) {\n dst = dst || new QuatType(4);\n tempVec3 = tempVec3 || create$4();\n xUnitVec3 = xUnitVec3 || create$4(1, 0, 0);\n yUnitVec3 = yUnitVec3 || create$4(0, 1, 0);\n const dot = dot$2(aUnit, bUnit);\n if (dot < -0.999999) {\n cross(xUnitVec3, aUnit, tempVec3);\n if (len$2(tempVec3) < 0.000001) {\n cross(yUnitVec3, aUnit, tempVec3);\n }\n normalize$2(tempVec3, tempVec3);\n fromAxisAngle(tempVec3, Math.PI, dst);\n return dst;\n }\n else if (dot > 0.999999) {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n return dst;\n }\n else {\n cross(aUnit, bUnit, tempVec3);\n dst[0] = tempVec3[0];\n dst[1] = tempVec3[1];\n dst[2] = tempVec3[2];\n dst[3] = 1 + dot;\n return normalize$1(dst, dst);\n }\n}\nlet tempQuat1;\nlet tempQuat2;\n/**\n * Performs a spherical linear interpolation with two control points\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param c - the third quaternion\n * @param d - the fourth quaternion\n * @param t - Interpolation coefficient 0 to 1\n * @returns result\n */\nfunction sqlerp(a, b, c, d, t, dst) {\n dst = dst || new QuatType(4);\n tempQuat1 = tempQuat1 || new QuatType(4);\n tempQuat2 = tempQuat2 || new QuatType(4);\n slerp(a, d, t, tempQuat1);\n slerp(b, c, t, tempQuat2);\n slerp(tempQuat1, tempQuat2, 2 * t * (1 - t), dst);\n return dst;\n}\n\nvar quatImpl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create$1,\n setDefaultType: setDefaultType$2,\n fromValues: fromValues$1,\n set: set$1,\n fromAxisAngle: fromAxisAngle,\n toAxisAngle: toAxisAngle,\n angle: angle,\n multiply: multiply$1,\n mul: mul$1,\n rotateX: rotateX,\n rotateY: rotateY,\n rotateZ: rotateZ,\n slerp: slerp,\n inverse: inverse$1,\n conjugate: conjugate,\n fromMat: fromMat,\n fromEuler: fromEuler,\n copy: copy$1,\n clone: clone$1,\n add: add$1,\n subtract: subtract$1,\n sub: sub$1,\n mulScalar: mulScalar$1,\n scale: scale$1,\n divScalar: divScalar$1,\n dot: dot$1,\n lerp: lerp$1,\n length: length$1,\n len: len$1,\n lengthSq: lengthSq$1,\n lenSq: lenSq$1,\n normalize: normalize$1,\n equalsApproximately: equalsApproximately$1,\n equals: equals$1,\n identity: identity,\n rotationTo: rotationTo,\n sqlerp: sqlerp\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Vec4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec4`. In other words you can do this\n *\n * const v = vec4.cross(v1, v2); // Creates a new Vec4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec4.create();\n * vec4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet VecType = Float32Array;\n/**\n * Sets the type this library creates for a Vec4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec4\n */\nfunction setDefaultType$1(ctor) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n/**\n * Creates a vec4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nfunction create(x, y, z, w) {\n const dst = new VecType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a vec4; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nconst fromValues = create;\n/**\n * Sets the values of a Vec4\n * Also see {@link vec4.create} and {@link vec4.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set(x, y, z, w, dst) {\n dst = dst || new VecType(4);\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n return dst;\n}\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nfunction ceil(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n dst[3] = Math.ceil(v[3]);\n return dst;\n}\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nfunction floor(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n dst[3] = Math.floor(v[3]);\n return dst;\n}\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nfunction round(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n dst[3] = Math.round(v[3]);\n return dst;\n}\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nfunction clamp(v, min = 0, max = 1, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n dst[3] = Math.min(max, Math.max(min, v[3]));\n return dst;\n}\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nfunction add(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n return dst;\n}\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nfunction addScaled(a, b, scale, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n dst[3] = a[3] + b[3] * scale;\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nfunction subtract(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nconst sub = subtract;\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nfunction equalsApproximately(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON;\n}\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nfunction equals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp(a, b, t, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n return dst;\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nfunction lerpV(a, b, t, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n dst[3] = a[3] + t[3] * (b[3] - a[3]);\n return dst;\n}\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nfunction max(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n dst[3] = Math.max(a[3], b[3]);\n return dst;\n}\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nfunction min(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n dst[3] = Math.min(a[3], b[3]);\n return dst;\n}\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction mulScalar(v, k, dst) {\n dst = dst || new VecType(4);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n return dst;\n}\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nconst scale = mulScalar;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction divScalar(v, k, dst) {\n dst = dst || new VecType(4);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n return dst;\n}\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nfunction inverse(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n dst[3] = 1 / v[3];\n return dst;\n}\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nconst invert = inverse;\n/**\n * Computes the dot product of two vectors\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nfunction dot(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nfunction length(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nconst len = length;\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nfunction lengthSq(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nconst lenSq = lengthSq;\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nfunction distance(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return Math.sqrt(dx * dx + dy * dy + dz * dz + dw * dw);\n}\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nconst dist = distance;\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nfunction distanceSq(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return dx * dx + dy * dy + dz * dz + dw * dw;\n}\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nconst distSq = distanceSq;\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nfunction normalize(v, dst) {\n dst = dst || new VecType(4);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n return dst;\n}\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nfunction negate(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n dst[3] = -v[3];\n return dst;\n}\n/**\n * Copies a vector. (same as {@link vec4.clone})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nfunction copy(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n dst[3] = v[3];\n return dst;\n}\n/**\n * Clones a vector. (same as {@link vec4.copy})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nconst clone = copy;\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nfunction multiply(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n dst[3] = a[3] * b[3];\n return dst;\n}\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nconst mul = multiply;\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nfunction divide(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n dst[3] = a[3] / b[3];\n return dst;\n}\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nconst div = divide;\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nfunction zero(dst) {\n dst = dst || new VecType(4);\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n return dst;\n}\n/**\n * transform vec4 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec4 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat4(v, m, dst) {\n dst = dst || new VecType(4);\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = v[3];\n dst[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n dst[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n dst[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n dst[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return dst;\n}\n\nvar vec4Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create,\n setDefaultType: setDefaultType$1,\n fromValues: fromValues,\n set: set,\n ceil: ceil,\n floor: floor,\n round: round,\n clamp: clamp,\n add: add,\n addScaled: addScaled,\n subtract: subtract,\n sub: sub,\n equalsApproximately: equalsApproximately,\n equals: equals,\n lerp: lerp,\n lerpV: lerpV,\n max: max,\n min: min,\n mulScalar: mulScalar,\n scale: scale,\n divScalar: divScalar,\n inverse: inverse,\n invert: invert,\n dot: dot,\n length: length,\n len: len,\n lengthSq: lengthSq,\n lenSq: lenSq,\n distance: distance,\n dist: dist,\n distanceSq: distanceSq,\n distSq: distSq,\n normalize: normalize,\n negate: negate,\n copy: copy,\n clone: clone,\n multiply: multiply,\n mul: mul,\n divide: divide,\n div: div,\n zero: zero,\n transformMat4: transformMat4\n});\n\n/**\n * Sets the type this library creates for all types\n *\n * example:\n *\n * ```\n * setDefaultType(Float64Array);\n * ```\n *\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n */\nfunction setDefaultType(ctor) {\n setDefaultType$4(ctor);\n setDefaultType$3(ctor);\n setDefaultType$2(ctor);\n setDefaultType$6(ctor);\n setDefaultType$5(ctor);\n setDefaultType$1(ctor);\n}\n\nexport { mat3Impl as mat3, mat4Impl as mat4, quatImpl as quat, setDefaultType, utils, vec2Impl as vec2, vec3Impl as vec3, vec4Impl as vec4 };\n//# sourceMappingURL=wgpu-matrix.module.js.map\n","/**\n * dat-gui JavaScript Controller Library\n * https://github.com/dataarts/dat.gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction ___$insertStyle(css) {\n if (!css) {\n return;\n }\n if (typeof window === 'undefined') {\n return;\n }\n\n var style = document.createElement('style');\n\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n document.head.appendChild(style);\n\n return css;\n}\n\nfunction colorToString (color, forceCSSHex) {\n var colorFormat = color.__state.conversionName.toString();\n var r = Math.round(color.r);\n var g = Math.round(color.g);\n var b = Math.round(color.b);\n var a = color.a;\n var h = Math.round(color.h);\n var s = color.s.toFixed(1);\n var v = color.v.toFixed(1);\n if (forceCSSHex || colorFormat === 'THREE_CHAR_HEX' || colorFormat === 'SIX_CHAR_HEX') {\n var str = color.hex.toString(16);\n while (str.length < 6) {\n str = '0' + str;\n }\n return '#' + str;\n } else if (colorFormat === 'CSS_RGB') {\n return 'rgb(' + r + ',' + g + ',' + b + ')';\n } else if (colorFormat === 'CSS_RGBA') {\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n } else if (colorFormat === 'HEX') {\n return '0x' + color.hex.toString(16);\n } else if (colorFormat === 'RGB_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ']';\n } else if (colorFormat === 'RGBA_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ',' + a + ']';\n } else if (colorFormat === 'RGB_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + '}';\n } else if (colorFormat === 'RGBA_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}';\n } else if (colorFormat === 'HSV_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + '}';\n } else if (colorFormat === 'HSVA_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}';\n }\n return 'unknown format';\n}\n\nvar ARR_EACH = Array.prototype.forEach;\nvar ARR_SLICE = Array.prototype.slice;\nvar Common = {\n BREAK: {},\n extend: function extend(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (!this.isUndefined(obj[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n defaults: function defaults(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (this.isUndefined(target[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n compose: function compose() {\n var toCall = ARR_SLICE.call(arguments);\n return function () {\n var args = ARR_SLICE.call(arguments);\n for (var i = toCall.length - 1; i >= 0; i--) {\n args = [toCall[i].apply(this, args)];\n }\n return args[0];\n };\n },\n each: function each(obj, itr, scope) {\n if (!obj) {\n return;\n }\n if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) {\n obj.forEach(itr, scope);\n } else if (obj.length === obj.length + 0) {\n var key = void 0;\n var l = void 0;\n for (key = 0, l = obj.length; key < l; key++) {\n if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) {\n return;\n }\n }\n } else {\n for (var _key in obj) {\n if (itr.call(scope, obj[_key], _key) === this.BREAK) {\n return;\n }\n }\n }\n },\n defer: function defer(fnc) {\n setTimeout(fnc, 0);\n },\n debounce: function debounce(func, threshold, callImmediately) {\n var timeout = void 0;\n return function () {\n var obj = this;\n var args = arguments;\n function delayed() {\n timeout = null;\n if (!callImmediately) func.apply(obj, args);\n }\n var callNow = callImmediately || !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(delayed, threshold);\n if (callNow) {\n func.apply(obj, args);\n }\n };\n },\n toArray: function toArray(obj) {\n if (obj.toArray) return obj.toArray();\n return ARR_SLICE.call(obj);\n },\n isUndefined: function isUndefined(obj) {\n return obj === undefined;\n },\n isNull: function isNull(obj) {\n return obj === null;\n },\n isNaN: function (_isNaN) {\n function isNaN(_x) {\n return _isNaN.apply(this, arguments);\n }\n isNaN.toString = function () {\n return _isNaN.toString();\n };\n return isNaN;\n }(function (obj) {\n return isNaN(obj);\n }),\n isArray: Array.isArray || function (obj) {\n return obj.constructor === Array;\n },\n isObject: function isObject(obj) {\n return obj === Object(obj);\n },\n isNumber: function isNumber(obj) {\n return obj === obj + 0;\n },\n isString: function isString(obj) {\n return obj === obj + '';\n },\n isBoolean: function isBoolean(obj) {\n return obj === false || obj === true;\n },\n isFunction: function isFunction(obj) {\n return obj instanceof Function;\n }\n};\n\nvar INTERPRETATIONS = [\n{\n litmus: Common.isString,\n conversions: {\n THREE_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString() + test[1].toString() + test[2].toString() + test[2].toString() + test[3].toString() + test[3].toString(), 0)\n };\n },\n write: colorToString\n },\n SIX_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9]{6})$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString(), 0)\n };\n },\n write: colorToString\n },\n CSS_RGB: {\n read: function read(original) {\n var test = original.match(/^rgb\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3])\n };\n },\n write: colorToString\n },\n CSS_RGBA: {\n read: function read(original) {\n var test = original.match(/^rgba\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3]),\n a: parseFloat(test[4])\n };\n },\n write: colorToString\n }\n }\n},\n{\n litmus: Common.isNumber,\n conversions: {\n HEX: {\n read: function read(original) {\n return {\n space: 'HEX',\n hex: original,\n conversionName: 'HEX'\n };\n },\n write: function write(color) {\n return color.hex;\n }\n }\n }\n},\n{\n litmus: Common.isArray,\n conversions: {\n RGB_ARRAY: {\n read: function read(original) {\n if (original.length !== 3) {\n return false;\n }\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b];\n }\n },\n RGBA_ARRAY: {\n read: function read(original) {\n if (original.length !== 4) return false;\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2],\n a: original[3]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b, color.a];\n }\n }\n }\n},\n{\n litmus: Common.isObject,\n conversions: {\n RGBA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b) && Common.isNumber(original.a)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b,\n a: color.a\n };\n }\n },\n RGB_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b\n };\n }\n },\n HSVA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v) && Common.isNumber(original.a)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v,\n a: color.a\n };\n }\n },\n HSV_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v\n };\n }\n }\n }\n}];\nvar result = void 0;\nvar toReturn = void 0;\nvar interpret = function interpret() {\n toReturn = false;\n var original = arguments.length > 1 ? Common.toArray(arguments) : arguments[0];\n Common.each(INTERPRETATIONS, function (family) {\n if (family.litmus(original)) {\n Common.each(family.conversions, function (conversion, conversionName) {\n result = conversion.read(original);\n if (toReturn === false && result !== false) {\n toReturn = result;\n result.conversionName = conversionName;\n result.conversion = conversion;\n return Common.BREAK;\n }\n });\n return Common.BREAK;\n }\n });\n return toReturn;\n};\n\nvar tmpComponent = void 0;\nvar ColorMath = {\n hsv_to_rgb: function hsv_to_rgb(h, s, v) {\n var hi = Math.floor(h / 60) % 6;\n var f = h / 60 - Math.floor(h / 60);\n var p = v * (1.0 - s);\n var q = v * (1.0 - f * s);\n var t = v * (1.0 - (1.0 - f) * s);\n var c = [[v, t, p], [q, v, p], [p, v, t], [p, q, v], [t, p, v], [v, p, q]][hi];\n return {\n r: c[0] * 255,\n g: c[1] * 255,\n b: c[2] * 255\n };\n },\n rgb_to_hsv: function rgb_to_hsv(r, g, b) {\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var h = void 0;\n var s = void 0;\n if (max !== 0) {\n s = delta / max;\n } else {\n return {\n h: NaN,\n s: 0,\n v: 0\n };\n }\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h /= 6;\n if (h < 0) {\n h += 1;\n }\n return {\n h: h * 360,\n s: s,\n v: max / 255\n };\n },\n rgb_to_hex: function rgb_to_hex(r, g, b) {\n var hex = this.hex_with_component(0, 2, r);\n hex = this.hex_with_component(hex, 1, g);\n hex = this.hex_with_component(hex, 0, b);\n return hex;\n },\n component_from_hex: function component_from_hex(hex, componentIndex) {\n return hex >> componentIndex * 8 & 0xFF;\n },\n hex_with_component: function hex_with_component(hex, componentIndex, value) {\n return value << (tmpComponent = componentIndex * 8) | hex & ~(0xFF << tmpComponent);\n }\n};\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar Color = function () {\n function Color() {\n classCallCheck(this, Color);\n this.__state = interpret.apply(this, arguments);\n if (this.__state === false) {\n throw new Error('Failed to interpret color arguments');\n }\n this.__state.a = this.__state.a || 1;\n }\n createClass(Color, [{\n key: 'toString',\n value: function toString() {\n return colorToString(this);\n }\n }, {\n key: 'toHexString',\n value: function toHexString() {\n return colorToString(this, true);\n }\n }, {\n key: 'toOriginal',\n value: function toOriginal() {\n return this.__state.conversion.write(this);\n }\n }]);\n return Color;\n}();\nfunction defineRGBComponent(target, component, componentHexIndex) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'RGB') {\n return this.__state[component];\n }\n Color.recalculateRGB(this, component, componentHexIndex);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'RGB') {\n Color.recalculateRGB(this, component, componentHexIndex);\n this.__state.space = 'RGB';\n }\n this.__state[component] = v;\n }\n });\n}\nfunction defineHSVComponent(target, component) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'HSV') {\n return this.__state[component];\n }\n Color.recalculateHSV(this);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'HSV') {\n Color.recalculateHSV(this);\n this.__state.space = 'HSV';\n }\n this.__state[component] = v;\n }\n });\n}\nColor.recalculateRGB = function (color, component, componentHexIndex) {\n if (color.__state.space === 'HEX') {\n color.__state[component] = ColorMath.component_from_hex(color.__state.hex, componentHexIndex);\n } else if (color.__state.space === 'HSV') {\n Common.extend(color.__state, ColorMath.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v));\n } else {\n throw new Error('Corrupted color state');\n }\n};\nColor.recalculateHSV = function (color) {\n var result = ColorMath.rgb_to_hsv(color.r, color.g, color.b);\n Common.extend(color.__state, {\n s: result.s,\n v: result.v\n });\n if (!Common.isNaN(result.h)) {\n color.__state.h = result.h;\n } else if (Common.isUndefined(color.__state.h)) {\n color.__state.h = 0;\n }\n};\nColor.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a'];\ndefineRGBComponent(Color.prototype, 'r', 2);\ndefineRGBComponent(Color.prototype, 'g', 1);\ndefineRGBComponent(Color.prototype, 'b', 0);\ndefineHSVComponent(Color.prototype, 'h');\ndefineHSVComponent(Color.prototype, 's');\ndefineHSVComponent(Color.prototype, 'v');\nObject.defineProperty(Color.prototype, 'a', {\n get: function get$$1() {\n return this.__state.a;\n },\n set: function set$$1(v) {\n this.__state.a = v;\n }\n});\nObject.defineProperty(Color.prototype, 'hex', {\n get: function get$$1() {\n if (this.__state.space !== 'HEX') {\n this.__state.hex = ColorMath.rgb_to_hex(this.r, this.g, this.b);\n this.__state.space = 'HEX';\n }\n return this.__state.hex;\n },\n set: function set$$1(v) {\n this.__state.space = 'HEX';\n this.__state.hex = v;\n }\n});\n\nvar Controller = function () {\n function Controller(object, property) {\n classCallCheck(this, Controller);\n this.initialValue = object[property];\n this.domElement = document.createElement('div');\n this.object = object;\n this.property = property;\n this.__onChange = undefined;\n this.__onFinishChange = undefined;\n }\n createClass(Controller, [{\n key: 'onChange',\n value: function onChange(fnc) {\n this.__onChange = fnc;\n return this;\n }\n }, {\n key: 'onFinishChange',\n value: function onFinishChange(fnc) {\n this.__onFinishChange = fnc;\n return this;\n }\n }, {\n key: 'setValue',\n value: function setValue(newValue) {\n this.object[this.property] = newValue;\n if (this.__onChange) {\n this.__onChange.call(this, newValue);\n }\n this.updateDisplay();\n return this;\n }\n }, {\n key: 'getValue',\n value: function getValue() {\n return this.object[this.property];\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n return this;\n }\n }, {\n key: 'isModified',\n value: function isModified() {\n return this.initialValue !== this.getValue();\n }\n }]);\n return Controller;\n}();\n\nvar EVENT_MAP = {\n HTMLEvents: ['change'],\n MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'],\n KeyboardEvents: ['keydown']\n};\nvar EVENT_MAP_INV = {};\nCommon.each(EVENT_MAP, function (v, k) {\n Common.each(v, function (e) {\n EVENT_MAP_INV[e] = k;\n });\n});\nvar CSS_VALUE_PIXELS = /(\\d+(\\.\\d+)?)px/;\nfunction cssValueToPixels(val) {\n if (val === '0' || Common.isUndefined(val)) {\n return 0;\n }\n var match = val.match(CSS_VALUE_PIXELS);\n if (!Common.isNull(match)) {\n return parseFloat(match[1]);\n }\n return 0;\n}\nvar dom = {\n makeSelectable: function makeSelectable(elem, selectable) {\n if (elem === undefined || elem.style === undefined) return;\n elem.onselectstart = selectable ? function () {\n return false;\n } : function () {};\n elem.style.MozUserSelect = selectable ? 'auto' : 'none';\n elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none';\n elem.unselectable = selectable ? 'on' : 'off';\n },\n makeFullscreen: function makeFullscreen(elem, hor, vert) {\n var vertical = vert;\n var horizontal = hor;\n if (Common.isUndefined(horizontal)) {\n horizontal = true;\n }\n if (Common.isUndefined(vertical)) {\n vertical = true;\n }\n elem.style.position = 'absolute';\n if (horizontal) {\n elem.style.left = 0;\n elem.style.right = 0;\n }\n if (vertical) {\n elem.style.top = 0;\n elem.style.bottom = 0;\n }\n },\n fakeEvent: function fakeEvent(elem, eventType, pars, aux) {\n var params = pars || {};\n var className = EVENT_MAP_INV[eventType];\n if (!className) {\n throw new Error('Event type ' + eventType + ' not supported.');\n }\n var evt = document.createEvent(className);\n switch (className) {\n case 'MouseEvents':\n {\n var clientX = params.x || params.clientX || 0;\n var clientY = params.y || params.clientY || 0;\n evt.initMouseEvent(eventType, params.bubbles || false, params.cancelable || true, window, params.clickCount || 1, 0,\n 0,\n clientX,\n clientY,\n false, false, false, false, 0, null);\n break;\n }\n case 'KeyboardEvents':\n {\n var init = evt.initKeyboardEvent || evt.initKeyEvent;\n Common.defaults(params, {\n cancelable: true,\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n keyCode: undefined,\n charCode: undefined\n });\n init(eventType, params.bubbles || false, params.cancelable, window, params.ctrlKey, params.altKey, params.shiftKey, params.metaKey, params.keyCode, params.charCode);\n break;\n }\n default:\n {\n evt.initEvent(eventType, params.bubbles || false, params.cancelable || true);\n break;\n }\n }\n Common.defaults(evt, aux);\n elem.dispatchEvent(evt);\n },\n bind: function bind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.addEventListener) {\n elem.addEventListener(event, func, bool);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + event, func);\n }\n return dom;\n },\n unbind: function unbind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.removeEventListener) {\n elem.removeEventListener(event, func, bool);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + event, func);\n }\n return dom;\n },\n addClass: function addClass(elem, className) {\n if (elem.className === undefined) {\n elem.className = className;\n } else if (elem.className !== className) {\n var classes = elem.className.split(/ +/);\n if (classes.indexOf(className) === -1) {\n classes.push(className);\n elem.className = classes.join(' ').replace(/^\\s+/, '').replace(/\\s+$/, '');\n }\n }\n return dom;\n },\n removeClass: function removeClass(elem, className) {\n if (className) {\n if (elem.className === className) {\n elem.removeAttribute('class');\n } else {\n var classes = elem.className.split(/ +/);\n var index = classes.indexOf(className);\n if (index !== -1) {\n classes.splice(index, 1);\n elem.className = classes.join(' ');\n }\n }\n } else {\n elem.className = undefined;\n }\n return dom;\n },\n hasClass: function hasClass(elem, className) {\n return new RegExp('(?:^|\\\\s+)' + className + '(?:\\\\s+|$)').test(elem.className) || false;\n },\n getWidth: function getWidth(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-left-width']) + cssValueToPixels(style['border-right-width']) + cssValueToPixels(style['padding-left']) + cssValueToPixels(style['padding-right']) + cssValueToPixels(style.width);\n },\n getHeight: function getHeight(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-top-width']) + cssValueToPixels(style['border-bottom-width']) + cssValueToPixels(style['padding-top']) + cssValueToPixels(style['padding-bottom']) + cssValueToPixels(style.height);\n },\n getOffset: function getOffset(el) {\n var elem = el;\n var offset = { left: 0, top: 0 };\n if (elem.offsetParent) {\n do {\n offset.left += elem.offsetLeft;\n offset.top += elem.offsetTop;\n elem = elem.offsetParent;\n } while (elem);\n }\n return offset;\n },\n isActive: function isActive(elem) {\n return elem === document.activeElement && (elem.type || elem.href);\n }\n};\n\nvar BooleanController = function (_Controller) {\n inherits(BooleanController, _Controller);\n function BooleanController(object, property) {\n classCallCheck(this, BooleanController);\n var _this2 = possibleConstructorReturn(this, (BooleanController.__proto__ || Object.getPrototypeOf(BooleanController)).call(this, object, property));\n var _this = _this2;\n _this2.__prev = _this2.getValue();\n _this2.__checkbox = document.createElement('input');\n _this2.__checkbox.setAttribute('type', 'checkbox');\n function onChange() {\n _this.setValue(!_this.__prev);\n }\n dom.bind(_this2.__checkbox, 'change', onChange, false);\n _this2.domElement.appendChild(_this2.__checkbox);\n _this2.updateDisplay();\n return _this2;\n }\n createClass(BooleanController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n this.__prev = this.getValue();\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (this.getValue() === true) {\n this.__checkbox.setAttribute('checked', 'checked');\n this.__checkbox.checked = true;\n this.__prev = true;\n } else {\n this.__checkbox.checked = false;\n this.__prev = false;\n }\n return get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return BooleanController;\n}(Controller);\n\nvar OptionController = function (_Controller) {\n inherits(OptionController, _Controller);\n function OptionController(object, property, opts) {\n classCallCheck(this, OptionController);\n var _this2 = possibleConstructorReturn(this, (OptionController.__proto__ || Object.getPrototypeOf(OptionController)).call(this, object, property));\n var options = opts;\n var _this = _this2;\n _this2.__select = document.createElement('select');\n if (Common.isArray(options)) {\n var map = {};\n Common.each(options, function (element) {\n map[element] = element;\n });\n options = map;\n }\n Common.each(options, function (value, key) {\n var opt = document.createElement('option');\n opt.innerHTML = key;\n opt.setAttribute('value', value);\n _this.__select.appendChild(opt);\n });\n _this2.updateDisplay();\n dom.bind(_this2.__select, 'change', function () {\n var desiredValue = this.options[this.selectedIndex].value;\n _this.setValue(desiredValue);\n });\n _this2.domElement.appendChild(_this2.__select);\n return _this2;\n }\n createClass(OptionController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (dom.isActive(this.__select)) return this;\n this.__select.value = this.getValue();\n return get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return OptionController;\n}(Controller);\n\nvar StringController = function (_Controller) {\n inherits(StringController, _Controller);\n function StringController(object, property) {\n classCallCheck(this, StringController);\n var _this2 = possibleConstructorReturn(this, (StringController.__proto__ || Object.getPrototypeOf(StringController)).call(this, object, property));\n var _this = _this2;\n function onChange() {\n _this.setValue(_this.__input.value);\n }\n function onBlur() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'keyup', onChange);\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n this.blur();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(StringController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (!dom.isActive(this.__input)) {\n this.__input.value = this.getValue();\n }\n return get(StringController.prototype.__proto__ || Object.getPrototypeOf(StringController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return StringController;\n}(Controller);\n\nfunction numDecimals(x) {\n var _x = x.toString();\n if (_x.indexOf('.') > -1) {\n return _x.length - _x.indexOf('.') - 1;\n }\n return 0;\n}\nvar NumberController = function (_Controller) {\n inherits(NumberController, _Controller);\n function NumberController(object, property, params) {\n classCallCheck(this, NumberController);\n var _this = possibleConstructorReturn(this, (NumberController.__proto__ || Object.getPrototypeOf(NumberController)).call(this, object, property));\n var _params = params || {};\n _this.__min = _params.min;\n _this.__max = _params.max;\n _this.__step = _params.step;\n if (Common.isUndefined(_this.__step)) {\n if (_this.initialValue === 0) {\n _this.__impliedStep = 1;\n } else {\n _this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(_this.initialValue)) / Math.LN10)) / 10;\n }\n } else {\n _this.__impliedStep = _this.__step;\n }\n _this.__precision = numDecimals(_this.__impliedStep);\n return _this;\n }\n createClass(NumberController, [{\n key: 'setValue',\n value: function setValue(v) {\n var _v = v;\n if (this.__min !== undefined && _v < this.__min) {\n _v = this.__min;\n } else if (this.__max !== undefined && _v > this.__max) {\n _v = this.__max;\n }\n if (this.__step !== undefined && _v % this.__step !== 0) {\n _v = Math.round(_v / this.__step) * this.__step;\n }\n return get(NumberController.prototype.__proto__ || Object.getPrototypeOf(NumberController.prototype), 'setValue', this).call(this, _v);\n }\n }, {\n key: 'min',\n value: function min(minValue) {\n this.__min = minValue;\n return this;\n }\n }, {\n key: 'max',\n value: function max(maxValue) {\n this.__max = maxValue;\n return this;\n }\n }, {\n key: 'step',\n value: function step(stepValue) {\n this.__step = stepValue;\n this.__impliedStep = stepValue;\n this.__precision = numDecimals(stepValue);\n return this;\n }\n }]);\n return NumberController;\n}(Controller);\n\nfunction roundToDecimal(value, decimals) {\n var tenTo = Math.pow(10, decimals);\n return Math.round(value * tenTo) / tenTo;\n}\nvar NumberControllerBox = function (_NumberController) {\n inherits(NumberControllerBox, _NumberController);\n function NumberControllerBox(object, property, params) {\n classCallCheck(this, NumberControllerBox);\n var _this2 = possibleConstructorReturn(this, (NumberControllerBox.__proto__ || Object.getPrototypeOf(NumberControllerBox)).call(this, object, property, params));\n _this2.__truncationSuspended = false;\n var _this = _this2;\n var prevY = void 0;\n function onChange() {\n var attempted = parseFloat(_this.__input.value);\n if (!Common.isNaN(attempted)) {\n _this.setValue(attempted);\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onBlur() {\n onFinish();\n }\n function onMouseDrag(e) {\n var diff = prevY - e.clientY;\n _this.setValue(_this.getValue() + diff * _this.__impliedStep);\n prevY = e.clientY;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n onFinish();\n }\n function onMouseDown(e) {\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n prevY = e.clientY;\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'mousedown', onMouseDown);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n _this.__truncationSuspended = true;\n this.blur();\n _this.__truncationSuspended = false;\n onFinish();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(NumberControllerBox, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision);\n return get(NumberControllerBox.prototype.__proto__ || Object.getPrototypeOf(NumberControllerBox.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerBox;\n}(NumberController);\n\nfunction map(v, i1, i2, o1, o2) {\n return o1 + (o2 - o1) * ((v - i1) / (i2 - i1));\n}\nvar NumberControllerSlider = function (_NumberController) {\n inherits(NumberControllerSlider, _NumberController);\n function NumberControllerSlider(object, property, min, max, step) {\n classCallCheck(this, NumberControllerSlider);\n var _this2 = possibleConstructorReturn(this, (NumberControllerSlider.__proto__ || Object.getPrototypeOf(NumberControllerSlider)).call(this, object, property, { min: min, max: max, step: step }));\n var _this = _this2;\n _this2.__background = document.createElement('div');\n _this2.__foreground = document.createElement('div');\n dom.bind(_this2.__background, 'mousedown', onMouseDown);\n dom.bind(_this2.__background, 'touchstart', onTouchStart);\n dom.addClass(_this2.__background, 'slider');\n dom.addClass(_this2.__foreground, 'slider-fg');\n function onMouseDown(e) {\n document.activeElement.blur();\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n onMouseDrag(e);\n }\n function onMouseDrag(e) {\n e.preventDefault();\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n return false;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onTouchStart(e) {\n if (e.touches.length !== 1) {\n return;\n }\n dom.bind(window, 'touchmove', onTouchMove);\n dom.bind(window, 'touchend', onTouchEnd);\n onTouchMove(e);\n }\n function onTouchMove(e) {\n var clientX = e.touches[0].clientX;\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n }\n function onTouchEnd() {\n dom.unbind(window, 'touchmove', onTouchMove);\n dom.unbind(window, 'touchend', onTouchEnd);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.updateDisplay();\n _this2.__background.appendChild(_this2.__foreground);\n _this2.domElement.appendChild(_this2.__background);\n return _this2;\n }\n createClass(NumberControllerSlider, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var pct = (this.getValue() - this.__min) / (this.__max - this.__min);\n this.__foreground.style.width = pct * 100 + '%';\n return get(NumberControllerSlider.prototype.__proto__ || Object.getPrototypeOf(NumberControllerSlider.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerSlider;\n}(NumberController);\n\nvar FunctionController = function (_Controller) {\n inherits(FunctionController, _Controller);\n function FunctionController(object, property, text) {\n classCallCheck(this, FunctionController);\n var _this2 = possibleConstructorReturn(this, (FunctionController.__proto__ || Object.getPrototypeOf(FunctionController)).call(this, object, property));\n var _this = _this2;\n _this2.__button = document.createElement('div');\n _this2.__button.innerHTML = text === undefined ? 'Fire' : text;\n dom.bind(_this2.__button, 'click', function (e) {\n e.preventDefault();\n _this.fire();\n return false;\n });\n dom.addClass(_this2.__button, 'button');\n _this2.domElement.appendChild(_this2.__button);\n return _this2;\n }\n createClass(FunctionController, [{\n key: 'fire',\n value: function fire() {\n if (this.__onChange) {\n this.__onChange.call(this);\n }\n this.getValue().call(this.object);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n }\n }]);\n return FunctionController;\n}(Controller);\n\nvar ColorController = function (_Controller) {\n inherits(ColorController, _Controller);\n function ColorController(object, property) {\n classCallCheck(this, ColorController);\n var _this2 = possibleConstructorReturn(this, (ColorController.__proto__ || Object.getPrototypeOf(ColorController)).call(this, object, property));\n _this2.__color = new Color(_this2.getValue());\n _this2.__temp = new Color(0);\n var _this = _this2;\n _this2.domElement = document.createElement('div');\n dom.makeSelectable(_this2.domElement, false);\n _this2.__selector = document.createElement('div');\n _this2.__selector.className = 'selector';\n _this2.__saturation_field = document.createElement('div');\n _this2.__saturation_field.className = 'saturation-field';\n _this2.__field_knob = document.createElement('div');\n _this2.__field_knob.className = 'field-knob';\n _this2.__field_knob_border = '2px solid ';\n _this2.__hue_knob = document.createElement('div');\n _this2.__hue_knob.className = 'hue-knob';\n _this2.__hue_field = document.createElement('div');\n _this2.__hue_field.className = 'hue-field';\n _this2.__input = document.createElement('input');\n _this2.__input.type = 'text';\n _this2.__input_textShadow = '0 1px 1px ';\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n onBlur.call(this);\n }\n });\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__selector, 'mousedown', function () {\n dom.addClass(this, 'drag').bind(window, 'mouseup', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n dom.bind(_this2.__selector, 'touchstart', function () {\n dom.addClass(this, 'drag').bind(window, 'touchend', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n var valueField = document.createElement('div');\n Common.extend(_this2.__selector.style, {\n width: '122px',\n height: '102px',\n padding: '3px',\n backgroundColor: '#222',\n boxShadow: '0px 1px 3px rgba(0,0,0,0.3)'\n });\n Common.extend(_this2.__field_knob.style, {\n position: 'absolute',\n width: '12px',\n height: '12px',\n border: _this2.__field_knob_border + (_this2.__color.v < 0.5 ? '#fff' : '#000'),\n boxShadow: '0px 1px 3px rgba(0,0,0,0.5)',\n borderRadius: '12px',\n zIndex: 1\n });\n Common.extend(_this2.__hue_knob.style, {\n position: 'absolute',\n width: '15px',\n height: '2px',\n borderRight: '4px solid #fff',\n zIndex: 1\n });\n Common.extend(_this2.__saturation_field.style, {\n width: '100px',\n height: '100px',\n border: '1px solid #555',\n marginRight: '3px',\n display: 'inline-block',\n cursor: 'pointer'\n });\n Common.extend(valueField.style, {\n width: '100%',\n height: '100%',\n background: 'none'\n });\n linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000');\n Common.extend(_this2.__hue_field.style, {\n width: '15px',\n height: '100px',\n border: '1px solid #555',\n cursor: 'ns-resize',\n position: 'absolute',\n top: '3px',\n right: '3px'\n });\n hueGradient(_this2.__hue_field);\n Common.extend(_this2.__input.style, {\n outline: 'none',\n textAlign: 'center',\n color: '#fff',\n border: 0,\n fontWeight: 'bold',\n textShadow: _this2.__input_textShadow + 'rgba(0,0,0,0.7)'\n });\n dom.bind(_this2.__saturation_field, 'mousedown', fieldDown);\n dom.bind(_this2.__saturation_field, 'touchstart', fieldDown);\n dom.bind(_this2.__field_knob, 'mousedown', fieldDown);\n dom.bind(_this2.__field_knob, 'touchstart', fieldDown);\n dom.bind(_this2.__hue_field, 'mousedown', fieldDownH);\n dom.bind(_this2.__hue_field, 'touchstart', fieldDownH);\n function fieldDown(e) {\n setSV(e);\n dom.bind(window, 'mousemove', setSV);\n dom.bind(window, 'touchmove', setSV);\n dom.bind(window, 'mouseup', fieldUpSV);\n dom.bind(window, 'touchend', fieldUpSV);\n }\n function fieldDownH(e) {\n setH(e);\n dom.bind(window, 'mousemove', setH);\n dom.bind(window, 'touchmove', setH);\n dom.bind(window, 'mouseup', fieldUpH);\n dom.bind(window, 'touchend', fieldUpH);\n }\n function fieldUpSV() {\n dom.unbind(window, 'mousemove', setSV);\n dom.unbind(window, 'touchmove', setSV);\n dom.unbind(window, 'mouseup', fieldUpSV);\n dom.unbind(window, 'touchend', fieldUpSV);\n onFinish();\n }\n function fieldUpH() {\n dom.unbind(window, 'mousemove', setH);\n dom.unbind(window, 'touchmove', setH);\n dom.unbind(window, 'mouseup', fieldUpH);\n dom.unbind(window, 'touchend', fieldUpH);\n onFinish();\n }\n function onBlur() {\n var i = interpret(this.value);\n if (i !== false) {\n _this.__color.__state = i;\n _this.setValue(_this.__color.toOriginal());\n } else {\n this.value = _this.__color.toString();\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.__color.toOriginal());\n }\n }\n _this2.__saturation_field.appendChild(valueField);\n _this2.__selector.appendChild(_this2.__field_knob);\n _this2.__selector.appendChild(_this2.__saturation_field);\n _this2.__selector.appendChild(_this2.__hue_field);\n _this2.__hue_field.appendChild(_this2.__hue_knob);\n _this2.domElement.appendChild(_this2.__input);\n _this2.domElement.appendChild(_this2.__selector);\n _this2.updateDisplay();\n function setSV(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__saturation_field.getBoundingClientRect();\n var _ref = e.touches && e.touches[0] || e,\n clientX = _ref.clientX,\n clientY = _ref.clientY;\n var s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left);\n var v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (v > 1) {\n v = 1;\n } else if (v < 0) {\n v = 0;\n }\n if (s > 1) {\n s = 1;\n } else if (s < 0) {\n s = 0;\n }\n _this.__color.v = v;\n _this.__color.s = s;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n function setH(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__hue_field.getBoundingClientRect();\n var _ref2 = e.touches && e.touches[0] || e,\n clientY = _ref2.clientY;\n var h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (h > 1) {\n h = 1;\n } else if (h < 0) {\n h = 0;\n }\n _this.__color.h = h * 360;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n return _this2;\n }\n createClass(ColorController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var i = interpret(this.getValue());\n if (i !== false) {\n var mismatch = false;\n Common.each(Color.COMPONENTS, function (component) {\n if (!Common.isUndefined(i[component]) && !Common.isUndefined(this.__color.__state[component]) && i[component] !== this.__color.__state[component]) {\n mismatch = true;\n return {};\n }\n }, this);\n if (mismatch) {\n Common.extend(this.__color.__state, i);\n }\n }\n Common.extend(this.__temp.__state, this.__color.__state);\n this.__temp.a = 1;\n var flip = this.__color.v < 0.5 || this.__color.s > 0.5 ? 255 : 0;\n var _flip = 255 - flip;\n Common.extend(this.__field_knob.style, {\n marginLeft: 100 * this.__color.s - 7 + 'px',\n marginTop: 100 * (1 - this.__color.v) - 7 + 'px',\n backgroundColor: this.__temp.toHexString(),\n border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')'\n });\n this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px';\n this.__temp.s = 1;\n this.__temp.v = 1;\n linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString());\n this.__input.value = this.__color.toString();\n Common.extend(this.__input.style, {\n backgroundColor: this.__color.toHexString(),\n color: 'rgb(' + flip + ',' + flip + ',' + flip + ')',\n textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)'\n });\n }\n }]);\n return ColorController;\n}(Controller);\nvar vendors = ['-moz-', '-o-', '-webkit-', '-ms-', ''];\nfunction linearGradient(elem, x, a, b) {\n elem.style.background = '';\n Common.each(vendors, function (vendor) {\n elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); ';\n });\n}\nfunction hueGradient(elem) {\n elem.style.background = '';\n elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);';\n elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n}\n\nvar css = {\n load: function load(url, indoc) {\n var doc = indoc || document;\n var link = doc.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.href = url;\n doc.getElementsByTagName('head')[0].appendChild(link);\n },\n inject: function inject(cssContent, indoc) {\n var doc = indoc || document;\n var injected = document.createElement('style');\n injected.type = 'text/css';\n injected.innerHTML = cssContent;\n var head = doc.getElementsByTagName('head')[0];\n try {\n head.appendChild(injected);\n } catch (e) {\n }\n }\n};\n\nvar saveDialogContents = \"
\\n\\n Here's the new load parameter for your GUI's constructor:\\n\\n \\n\\n
\\n\\n Automatically save\\n values to localStorage on exit.\\n\\n
The values saved to localStorage will\\n override those passed to dat.GUI's constructor. This makes it\\n easier to work incrementally, but localStorage is fragile,\\n and your friends may not see the same values you do.\\n\\n
\\n\\n
\\n\\n
\";\n\nvar ControllerFactory = function ControllerFactory(object, property) {\n var initialValue = object[property];\n if (Common.isArray(arguments[2]) || Common.isObject(arguments[2])) {\n return new OptionController(object, property, arguments[2]);\n }\n if (Common.isNumber(initialValue)) {\n if (Common.isNumber(arguments[2]) && Common.isNumber(arguments[3])) {\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerSlider(object, property, arguments[2], arguments[3], arguments[4]);\n }\n return new NumberControllerSlider(object, property, arguments[2], arguments[3]);\n }\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3], step: arguments[4] });\n }\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] });\n }\n if (Common.isString(initialValue)) {\n return new StringController(object, property);\n }\n if (Common.isFunction(initialValue)) {\n return new FunctionController(object, property, '');\n }\n if (Common.isBoolean(initialValue)) {\n return new BooleanController(object, property);\n }\n return null;\n};\n\nfunction requestAnimationFrame(callback) {\n setTimeout(callback, 1000 / 60);\n}\nvar requestAnimationFrame$1 = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || requestAnimationFrame;\n\nvar CenteredDiv = function () {\n function CenteredDiv() {\n classCallCheck(this, CenteredDiv);\n this.backgroundElement = document.createElement('div');\n Common.extend(this.backgroundElement.style, {\n backgroundColor: 'rgba(0,0,0,0.8)',\n top: 0,\n left: 0,\n display: 'none',\n zIndex: '1000',\n opacity: 0,\n WebkitTransition: 'opacity 0.2s linear',\n transition: 'opacity 0.2s linear'\n });\n dom.makeFullscreen(this.backgroundElement);\n this.backgroundElement.style.position = 'fixed';\n this.domElement = document.createElement('div');\n Common.extend(this.domElement.style, {\n position: 'fixed',\n display: 'none',\n zIndex: '1001',\n opacity: 0,\n WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear',\n transition: 'transform 0.2s ease-out, opacity 0.2s linear'\n });\n document.body.appendChild(this.backgroundElement);\n document.body.appendChild(this.domElement);\n var _this = this;\n dom.bind(this.backgroundElement, 'click', function () {\n _this.hide();\n });\n }\n createClass(CenteredDiv, [{\n key: 'show',\n value: function show() {\n var _this = this;\n this.backgroundElement.style.display = 'block';\n this.domElement.style.display = 'block';\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n this.layout();\n Common.defer(function () {\n _this.backgroundElement.style.opacity = 1;\n _this.domElement.style.opacity = 1;\n _this.domElement.style.webkitTransform = 'scale(1)';\n });\n }\n }, {\n key: 'hide',\n value: function hide() {\n var _this = this;\n var hide = function hide() {\n _this.domElement.style.display = 'none';\n _this.backgroundElement.style.display = 'none';\n dom.unbind(_this.domElement, 'webkitTransitionEnd', hide);\n dom.unbind(_this.domElement, 'transitionend', hide);\n dom.unbind(_this.domElement, 'oTransitionEnd', hide);\n };\n dom.bind(this.domElement, 'webkitTransitionEnd', hide);\n dom.bind(this.domElement, 'transitionend', hide);\n dom.bind(this.domElement, 'oTransitionEnd', hide);\n this.backgroundElement.style.opacity = 0;\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n }\n }, {\n key: 'layout',\n value: function layout() {\n this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px';\n this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px';\n }\n }]);\n return CenteredDiv;\n}();\n\nvar styleSheet = ___$insertStyle(\".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .cr.function .property-name{width:100%}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\\n\");\n\ncss.inject(styleSheet);\nvar CSS_NAMESPACE = 'dg';\nvar HIDE_KEY_CODE = 72;\nvar CLOSE_BUTTON_HEIGHT = 20;\nvar DEFAULT_DEFAULT_PRESET_NAME = 'Default';\nvar SUPPORTS_LOCAL_STORAGE = function () {\n try {\n return !!window.localStorage;\n } catch (e) {\n return false;\n }\n}();\nvar SAVE_DIALOGUE = void 0;\nvar autoPlaceVirgin = true;\nvar autoPlaceContainer = void 0;\nvar hide = false;\nvar hideableGuis = [];\nvar GUI = function GUI(pars) {\n var _this = this;\n var params = pars || {};\n this.domElement = document.createElement('div');\n this.__ul = document.createElement('ul');\n this.domElement.appendChild(this.__ul);\n dom.addClass(this.domElement, CSS_NAMESPACE);\n this.__folders = {};\n this.__controllers = [];\n this.__rememberedObjects = [];\n this.__rememberedObjectIndecesToControllers = [];\n this.__listening = [];\n params = Common.defaults(params, {\n closeOnTop: false,\n autoPlace: true,\n width: GUI.DEFAULT_WIDTH\n });\n params = Common.defaults(params, {\n resizable: params.autoPlace,\n hideable: params.autoPlace\n });\n if (!Common.isUndefined(params.load)) {\n if (params.preset) {\n params.load.preset = params.preset;\n }\n } else {\n params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME };\n }\n if (Common.isUndefined(params.parent) && params.hideable) {\n hideableGuis.push(this);\n }\n params.resizable = Common.isUndefined(params.parent) && params.resizable;\n if (params.autoPlace && Common.isUndefined(params.scrollable)) {\n params.scrollable = true;\n }\n var useLocalStorage = SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true';\n var saveToLocalStorage = void 0;\n var titleRow = void 0;\n Object.defineProperties(this,\n {\n parent: {\n get: function get$$1() {\n return params.parent;\n }\n },\n scrollable: {\n get: function get$$1() {\n return params.scrollable;\n }\n },\n autoPlace: {\n get: function get$$1() {\n return params.autoPlace;\n }\n },\n closeOnTop: {\n get: function get$$1() {\n return params.closeOnTop;\n }\n },\n preset: {\n get: function get$$1() {\n if (_this.parent) {\n return _this.getRoot().preset;\n }\n return params.load.preset;\n },\n set: function set$$1(v) {\n if (_this.parent) {\n _this.getRoot().preset = v;\n } else {\n params.load.preset = v;\n }\n setPresetSelectIndex(this);\n _this.revert();\n }\n },\n width: {\n get: function get$$1() {\n return params.width;\n },\n set: function set$$1(v) {\n params.width = v;\n setWidth(_this, v);\n }\n },\n name: {\n get: function get$$1() {\n return params.name;\n },\n set: function set$$1(v) {\n params.name = v;\n if (titleRow) {\n titleRow.innerHTML = params.name;\n }\n }\n },\n closed: {\n get: function get$$1() {\n return params.closed;\n },\n set: function set$$1(v) {\n params.closed = v;\n if (params.closed) {\n dom.addClass(_this.__ul, GUI.CLASS_CLOSED);\n } else {\n dom.removeClass(_this.__ul, GUI.CLASS_CLOSED);\n }\n this.onResize();\n if (_this.__closeButton) {\n _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED;\n }\n }\n },\n load: {\n get: function get$$1() {\n return params.load;\n }\n },\n useLocalStorage: {\n get: function get$$1() {\n return useLocalStorage;\n },\n set: function set$$1(bool) {\n if (SUPPORTS_LOCAL_STORAGE) {\n useLocalStorage = bool;\n if (bool) {\n dom.bind(window, 'unload', saveToLocalStorage);\n } else {\n dom.unbind(window, 'unload', saveToLocalStorage);\n }\n localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool);\n }\n }\n }\n });\n if (Common.isUndefined(params.parent)) {\n this.closed = params.closed || false;\n dom.addClass(this.domElement, GUI.CLASS_MAIN);\n dom.makeSelectable(this.domElement, false);\n if (SUPPORTS_LOCAL_STORAGE) {\n if (useLocalStorage) {\n _this.useLocalStorage = true;\n var savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui'));\n if (savedGui) {\n params.load = JSON.parse(savedGui);\n }\n }\n }\n this.__closeButton = document.createElement('div');\n this.__closeButton.innerHTML = GUI.TEXT_CLOSED;\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON);\n if (params.closeOnTop) {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP);\n this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]);\n } else {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM);\n this.domElement.appendChild(this.__closeButton);\n }\n dom.bind(this.__closeButton, 'click', function () {\n _this.closed = !_this.closed;\n });\n } else {\n if (params.closed === undefined) {\n params.closed = true;\n }\n var titleRowName = document.createTextNode(params.name);\n dom.addClass(titleRowName, 'controller-name');\n titleRow = addRow(_this, titleRowName);\n var onClickTitle = function onClickTitle(e) {\n e.preventDefault();\n _this.closed = !_this.closed;\n return false;\n };\n dom.addClass(this.__ul, GUI.CLASS_CLOSED);\n dom.addClass(titleRow, 'title');\n dom.bind(titleRow, 'click', onClickTitle);\n if (!params.closed) {\n this.closed = false;\n }\n }\n if (params.autoPlace) {\n if (Common.isUndefined(params.parent)) {\n if (autoPlaceVirgin) {\n autoPlaceContainer = document.createElement('div');\n dom.addClass(autoPlaceContainer, CSS_NAMESPACE);\n dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER);\n document.body.appendChild(autoPlaceContainer);\n autoPlaceVirgin = false;\n }\n autoPlaceContainer.appendChild(this.domElement);\n dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE);\n }\n if (!this.parent) {\n setWidth(_this, params.width);\n }\n }\n this.__resizeHandler = function () {\n _this.onResizeDebounced();\n };\n dom.bind(window, 'resize', this.__resizeHandler);\n dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler);\n dom.bind(this.__ul, 'transitionend', this.__resizeHandler);\n dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler);\n this.onResize();\n if (params.resizable) {\n addResizeHandle(this);\n }\n saveToLocalStorage = function saveToLocalStorage() {\n if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') {\n localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject()));\n }\n };\n this.saveToLocalStorageIfPossible = saveToLocalStorage;\n function resetWidth() {\n var root = _this.getRoot();\n root.width += 1;\n Common.defer(function () {\n root.width -= 1;\n });\n }\n if (!params.parent) {\n resetWidth();\n }\n};\nGUI.toggleHide = function () {\n hide = !hide;\n Common.each(hideableGuis, function (gui) {\n gui.domElement.style.display = hide ? 'none' : '';\n });\n};\nGUI.CLASS_AUTO_PLACE = 'a';\nGUI.CLASS_AUTO_PLACE_CONTAINER = 'ac';\nGUI.CLASS_MAIN = 'main';\nGUI.CLASS_CONTROLLER_ROW = 'cr';\nGUI.CLASS_TOO_TALL = 'taller-than-window';\nGUI.CLASS_CLOSED = 'closed';\nGUI.CLASS_CLOSE_BUTTON = 'close-button';\nGUI.CLASS_CLOSE_TOP = 'close-top';\nGUI.CLASS_CLOSE_BOTTOM = 'close-bottom';\nGUI.CLASS_DRAG = 'drag';\nGUI.DEFAULT_WIDTH = 245;\nGUI.TEXT_CLOSED = 'Close Controls';\nGUI.TEXT_OPEN = 'Open Controls';\nGUI._keydownHandler = function (e) {\n if (document.activeElement.type !== 'text' && (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) {\n GUI.toggleHide();\n }\n};\ndom.bind(window, 'keydown', GUI._keydownHandler, false);\nCommon.extend(GUI.prototype,\n{\n add: function add(object, property) {\n return _add(this, object, property, {\n factoryArgs: Array.prototype.slice.call(arguments, 2)\n });\n },\n addColor: function addColor(object, property) {\n return _add(this, object, property, {\n color: true\n });\n },\n remove: function remove(controller) {\n this.__ul.removeChild(controller.__li);\n this.__controllers.splice(this.__controllers.indexOf(controller), 1);\n var _this = this;\n Common.defer(function () {\n _this.onResize();\n });\n },\n destroy: function destroy() {\n if (this.parent) {\n throw new Error('Only the root GUI should be removed with .destroy(). ' + 'For subfolders, use gui.removeFolder(folder) instead.');\n }\n if (this.autoPlace) {\n autoPlaceContainer.removeChild(this.domElement);\n }\n var _this = this;\n Common.each(this.__folders, function (subfolder) {\n _this.removeFolder(subfolder);\n });\n dom.unbind(window, 'keydown', GUI._keydownHandler, false);\n removeListeners(this);\n },\n addFolder: function addFolder(name) {\n if (this.__folders[name] !== undefined) {\n throw new Error('You already have a folder in this GUI by the' + ' name \"' + name + '\"');\n }\n var newGuiParams = { name: name, parent: this };\n newGuiParams.autoPlace = this.autoPlace;\n if (this.load &&\n this.load.folders &&\n this.load.folders[name]) {\n newGuiParams.closed = this.load.folders[name].closed;\n newGuiParams.load = this.load.folders[name];\n }\n var gui = new GUI(newGuiParams);\n this.__folders[name] = gui;\n var li = addRow(this, gui.domElement);\n dom.addClass(li, 'folder');\n return gui;\n },\n removeFolder: function removeFolder(folder) {\n this.__ul.removeChild(folder.domElement.parentElement);\n delete this.__folders[folder.name];\n if (this.load &&\n this.load.folders &&\n this.load.folders[folder.name]) {\n delete this.load.folders[folder.name];\n }\n removeListeners(folder);\n var _this = this;\n Common.each(folder.__folders, function (subfolder) {\n folder.removeFolder(subfolder);\n });\n Common.defer(function () {\n _this.onResize();\n });\n },\n open: function open() {\n this.closed = false;\n },\n close: function close() {\n this.closed = true;\n },\n hide: function hide() {\n this.domElement.style.display = 'none';\n },\n show: function show() {\n this.domElement.style.display = '';\n },\n onResize: function onResize() {\n var root = this.getRoot();\n if (root.scrollable) {\n var top = dom.getOffset(root.__ul).top;\n var h = 0;\n Common.each(root.__ul.childNodes, function (node) {\n if (!(root.autoPlace && node === root.__save_row)) {\n h += dom.getHeight(node);\n }\n });\n if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) {\n dom.addClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px';\n } else {\n dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = 'auto';\n }\n }\n if (root.__resize_handle) {\n Common.defer(function () {\n root.__resize_handle.style.height = root.__ul.offsetHeight + 'px';\n });\n }\n if (root.__closeButton) {\n root.__closeButton.style.width = root.width + 'px';\n }\n },\n onResizeDebounced: Common.debounce(function () {\n this.onResize();\n }, 50),\n remember: function remember() {\n if (Common.isUndefined(SAVE_DIALOGUE)) {\n SAVE_DIALOGUE = new CenteredDiv();\n SAVE_DIALOGUE.domElement.innerHTML = saveDialogContents;\n }\n if (this.parent) {\n throw new Error('You can only call remember on a top level GUI.');\n }\n var _this = this;\n Common.each(Array.prototype.slice.call(arguments), function (object) {\n if (_this.__rememberedObjects.length === 0) {\n addSaveMenu(_this);\n }\n if (_this.__rememberedObjects.indexOf(object) === -1) {\n _this.__rememberedObjects.push(object);\n }\n });\n if (this.autoPlace) {\n setWidth(this, this.width);\n }\n },\n getRoot: function getRoot() {\n var gui = this;\n while (gui.parent) {\n gui = gui.parent;\n }\n return gui;\n },\n getSaveObject: function getSaveObject() {\n var toReturn = this.load;\n toReturn.closed = this.closed;\n if (this.__rememberedObjects.length > 0) {\n toReturn.preset = this.preset;\n if (!toReturn.remembered) {\n toReturn.remembered = {};\n }\n toReturn.remembered[this.preset] = getCurrentPreset(this);\n }\n toReturn.folders = {};\n Common.each(this.__folders, function (element, key) {\n toReturn.folders[key] = element.getSaveObject();\n });\n return toReturn;\n },\n save: function save() {\n if (!this.load.remembered) {\n this.load.remembered = {};\n }\n this.load.remembered[this.preset] = getCurrentPreset(this);\n markPresetModified(this, false);\n this.saveToLocalStorageIfPossible();\n },\n saveAs: function saveAs(presetName) {\n if (!this.load.remembered) {\n this.load.remembered = {};\n this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true);\n }\n this.load.remembered[presetName] = getCurrentPreset(this);\n this.preset = presetName;\n addPresetOption(this, presetName, true);\n this.saveToLocalStorageIfPossible();\n },\n revert: function revert(gui) {\n Common.each(this.__controllers, function (controller) {\n if (!this.getRoot().load.remembered) {\n controller.setValue(controller.initialValue);\n } else {\n recallSavedValue(gui || this.getRoot(), controller);\n }\n if (controller.__onFinishChange) {\n controller.__onFinishChange.call(controller, controller.getValue());\n }\n }, this);\n Common.each(this.__folders, function (folder) {\n folder.revert(folder);\n });\n if (!gui) {\n markPresetModified(this.getRoot(), false);\n }\n },\n listen: function listen(controller) {\n var init = this.__listening.length === 0;\n this.__listening.push(controller);\n if (init) {\n updateDisplays(this.__listening);\n }\n },\n updateDisplay: function updateDisplay() {\n Common.each(this.__controllers, function (controller) {\n controller.updateDisplay();\n });\n Common.each(this.__folders, function (folder) {\n folder.updateDisplay();\n });\n }\n});\nfunction addRow(gui, newDom, liBefore) {\n var li = document.createElement('li');\n if (newDom) {\n li.appendChild(newDom);\n }\n if (liBefore) {\n gui.__ul.insertBefore(li, liBefore);\n } else {\n gui.__ul.appendChild(li);\n }\n gui.onResize();\n return li;\n}\nfunction removeListeners(gui) {\n dom.unbind(window, 'resize', gui.__resizeHandler);\n if (gui.saveToLocalStorageIfPossible) {\n dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible);\n }\n}\nfunction markPresetModified(gui, modified) {\n var opt = gui.__preset_select[gui.__preset_select.selectedIndex];\n if (modified) {\n opt.innerHTML = opt.value + '*';\n } else {\n opt.innerHTML = opt.value;\n }\n}\nfunction augmentController(gui, li, controller) {\n controller.__li = li;\n controller.__gui = gui;\n Common.extend(controller, {\n options: function options(_options) {\n if (arguments.length > 1) {\n var nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: nextSibling,\n factoryArgs: [Common.toArray(arguments)]\n });\n }\n if (Common.isArray(_options) || Common.isObject(_options)) {\n var _nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: _nextSibling,\n factoryArgs: [_options]\n });\n }\n },\n name: function name(_name) {\n controller.__li.firstElementChild.firstElementChild.innerHTML = _name;\n return controller;\n },\n listen: function listen() {\n controller.__gui.listen(controller);\n return controller;\n },\n remove: function remove() {\n controller.__gui.remove(controller);\n return controller;\n }\n });\n if (controller instanceof NumberControllerSlider) {\n var box = new NumberControllerBox(controller.object, controller.property, { min: controller.__min, max: controller.__max, step: controller.__step });\n Common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function (method) {\n var pc = controller[method];\n var pb = box[method];\n controller[method] = box[method] = function () {\n var args = Array.prototype.slice.call(arguments);\n pb.apply(box, args);\n return pc.apply(controller, args);\n };\n });\n dom.addClass(li, 'has-slider');\n controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild);\n } else if (controller instanceof NumberControllerBox) {\n var r = function r(returned) {\n if (Common.isNumber(controller.__min) && Common.isNumber(controller.__max)) {\n var oldName = controller.__li.firstElementChild.firstElementChild.innerHTML;\n var wasListening = controller.__gui.__listening.indexOf(controller) > -1;\n controller.remove();\n var newController = _add(gui, controller.object, controller.property, {\n before: controller.__li.nextElementSibling,\n factoryArgs: [controller.__min, controller.__max, controller.__step]\n });\n newController.name(oldName);\n if (wasListening) newController.listen();\n return newController;\n }\n return returned;\n };\n controller.min = Common.compose(r, controller.min);\n controller.max = Common.compose(r, controller.max);\n } else if (controller instanceof BooleanController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__checkbox, 'click');\n });\n dom.bind(controller.__checkbox, 'click', function (e) {\n e.stopPropagation();\n });\n } else if (controller instanceof FunctionController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__button, 'click');\n });\n dom.bind(li, 'mouseover', function () {\n dom.addClass(controller.__button, 'hover');\n });\n dom.bind(li, 'mouseout', function () {\n dom.removeClass(controller.__button, 'hover');\n });\n } else if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n controller.updateDisplay = Common.compose(function (val) {\n li.style.borderLeftColor = controller.__color.toString();\n return val;\n }, controller.updateDisplay);\n controller.updateDisplay();\n }\n controller.setValue = Common.compose(function (val) {\n if (gui.getRoot().__preset_select && controller.isModified()) {\n markPresetModified(gui.getRoot(), true);\n }\n return val;\n }, controller.setValue);\n}\nfunction recallSavedValue(gui, controller) {\n var root = gui.getRoot();\n var matchedIndex = root.__rememberedObjects.indexOf(controller.object);\n if (matchedIndex !== -1) {\n var controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex];\n if (controllerMap === undefined) {\n controllerMap = {};\n root.__rememberedObjectIndecesToControllers[matchedIndex] = controllerMap;\n }\n controllerMap[controller.property] = controller;\n if (root.load && root.load.remembered) {\n var presetMap = root.load.remembered;\n var preset = void 0;\n if (presetMap[gui.preset]) {\n preset = presetMap[gui.preset];\n } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) {\n preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME];\n } else {\n return;\n }\n if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) {\n var value = preset[matchedIndex][controller.property];\n controller.initialValue = value;\n controller.setValue(value);\n }\n }\n }\n}\nfunction _add(gui, object, property, params) {\n if (object[property] === undefined) {\n throw new Error('Object \"' + object + '\" has no property \"' + property + '\"');\n }\n var controller = void 0;\n if (params.color) {\n controller = new ColorController(object, property);\n } else {\n var factoryArgs = [object, property].concat(params.factoryArgs);\n controller = ControllerFactory.apply(gui, factoryArgs);\n }\n if (params.before instanceof Controller) {\n params.before = params.before.__li;\n }\n recallSavedValue(gui, controller);\n dom.addClass(controller.domElement, 'c');\n var name = document.createElement('span');\n dom.addClass(name, 'property-name');\n name.innerHTML = controller.property;\n var container = document.createElement('div');\n container.appendChild(name);\n container.appendChild(controller.domElement);\n var li = addRow(gui, container, params.before);\n dom.addClass(li, GUI.CLASS_CONTROLLER_ROW);\n if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n } else {\n dom.addClass(li, _typeof(controller.getValue()));\n }\n augmentController(gui, li, controller);\n gui.__controllers.push(controller);\n return controller;\n}\nfunction getLocalStorageHash(gui, key) {\n return document.location.href + '.' + key;\n}\nfunction addPresetOption(gui, name, setSelected) {\n var opt = document.createElement('option');\n opt.innerHTML = name;\n opt.value = name;\n gui.__preset_select.appendChild(opt);\n if (setSelected) {\n gui.__preset_select.selectedIndex = gui.__preset_select.length - 1;\n }\n}\nfunction showHideExplain(gui, explain) {\n explain.style.display = gui.useLocalStorage ? 'block' : 'none';\n}\nfunction addSaveMenu(gui) {\n var div = gui.__save_row = document.createElement('li');\n dom.addClass(gui.domElement, 'has-save');\n gui.__ul.insertBefore(div, gui.__ul.firstChild);\n dom.addClass(div, 'save-row');\n var gears = document.createElement('span');\n gears.innerHTML = ' ';\n dom.addClass(gears, 'button gears');\n var button = document.createElement('span');\n button.innerHTML = 'Save';\n dom.addClass(button, 'button');\n dom.addClass(button, 'save');\n var button2 = document.createElement('span');\n button2.innerHTML = 'New';\n dom.addClass(button2, 'button');\n dom.addClass(button2, 'save-as');\n var button3 = document.createElement('span');\n button3.innerHTML = 'Revert';\n dom.addClass(button3, 'button');\n dom.addClass(button3, 'revert');\n var select = gui.__preset_select = document.createElement('select');\n if (gui.load && gui.load.remembered) {\n Common.each(gui.load.remembered, function (value, key) {\n addPresetOption(gui, key, key === gui.preset);\n });\n } else {\n addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false);\n }\n dom.bind(select, 'change', function () {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n gui.__preset_select[index].innerHTML = gui.__preset_select[index].value;\n }\n gui.preset = this.value;\n });\n div.appendChild(select);\n div.appendChild(gears);\n div.appendChild(button);\n div.appendChild(button2);\n div.appendChild(button3);\n if (SUPPORTS_LOCAL_STORAGE) {\n var explain = document.getElementById('dg-local-explain');\n var localStorageCheckBox = document.getElementById('dg-local-storage');\n var saveLocally = document.getElementById('dg-save-locally');\n saveLocally.style.display = 'block';\n if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') {\n localStorageCheckBox.setAttribute('checked', 'checked');\n }\n showHideExplain(gui, explain);\n dom.bind(localStorageCheckBox, 'change', function () {\n gui.useLocalStorage = !gui.useLocalStorage;\n showHideExplain(gui, explain);\n });\n }\n var newConstructorTextArea = document.getElementById('dg-new-constructor');\n dom.bind(newConstructorTextArea, 'keydown', function (e) {\n if (e.metaKey && (e.which === 67 || e.keyCode === 67)) {\n SAVE_DIALOGUE.hide();\n }\n });\n dom.bind(gears, 'click', function () {\n newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2);\n SAVE_DIALOGUE.show();\n newConstructorTextArea.focus();\n newConstructorTextArea.select();\n });\n dom.bind(button, 'click', function () {\n gui.save();\n });\n dom.bind(button2, 'click', function () {\n var presetName = prompt('Enter a new preset name.');\n if (presetName) {\n gui.saveAs(presetName);\n }\n });\n dom.bind(button3, 'click', function () {\n gui.revert();\n });\n}\nfunction addResizeHandle(gui) {\n var pmouseX = void 0;\n gui.__resize_handle = document.createElement('div');\n Common.extend(gui.__resize_handle.style, {\n width: '6px',\n marginLeft: '-3px',\n height: '200px',\n cursor: 'ew-resize',\n position: 'absolute'\n });\n function drag(e) {\n e.preventDefault();\n gui.width += pmouseX - e.clientX;\n gui.onResize();\n pmouseX = e.clientX;\n return false;\n }\n function dragStop() {\n dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.unbind(window, 'mousemove', drag);\n dom.unbind(window, 'mouseup', dragStop);\n }\n function dragStart(e) {\n e.preventDefault();\n pmouseX = e.clientX;\n dom.addClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.bind(window, 'mousemove', drag);\n dom.bind(window, 'mouseup', dragStop);\n return false;\n }\n dom.bind(gui.__resize_handle, 'mousedown', dragStart);\n dom.bind(gui.__closeButton, 'mousedown', dragStart);\n gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild);\n}\nfunction setWidth(gui, w) {\n gui.domElement.style.width = w + 'px';\n if (gui.__save_row && gui.autoPlace) {\n gui.__save_row.style.width = w + 'px';\n }\n if (gui.__closeButton) {\n gui.__closeButton.style.width = w + 'px';\n }\n}\nfunction getCurrentPreset(gui, useInitialValues) {\n var toReturn = {};\n Common.each(gui.__rememberedObjects, function (val, index) {\n var savedValues = {};\n var controllerMap = gui.__rememberedObjectIndecesToControllers[index];\n Common.each(controllerMap, function (controller, property) {\n savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue();\n });\n toReturn[index] = savedValues;\n });\n return toReturn;\n}\nfunction setPresetSelectIndex(gui) {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n if (gui.__preset_select[index].value === gui.preset) {\n gui.__preset_select.selectedIndex = index;\n }\n }\n}\nfunction updateDisplays(controllerArray) {\n if (controllerArray.length !== 0) {\n requestAnimationFrame$1.call(window, function () {\n updateDisplays(controllerArray);\n });\n }\n Common.each(controllerArray, function (c) {\n c.updateDisplay();\n });\n}\n\nvar color = {\n Color: Color,\n math: ColorMath,\n interpret: interpret\n};\nvar controllers = {\n Controller: Controller,\n BooleanController: BooleanController,\n OptionController: OptionController,\n StringController: StringController,\n NumberController: NumberController,\n NumberControllerBox: NumberControllerBox,\n NumberControllerSlider: NumberControllerSlider,\n FunctionController: FunctionController,\n ColorController: ColorController\n};\nvar dom$1 = { dom: dom };\nvar gui = { GUI: GUI };\nvar GUI$1 = GUI;\nvar index = {\n color: color,\n controllers: controllers,\n dom: dom$1,\n gui: gui,\n GUI: GUI$1\n};\n\nexport { color, controllers, dom$1 as dom, gui, GUI$1 as GUI };\nexport default index;\n//# sourceMappingURL=dat.gui.module.js.map\n","exports.positions=[[5.929688,4.125,0],[5.387188,4.125,2.7475],[5.2971,4.494141,2.70917],[5.832031,4.494141,0],[5.401602,4.617188,2.753633],[5.945313,4.617188,0],[5.614209,4.494141,2.844092],[6.175781,4.494141,0],[5.848437,4.125,2.94375],[6.429688,4.125,0],[3.899688,4.125,4.97],[3.830352,4.494141,4.900664],[3.910782,4.617188,4.981094],[4.074414,4.494141,5.144727],[4.254687,4.125,5.325],[1.677188,4.125,6.4575],[1.638858,4.494141,6.367412],[1.68332,4.617188,6.471914],[1.77378,4.494141,6.684522],[1.873438,4.125,6.91875],[-1.070312,4.125,7],[-1.070312,4.494141,6.902344],[-1.070312,4.617188,7.015625],[-1.070312,4.494141,7.246094],[-1.070312,4.125,7.5],[-1.070312,4.125,7],[-4.007656,4.125,6.4575],[-3.859572,4.494141,6.367412],[-1.070312,4.494141,6.902344],[-3.847676,4.617188,6.471914],[-1.070312,4.617188,7.015625],[-3.917371,4.494141,6.684522],[-1.070312,4.494141,7.246094],[-4.014062,4.125,6.91875],[-1.070312,4.125,7.5],[-6.209063,4.125,4.97],[-6.042168,4.494141,4.900664],[-6.0725,4.617188,4.981094],[-6.217675,4.494141,5.144727],[-6.395312,4.125,5.325],[-7.591093,4.125,2.7475],[-7.464421,4.494141,2.70917],[-7.550137,4.617188,2.753633],[-7.755822,4.494141,2.844092],[-7.989062,4.125,2.94375],[-8.070313,4.125,0],[-7.972656,4.494141,0],[-8.085938,4.617188,0],[-8.316406,4.494141,0],[-8.570313,4.125,0],[-8.070313,4.125,0],[-7.527812,4.125,-2.7475],[-7.437724,4.494141,-2.70917],[-7.972656,4.494141,0],[-7.542227,4.617188,-2.753633],[-8.085938,4.617188,0],[-7.754834,4.494141,-2.844092],[-8.316406,4.494141,0],[-7.989062,4.125,-2.94375],[-8.570313,4.125,0],[-6.040312,4.125,-4.97],[-5.970977,4.494141,-4.900664],[-6.051406,4.617188,-4.981094],[-6.215039,4.494141,-5.144727],[-6.395312,4.125,-5.325],[-3.817812,4.125,-6.4575],[-3.779482,4.494141,-6.367412],[-3.823945,4.617188,-6.471914],[-3.914404,4.494141,-6.684522],[-4.014062,4.125,-6.91875],[-1.070312,4.125,-7],[-1.070312,4.494141,-6.902344],[-1.070312,4.617188,-7.015625],[-1.070312,4.494141,-7.246094],[-1.070312,4.125,-7.5],[-1.070312,4.125,-7],[1.677188,4.125,-6.4575],[1.638858,4.494141,-6.367412],[-1.070312,4.494141,-6.902344],[1.68332,4.617188,-6.471914],[-1.070312,4.617188,-7.015625],[1.77378,4.494141,-6.684522],[-1.070312,4.494141,-7.246094],[1.873438,4.125,-6.91875],[-1.070312,4.125,-7.5],[3.899688,4.125,-4.97],[3.830352,4.494141,-4.900664],[3.910782,4.617188,-4.981094],[4.074414,4.494141,-5.144727],[4.254687,4.125,-5.325],[5.387188,4.125,-2.7475],[5.2971,4.494141,-2.70917],[5.401602,4.617188,-2.753633],[5.614209,4.494141,-2.844092],[5.848437,4.125,-2.94375],[5.929688,4.125,0],[5.832031,4.494141,0],[5.945313,4.617188,0],[6.175781,4.494141,0],[6.429688,4.125,0],[6.429688,4.125,0],[5.848437,4.125,2.94375],[6.695264,2.162109,3.304053],[7.347656,2.162109,0],[7.433985,0.234375,3.61836],[8.148438,0.234375,0],[7.956494,-1.623047,3.840674],[8.714844,-1.623047,0],[8.154688,-3.375,3.925],[8.929688,-3.375,0],[4.254687,4.125,5.325],[4.906446,2.162109,5.976758],[5.475,0.234375,6.545312],[5.877149,-1.623047,6.947461],[6.029688,-3.375,7.1],[1.873438,4.125,6.91875],[2.23374,2.162109,7.765576],[2.548047,0.234375,8.504297],[2.770362,-1.623047,9.026807],[2.854688,-3.375,9.225],[-1.070312,4.125,7.5],[-1.070312,2.162109,8.417969],[-1.070312,0.234375,9.21875],[-1.070312,-1.623047,9.785156],[-1.070312,-3.375,10],[-1.070312,4.125,7.5],[-4.014062,4.125,6.91875],[-4.374365,2.162109,7.765576],[-1.070312,2.162109,8.417969],[-4.688672,0.234375,8.504297],[-1.070312,0.234375,9.21875],[-4.910986,-1.623047,9.026807],[-1.070312,-1.623047,9.785156],[-4.995313,-3.375,9.225],[-1.070312,-3.375,10],[-6.395312,4.125,5.325],[-7.047071,2.162109,5.976758],[-7.615624,0.234375,6.545312],[-8.017773,-1.623047,6.947461],[-8.170312,-3.375,7.1],[-7.989062,4.125,2.94375],[-8.835889,2.162109,3.304053],[-9.57461,0.234375,3.61836],[-10.097119,-1.623047,3.840674],[-10.295313,-3.375,3.925],[-8.570313,4.125,0],[-9.488281,2.162109,0],[-10.289063,0.234375,0],[-10.855469,-1.623047,0],[-11.070313,-3.375,0],[-8.570313,4.125,0],[-7.989062,4.125,-2.94375],[-8.835889,2.162109,-3.304053],[-9.488281,2.162109,0],[-9.57461,0.234375,-3.61836],[-10.289063,0.234375,0],[-10.097119,-1.623047,-3.840674],[-10.855469,-1.623047,0],[-10.295313,-3.375,-3.925],[-11.070313,-3.375,0],[-6.395312,4.125,-5.325],[-7.047071,2.162109,-5.976758],[-7.615624,0.234375,-6.545312],[-8.017773,-1.623047,-6.947461],[-8.170312,-3.375,-7.1],[-4.014062,4.125,-6.91875],[-4.374365,2.162109,-7.765576],[-4.688672,0.234375,-8.504297],[-4.910986,-1.623047,-9.026807],[-4.995313,-3.375,-9.225],[-1.070312,4.125,-7.5],[-1.070312,2.162109,-8.417969],[-1.070312,0.234375,-9.21875],[-1.070312,-1.623047,-9.785156],[-1.070312,-3.375,-10],[-1.070312,4.125,-7.5],[1.873438,4.125,-6.91875],[2.23374,2.162109,-7.765576],[-1.070312,2.162109,-8.417969],[2.548047,0.234375,-8.504297],[-1.070312,0.234375,-9.21875],[2.770362,-1.623047,-9.026807],[-1.070312,-1.623047,-9.785156],[2.854688,-3.375,-9.225],[-1.070312,-3.375,-10],[4.254687,4.125,-5.325],[4.906446,2.162109,-5.976758],[5.475,0.234375,-6.545312],[5.877149,-1.623047,-6.947461],[6.029688,-3.375,-7.1],[5.848437,4.125,-2.94375],[6.695264,2.162109,-3.304053],[7.433985,0.234375,-3.61836],[7.956494,-1.623047,-3.840674],[8.154688,-3.375,-3.925],[6.429688,4.125,0],[7.347656,2.162109,0],[8.148438,0.234375,0],[8.714844,-1.623047,0],[8.929688,-3.375,0],[8.929688,-3.375,0],[8.154688,-3.375,3.925],[7.794336,-4.857422,3.77168],[8.539063,-4.857422,0],[7.001562,-5.953125,3.434375],[7.679688,-5.953125,0],[6.208789,-6.697266,3.09707],[6.820313,-6.697266,0],[5.848437,-7.125,2.94375],[6.429688,-7.125,0],[6.029688,-3.375,7.1],[5.752343,-4.857422,6.822656],[5.142187,-5.953125,6.2125],[4.532031,-6.697266,5.602344],[4.254687,-7.125,5.325],[2.854688,-3.375,9.225],[2.701367,-4.857422,8.864649],[2.364063,-5.953125,8.071875],[2.026758,-6.697266,7.279101],[1.873438,-7.125,6.91875],[-1.070312,-3.375,10],[-1.070312,-4.857422,9.609375],[-1.070312,-5.953125,8.75],[-1.070312,-6.697266,7.890625],[-1.070312,-7.125,7.5],[-1.070312,-3.375,10],[-4.995313,-3.375,9.225],[-4.841992,-4.857422,8.864649],[-1.070312,-4.857422,9.609375],[-4.504687,-5.953125,8.071875],[-1.070312,-5.953125,8.75],[-4.167383,-6.697266,7.279101],[-1.070312,-6.697266,7.890625],[-4.014062,-7.125,6.91875],[-1.070312,-7.125,7.5],[-8.170312,-3.375,7.1],[-7.892968,-4.857422,6.822656],[-7.282812,-5.953125,6.2125],[-6.672656,-6.697266,5.602344],[-6.395312,-7.125,5.325],[-10.295313,-3.375,3.925],[-9.934961,-4.857422,3.77168],[-9.142187,-5.953125,3.434375],[-8.349414,-6.697266,3.09707],[-7.989062,-7.125,2.94375],[-11.070313,-3.375,0],[-10.679688,-4.857422,0],[-9.820313,-5.953125,0],[-8.960938,-6.697266,0],[-8.570313,-7.125,0],[-11.070313,-3.375,0],[-10.295313,-3.375,-3.925],[-9.934961,-4.857422,-3.77168],[-10.679688,-4.857422,0],[-9.142187,-5.953125,-3.434375],[-9.820313,-5.953125,0],[-8.349414,-6.697266,-3.09707],[-8.960938,-6.697266,0],[-7.989062,-7.125,-2.94375],[-8.570313,-7.125,0],[-8.170312,-3.375,-7.1],[-7.892968,-4.857422,-6.822656],[-7.282812,-5.953125,-6.2125],[-6.672656,-6.697266,-5.602344],[-6.395312,-7.125,-5.325],[-4.995313,-3.375,-9.225],[-4.841992,-4.857422,-8.864649],[-4.504687,-5.953125,-8.071875],[-4.167383,-6.697266,-7.279101],[-4.014062,-7.125,-6.91875],[-1.070312,-3.375,-10],[-1.070312,-4.857422,-9.609375],[-1.070312,-5.953125,-8.75],[-1.070312,-6.697266,-7.890625],[-1.070312,-7.125,-7.5],[-1.070312,-3.375,-10],[2.854688,-3.375,-9.225],[2.701367,-4.857422,-8.864649],[-1.070312,-4.857422,-9.609375],[2.364063,-5.953125,-8.071875],[-1.070312,-5.953125,-8.75],[2.026758,-6.697266,-7.279101],[-1.070312,-6.697266,-7.890625],[1.873438,-7.125,-6.91875],[-1.070312,-7.125,-7.5],[6.029688,-3.375,-7.1],[5.752343,-4.857422,-6.822656],[5.142187,-5.953125,-6.2125],[4.532031,-6.697266,-5.602344],[4.254687,-7.125,-5.325],[8.154688,-3.375,-3.925],[7.794336,-4.857422,-3.77168],[7.001562,-5.953125,-3.434375],[6.208789,-6.697266,-3.09707],[5.848437,-7.125,-2.94375],[8.929688,-3.375,0],[8.539063,-4.857422,0],[7.679688,-5.953125,0],[6.820313,-6.697266,0],[6.429688,-7.125,0],[6.429688,-7.125,0],[5.848437,-7.125,2.94375],[5.691685,-7.400391,2.877056],[6.259766,-7.400391,0],[4.853868,-7.640625,2.520586],[5.351563,-7.640625,0],[2.783648,-7.810547,1.639761],[3.107422,-7.810547,0],[-1.070312,-7.875,0],[4.254687,-7.125,5.325],[4.134043,-7.400391,5.204355],[3.489219,-7.640625,4.559531],[1.895879,-7.810547,2.966191],[-1.070312,-7.875,0],[1.873438,-7.125,6.91875],[1.806743,-7.400391,6.761997],[1.450274,-7.640625,5.92418],[0.569448,-7.810547,3.85396],[-1.070312,-7.875,0],[-1.070312,-7.125,7.5],[-1.070312,-7.400391,7.330078],[-1.070312,-7.640625,6.421875],[-1.070312,-7.810547,4.177734],[-1.070312,-7.875,0],[-1.070312,-7.125,7.5],[-4.014062,-7.125,6.91875],[-3.947368,-7.400391,6.761997],[-1.070312,-7.400391,7.330078],[-3.590898,-7.640625,5.92418],[-1.070312,-7.640625,6.421875],[-2.710073,-7.810547,3.85396],[-1.070312,-7.810547,4.177734],[-1.070312,-7.875,0],[-6.395312,-7.125,5.325],[-6.274668,-7.400391,5.204355],[-5.629844,-7.640625,4.559531],[-4.036504,-7.810547,2.966191],[-1.070312,-7.875,0],[-7.989062,-7.125,2.94375],[-7.832309,-7.400391,2.877056],[-6.994492,-7.640625,2.520586],[-4.924272,-7.810547,1.639761],[-1.070312,-7.875,0],[-8.570313,-7.125,0],[-8.400391,-7.400391,0],[-7.492188,-7.640625,0],[-5.248047,-7.810547,0],[-1.070312,-7.875,0],[-8.570313,-7.125,0],[-7.989062,-7.125,-2.94375],[-7.832309,-7.400391,-2.877056],[-8.400391,-7.400391,0],[-6.994492,-7.640625,-2.520586],[-7.492188,-7.640625,0],[-4.924272,-7.810547,-1.639761],[-5.248047,-7.810547,0],[-1.070312,-7.875,0],[-6.395312,-7.125,-5.325],[-6.274668,-7.400391,-5.204355],[-5.629844,-7.640625,-4.559531],[-4.036504,-7.810547,-2.966191],[-1.070312,-7.875,0],[-4.014062,-7.125,-6.91875],[-3.947368,-7.400391,-6.761997],[-3.590898,-7.640625,-5.92418],[-2.710073,-7.810547,-3.85396],[-1.070312,-7.875,0],[-1.070312,-7.125,-7.5],[-1.070312,-7.400391,-7.330078],[-1.070312,-7.640625,-6.421875],[-1.070312,-7.810547,-4.177734],[-1.070312,-7.875,0],[-1.070312,-7.125,-7.5],[1.873438,-7.125,-6.91875],[1.806743,-7.400391,-6.761997],[-1.070312,-7.400391,-7.330078],[1.450274,-7.640625,-5.92418],[-1.070312,-7.640625,-6.421875],[0.569448,-7.810547,-3.85396],[-1.070312,-7.810547,-4.177734],[-1.070312,-7.875,0],[4.254687,-7.125,-5.325],[4.134043,-7.400391,-5.204355],[3.489219,-7.640625,-4.559531],[1.895879,-7.810547,-2.966191],[-1.070312,-7.875,0],[5.848437,-7.125,-2.94375],[5.691685,-7.400391,-2.877056],[4.853868,-7.640625,-2.520586],[2.783648,-7.810547,-1.639761],[-1.070312,-7.875,0],[6.429688,-7.125,0],[6.259766,-7.400391,0],[5.351563,-7.640625,0],[3.107422,-7.810547,0],[-1.070312,-7.875,0],[-9.070313,2.25,0],[-8.992188,2.425781,0.84375],[-11.47583,2.405457,0.84375],[-11.40625,2.232422,0],[-13.298828,2.263184,0.84375],[-13.132813,2.109375,0],[-14.421631,1.877014,0.84375],[-14.203125,1.775391,0],[-14.804688,1.125,0.84375],[-14.570313,1.125,0],[-8.820313,2.8125,1.125],[-11.628906,2.786134,1.125],[-13.664063,2.601563,1.125],[-14.902344,2.100586,1.125],[-15.320313,1.125,1.125],[-8.648438,3.199219,0.84375],[-11.781982,3.166809,0.84375],[-14.029297,2.939941,0.84375],[-15.383057,2.324158,0.84375],[-15.835938,1.125,0.84375],[-8.570313,3.375,0],[-11.851563,3.339844,0],[-14.195313,3.09375,0],[-15.601563,2.425781,0],[-16.070313,1.125,0],[-8.570313,3.375,0],[-8.648438,3.199219,-0.84375],[-11.781982,3.166809,-0.84375],[-11.851563,3.339844,0],[-14.029297,2.939941,-0.84375],[-14.195313,3.09375,0],[-15.383057,2.324158,-0.84375],[-15.601563,2.425781,0],[-15.835938,1.125,-0.84375],[-16.070313,1.125,0],[-8.820313,2.8125,-1.125],[-11.628906,2.786134,-1.125],[-13.664063,2.601563,-1.125],[-14.902344,2.100586,-1.125],[-15.320313,1.125,-1.125],[-8.992188,2.425781,-0.84375],[-11.47583,2.405457,-0.84375],[-13.298828,2.263184,-0.84375],[-14.421631,1.877014,-0.84375],[-14.804688,1.125,-0.84375],[-9.070313,2.25,0],[-11.40625,2.232422,0],[-13.132813,2.109375,0],[-14.203125,1.775391,0],[-14.570313,1.125,0],[-14.570313,1.125,0],[-14.804688,1.125,0.84375],[-14.588013,0.00705,0.84375],[-14.375,0.105469,0],[-13.90918,-1.275146,0.84375],[-13.757813,-1.125,0],[-12.724976,-2.540863,0.84375],[-12.671875,-2.355469,0],[-10.992188,-3.609375,0.84375],[-11.070313,-3.375,0],[-15.320313,1.125,1.125],[-15.056641,-0.209473,1.125],[-14.242188,-1.605469,1.125],[-12.841797,-2.94873,1.125],[-10.820313,-4.125,1.125],[-15.835938,1.125,0.84375],[-15.525269,-0.425995,0.84375],[-14.575195,-1.935791,0.84375],[-12.958618,-3.356598,0.84375],[-10.648438,-4.640625,0.84375],[-16.070313,1.125,0],[-15.738281,-0.524414,0],[-14.726563,-2.085938,0],[-13.011719,-3.541992,0],[-10.570313,-4.875,0],[-16.070313,1.125,0],[-15.835938,1.125,-0.84375],[-15.525269,-0.425995,-0.84375],[-15.738281,-0.524414,0],[-14.575195,-1.935791,-0.84375],[-14.726563,-2.085938,0],[-12.958618,-3.356598,-0.84375],[-13.011719,-3.541992,0],[-10.648438,-4.640625,-0.84375],[-10.570313,-4.875,0],[-15.320313,1.125,-1.125],[-15.056641,-0.209473,-1.125],[-14.242188,-1.605469,-1.125],[-12.841797,-2.94873,-1.125],[-10.820313,-4.125,-1.125],[-14.804688,1.125,-0.84375],[-14.588013,0.00705,-0.84375],[-13.90918,-1.275146,-0.84375],[-12.724976,-2.540863,-0.84375],[-10.992188,-3.609375,-0.84375],[-14.570313,1.125,0],[-14.375,0.105469,0],[-13.757813,-1.125,0],[-12.671875,-2.355469,0],[-11.070313,-3.375,0],[7.429688,-0.75,0],[7.429688,-1.394531,1.85625],[10.01123,-0.677124,1.676074],[9.828125,-0.199219,0],[11.101563,0.84668,1.279688],[10.867188,1.125,0],[11.723145,2.629761,0.883301],[11.4375,2.730469,0],[12.898438,4.125,0.703125],[12.429688,4.125,0],[7.429688,-2.8125,2.475],[10.414063,-1.728516,2.234766],[11.617188,0.234375,1.70625],[12.351563,2.408203,1.177734],[13.929688,4.125,0.9375],[7.429688,-4.230469,1.85625],[10.816895,-2.779907,1.676074],[12.132813,-0.37793,1.279688],[12.97998,2.186646,0.883301],[14.960938,4.125,0.703125],[7.429688,-4.875,0],[11,-3.257813,0],[12.367188,-0.65625,0],[13.265625,2.085938,0],[15.429688,4.125,0],[7.429688,-4.875,0],[7.429688,-4.230469,-1.85625],[10.816895,-2.779907,-1.676074],[11,-3.257813,0],[12.132813,-0.37793,-1.279688],[12.367188,-0.65625,0],[12.97998,2.186646,-0.883301],[13.265625,2.085938,0],[14.960938,4.125,-0.703125],[15.429688,4.125,0],[7.429688,-2.8125,-2.475],[10.414063,-1.728516,-2.234766],[11.617188,0.234375,-1.70625],[12.351563,2.408203,-1.177734],[13.929688,4.125,-0.9375],[7.429688,-1.394531,-1.85625],[10.01123,-0.677124,-1.676074],[11.101563,0.84668,-1.279688],[11.723145,2.629761,-0.883301],[12.898438,4.125,-0.703125],[7.429688,-0.75,0],[9.828125,-0.199219,0],[10.867188,1.125,0],[11.4375,2.730469,0],[12.429688,4.125,0],[12.429688,4.125,0],[12.898438,4.125,0.703125],[13.291077,4.346237,0.65918],[12.789063,4.335938,0],[13.525879,4.422729,0.5625],[13.054688,4.40625,0],[13.532898,4.350357,0.46582],[13.132813,4.335938,0],[13.242188,4.125,0.421875],[12.929688,4.125,0],[13.929688,4.125,0.9375],[14.395508,4.368896,0.878906],[14.5625,4.458984,0.75],[14.413086,4.38208,0.621094],[13.929688,4.125,0.5625],[14.960938,4.125,0.703125],[15.499939,4.391556,0.65918],[15.599121,4.495239,0.5625],[15.293274,4.413804,0.46582],[14.617188,4.125,0.421875],[15.429688,4.125,0],[16.001953,4.401855,0],[16.070313,4.511719,0],[15.693359,4.428224,0],[14.929688,4.125,0],[15.429688,4.125,0],[14.960938,4.125,-0.703125],[15.499939,4.391556,-0.65918],[16.001953,4.401855,0],[15.599121,4.495239,-0.5625],[16.070313,4.511719,0],[15.293274,4.413804,-0.46582],[15.693359,4.428224,0],[14.617188,4.125,-0.421875],[14.929688,4.125,0],[13.929688,4.125,-0.9375],[14.395508,4.368896,-0.878906],[14.5625,4.458984,-0.75],[14.413086,4.38208,-0.621094],[13.929688,4.125,-0.5625],[12.898438,4.125,-0.703125],[13.291077,4.346237,-0.65918],[13.525879,4.422729,-0.5625],[13.532898,4.350357,-0.46582],[13.242188,4.125,-0.421875],[12.429688,4.125,0],[12.789063,4.335938,0],[13.054688,4.40625,0],[13.132813,4.335938,0],[12.929688,4.125,0],[0.501414,7.628906,0.670256],[0.632813,7.628906,0],[-1.070312,7.875,0],[0.429278,7.03125,0.639395],[0.554688,7.03125,0],[-0.162029,6.292969,0.38696],[-0.085937,6.292969,0],[-0.147812,5.625,0.3925],[-0.070312,5.625,0],[0.140489,7.628906,1.210801],[-1.070312,7.875,0],[0.084844,7.03125,1.155156],[-0.370879,6.292969,0.699434],[-0.360312,5.625,0.71],[-0.400056,7.628906,1.571726],[-1.070312,7.875,0],[-0.430918,7.03125,1.49959],[-0.683352,6.292969,0.908284],[-0.677812,5.625,0.9225],[-1.070312,7.628906,1.703125],[-1.070312,7.875,0],[-1.070312,7.03125,1.625],[-1.070312,6.292969,0.984375],[-1.070312,5.625,1],[-1.740569,7.628906,1.571726],[-1.070312,7.628906,1.703125],[-1.070312,7.875,0],[-1.709707,7.03125,1.49959],[-1.070312,7.03125,1.625],[-1.457273,6.292969,0.908284],[-1.070312,6.292969,0.984375],[-1.462812,5.625,0.9225],[-1.070312,5.625,1],[-2.281113,7.628906,1.210801],[-1.070312,7.875,0],[-2.225469,7.03125,1.155156],[-1.769746,6.292969,0.699434],[-1.780312,5.625,0.71],[-2.642038,7.628906,0.670256],[-1.070312,7.875,0],[-2.569902,7.03125,0.639395],[-1.978596,6.292969,0.38696],[-1.992812,5.625,0.3925],[-2.773438,7.628906,0],[-1.070312,7.875,0],[-2.695313,7.03125,0],[-2.054687,6.292969,0],[-2.070312,5.625,0],[-2.642038,7.628906,-0.670256],[-2.773438,7.628906,0],[-1.070312,7.875,0],[-2.569902,7.03125,-0.639395],[-2.695313,7.03125,0],[-1.978596,6.292969,-0.38696],[-2.054687,6.292969,0],[-1.992812,5.625,-0.3925],[-2.070312,5.625,0],[-2.281113,7.628906,-1.210801],[-1.070312,7.875,0],[-2.225469,7.03125,-1.155156],[-1.769746,6.292969,-0.699434],[-1.780312,5.625,-0.71],[-1.740569,7.628906,-1.571726],[-1.070312,7.875,0],[-1.709707,7.03125,-1.49959],[-1.457273,6.292969,-0.908284],[-1.462812,5.625,-0.9225],[-1.070312,7.628906,-1.703125],[-1.070312,7.875,0],[-1.070312,7.03125,-1.625],[-1.070312,6.292969,-0.984375],[-1.070312,5.625,-1],[-0.400056,7.628906,-1.571726],[-1.070312,7.628906,-1.703125],[-1.070312,7.875,0],[-0.430918,7.03125,-1.49959],[-1.070312,7.03125,-1.625],[-0.683352,6.292969,-0.908284],[-1.070312,6.292969,-0.984375],[-0.677812,5.625,-0.9225],[-1.070312,5.625,-1],[0.140489,7.628906,-1.210801],[-1.070312,7.875,0],[0.084844,7.03125,-1.155156],[-0.370879,6.292969,-0.699434],[-0.360312,5.625,-0.71],[0.501414,7.628906,-0.670256],[-1.070312,7.875,0],[0.429278,7.03125,-0.639395],[-0.162029,6.292969,-0.38696],[-0.147812,5.625,-0.3925],[0.632813,7.628906,0],[-1.070312,7.875,0],[0.554688,7.03125,0],[-0.085937,6.292969,0],[-0.070312,5.625,0],[-0.070312,5.625,0],[-0.147812,5.625,0.3925],[1.034141,5.179688,0.895391],[1.210938,5.179688,0],[2.735,4.875,1.619062],[3.054688,4.875,0],[4.262891,4.570313,2.26914],[4.710938,4.570313,0],[4.925938,4.125,2.55125],[5.429688,4.125,0],[-0.360312,5.625,0.71],[0.549375,5.179688,1.619688],[1.858438,4.875,2.92875],[3.034375,4.570313,4.104687],[3.544688,4.125,4.615],[-0.677812,5.625,0.9225],[-0.174922,5.179688,2.104453],[0.54875,4.875,3.805313],[1.198828,4.570313,5.333203],[1.480938,4.125,5.99625],[-1.070312,5.625,1],[-1.070312,5.179688,2.28125],[-1.070312,4.875,4.125],[-1.070312,4.570313,5.78125],[-1.070312,4.125,6.5],[-1.070312,5.625,1],[-1.462812,5.625,0.9225],[-1.965703,5.179688,2.104453],[-1.070312,5.179688,2.28125],[-2.689375,4.875,3.805313],[-1.070312,4.875,4.125],[-3.339453,4.570313,5.333203],[-1.070312,4.570313,5.78125],[-3.621562,4.125,5.99625],[-1.070312,4.125,6.5],[-1.780312,5.625,0.71],[-2.69,5.179688,1.619688],[-3.999062,4.875,2.92875],[-5.174999,4.570313,4.104687],[-5.685312,4.125,4.615],[-1.992812,5.625,0.3925],[-3.174765,5.179688,0.895391],[-4.875625,4.875,1.619062],[-6.403516,4.570313,2.26914],[-7.066563,4.125,2.55125],[-2.070312,5.625,0],[-3.351562,5.179688,0],[-5.195313,4.875,0],[-6.851563,4.570313,0],[-7.570313,4.125,0],[-2.070312,5.625,0],[-1.992812,5.625,-0.3925],[-3.174765,5.179688,-0.895391],[-3.351562,5.179688,0],[-4.875625,4.875,-1.619062],[-5.195313,4.875,0],[-6.403516,4.570313,-2.26914],[-6.851563,4.570313,0],[-7.066563,4.125,-2.55125],[-7.570313,4.125,0],[-1.780312,5.625,-0.71],[-2.69,5.179688,-1.619688],[-3.999062,4.875,-2.92875],[-5.174999,4.570313,-4.104687],[-5.685312,4.125,-4.615],[-1.462812,5.625,-0.9225],[-1.965703,5.179688,-2.104453],[-2.689375,4.875,-3.805313],[-3.339453,4.570313,-5.333203],[-3.621562,4.125,-5.99625],[-1.070312,5.625,-1],[-1.070312,5.179688,-2.28125],[-1.070312,4.875,-4.125],[-1.070312,4.570313,-5.78125],[-1.070312,4.125,-6.5],[-1.070312,5.625,-1],[-0.677812,5.625,-0.9225],[-0.174922,5.179688,-2.104453],[-1.070312,5.179688,-2.28125],[0.54875,4.875,-3.805313],[-1.070312,4.875,-4.125],[1.198828,4.570313,-5.333203],[-1.070312,4.570313,-5.78125],[1.480938,4.125,-5.99625],[-1.070312,4.125,-6.5],[-0.360312,5.625,-0.71],[0.549375,5.179688,-1.619688],[1.858438,4.875,-2.92875],[3.034375,4.570313,-4.104687],[3.544688,4.125,-4.615],[-0.147812,5.625,-0.3925],[1.034141,5.179688,-0.895391],[2.735,4.875,-1.619062],[4.262891,4.570313,-2.26914],[4.925938,4.125,-2.55125],[-0.070312,5.625,0],[1.210938,5.179688,0],[3.054688,4.875,0],[4.710938,4.570313,0],[5.429688,4.125,0]];\nexports.cells=[[0,1,2],[2,3,0],[3,2,4],[4,5,3],[5,4,6],[6,7,5],[7,6,8],[8,9,7],[1,10,11],[11,2,1],[2,11,12],[12,4,2],[4,12,13],[13,6,4],[6,13,14],[14,8,6],[10,15,16],[16,11,10],[11,16,17],[17,12,11],[12,17,18],[18,13,12],[13,18,19],[19,14,13],[15,20,21],[21,16,15],[16,21,22],[22,17,16],[17,22,23],[23,18,17],[18,23,24],[24,19,18],[25,26,27],[27,28,25],[28,27,29],[29,30,28],[30,29,31],[31,32,30],[32,31,33],[33,34,32],[26,35,36],[36,27,26],[27,36,37],[37,29,27],[29,37,38],[38,31,29],[31,38,39],[39,33,31],[35,40,41],[41,36,35],[36,41,42],[42,37,36],[37,42,43],[43,38,37],[38,43,44],[44,39,38],[40,45,46],[46,41,40],[41,46,47],[47,42,41],[42,47,48],[48,43,42],[43,48,49],[49,44,43],[50,51,52],[52,53,50],[53,52,54],[54,55,53],[55,54,56],[56,57,55],[57,56,58],[58,59,57],[51,60,61],[61,52,51],[52,61,62],[62,54,52],[54,62,63],[63,56,54],[56,63,64],[64,58,56],[60,65,66],[66,61,60],[61,66,67],[67,62,61],[62,67,68],[68,63,62],[63,68,69],[69,64,63],[65,70,71],[71,66,65],[66,71,72],[72,67,66],[67,72,73],[73,68,67],[68,73,74],[74,69,68],[75,76,77],[77,78,75],[78,77,79],[79,80,78],[80,79,81],[81,82,80],[82,81,83],[83,84,82],[76,85,86],[86,77,76],[77,86,87],[87,79,77],[79,87,88],[88,81,79],[81,88,89],[89,83,81],[85,90,91],[91,86,85],[86,91,92],[92,87,86],[87,92,93],[93,88,87],[88,93,94],[94,89,88],[90,95,96],[96,91,90],[91,96,97],[97,92,91],[92,97,98],[98,93,92],[93,98,99],[99,94,93],[100,101,102],[102,103,100],[103,102,104],[104,105,103],[105,104,106],[106,107,105],[107,106,108],[108,109,107],[101,110,111],[111,102,101],[102,111,112],[112,104,102],[104,112,113],[113,106,104],[106,113,114],[114,108,106],[110,115,116],[116,111,110],[111,116,117],[117,112,111],[112,117,118],[118,113,112],[113,118,119],[119,114,113],[115,120,121],[121,116,115],[116,121,122],[122,117,116],[117,122,123],[123,118,117],[118,123,124],[124,119,118],[125,126,127],[127,128,125],[128,127,129],[129,130,128],[130,129,131],[131,132,130],[132,131,133],[133,134,132],[126,135,136],[136,127,126],[127,136,137],[137,129,127],[129,137,138],[138,131,129],[131,138,139],[139,133,131],[135,140,141],[141,136,135],[136,141,142],[142,137,136],[137,142,143],[143,138,137],[138,143,144],[144,139,138],[140,145,146],[146,141,140],[141,146,147],[147,142,141],[142,147,148],[148,143,142],[143,148,149],[149,144,143],[150,151,152],[152,153,150],[153,152,154],[154,155,153],[155,154,156],[156,157,155],[157,156,158],[158,159,157],[151,160,161],[161,152,151],[152,161,162],[162,154,152],[154,162,163],[163,156,154],[156,163,164],[164,158,156],[160,165,166],[166,161,160],[161,166,167],[167,162,161],[162,167,168],[168,163,162],[163,168,169],[169,164,163],[165,170,171],[171,166,165],[166,171,172],[172,167,166],[167,172,173],[173,168,167],[168,173,174],[174,169,168],[175,176,177],[177,178,175],[178,177,179],[179,180,178],[180,179,181],[181,182,180],[182,181,183],[183,184,182],[176,185,186],[186,177,176],[177,186,187],[187,179,177],[179,187,188],[188,181,179],[181,188,189],[189,183,181],[185,190,191],[191,186,185],[186,191,192],[192,187,186],[187,192,193],[193,188,187],[188,193,194],[194,189,188],[190,195,196],[196,191,190],[191,196,197],[197,192,191],[192,197,198],[198,193,192],[193,198,199],[199,194,193],[200,201,202],[202,203,200],[203,202,204],[204,205,203],[205,204,206],[206,207,205],[207,206,208],[208,209,207],[201,210,211],[211,202,201],[202,211,212],[212,204,202],[204,212,213],[213,206,204],[206,213,214],[214,208,206],[210,215,216],[216,211,210],[211,216,217],[217,212,211],[212,217,218],[218,213,212],[213,218,219],[219,214,213],[215,220,221],[221,216,215],[216,221,222],[222,217,216],[217,222,223],[223,218,217],[218,223,224],[224,219,218],[225,226,227],[227,228,225],[228,227,229],[229,230,228],[230,229,231],[231,232,230],[232,231,233],[233,234,232],[226,235,236],[236,227,226],[227,236,237],[237,229,227],[229,237,238],[238,231,229],[231,238,239],[239,233,231],[235,240,241],[241,236,235],[236,241,242],[242,237,236],[237,242,243],[243,238,237],[238,243,244],[244,239,238],[240,245,246],[246,241,240],[241,246,247],[247,242,241],[242,247,248],[248,243,242],[243,248,249],[249,244,243],[250,251,252],[252,253,250],[253,252,254],[254,255,253],[255,254,256],[256,257,255],[257,256,258],[258,259,257],[251,260,261],[261,252,251],[252,261,262],[262,254,252],[254,262,263],[263,256,254],[256,263,264],[264,258,256],[260,265,266],[266,261,260],[261,266,267],[267,262,261],[262,267,268],[268,263,262],[263,268,269],[269,264,263],[265,270,271],[271,266,265],[266,271,272],[272,267,266],[267,272,273],[273,268,267],[268,273,274],[274,269,268],[275,276,277],[277,278,275],[278,277,279],[279,280,278],[280,279,281],[281,282,280],[282,281,283],[283,284,282],[276,285,286],[286,277,276],[277,286,287],[287,279,277],[279,287,288],[288,281,279],[281,288,289],[289,283,281],[285,290,291],[291,286,285],[286,291,292],[292,287,286],[287,292,293],[293,288,287],[288,293,294],[294,289,288],[290,295,296],[296,291,290],[291,296,297],[297,292,291],[292,297,298],[298,293,292],[293,298,299],[299,294,293],[300,301,302],[302,303,300],[303,302,304],[304,305,303],[305,304,306],[306,307,305],[307,306,308],[301,309,310],[310,302,301],[302,310,311],[311,304,302],[304,311,312],[312,306,304],[306,312,313],[309,314,315],[315,310,309],[310,315,316],[316,311,310],[311,316,317],[317,312,311],[312,317,318],[314,319,320],[320,315,314],[315,320,321],[321,316,315],[316,321,322],[322,317,316],[317,322,323],[324,325,326],[326,327,324],[327,326,328],[328,329,327],[329,328,330],[330,331,329],[331,330,332],[325,333,334],[334,326,325],[326,334,335],[335,328,326],[328,335,336],[336,330,328],[330,336,337],[333,338,339],[339,334,333],[334,339,340],[340,335,334],[335,340,341],[341,336,335],[336,341,342],[338,343,344],[344,339,338],[339,344,345],[345,340,339],[340,345,346],[346,341,340],[341,346,347],[348,349,350],[350,351,348],[351,350,352],[352,353,351],[353,352,354],[354,355,353],[355,354,356],[349,357,358],[358,350,349],[350,358,359],[359,352,350],[352,359,360],[360,354,352],[354,360,361],[357,362,363],[363,358,357],[358,363,364],[364,359,358],[359,364,365],[365,360,359],[360,365,366],[362,367,368],[368,363,362],[363,368,369],[369,364,363],[364,369,370],[370,365,364],[365,370,371],[372,373,374],[374,375,372],[375,374,376],[376,377,375],[377,376,378],[378,379,377],[379,378,380],[373,381,382],[382,374,373],[374,382,383],[383,376,374],[376,383,384],[384,378,376],[378,384,385],[381,386,387],[387,382,381],[382,387,388],[388,383,382],[383,388,389],[389,384,383],[384,389,390],[386,391,392],[392,387,386],[387,392,393],[393,388,387],[388,393,394],[394,389,388],[389,394,395],[396,397,398],[398,399,396],[399,398,400],[400,401,399],[401,400,402],[402,403,401],[403,402,404],[404,405,403],[397,406,407],[407,398,397],[398,407,408],[408,400,398],[400,408,409],[409,402,400],[402,409,410],[410,404,402],[406,411,412],[412,407,406],[407,412,413],[413,408,407],[408,413,414],[414,409,408],[409,414,415],[415,410,409],[411,416,417],[417,412,411],[412,417,418],[418,413,412],[413,418,419],[419,414,413],[414,419,420],[420,415,414],[421,422,423],[423,424,421],[424,423,425],[425,426,424],[426,425,427],[427,428,426],[428,427,429],[429,430,428],[422,431,432],[432,423,422],[423,432,433],[433,425,423],[425,433,434],[434,427,425],[427,434,435],[435,429,427],[431,436,437],[437,432,431],[432,437,438],[438,433,432],[433,438,439],[439,434,433],[434,439,440],[440,435,434],[436,441,442],[442,437,436],[437,442,443],[443,438,437],[438,443,444],[444,439,438],[439,444,445],[445,440,439],[446,447,448],[448,449,446],[449,448,450],[450,451,449],[451,450,452],[452,453,451],[453,452,454],[454,455,453],[447,456,457],[457,448,447],[448,457,458],[458,450,448],[450,458,459],[459,452,450],[452,459,460],[460,454,452],[456,461,462],[462,457,456],[457,462,463],[463,458,457],[458,463,464],[464,459,458],[459,464,465],[465,460,459],[461,466,467],[467,462,461],[462,467,468],[468,463,462],[463,468,469],[469,464,463],[464,469,470],[470,465,464],[471,472,473],[473,474,471],[474,473,475],[475,476,474],[476,475,477],[477,478,476],[478,477,479],[479,480,478],[472,481,482],[482,473,472],[473,482,483],[483,475,473],[475,483,484],[484,477,475],[477,484,485],[485,479,477],[481,486,487],[487,482,481],[482,487,488],[488,483,482],[483,488,489],[489,484,483],[484,489,490],[490,485,484],[486,491,492],[492,487,486],[487,492,493],[493,488,487],[488,493,494],[494,489,488],[489,494,495],[495,490,489],[496,497,498],[498,499,496],[499,498,500],[500,501,499],[501,500,502],[502,503,501],[503,502,504],[504,505,503],[497,506,507],[507,498,497],[498,507,508],[508,500,498],[500,508,509],[509,502,500],[502,509,510],[510,504,502],[506,511,512],[512,507,506],[507,512,513],[513,508,507],[508,513,514],[514,509,508],[509,514,515],[515,510,509],[511,516,517],[517,512,511],[512,517,518],[518,513,512],[513,518,519],[519,514,513],[514,519,520],[520,515,514],[521,522,523],[523,524,521],[524,523,525],[525,526,524],[526,525,527],[527,528,526],[528,527,529],[529,530,528],[522,531,532],[532,523,522],[523,532,533],[533,525,523],[525,533,534],[534,527,525],[527,534,535],[535,529,527],[531,536,537],[537,532,531],[532,537,538],[538,533,532],[533,538,539],[539,534,533],[534,539,540],[540,535,534],[536,541,542],[542,537,536],[537,542,543],[543,538,537],[538,543,544],[544,539,538],[539,544,545],[545,540,539],[546,547,548],[548,549,546],[549,548,550],[550,551,549],[551,550,552],[552,553,551],[553,552,554],[554,555,553],[547,556,557],[557,548,547],[548,557,558],[558,550,548],[550,558,559],[559,552,550],[552,559,560],[560,554,552],[556,561,562],[562,557,556],[557,562,563],[563,558,557],[558,563,564],[564,559,558],[559,564,565],[565,560,559],[561,566,567],[567,562,561],[562,567,568],[568,563,562],[563,568,569],[569,564,563],[564,569,570],[570,565,564],[571,572,573],[573,574,571],[574,573,575],[575,576,574],[576,575,577],[577,578,576],[578,577,579],[579,580,578],[572,581,582],[582,573,572],[573,582,583],[583,575,573],[575,583,584],[584,577,575],[577,584,585],[585,579,577],[581,586,587],[587,582,581],[582,587,588],[588,583,582],[583,588,589],[589,584,583],[584,589,590],[590,585,584],[586,591,592],[592,587,586],[587,592,593],[593,588,587],[588,593,594],[594,589,588],[589,594,595],[595,590,589],[596,597,598],[597,596,599],[599,600,597],[600,599,601],[601,602,600],[602,601,603],[603,604,602],[605,596,606],[596,605,607],[607,599,596],[599,607,608],[608,601,599],[601,608,609],[609,603,601],[610,605,611],[605,610,612],[612,607,605],[607,612,613],[613,608,607],[608,613,614],[614,609,608],[615,610,616],[610,615,617],[617,612,610],[612,617,618],[618,613,612],[613,618,619],[619,614,613],[620,621,622],[621,620,623],[623,624,621],[624,623,625],[625,626,624],[626,625,627],[627,628,626],[629,620,630],[620,629,631],[631,623,620],[623,631,632],[632,625,623],[625,632,633],[633,627,625],[634,629,635],[629,634,636],[636,631,629],[631,636,637],[637,632,631],[632,637,638],[638,633,632],[639,634,640],[634,639,641],[641,636,634],[636,641,642],[642,637,636],[637,642,643],[643,638,637],[644,645,646],[645,644,647],[647,648,645],[648,647,649],[649,650,648],[650,649,651],[651,652,650],[653,644,654],[644,653,655],[655,647,644],[647,655,656],[656,649,647],[649,656,657],[657,651,649],[658,653,659],[653,658,660],[660,655,653],[655,660,661],[661,656,655],[656,661,662],[662,657,656],[663,658,664],[658,663,665],[665,660,658],[660,665,666],[666,661,660],[661,666,667],[667,662,661],[668,669,670],[669,668,671],[671,672,669],[672,671,673],[673,674,672],[674,673,675],[675,676,674],[677,668,678],[668,677,679],[679,671,668],[671,679,680],[680,673,671],[673,680,681],[681,675,673],[682,677,683],[677,682,684],[684,679,677],[679,684,685],[685,680,679],[680,685,686],[686,681,680],[687,682,688],[682,687,689],[689,684,682],[684,689,690],[690,685,684],[685,690,691],[691,686,685],[692,693,694],[694,695,692],[695,694,696],[696,697,695],[697,696,698],[698,699,697],[699,698,700],[700,701,699],[693,702,703],[703,694,693],[694,703,704],[704,696,694],[696,704,705],[705,698,696],[698,705,706],[706,700,698],[702,707,708],[708,703,702],[703,708,709],[709,704,703],[704,709,710],[710,705,704],[705,710,711],[711,706,705],[707,712,713],[713,708,707],[708,713,714],[714,709,708],[709,714,715],[715,710,709],[710,715,716],[716,711,710],[717,718,719],[719,720,717],[720,719,721],[721,722,720],[722,721,723],[723,724,722],[724,723,725],[725,726,724],[718,727,728],[728,719,718],[719,728,729],[729,721,719],[721,729,730],[730,723,721],[723,730,731],[731,725,723],[727,732,733],[733,728,727],[728,733,734],[734,729,728],[729,734,735],[735,730,729],[730,735,736],[736,731,730],[732,737,738],[738,733,732],[733,738,739],[739,734,733],[734,739,740],[740,735,734],[735,740,741],[741,736,735],[742,743,744],[744,745,742],[745,744,746],[746,747,745],[747,746,748],[748,749,747],[749,748,750],[750,751,749],[743,752,753],[753,744,743],[744,753,754],[754,746,744],[746,754,755],[755,748,746],[748,755,756],[756,750,748],[752,757,758],[758,753,752],[753,758,759],[759,754,753],[754,759,760],[760,755,754],[755,760,761],[761,756,755],[757,762,763],[763,758,757],[758,763,764],[764,759,758],[759,764,765],[765,760,759],[760,765,766],[766,761,760],[767,768,769],[769,770,767],[770,769,771],[771,772,770],[772,771,773],[773,774,772],[774,773,775],[775,776,774],[768,777,778],[778,769,768],[769,778,779],[779,771,769],[771,779,780],[780,773,771],[773,780,781],[781,775,773],[777,782,783],[783,778,777],[778,783,784],[784,779,778],[779,784,785],[785,780,779],[780,785,786],[786,781,780],[782,787,788],[788,783,782],[783,788,789],[789,784,783],[784,789,790],[790,785,784],[785,790,791],[791,786,785]];\n","import { vec3 } from 'wgpu-matrix';\n\nexport function computeSurfaceNormals(\n positions: [number, number, number][],\n triangles: [number, number, number][]\n): [number, number, number][] {\n const normals: [number, number, number][] = positions.map(() => {\n // Initialize to zero.\n return [0, 0, 0];\n });\n triangles.forEach(([i0, i1, i2]) => {\n const p0 = positions[i0];\n const p1 = positions[i1];\n const p2 = positions[i2];\n\n const v0 = vec3.subtract(p1, p0);\n const v1 = vec3.subtract(p2, p0);\n\n vec3.normalize(v0, v0);\n vec3.normalize(v1, v1);\n const norm = vec3.cross(v0, v1);\n\n // Accumulate the normals.\n vec3.add(normals[i0], norm, normals[i0]);\n vec3.add(normals[i1], norm, normals[i1]);\n vec3.add(normals[i2], norm, normals[i2]);\n });\n normals.forEach((n) => {\n // Normalize accumulated normals.\n vec3.normalize(n, n);\n });\n\n return normals;\n}\n\ntype ProjectedPlane = 'xy' | 'xz' | 'yz';\n\nconst projectedPlane2Ids: { [key in ProjectedPlane]: [number, number] } = {\n xy: [0, 1],\n xz: [0, 2],\n yz: [1, 2],\n};\n\nexport function computeProjectedPlaneUVs(\n positions: [number, number, number][],\n projectedPlane: ProjectedPlane = 'xy'\n): [number, number][] {\n const idxs = projectedPlane2Ids[projectedPlane];\n const uvs: [number, number][] = positions.map(() => {\n // Initialize to zero.\n return [0, 0];\n });\n const extentMin = [Infinity, Infinity];\n const extentMax = [-Infinity, -Infinity];\n positions.forEach((pos, i) => {\n // Simply project to the selected plane\n uvs[i][0] = pos[idxs[0]];\n uvs[i][1] = pos[idxs[1]];\n\n extentMin[0] = Math.min(pos[idxs[0]], extentMin[0]);\n extentMin[1] = Math.min(pos[idxs[1]], extentMin[1]);\n extentMax[0] = Math.max(pos[idxs[0]], extentMax[0]);\n extentMax[1] = Math.max(pos[idxs[1]], extentMax[1]);\n });\n uvs.forEach((uv) => {\n uv[0] = (uv[0] - extentMin[0]) / (extentMax[0] - extentMin[0]);\n uv[1] = (uv[1] - extentMin[1]) / (extentMax[1] - extentMin[1]);\n });\n return uvs;\n}\n","import teapotData from 'teapot';\nimport { computeSurfaceNormals } from './utils';\n\nexport const mesh = {\n positions: teapotData.positions as [number, number, number][],\n triangles: teapotData.cells as [number, number, number][],\n normals: [] as [number, number, number][],\n};\n\n// Compute surface normals\nmesh.normals = computeSurfaceNormals(mesh.positions, mesh.triangles);\n","import { mat4, vec3 } from 'wgpu-matrix';\nimport { GUI } from 'dat.gui';\n\nimport { mesh } from '../../meshes/teapot';\n\nimport opaqueWGSL from './opaque.wgsl';\nimport translucentWGSL from './translucent.wgsl';\nimport compositeWGSL from './composite.wgsl';\n\nfunction roundUp(n: number, k: number): number {\n return Math.ceil(n / k) * k;\n}\n\nconst canvas = document.querySelector('canvas') as HTMLCanvasElement;\nconst adapter = await navigator.gpu.requestAdapter();\nconst device = await adapter.requestDevice();\n\nconst context = canvas.getContext('webgpu') as GPUCanvasContext;\nconst presentationFormat = navigator.gpu.getPreferredCanvasFormat();\n\ncontext.configure({\n device,\n format: presentationFormat,\n alphaMode: 'premultiplied',\n});\n\nconst params = new URLSearchParams(window.location.search);\n\nconst settings = {\n memoryStrategy: params.get('memoryStrategy') || 'multipass',\n};\n\n// Create the model vertex buffer\nconst vertexBuffer = device.createBuffer({\n size: 3 * mesh.positions.length * Float32Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.VERTEX,\n mappedAtCreation: true,\n label: 'vertexBuffer',\n});\n{\n const mapping = new Float32Array(vertexBuffer.getMappedRange());\n for (let i = 0; i < mesh.positions.length; ++i) {\n mapping.set(mesh.positions[i], 3 * i);\n }\n vertexBuffer.unmap();\n}\n\n// Create the model index buffer\nconst indexCount = mesh.triangles.length * 3;\nconst indexBuffer = device.createBuffer({\n size: indexCount * Uint16Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.INDEX,\n mappedAtCreation: true,\n label: 'indexBuffer',\n});\n{\n const mapping = new Uint16Array(indexBuffer.getMappedRange());\n for (let i = 0; i < mesh.triangles.length; ++i) {\n mapping.set(mesh.triangles[i], 3 * i);\n }\n indexBuffer.unmap();\n}\n\n// Uniforms contains:\n// * modelViewProjectionMatrix: mat4x4\n// * maxStorableFragments: u32\n// * targetWidth: u32\nconst uniformsSize = roundUp(\n 16 * Float32Array.BYTES_PER_ELEMENT + 2 * Uint32Array.BYTES_PER_ELEMENT,\n 16\n);\n\nconst uniformBuffer = device.createBuffer({\n size: uniformsSize,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n label: 'uniformBuffer',\n});\n\nconst opaqueModule = device.createShaderModule({\n code: opaqueWGSL,\n label: 'opaqueModule',\n});\n\nconst opaquePipeline = device.createRenderPipeline({\n layout: 'auto',\n vertex: {\n module: opaqueModule,\n buffers: [\n {\n arrayStride: 3 * Float32Array.BYTES_PER_ELEMENT,\n attributes: [\n {\n // position\n format: 'float32x3',\n offset: 0,\n shaderLocation: 0,\n },\n ],\n },\n ],\n },\n fragment: {\n module: opaqueModule,\n targets: [\n {\n format: presentationFormat,\n },\n ],\n },\n primitive: {\n topology: 'triangle-list',\n },\n depthStencil: {\n depthWriteEnabled: true,\n depthCompare: 'less',\n format: 'depth24plus',\n },\n label: 'opaquePipeline',\n});\n\nconst opaquePassDescriptor: GPURenderPassDescriptor = {\n colorAttachments: [\n {\n view: undefined,\n clearValue: { r: 0, g: 0, b: 0, a: 1.0 },\n loadOp: 'clear',\n storeOp: 'store',\n },\n ],\n depthStencilAttachment: {\n view: undefined,\n depthClearValue: 1.0,\n depthLoadOp: 'clear',\n depthStoreOp: 'store',\n },\n label: 'opaquePassDescriptor',\n};\n\nconst opaqueBindGroup = device.createBindGroup({\n layout: opaquePipeline.getBindGroupLayout(0),\n entries: [\n {\n binding: 0,\n resource: {\n buffer: uniformBuffer,\n size: 16 * Float32Array.BYTES_PER_ELEMENT,\n label: 'modelViewProjection',\n },\n },\n ],\n label: 'opaquePipeline',\n});\n\nconst translucentModule = device.createShaderModule({\n code: translucentWGSL,\n label: 'translucentModule',\n});\n\nconst translucentBindGroupLayout = device.createBindGroupLayout({\n label: 'translucentBindGroupLayout',\n entries: [\n {\n binding: 0,\n visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'uniform',\n },\n },\n {\n binding: 1,\n visibility: GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'storage',\n },\n },\n {\n binding: 2,\n visibility: GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'storage',\n },\n },\n {\n binding: 3,\n visibility: GPUShaderStage.FRAGMENT,\n texture: { sampleType: 'depth' },\n },\n {\n binding: 4,\n visibility: GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'uniform',\n hasDynamicOffset: true,\n },\n },\n ],\n});\n\nconst translucentPipeline = device.createRenderPipeline({\n layout: device.createPipelineLayout({\n bindGroupLayouts: [translucentBindGroupLayout],\n label: 'translucentPipelineLayout',\n }),\n vertex: {\n module: translucentModule,\n buffers: [\n {\n arrayStride: 3 * Float32Array.BYTES_PER_ELEMENT,\n attributes: [\n {\n format: 'float32x3',\n offset: 0,\n shaderLocation: 0,\n },\n ],\n },\n ],\n },\n fragment: {\n module: translucentModule,\n targets: [\n {\n format: presentationFormat,\n writeMask: 0x0,\n },\n ],\n },\n primitive: {\n topology: 'triangle-list',\n },\n label: 'translucentPipeline',\n});\n\nconst translucentPassDescriptor: GPURenderPassDescriptor = {\n colorAttachments: [\n {\n loadOp: 'load',\n storeOp: 'store',\n view: undefined,\n },\n ],\n label: 'translucentPassDescriptor',\n};\n\nconst compositeModule = device.createShaderModule({\n code: compositeWGSL,\n label: 'compositeModule',\n});\n\nconst compositeBindGroupLayout = device.createBindGroupLayout({\n label: 'compositeBindGroupLayout',\n entries: [\n {\n binding: 0,\n visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'uniform',\n },\n },\n {\n binding: 1,\n visibility: GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'storage',\n },\n },\n {\n binding: 2,\n visibility: GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'storage',\n },\n },\n {\n binding: 3,\n visibility: GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'uniform',\n hasDynamicOffset: true,\n },\n },\n ],\n});\n\nconst compositePipeline = device.createRenderPipeline({\n layout: device.createPipelineLayout({\n bindGroupLayouts: [compositeBindGroupLayout],\n label: 'compositePipelineLayout',\n }),\n vertex: {\n module: compositeModule,\n },\n fragment: {\n module: compositeModule,\n targets: [\n {\n format: presentationFormat,\n blend: {\n color: {\n srcFactor: 'one',\n operation: 'add',\n dstFactor: 'one-minus-src-alpha',\n },\n alpha: {},\n },\n },\n ],\n },\n primitive: {\n topology: 'triangle-list',\n },\n label: 'compositePipeline',\n});\n\nconst compositePassDescriptor: GPURenderPassDescriptor = {\n colorAttachments: [\n {\n view: undefined,\n loadOp: 'load',\n storeOp: 'store',\n },\n ],\n label: 'compositePassDescriptor',\n};\n\nconst configure = () => {\n let devicePixelRatio = window.devicePixelRatio;\n\n // The default maximum storage buffer binding size is 128Mib. The amount\n // of memory we need to store transparent fragments depends on the size\n // of the canvas and the average number of layers per fragment we want to\n // support. When the devicePixelRatio is 1, we know that 128Mib is enough\n // to store 4 layers per pixel at 600x600. However, when the device pixel\n // ratio is high enough we will exceed this limit.\n //\n // We provide 2 choices of mitigations to this issue:\n // 1) Clamp the device pixel ratio to a value which we know will not break\n // the limit. The tradeoff here is that the canvas resolution will not\n // match the native resolution and therefore may have a reduction in\n // quality.\n // 2) Break the frame into a series of horizontal slices using the scissor\n // functionality and process a single slice at a time. This limits memory\n // usage because we only need enough memory to process the dimensions\n // of the slice. The tradeoff is the performance reduction due to multiple\n // passes.\n if (settings.memoryStrategy === 'clamp-pixel-ratio') {\n devicePixelRatio = Math.min(window.devicePixelRatio, 3);\n }\n\n canvas.width = canvas.clientWidth * devicePixelRatio;\n canvas.height = canvas.clientHeight * devicePixelRatio;\n\n const depthTexture = device.createTexture({\n size: [canvas.width, canvas.height],\n format: 'depth24plus',\n usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,\n label: 'depthTexture',\n });\n\n const depthTextureView = depthTexture.createView({\n label: 'depthTextureView',\n });\n\n // Determines how much memory is allocated to store linked-list elements\n const averageLayersPerFragment = 4;\n\n // Each element stores\n // * color : vec4\n // * depth : f32\n // * index of next element in the list : u32\n const linkedListElementSize =\n 5 * Float32Array.BYTES_PER_ELEMENT + 1 * Uint32Array.BYTES_PER_ELEMENT;\n\n // We want to keep the linked-list buffer size under the maxStorageBufferBindingSize.\n // Split the frame into enough slices to meet that constraint.\n const bytesPerline =\n canvas.width * averageLayersPerFragment * linkedListElementSize;\n const maxLinesSupported = Math.floor(\n device.limits.maxStorageBufferBindingSize / bytesPerline\n );\n const numSlices = Math.ceil(canvas.height / maxLinesSupported);\n const sliceHeight = Math.ceil(canvas.height / numSlices);\n const linkedListBufferSize = sliceHeight * bytesPerline;\n\n const linkedListBuffer = device.createBuffer({\n size: linkedListBufferSize,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n label: 'linkedListBuffer',\n });\n\n // To slice up the frame we need to pass the starting fragment y position of the slice.\n // We do this using a uniform buffer with a dynamic offset.\n const sliceInfoBuffer = device.createBuffer({\n size: numSlices * device.limits.minUniformBufferOffsetAlignment,\n usage: GPUBufferUsage.UNIFORM,\n mappedAtCreation: true,\n label: 'sliceInfoBuffer',\n });\n {\n const mapping = new Int32Array(sliceInfoBuffer.getMappedRange());\n\n // This assumes minUniformBufferOffsetAlignment is a multiple of 4\n const stride =\n device.limits.minUniformBufferOffsetAlignment /\n Int32Array.BYTES_PER_ELEMENT;\n for (let i = 0; i < numSlices; ++i) {\n mapping[i * stride] = i * sliceHeight;\n }\n sliceInfoBuffer.unmap();\n }\n\n // `Heads` struct contains the start index of the linked-list of translucent fragments\n // for a given pixel.\n // * numFragments : u32\n // * data : array\n const headsBuffer = device.createBuffer({\n size: (1 + canvas.width * sliceHeight) * Uint32Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n label: 'headsBuffer',\n });\n\n const headsInitBuffer = device.createBuffer({\n size: (1 + canvas.width * sliceHeight) * Uint32Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.COPY_SRC,\n mappedAtCreation: true,\n label: 'headsInitBuffer',\n });\n {\n const buffer = new Uint32Array(headsInitBuffer.getMappedRange());\n\n for (let i = 0; i < buffer.length; ++i) {\n buffer[i] = 0xffffffff;\n }\n\n headsInitBuffer.unmap();\n }\n\n const translucentBindGroup = device.createBindGroup({\n layout: translucentBindGroupLayout,\n entries: [\n {\n binding: 0,\n resource: {\n buffer: uniformBuffer,\n label: 'uniforms',\n },\n },\n {\n binding: 1,\n resource: {\n buffer: headsBuffer,\n label: 'headsBuffer',\n },\n },\n {\n binding: 2,\n resource: {\n buffer: linkedListBuffer,\n label: 'linkedListBuffer',\n },\n },\n {\n binding: 3,\n resource: depthTextureView,\n },\n {\n binding: 4,\n resource: {\n buffer: sliceInfoBuffer,\n size: device.limits.minUniformBufferOffsetAlignment,\n label: 'sliceInfoBuffer',\n },\n },\n ],\n label: 'translucentBindGroup',\n });\n\n const compositeBindGroup = device.createBindGroup({\n layout: compositePipeline.getBindGroupLayout(0),\n entries: [\n {\n binding: 0,\n resource: {\n buffer: uniformBuffer,\n label: 'uniforms',\n },\n },\n {\n binding: 1,\n resource: {\n buffer: headsBuffer,\n label: 'headsBuffer',\n },\n },\n {\n binding: 2,\n resource: {\n buffer: linkedListBuffer,\n label: 'linkedListBuffer',\n },\n },\n {\n binding: 3,\n resource: {\n buffer: sliceInfoBuffer,\n size: device.limits.minUniformBufferOffsetAlignment,\n label: 'sliceInfoBuffer',\n },\n },\n ],\n });\n\n opaquePassDescriptor.depthStencilAttachment.view = depthTextureView;\n\n // Rotates the camera around the origin based on time.\n function getCameraViewProjMatrix() {\n const aspect = canvas.width / canvas.height;\n\n const projectionMatrix = mat4.perspective(\n (2 * Math.PI) / 5,\n aspect,\n 1,\n 2000.0\n );\n\n const upVector = vec3.fromValues(0, 1, 0);\n const origin = vec3.fromValues(0, 0, 0);\n const eyePosition = vec3.fromValues(0, 5, -100);\n\n const rad = Math.PI * (Date.now() / 5000);\n const rotation = mat4.rotateY(mat4.translation(origin), rad);\n vec3.transformMat4(eyePosition, rotation, eyePosition);\n\n const viewMatrix = mat4.lookAt(eyePosition, origin, upVector);\n\n const viewProjMatrix = mat4.multiply(projectionMatrix, viewMatrix);\n return viewProjMatrix as Float32Array;\n }\n\n return function doDraw() {\n // update the uniform buffer\n {\n const buffer = new ArrayBuffer(uniformBuffer.size);\n\n new Float32Array(buffer).set(getCameraViewProjMatrix());\n new Uint32Array(buffer, 16 * Float32Array.BYTES_PER_ELEMENT).set([\n averageLayersPerFragment * canvas.width * sliceHeight,\n canvas.width,\n ]);\n\n device.queue.writeBuffer(uniformBuffer, 0, buffer);\n }\n\n const commandEncoder = device.createCommandEncoder();\n const textureView = context.getCurrentTexture().createView();\n\n // Draw the opaque objects\n opaquePassDescriptor.colorAttachments[0].view = textureView;\n const opaquePassEncoder =\n commandEncoder.beginRenderPass(opaquePassDescriptor);\n opaquePassEncoder.setPipeline(opaquePipeline);\n opaquePassEncoder.setBindGroup(0, opaqueBindGroup);\n opaquePassEncoder.setVertexBuffer(0, vertexBuffer);\n opaquePassEncoder.setIndexBuffer(indexBuffer, 'uint16');\n opaquePassEncoder.drawIndexed(mesh.triangles.length * 3, 8);\n opaquePassEncoder.end();\n\n for (let slice = 0; slice < numSlices; ++slice) {\n // initialize the heads buffer\n commandEncoder.copyBufferToBuffer(\n headsInitBuffer,\n 0,\n headsBuffer,\n 0,\n headsInitBuffer.size\n );\n\n const scissorX = 0;\n const scissorY = slice * sliceHeight;\n const scissorWidth = canvas.width;\n const scissorHeight =\n Math.min((slice + 1) * sliceHeight, canvas.height) -\n slice * sliceHeight;\n\n // Draw the translucent objects\n translucentPassDescriptor.colorAttachments[0].view = textureView;\n const translucentPassEncoder = commandEncoder.beginRenderPass(\n translucentPassDescriptor\n );\n\n // Set the scissor to only process a horizontal slice of the frame\n translucentPassEncoder.setScissorRect(\n scissorX,\n scissorY,\n scissorWidth,\n scissorHeight\n );\n\n translucentPassEncoder.setPipeline(translucentPipeline);\n translucentPassEncoder.setBindGroup(0, translucentBindGroup, [\n slice * device.limits.minUniformBufferOffsetAlignment,\n ]);\n translucentPassEncoder.setVertexBuffer(0, vertexBuffer);\n translucentPassEncoder.setIndexBuffer(indexBuffer, 'uint16');\n translucentPassEncoder.drawIndexed(mesh.triangles.length * 3, 8);\n translucentPassEncoder.end();\n\n // Composite the opaque and translucent objects\n compositePassDescriptor.colorAttachments[0].view = textureView;\n const compositePassEncoder = commandEncoder.beginRenderPass(\n compositePassDescriptor\n );\n\n // Set the scissor to only process a horizontal slice of the frame\n compositePassEncoder.setScissorRect(\n scissorX,\n scissorY,\n scissorWidth,\n scissorHeight\n );\n\n compositePassEncoder.setPipeline(compositePipeline);\n compositePassEncoder.setBindGroup(0, compositeBindGroup, [\n slice * device.limits.minUniformBufferOffsetAlignment,\n ]);\n compositePassEncoder.draw(6);\n compositePassEncoder.end();\n }\n\n device.queue.submit([commandEncoder.finish()]);\n };\n};\n\nlet doDraw = configure();\n\nconst updateSettings = () => {\n doDraw = configure();\n};\n\nconst gui = new GUI();\ngui\n .add(settings, 'memoryStrategy', ['multipass', 'clamp-pixel-ratio'])\n .onFinishChange(updateSettings);\n\nfunction frame() {\n doDraw();\n\n requestAnimationFrame(frame);\n}\n\nrequestAnimationFrame(frame);\n"],"names":["requestAnimationFrame","requestAnimationFrame$1","vec3","teapotData","mat4","GUI"],"mappings":"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O;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC;AAC1C,CAAC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,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,OAAO,GAAG,CAAC;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE;AAC3B,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AACjC,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,C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C,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI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AAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5D,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5D,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5D,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5D,IAAI,GAAG,CAAC,EAAE,CAAC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GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,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,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AACj2oB,MAAA,CAAA,KAAA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,C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","x_google_ignoreList":[0,1,2]} \ No newline at end of file +{"version":3,"file":"main.js","sources":["../../../node_modules/wgpu-matrix/dist/2.x/wgpu-matrix.module.js","../../../node_modules/dat.gui/build/dat.gui.module.js","../../../node_modules/teapot/teapot.js","../../../../../meshes/utils.ts","../../../../../meshes/teapot.ts","../../../../../sample/a-buffer/main.ts"],"sourcesContent":["/* wgpu-matrix@2.5.1, license MIT */\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nlet EPSILON = 0.000001;\n/**\n * Set the value for EPSILON for various checks\n * @param v - Value to use for EPSILON.\n * @returns previous value of EPSILON;\n */\nfunction setEpsilon(v) {\n const old = EPSILON;\n EPSILON = v;\n return old;\n}\n/**\n * Convert degrees to radians\n * @param degrees - Angle in degrees\n * @returns angle converted to radians\n */\nfunction degToRad(degrees) {\n return degrees * Math.PI / 180;\n}\n/**\n * Convert radians to degrees\n * @param radians - Angle in radians\n * @returns angle converted to degrees\n */\nfunction radToDeg(radians) {\n return radians * 180 / Math.PI;\n}\n/**\n * Lerps between a and b via t\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @returns a + (b - a) * t\n */\nfunction lerp$4(a, b, t) {\n return a + (b - a) * t;\n}\n/**\n * Compute the opposite of lerp. Given a and b and a value between\n * a and b returns a value between 0 and 1. 0 if a, 1 if b.\n * Note: no clamping is done.\n * @param a - start value\n * @param b - end value\n * @param v - value between a and b\n * @returns (v - a) / (b - a)\n */\nfunction inverseLerp(a, b, v) {\n const d = b - a;\n return (Math.abs(b - a) < EPSILON)\n ? a\n : (v - a) / d;\n}\n/**\n * Compute the euclidean modulo\n *\n * ```\n * // table for n / 3\n * -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 <- n\n * ------------------------------------\n * -2 -1 -0 -2 -1 0, 1, 2, 0, 1, 2 <- n % 3\n * 1 2 0 1 2 0, 1, 2, 0, 1, 2 <- euclideanModule(n, 3)\n * ```\n *\n * @param n - dividend\n * @param m - divisor\n * @returns the euclidean modulo of n / m\n */\nfunction euclideanModulo(n, m) {\n return ((n % m) + m) % m;\n}\n\nvar utils = /*#__PURE__*/Object.freeze({\n __proto__: null,\n get EPSILON () { return EPSILON; },\n setEpsilon: setEpsilon,\n degToRad: degToRad,\n radToDeg: radToDeg,\n lerp: lerp$4,\n inverseLerp: inverseLerp,\n euclideanModulo: euclideanModulo\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Vec2 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new Vec2. In other words you can do this\n *\n * const v = vec2.cross(v1, v2); // Creates a new Vec2 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec2.create();\n * vec2.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec2.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet VecType$2 = Float32Array;\n/**\n * Sets the type this library creates for a Vec2\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec2\n */\nfunction setDefaultType$6(ctor) {\n const oldType = VecType$2;\n VecType$2 = ctor;\n return oldType;\n}\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values.\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Vec2's specified type\n * it would be faster to use\n *\n * ```\n * const v = vec2.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Vec2Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `vec2.create` is usually used\n * to create a Vec2 to be filled out as in\n *\n * ```\n * const sum = vec2.create();\n * vec2.add(v1, v2, sum);\n * ```\n *\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nfunction create$5(x = 0, y = 0) {\n const dst = new VecType$2(2);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Vec3 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec3`. In other words you can do this\n *\n * const v = vec3.cross(v1, v2); // Creates a new Vec3 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec3.create();\n * vec3.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec3.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet VecType$1 = Float32Array;\n/**\n * Sets the type this library creates for a Vec3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec3\n */\nfunction setDefaultType$5(ctor) {\n const oldType = VecType$1;\n VecType$1 = ctor;\n return oldType;\n}\n/**\n * Creates a vec3; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nfunction create$4(x, y, z) {\n const dst = new VecType$1(3);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n }\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nconst fromValues$3 = create$5;\n/**\n * Sets the values of a Vec2\n * Also see {@link vec2.create} and {@link vec2.copy}\n *\n * @param x first value\n * @param y second value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set$5(x, y, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = x;\n dst[1] = y;\n return dst;\n}\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nfunction ceil$2(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n return dst;\n}\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nfunction floor$2(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n return dst;\n}\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nfunction round$2(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n return dst;\n}\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nfunction clamp$2(v, min = 0, max = 1, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n return dst;\n}\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nfunction add$3(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n return dst;\n}\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nfunction addScaled$2(a, b, scale, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n return dst;\n}\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nfunction angle$2(a, b) {\n const ax = a[0];\n const ay = a[1];\n const bx = a[0];\n const by = a[1];\n const mag1 = Math.sqrt(ax * ax + ay * ay);\n const mag2 = Math.sqrt(bx * bx + by * by);\n const mag = mag1 * mag2;\n const cosine = mag && dot$3(a, b) / mag;\n return Math.acos(cosine);\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nfunction subtract$3(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nconst sub$3 = subtract$3;\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nfunction equalsApproximately$5(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON;\n}\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nfunction equals$5(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp$3(a, b, t, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n return dst;\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nfunction lerpV$2(a, b, t, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n return dst;\n}\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nfunction max$2(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n return dst;\n}\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nfunction min$2(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n return dst;\n}\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction mulScalar$3(v, k, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n return dst;\n}\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nconst scale$5 = mulScalar$3;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction divScalar$3(v, k, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n return dst;\n}\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nfunction inverse$5(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n return dst;\n}\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nconst invert$4 = inverse$5;\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nfunction cross$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n const z = a[0] * b[1] - a[1] * b[0];\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = z;\n return dst;\n}\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nfunction dot$3(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nfunction length$3(v) {\n const v0 = v[0];\n const v1 = v[1];\n return Math.sqrt(v0 * v0 + v1 * v1);\n}\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nconst len$3 = length$3;\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nfunction lengthSq$3(v) {\n const v0 = v[0];\n const v1 = v[1];\n return v0 * v0 + v1 * v1;\n}\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nconst lenSq$3 = lengthSq$3;\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nfunction distance$2(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return Math.sqrt(dx * dx + dy * dy);\n}\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nconst dist$2 = distance$2;\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nfunction distanceSq$2(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return dx * dx + dy * dy;\n}\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nconst distSq$2 = distanceSq$2;\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nfunction normalize$3(v, dst) {\n dst = dst || new VecType$2(2);\n const v0 = v[0];\n const v1 = v[1];\n const len = Math.sqrt(v0 * v0 + v1 * v1);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n }\n return dst;\n}\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nfunction negate$4(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = -v[0];\n dst[1] = -v[1];\n return dst;\n}\n/**\n * Copies a vector. (same as {@link vec2.clone})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nfunction copy$5(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = v[0];\n dst[1] = v[1];\n return dst;\n}\n/**\n * Clones a vector. (same as {@link vec2.copy})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nconst clone$5 = copy$5;\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nfunction multiply$5(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n return dst;\n}\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nconst mul$5 = multiply$5;\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nfunction divide$2(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n return dst;\n}\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nconst div$2 = divide$2;\n/**\n * Creates a random unit vector * scale\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nfunction random$1(scale = 1, dst) {\n dst = dst || new VecType$2(2);\n const angle = Math.random() * 2 * Math.PI;\n dst[0] = Math.cos(angle) * scale;\n dst[1] = Math.sin(angle) * scale;\n return dst;\n}\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nfunction zero$2(dst) {\n dst = dst || new VecType$2(2);\n dst[0] = 0;\n dst[1] = 0;\n return dst;\n}\n/**\n * transform Vec2 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat4$2(v, m, dst) {\n dst = dst || new VecType$2(2);\n const x = v[0];\n const y = v[1];\n dst[0] = x * m[0] + y * m[4] + m[12];\n dst[1] = x * m[1] + y * m[5] + m[13];\n return dst;\n}\n/**\n * Transforms vec4 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat3$1(v, m, dst) {\n dst = dst || new VecType$2(2);\n const x = v[0];\n const y = v[1];\n dst[0] = m[0] * x + m[4] * y + m[8];\n dst[1] = m[1] * x + m[5] * y + m[9];\n return dst;\n}\n\nvar vec2Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create$5,\n setDefaultType: setDefaultType$6,\n fromValues: fromValues$3,\n set: set$5,\n ceil: ceil$2,\n floor: floor$2,\n round: round$2,\n clamp: clamp$2,\n add: add$3,\n addScaled: addScaled$2,\n angle: angle$2,\n subtract: subtract$3,\n sub: sub$3,\n equalsApproximately: equalsApproximately$5,\n equals: equals$5,\n lerp: lerp$3,\n lerpV: lerpV$2,\n max: max$2,\n min: min$2,\n mulScalar: mulScalar$3,\n scale: scale$5,\n divScalar: divScalar$3,\n inverse: inverse$5,\n invert: invert$4,\n cross: cross$1,\n dot: dot$3,\n length: length$3,\n len: len$3,\n lengthSq: lengthSq$3,\n lenSq: lenSq$3,\n distance: distance$2,\n dist: dist$2,\n distanceSq: distanceSq$2,\n distSq: distSq$2,\n normalize: normalize$3,\n negate: negate$4,\n copy: copy$5,\n clone: clone$5,\n multiply: multiply$5,\n mul: mul$5,\n divide: divide$2,\n div: div$2,\n random: random$1,\n zero: zero$2,\n transformMat4: transformMat4$2,\n transformMat3: transformMat3$1\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * 3x3 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat3.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat3.create();\n * mat3.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat3.identity();\n * const trans = mat3.translation([1, 2, 3]);\n * mat3.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType$1 = Float32Array;\n// This mess is because with Mat3 we have 3 unused elements.\n// For Float32Array and Float64Array that's not an issue\n// but for Array it's troublesome\nconst ctorMap = new Map([\n [Float32Array, () => new Float32Array(12)],\n [Float64Array, () => new Float64Array(12)],\n [Array, () => new Array(12).fill(0)],\n]);\nlet newMat3 = ctorMap.get(Float32Array);\n/**\n * Sets the type this library creates for a Mat3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat3\n */\nfunction setDefaultType$4(ctor) {\n const oldType = MatType$1;\n MatType$1 = ctor;\n newMat3 = ctorMap.get(ctor);\n return oldType;\n}\n/**\n * Create a Mat3 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat3's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat3.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat3Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat3.create` is usually used\n * to create a Mat3 to be filled out as in\n *\n * ```\n * const m = mat3.create();\n * mat3.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @returns matrix created from values.\n */\nfunction create$3(v0, v1, v2, v3, v4, v5, v6, v7, v8) {\n const dst = newMat3();\n // to make the array homogenous\n dst[3] = 0;\n dst[7] = 0;\n dst[11] = 0;\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[4] = v3;\n if (v4 !== undefined) {\n dst[5] = v4;\n if (v5 !== undefined) {\n dst[6] = v5;\n if (v6 !== undefined) {\n dst[8] = v6;\n if (v7 !== undefined) {\n dst[9] = v7;\n if (v8 !== undefined) {\n dst[10] = v8;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return dst;\n}\n/**\n * Sets the values of a Mat3\n * Also see {@link mat3.create} and {@link mat3.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 set from values.\n */\nfunction set$4(v0, v1, v2, v3, v4, v5, v6, v7, v8, dst) {\n dst = dst || newMat3();\n dst[0] = v0;\n dst[1] = v1;\n dst[2] = v2;\n dst[3] = 0;\n dst[4] = v3;\n dst[5] = v4;\n dst[6] = v5;\n dst[7] = 0;\n dst[8] = v6;\n dst[9] = v7;\n dst[10] = v8;\n dst[11] = 0;\n return dst;\n}\n/**\n * Creates a Mat3 from the upper left 3x3 part of a Mat4\n * @param m4 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from m4\n */\nfunction fromMat4(m4, dst) {\n dst = dst || newMat3();\n dst[0] = m4[0];\n dst[1] = m4[1];\n dst[2] = m4[2];\n dst[3] = 0;\n dst[4] = m4[4];\n dst[5] = m4[5];\n dst[6] = m4[6];\n dst[7] = 0;\n dst[8] = m4[8];\n dst[9] = m4[9];\n dst[10] = m4[10];\n dst[11] = 0;\n return dst;\n}\n/**\n * Creates a Mat3 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from q\n */\nfunction fromQuat$1(q, dst) {\n dst = dst || newMat3();\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n dst[0] = 1 - yy - zz;\n dst[1] = yx + wz;\n dst[2] = zx - wy;\n dst[3] = 0;\n dst[4] = yx - wz;\n dst[5] = 1 - xx - zz;\n dst[6] = zy + wx;\n dst[7] = 0;\n dst[8] = zx + wy;\n dst[9] = zy - wx;\n dst[10] = 1 - xx - yy;\n dst[11] = 0;\n return dst;\n}\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nfunction negate$3(m, dst) {\n dst = dst || newMat3();\n dst[0] = -m[0];\n dst[1] = -m[1];\n dst[2] = -m[2];\n dst[4] = -m[4];\n dst[5] = -m[5];\n dst[6] = -m[6];\n dst[8] = -m[8];\n dst[9] = -m[9];\n dst[10] = -m[10];\n return dst;\n}\n/**\n * Copies a matrix. (same as {@link mat3.clone})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nfunction copy$4(m, dst) {\n dst = dst || newMat3();\n dst[0] = m[0];\n dst[1] = m[1];\n dst[2] = m[2];\n dst[4] = m[4];\n dst[5] = m[5];\n dst[6] = m[6];\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n return dst;\n}\n/**\n * Copies a matrix (same as {@link mat3.copy})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nconst clone$4 = copy$4;\n/**\n * Check if 2 matrices are approximately equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are approximately equal\n */\nfunction equalsApproximately$4(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[4] - b[4]) < EPSILON &&\n Math.abs(a[5] - b[5]) < EPSILON &&\n Math.abs(a[6] - b[6]) < EPSILON &&\n Math.abs(a[8] - b[8]) < EPSILON &&\n Math.abs(a[9] - b[9]) < EPSILON &&\n Math.abs(a[10] - b[10]) < EPSILON;\n}\n/**\n * Check if 2 matrices are exactly equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are exactly equal\n */\nfunction equals$4(a, b) {\n return a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[4] === b[4] &&\n a[5] === b[5] &&\n a[6] === b[6] &&\n a[8] === b[8] &&\n a[9] === b[9] &&\n a[10] === b[10];\n}\n/**\n * Creates a 3-by-3 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 3-by-3 identity matrix.\n */\nfunction identity$2(dst) {\n dst = dst || newMat3();\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nfunction transpose$1(m, dst) {\n dst = dst || newMat3();\n if (dst === m) {\n let t;\n // 0 1 2\n // 4 5 6\n // 8 9 10\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n return dst;\n }\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n dst[0] = m00;\n dst[1] = m10;\n dst[2] = m20;\n dst[4] = m01;\n dst[5] = m11;\n dst[6] = m21;\n dst[8] = m02;\n dst[9] = m12;\n dst[10] = m22;\n return dst;\n}\n/**\n * Computes the inverse of a 3-by-3 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nfunction inverse$4(m, dst) {\n dst = dst || newMat3();\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const b01 = m22 * m11 - m12 * m21;\n const b11 = -m22 * m10 + m12 * m20;\n const b21 = m21 * m10 - m11 * m20;\n const invDet = 1 / (m00 * b01 + m01 * b11 + m02 * b21);\n dst[0] = b01 * invDet;\n dst[1] = (-m22 * m01 + m02 * m21) * invDet;\n dst[2] = (m12 * m01 - m02 * m11) * invDet;\n dst[4] = b11 * invDet;\n dst[5] = (m22 * m00 - m02 * m20) * invDet;\n dst[6] = (-m12 * m00 + m02 * m10) * invDet;\n dst[8] = b21 * invDet;\n dst[9] = (-m21 * m00 + m01 * m20) * invDet;\n dst[10] = (m11 * m00 - m01 * m10) * invDet;\n return dst;\n}\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nfunction determinant$1(m) {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n return m00 * (m11 * m22 - m21 * m12) -\n m10 * (m01 * m22 - m21 * m02) +\n m20 * (m01 * m12 - m11 * m02);\n}\n/**\n * Computes the inverse of a 3-by-3 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nconst invert$3 = inverse$4;\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nfunction multiply$4(a, b, dst) {\n dst = dst || newMat3();\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a10 = a[4 + 0];\n const a11 = a[4 + 1];\n const a12 = a[4 + 2];\n const a20 = a[8 + 0];\n const a21 = a[8 + 1];\n const a22 = a[8 + 2];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b10 = b[4 + 0];\n const b11 = b[4 + 1];\n const b12 = b[4 + 2];\n const b20 = b[8 + 0];\n const b21 = b[8 + 1];\n const b22 = b[8 + 2];\n dst[0] = a00 * b00 + a10 * b01 + a20 * b02;\n dst[1] = a01 * b00 + a11 * b01 + a21 * b02;\n dst[2] = a02 * b00 + a12 * b01 + a22 * b02;\n dst[4] = a00 * b10 + a10 * b11 + a20 * b12;\n dst[5] = a01 * b10 + a11 * b11 + a21 * b12;\n dst[6] = a02 * b10 + a12 * b11 + a22 * b12;\n dst[8] = a00 * b20 + a10 * b21 + a20 * b22;\n dst[9] = a01 * b20 + a11 * b21 + a21 * b22;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22;\n return dst;\n}\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nconst mul$4 = multiply$4;\n/**\n * Sets the translation component of a 3-by-3 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nfunction setTranslation$1(a, v, dst) {\n dst = dst || identity$2();\n if (a !== dst) {\n dst[0] = a[0];\n dst[1] = a[1];\n dst[2] = a[2];\n dst[4] = a[4];\n dst[5] = a[5];\n dst[6] = a[6];\n }\n dst[8] = v[0];\n dst[9] = v[1];\n dst[10] = 1;\n return dst;\n}\n/**\n * Returns the translation component of a 3-by-3 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nfunction getTranslation$2(m, dst) {\n dst = dst || create$5();\n dst[0] = m[8];\n dst[1] = m[9];\n return dst;\n}\n/**\n * Returns an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y,\n * @returns The axis component of m.\n */\nfunction getAxis$2(m, axis, dst) {\n dst = dst || create$5();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n return dst;\n}\n/**\n * Sets an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nfunction setAxis$1(m, v, axis, dst) {\n if (dst !== m) {\n dst = copy$4(m, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nfunction getScaling$2(m, dst) {\n dst = dst || create$5();\n const xx = m[0];\n const xy = m[1];\n const yx = m[4];\n const yy = m[5];\n dst[0] = Math.sqrt(xx * xx + xy * xy);\n dst[1] = Math.sqrt(yx * yx + yy * yy);\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which translates by the given vector v.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nfunction translation$1(v, dst) {\n dst = dst || newMat3();\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[8] = v[0];\n dst[9] = v[1];\n dst[10] = 1;\n return dst;\n}\n/**\n * Translates the given 3-by-3 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nfunction translate$1(m, v, dst) {\n dst = dst || newMat3();\n const v0 = v[0];\n const v1 = v[1];\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n if (m !== dst) {\n dst[0] = m00;\n dst[1] = m01;\n dst[2] = m02;\n dst[4] = m10;\n dst[5] = m11;\n dst[6] = m12;\n }\n dst[8] = m00 * v0 + m10 * v1 + m20;\n dst[9] = m01 * v0 + m11 * v1 + m21;\n dst[10] = m02 * v0 + m12 * v1 + m22;\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which rotates by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotation$1(angleInRadians, dst) {\n dst = dst || newMat3();\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c;\n dst[1] = s;\n dst[2] = 0;\n dst[4] = -s;\n dst[5] = c;\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Rotates the given 3-by-3 matrix by the given angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotate$1(m, angleInRadians, dst) {\n dst = dst || newMat3();\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c * m00 + s * m10;\n dst[1] = c * m01 + s * m11;\n dst[2] = c * m02 + s * m12;\n dst[4] = c * m10 - s * m00;\n dst[5] = c * m11 - s * m01;\n dst[6] = c * m12 - s * m02;\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n }\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * 2 entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction scaling$1(v, dst) {\n dst = dst || newMat3();\n dst[0] = v[0];\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = v[1];\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of 2 entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction scale$4(m, v, dst) {\n dst = dst || newMat3();\n const v0 = v[0];\n const v1 = v[1];\n dst[0] = v0 * m[0 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2];\n dst[4] = v1 * m[1 * 4 + 0];\n dst[5] = v1 * m[1 * 4 + 1];\n dst[6] = v1 * m[1 * 4 + 2];\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n }\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which scales uniformly in each dimension\n * @param s - Amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction uniformScaling$1(s, dst) {\n dst = dst || newMat3();\n dst[0] = s;\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = s;\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given.\n * @param m - The matrix to be modified.\n * @param s - Amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction uniformScale$1(m, s, dst) {\n dst = dst || newMat3();\n dst[0] = s * m[0 * 4 + 0];\n dst[1] = s * m[0 * 4 + 1];\n dst[2] = s * m[0 * 4 + 2];\n dst[4] = s * m[1 * 4 + 0];\n dst[5] = s * m[1 * 4 + 1];\n dst[6] = s * m[1 * 4 + 2];\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n }\n return dst;\n}\n\nvar mat3Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setDefaultType: setDefaultType$4,\n create: create$3,\n set: set$4,\n fromMat4: fromMat4,\n fromQuat: fromQuat$1,\n negate: negate$3,\n copy: copy$4,\n clone: clone$4,\n equalsApproximately: equalsApproximately$4,\n equals: equals$4,\n identity: identity$2,\n transpose: transpose$1,\n inverse: inverse$4,\n determinant: determinant$1,\n invert: invert$3,\n multiply: multiply$4,\n mul: mul$4,\n setTranslation: setTranslation$1,\n getTranslation: getTranslation$2,\n getAxis: getAxis$2,\n setAxis: setAxis$1,\n getScaling: getScaling$2,\n translation: translation$1,\n translate: translate$1,\n rotation: rotation$1,\n rotate: rotate$1,\n scaling: scaling$1,\n scale: scale$4,\n uniformScaling: uniformScaling$1,\n uniformScale: uniformScale$1\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a vec3; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nconst fromValues$2 = create$4;\n/**\n * Sets the values of a Vec3\n * Also see {@link vec3.create} and {@link vec3.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set$3(x, y, z, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n return dst;\n}\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nfunction ceil$1(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n return dst;\n}\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nfunction floor$1(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n return dst;\n}\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nfunction round$1(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n return dst;\n}\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nfunction clamp$1(v, min = 0, max = 1, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n return dst;\n}\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nfunction add$2(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n return dst;\n}\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nfunction addScaled$1(a, b, scale, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n return dst;\n}\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nfunction angle$1(a, b) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = a[0];\n const by = a[1];\n const bz = a[2];\n const mag1 = Math.sqrt(ax * ax + ay * ay + az * az);\n const mag2 = Math.sqrt(bx * bx + by * by + bz * bz);\n const mag = mag1 * mag2;\n const cosine = mag && dot$2(a, b) / mag;\n return Math.acos(cosine);\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nfunction subtract$2(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nconst sub$2 = subtract$2;\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nfunction equalsApproximately$3(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON;\n}\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nfunction equals$3(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp$2(a, b, t, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n return dst;\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nfunction lerpV$1(a, b, t, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n return dst;\n}\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nfunction max$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n return dst;\n}\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nfunction min$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n return dst;\n}\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction mulScalar$2(v, k, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n return dst;\n}\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nconst scale$3 = mulScalar$2;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction divScalar$2(v, k, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n return dst;\n}\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nfunction inverse$3(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n return dst;\n}\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nconst invert$2 = inverse$3;\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nfunction cross(a, b, dst) {\n dst = dst || new VecType$1(3);\n const t1 = a[2] * b[0] - a[0] * b[2];\n const t2 = a[0] * b[1] - a[1] * b[0];\n dst[0] = a[1] * b[2] - a[2] * b[1];\n dst[1] = t1;\n dst[2] = t2;\n return dst;\n}\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nfunction dot$2(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]);\n}\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nfunction length$2(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n}\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nconst len$2 = length$2;\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nfunction lengthSq$2(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return v0 * v0 + v1 * v1 + v2 * v2;\n}\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nconst lenSq$2 = lengthSq$2;\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nfunction distance$1(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n}\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nconst dist$1 = distance$1;\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nfunction distanceSq$1(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return dx * dx + dy * dy + dz * dz;\n}\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nconst distSq$1 = distanceSq$1;\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nfunction normalize$2(v, dst) {\n dst = dst || new VecType$1(3);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n }\n return dst;\n}\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nfunction negate$2(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n return dst;\n}\n/**\n * Copies a vector. (same as {@link vec3.clone})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nfunction copy$3(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n return dst;\n}\n/**\n * Clones a vector. (same as {@link vec3.copy})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nconst clone$3 = copy$3;\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nfunction multiply$3(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n return dst;\n}\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nconst mul$3 = multiply$3;\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nfunction divide$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n return dst;\n}\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nconst div$1 = divide$1;\n/**\n * Creates a random vector\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nfunction random(scale = 1, dst) {\n dst = dst || new VecType$1(3);\n const angle = Math.random() * 2 * Math.PI;\n const z = Math.random() * 2 - 1;\n const zScale = Math.sqrt(1 - z * z) * scale;\n dst[0] = Math.cos(angle) * zScale;\n dst[1] = Math.sin(angle) * zScale;\n dst[2] = z * scale;\n return dst;\n}\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nfunction zero$1(dst) {\n dst = dst || new VecType$1(3);\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n return dst;\n}\n/**\n * transform vec3 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat4$1(v, m, dst) {\n dst = dst || new VecType$1(3);\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = (m[3] * x + m[7] * y + m[11] * z + m[15]) || 1;\n dst[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n dst[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n dst[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return dst;\n}\n/**\n * Transform vec4 by upper 3x3 matrix inside 4x4 matrix.\n * @param v - The direction.\n * @param m - The matrix.\n * @param dst - optional Vec3 to store result. If not passed a new one is created.\n * @returns The transformed vector.\n */\nfunction transformMat4Upper3x3(v, m, dst) {\n dst = dst || new VecType$1(3);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n dst[0] = v0 * m[0 * 4 + 0] + v1 * m[1 * 4 + 0] + v2 * m[2 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1] + v1 * m[1 * 4 + 1] + v2 * m[2 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2] + v1 * m[1 * 4 + 2] + v2 * m[2 * 4 + 2];\n return dst;\n}\n/**\n * Transforms vec3 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat3(v, m, dst) {\n dst = dst || new VecType$1(3);\n const x = v[0];\n const y = v[1];\n const z = v[2];\n dst[0] = x * m[0] + y * m[4] + z * m[8];\n dst[1] = x * m[1] + y * m[5] + z * m[9];\n dst[2] = x * m[2] + y * m[6] + z * m[10];\n return dst;\n}\n/**\n * Transforms vec3 by Quaternion\n * @param v - the vector to transform\n * @param q - the quaternion to transform by\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed\n */\nfunction transformQuat(v, q, dst) {\n dst = dst || new VecType$1(3);\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const w2 = q[3] * 2;\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const uvX = qy * z - qz * y;\n const uvY = qz * x - qx * z;\n const uvZ = qx * y - qy * x;\n dst[0] = x + uvX * w2 + (qy * uvZ - qz * uvY) * 2;\n dst[1] = y + uvY * w2 + (qz * uvX - qx * uvZ) * 2;\n dst[2] = z + uvZ * w2 + (qx * uvY - qy * uvX) * 2;\n return dst;\n}\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nfunction getTranslation$1(m, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nfunction getAxis$1(m, axis, dst) {\n dst = dst || new VecType$1(3);\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nfunction getScaling$1(m, dst) {\n dst = dst || new VecType$1(3);\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return dst;\n}\n\nvar vec3Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create$4,\n setDefaultType: setDefaultType$5,\n fromValues: fromValues$2,\n set: set$3,\n ceil: ceil$1,\n floor: floor$1,\n round: round$1,\n clamp: clamp$1,\n add: add$2,\n addScaled: addScaled$1,\n angle: angle$1,\n subtract: subtract$2,\n sub: sub$2,\n equalsApproximately: equalsApproximately$3,\n equals: equals$3,\n lerp: lerp$2,\n lerpV: lerpV$1,\n max: max$1,\n min: min$1,\n mulScalar: mulScalar$2,\n scale: scale$3,\n divScalar: divScalar$2,\n inverse: inverse$3,\n invert: invert$2,\n cross: cross,\n dot: dot$2,\n length: length$2,\n len: len$2,\n lengthSq: lengthSq$2,\n lenSq: lenSq$2,\n distance: distance$1,\n dist: dist$1,\n distanceSq: distanceSq$1,\n distSq: distSq$1,\n normalize: normalize$2,\n negate: negate$2,\n copy: copy$3,\n clone: clone$3,\n multiply: multiply$3,\n mul: mul$3,\n divide: divide$1,\n div: div$1,\n random: random,\n zero: zero$1,\n transformMat4: transformMat4$1,\n transformMat4Upper3x3: transformMat4Upper3x3,\n transformMat3: transformMat3,\n transformQuat: transformQuat,\n getTranslation: getTranslation$1,\n getAxis: getAxis$1,\n getScaling: getScaling$1\n});\n\n/**\n * 4x4 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat4.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat4.create();\n * mat4.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat4.identity();\n * const trans = mat4.translation([1, 2, 3]);\n * mat4.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType = Float32Array;\n/**\n * Sets the type this library creates for a Mat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat4\n */\nfunction setDefaultType$3(ctor) {\n const oldType = MatType;\n MatType = ctor;\n return oldType;\n}\n/**\n * Create a Mat4 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat4's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat4.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat4Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat4.create` is usually used\n * to create a Mat4 to be filled out as in\n *\n * ```\n * const m = mat4.create();\n * mat4.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @returns created from values.\n */\nfunction create$2(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) {\n const dst = new MatType(16);\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[3] = v3;\n if (v4 !== undefined) {\n dst[4] = v4;\n if (v5 !== undefined) {\n dst[5] = v5;\n if (v6 !== undefined) {\n dst[6] = v6;\n if (v7 !== undefined) {\n dst[7] = v7;\n if (v8 !== undefined) {\n dst[8] = v8;\n if (v9 !== undefined) {\n dst[9] = v9;\n if (v10 !== undefined) {\n dst[10] = v10;\n if (v11 !== undefined) {\n dst[11] = v11;\n if (v12 !== undefined) {\n dst[12] = v12;\n if (v13 !== undefined) {\n dst[13] = v13;\n if (v14 !== undefined) {\n dst[14] = v14;\n if (v15 !== undefined) {\n dst[15] = v15;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return dst;\n}\n/**\n * Sets the values of a Mat4\n * Also see {@link mat4.create} and {@link mat4.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 created from values.\n */\nfunction set$2(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, dst) {\n dst = dst || new MatType(16);\n dst[0] = v0;\n dst[1] = v1;\n dst[2] = v2;\n dst[3] = v3;\n dst[4] = v4;\n dst[5] = v5;\n dst[6] = v6;\n dst[7] = v7;\n dst[8] = v8;\n dst[9] = v9;\n dst[10] = v10;\n dst[11] = v11;\n dst[12] = v12;\n dst[13] = v13;\n dst[14] = v14;\n dst[15] = v15;\n return dst;\n}\n/**\n * Creates a Mat4 from a Mat3\n * @param m3 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from m3\n */\nfunction fromMat3(m3, dst) {\n dst = dst || new MatType(16);\n dst[0] = m3[0];\n dst[1] = m3[1];\n dst[2] = m3[2];\n dst[3] = 0;\n dst[4] = m3[4];\n dst[5] = m3[5];\n dst[6] = m3[6];\n dst[7] = 0;\n dst[8] = m3[8];\n dst[9] = m3[9];\n dst[10] = m3[10];\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Creates a Mat4 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from q\n */\nfunction fromQuat(q, dst) {\n dst = dst || new MatType(16);\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n dst[0] = 1 - yy - zz;\n dst[1] = yx + wz;\n dst[2] = zx - wy;\n dst[3] = 0;\n dst[4] = yx - wz;\n dst[5] = 1 - xx - zz;\n dst[6] = zy + wx;\n dst[7] = 0;\n dst[8] = zx + wy;\n dst[9] = zy - wx;\n dst[10] = 1 - xx - yy;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nfunction negate$1(m, dst) {\n dst = dst || new MatType(16);\n dst[0] = -m[0];\n dst[1] = -m[1];\n dst[2] = -m[2];\n dst[3] = -m[3];\n dst[4] = -m[4];\n dst[5] = -m[5];\n dst[6] = -m[6];\n dst[7] = -m[7];\n dst[8] = -m[8];\n dst[9] = -m[9];\n dst[10] = -m[10];\n dst[11] = -m[11];\n dst[12] = -m[12];\n dst[13] = -m[13];\n dst[14] = -m[14];\n dst[15] = -m[15];\n return dst;\n}\n/**\n * Copies a matrix. (same as {@link mat4.clone})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nfunction copy$2(m, dst) {\n dst = dst || new MatType(16);\n dst[0] = m[0];\n dst[1] = m[1];\n dst[2] = m[2];\n dst[3] = m[3];\n dst[4] = m[4];\n dst[5] = m[5];\n dst[6] = m[6];\n dst[7] = m[7];\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n dst[11] = m[11];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n return dst;\n}\n/**\n * Copies a matrix (same as {@link mat4.copy})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nconst clone$2 = copy$2;\n/**\n * Check if 2 matrices are approximately equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are approximately equal\n */\nfunction equalsApproximately$2(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON &&\n Math.abs(a[4] - b[4]) < EPSILON &&\n Math.abs(a[5] - b[5]) < EPSILON &&\n Math.abs(a[6] - b[6]) < EPSILON &&\n Math.abs(a[7] - b[7]) < EPSILON &&\n Math.abs(a[8] - b[8]) < EPSILON &&\n Math.abs(a[9] - b[9]) < EPSILON &&\n Math.abs(a[10] - b[10]) < EPSILON &&\n Math.abs(a[11] - b[11]) < EPSILON &&\n Math.abs(a[12] - b[12]) < EPSILON &&\n Math.abs(a[13] - b[13]) < EPSILON &&\n Math.abs(a[14] - b[14]) < EPSILON &&\n Math.abs(a[15] - b[15]) < EPSILON;\n}\n/**\n * Check if 2 matrices are exactly equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are exactly equal\n */\nfunction equals$2(a, b) {\n return a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[3] === b[3] &&\n a[4] === b[4] &&\n a[5] === b[5] &&\n a[6] === b[6] &&\n a[7] === b[7] &&\n a[8] === b[8] &&\n a[9] === b[9] &&\n a[10] === b[10] &&\n a[11] === b[11] &&\n a[12] === b[12] &&\n a[13] === b[13] &&\n a[14] === b[14] &&\n a[15] === b[15];\n}\n/**\n * Creates a 4-by-4 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 4-by-4 identity matrix.\n */\nfunction identity$1(dst) {\n dst = dst || new MatType(16);\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nfunction transpose(m, dst) {\n dst = dst || new MatType(16);\n if (dst === m) {\n let t;\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n t = m[3];\n m[3] = m[12];\n m[12] = t;\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n t = m[7];\n m[7] = m[13];\n m[13] = t;\n t = m[11];\n m[11] = m[14];\n m[14] = t;\n return dst;\n }\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n dst[0] = m00;\n dst[1] = m10;\n dst[2] = m20;\n dst[3] = m30;\n dst[4] = m01;\n dst[5] = m11;\n dst[6] = m21;\n dst[7] = m31;\n dst[8] = m02;\n dst[9] = m12;\n dst[10] = m22;\n dst[11] = m32;\n dst[12] = m03;\n dst[13] = m13;\n dst[14] = m23;\n dst[15] = m33;\n return dst;\n}\n/**\n * Computes the inverse of a 4-by-4 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nfunction inverse$2(m, dst) {\n dst = dst || new MatType(16);\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n const tmp12 = m20 * m31;\n const tmp13 = m30 * m21;\n const tmp14 = m10 * m31;\n const tmp15 = m30 * m11;\n const tmp16 = m10 * m21;\n const tmp17 = m20 * m11;\n const tmp18 = m00 * m31;\n const tmp19 = m30 * m01;\n const tmp20 = m00 * m21;\n const tmp21 = m20 * m01;\n const tmp22 = m00 * m11;\n const tmp23 = m10 * m01;\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n const d = 1 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\n dst[0] = d * t0;\n dst[1] = d * t1;\n dst[2] = d * t2;\n dst[3] = d * t3;\n dst[4] = d * ((tmp1 * m10 + tmp2 * m20 + tmp5 * m30) -\n (tmp0 * m10 + tmp3 * m20 + tmp4 * m30));\n dst[5] = d * ((tmp0 * m00 + tmp7 * m20 + tmp8 * m30) -\n (tmp1 * m00 + tmp6 * m20 + tmp9 * m30));\n dst[6] = d * ((tmp3 * m00 + tmp6 * m10 + tmp11 * m30) -\n (tmp2 * m00 + tmp7 * m10 + tmp10 * m30));\n dst[7] = d * ((tmp4 * m00 + tmp9 * m10 + tmp10 * m20) -\n (tmp5 * m00 + tmp8 * m10 + tmp11 * m20));\n dst[8] = d * ((tmp12 * m13 + tmp15 * m23 + tmp16 * m33) -\n (tmp13 * m13 + tmp14 * m23 + tmp17 * m33));\n dst[9] = d * ((tmp13 * m03 + tmp18 * m23 + tmp21 * m33) -\n (tmp12 * m03 + tmp19 * m23 + tmp20 * m33));\n dst[10] = d * ((tmp14 * m03 + tmp19 * m13 + tmp22 * m33) -\n (tmp15 * m03 + tmp18 * m13 + tmp23 * m33));\n dst[11] = d * ((tmp17 * m03 + tmp20 * m13 + tmp23 * m23) -\n (tmp16 * m03 + tmp21 * m13 + tmp22 * m23));\n dst[12] = d * ((tmp14 * m22 + tmp17 * m32 + tmp13 * m12) -\n (tmp16 * m32 + tmp12 * m12 + tmp15 * m22));\n dst[13] = d * ((tmp20 * m32 + tmp12 * m02 + tmp19 * m22) -\n (tmp18 * m22 + tmp21 * m32 + tmp13 * m02));\n dst[14] = d * ((tmp18 * m12 + tmp23 * m32 + tmp15 * m02) -\n (tmp22 * m32 + tmp14 * m02 + tmp19 * m12));\n dst[15] = d * ((tmp22 * m22 + tmp16 * m02 + tmp21 * m12) -\n (tmp20 * m12 + tmp23 * m22 + tmp17 * m02));\n return dst;\n}\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nfunction determinant(m) {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n return m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3;\n}\n/**\n * Computes the inverse of a 4-by-4 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nconst invert$1 = inverse$2;\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nfunction multiply$2(a, b, dst) {\n dst = dst || new MatType(16);\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4 + 0];\n const a11 = a[4 + 1];\n const a12 = a[4 + 2];\n const a13 = a[4 + 3];\n const a20 = a[8 + 0];\n const a21 = a[8 + 1];\n const a22 = a[8 + 2];\n const a23 = a[8 + 3];\n const a30 = a[12 + 0];\n const a31 = a[12 + 1];\n const a32 = a[12 + 2];\n const a33 = a[12 + 3];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b03 = b[3];\n const b10 = b[4 + 0];\n const b11 = b[4 + 1];\n const b12 = b[4 + 2];\n const b13 = b[4 + 3];\n const b20 = b[8 + 0];\n const b21 = b[8 + 1];\n const b22 = b[8 + 2];\n const b23 = b[8 + 3];\n const b30 = b[12 + 0];\n const b31 = b[12 + 1];\n const b32 = b[12 + 2];\n const b33 = b[12 + 3];\n dst[0] = a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03;\n dst[1] = a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03;\n dst[2] = a02 * b00 + a12 * b01 + a22 * b02 + a32 * b03;\n dst[3] = a03 * b00 + a13 * b01 + a23 * b02 + a33 * b03;\n dst[4] = a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13;\n dst[5] = a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13;\n dst[6] = a02 * b10 + a12 * b11 + a22 * b12 + a32 * b13;\n dst[7] = a03 * b10 + a13 * b11 + a23 * b12 + a33 * b13;\n dst[8] = a00 * b20 + a10 * b21 + a20 * b22 + a30 * b23;\n dst[9] = a01 * b20 + a11 * b21 + a21 * b22 + a31 * b23;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22 + a32 * b23;\n dst[11] = a03 * b20 + a13 * b21 + a23 * b22 + a33 * b23;\n dst[12] = a00 * b30 + a10 * b31 + a20 * b32 + a30 * b33;\n dst[13] = a01 * b30 + a11 * b31 + a21 * b32 + a31 * b33;\n dst[14] = a02 * b30 + a12 * b31 + a22 * b32 + a32 * b33;\n dst[15] = a03 * b30 + a13 * b31 + a23 * b32 + a33 * b33;\n return dst;\n}\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nconst mul$2 = multiply$2;\n/**\n * Sets the translation component of a 4-by-4 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nfunction setTranslation(a, v, dst) {\n dst = dst || identity$1();\n if (a !== dst) {\n dst[0] = a[0];\n dst[1] = a[1];\n dst[2] = a[2];\n dst[3] = a[3];\n dst[4] = a[4];\n dst[5] = a[5];\n dst[6] = a[6];\n dst[7] = a[7];\n dst[8] = a[8];\n dst[9] = a[9];\n dst[10] = a[10];\n dst[11] = a[11];\n }\n dst[12] = v[0];\n dst[13] = v[1];\n dst[14] = v[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nfunction getTranslation(m, dst) {\n dst = dst || create$4();\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nfunction getAxis(m, axis, dst) {\n dst = dst || create$4();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n/**\n * Sets an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nfunction setAxis(a, v, axis, dst) {\n if (dst !== a) {\n dst = copy$2(a, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n dst[off + 2] = v[2];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nfunction getScaling(m, dst) {\n dst = dst || create$4();\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return dst;\n}\n/**\n * Computes a 4-by-4 perspective transformation matrix given the angular height\n * of the frustum, the aspect ratio, and the near and far clipping planes. The\n * arguments define a frustum extending in the negative z direction. The given\n * angle is the vertical angle of the frustum, and the horizontal angle is\n * determined to produce the given aspect ratio. The arguments near and far are\n * the distances to the near and far clipping planes. Note that near and far\n * are not z coordinates, but rather they are distances along the negative\n * z-axis. The matrix generated sends the viewing frustum to the unit box.\n * We assume a unit box extending from -1 to 1 in the x and y dimensions and\n * from 0 to 1 in the z dimension.\n *\n * Note: If you pass `Infinity` for zFar then it will produce a projection matrix\n * returns -Infinity for Z when transforming coordinates with Z <= 0 and +Infinity for Z\n * otherwise.\n *\n * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians).\n * @param aspect - The aspect ratio width / height.\n * @param zNear - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param zFar - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The perspective matrix.\n */\nfunction perspective(fieldOfViewYInRadians, aspect, zNear, zFar, dst) {\n dst = dst || new MatType(16);\n const f = Math.tan(Math.PI * 0.5 - 0.5 * fieldOfViewYInRadians);\n dst[0] = f / aspect;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = f;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[11] = -1;\n dst[12] = 0;\n dst[13] = 0;\n dst[15] = 0;\n if (zFar === Infinity) {\n dst[10] = -1;\n dst[14] = -zNear;\n }\n else {\n const rangeInv = 1 / (zNear - zFar);\n dst[10] = zFar * rangeInv;\n dst[14] = zFar * zNear * rangeInv;\n }\n return dst;\n}\n/**\n * Computes a 4-by-4 orthogonal transformation matrix that transforms from\n * the given the left, right, bottom, and top dimensions to -1 +1 in x, and y\n * and 0 to +1 in z.\n * @param left - Left side of the near clipping plane viewport.\n * @param right - Right side of the near clipping plane viewport.\n * @param bottom - Bottom of the near clipping plane viewport.\n * @param top - Top of the near clipping plane viewport.\n * @param near - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param far - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The orthographic projection matrix.\n */\nfunction ortho(left, right, bottom, top, near, far, dst) {\n dst = dst || new MatType(16);\n dst[0] = 2 / (right - left);\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 2 / (top - bottom);\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1 / (near - far);\n dst[11] = 0;\n dst[12] = (right + left) / (left - right);\n dst[13] = (top + bottom) / (bottom - top);\n dst[14] = near / (near - far);\n dst[15] = 1;\n return dst;\n}\n/**\n * Computes a 4-by-4 perspective transformation matrix given the left, right,\n * top, bottom, near and far clipping planes. The arguments define a frustum\n * extending in the negative z direction. The arguments near and far are the\n * distances to the near and far clipping planes. Note that near and far are not\n * z coordinates, but rather they are distances along the negative z-axis. The\n * matrix generated sends the viewing frustum to the unit box. We assume a unit\n * box extending from -1 to 1 in the x and y dimensions and from 0 to 1 in the z\n * dimension.\n * @param left - The x coordinate of the left plane of the box.\n * @param right - The x coordinate of the right plane of the box.\n * @param bottom - The y coordinate of the bottom plane of the box.\n * @param top - The y coordinate of the right plane of the box.\n * @param near - The negative z coordinate of the near plane of the box.\n * @param far - The negative z coordinate of the far plane of the box.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The perspective projection matrix.\n */\nfunction frustum(left, right, bottom, top, near, far, dst) {\n dst = dst || new MatType(16);\n const dx = (right - left);\n const dy = (top - bottom);\n const dz = (near - far);\n dst[0] = 2 * near / dx;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 2 * near / dy;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = (left + right) / dx;\n dst[9] = (top + bottom) / dy;\n dst[10] = far / dz;\n dst[11] = -1;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = near * far / dz;\n dst[15] = 0;\n return dst;\n}\nlet xAxis;\nlet yAxis;\nlet zAxis;\n/**\n * Computes a 4-by-4 aim transformation.\n *\n * This is a matrix which positions an object aiming down positive Z.\n * toward the target.\n *\n * Note: this is **NOT** the inverse of lookAt as lookAt looks at negative Z.\n *\n * @param position - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nfunction aim(position, target, up, dst) {\n dst = dst || new MatType(16);\n xAxis = xAxis || create$4();\n yAxis = yAxis || create$4();\n zAxis = zAxis || create$4();\n normalize$2(subtract$2(target, position, zAxis), zAxis);\n normalize$2(cross(up, zAxis, xAxis), xAxis);\n normalize$2(cross(zAxis, xAxis, yAxis), yAxis);\n dst[0] = xAxis[0];\n dst[1] = xAxis[1];\n dst[2] = xAxis[2];\n dst[3] = 0;\n dst[4] = yAxis[0];\n dst[5] = yAxis[1];\n dst[6] = yAxis[2];\n dst[7] = 0;\n dst[8] = zAxis[0];\n dst[9] = zAxis[1];\n dst[10] = zAxis[2];\n dst[11] = 0;\n dst[12] = position[0];\n dst[13] = position[1];\n dst[14] = position[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Computes a 4-by-4 camera aim transformation.\n *\n * This is a matrix which positions an object aiming down negative Z.\n * toward the target.\n *\n * Note: this is the inverse of `lookAt`\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nfunction cameraAim(eye, target, up, dst) {\n dst = dst || new MatType(16);\n xAxis = xAxis || create$4();\n yAxis = yAxis || create$4();\n zAxis = zAxis || create$4();\n normalize$2(subtract$2(eye, target, zAxis), zAxis);\n normalize$2(cross(up, zAxis, xAxis), xAxis);\n normalize$2(cross(zAxis, xAxis, yAxis), yAxis);\n dst[0] = xAxis[0];\n dst[1] = xAxis[1];\n dst[2] = xAxis[2];\n dst[3] = 0;\n dst[4] = yAxis[0];\n dst[5] = yAxis[1];\n dst[6] = yAxis[2];\n dst[7] = 0;\n dst[8] = zAxis[0];\n dst[9] = zAxis[1];\n dst[10] = zAxis[2];\n dst[11] = 0;\n dst[12] = eye[0];\n dst[13] = eye[1];\n dst[14] = eye[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Computes a 4-by-4 view transformation.\n *\n * This is a view matrix which transforms all other objects\n * to be in the space of the view defined by the parameters.\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The look-at matrix.\n */\nfunction lookAt(eye, target, up, dst) {\n dst = dst || new MatType(16);\n xAxis = xAxis || create$4();\n yAxis = yAxis || create$4();\n zAxis = zAxis || create$4();\n normalize$2(subtract$2(eye, target, zAxis), zAxis);\n normalize$2(cross(up, zAxis, xAxis), xAxis);\n normalize$2(cross(zAxis, xAxis, yAxis), yAxis);\n dst[0] = xAxis[0];\n dst[1] = yAxis[0];\n dst[2] = zAxis[0];\n dst[3] = 0;\n dst[4] = xAxis[1];\n dst[5] = yAxis[1];\n dst[6] = zAxis[1];\n dst[7] = 0;\n dst[8] = xAxis[2];\n dst[9] = yAxis[2];\n dst[10] = zAxis[2];\n dst[11] = 0;\n dst[12] = -(xAxis[0] * eye[0] + xAxis[1] * eye[1] + xAxis[2] * eye[2]);\n dst[13] = -(yAxis[0] * eye[0] + yAxis[1] * eye[1] + yAxis[2] * eye[2]);\n dst[14] = -(zAxis[0] * eye[0] + zAxis[1] * eye[1] + zAxis[2] * eye[2]);\n dst[15] = 1;\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which translates by the given vector v.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nfunction translation(v, dst) {\n dst = dst || new MatType(16);\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n dst[11] = 0;\n dst[12] = v[0];\n dst[13] = v[1];\n dst[14] = v[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Translates the given 4-by-4 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nfunction translate(m, v, dst) {\n dst = dst || new MatType(16);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n if (m !== dst) {\n dst[0] = m00;\n dst[1] = m01;\n dst[2] = m02;\n dst[3] = m03;\n dst[4] = m10;\n dst[5] = m11;\n dst[6] = m12;\n dst[7] = m13;\n dst[8] = m20;\n dst[9] = m21;\n dst[10] = m22;\n dst[11] = m23;\n }\n dst[12] = m00 * v0 + m10 * v1 + m20 * v2 + m30;\n dst[13] = m01 * v0 + m11 * v1 + m21 * v2 + m31;\n dst[14] = m02 * v0 + m12 * v1 + m22 * v2 + m32;\n dst[15] = m03 * v0 + m13 * v1 + m23 * v2 + m33;\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the x-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotationX(angleInRadians, dst) {\n dst = dst || new MatType(16);\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = c;\n dst[6] = s;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = -s;\n dst[10] = c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the x-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotateX$1(m, angleInRadians, dst) {\n dst = dst || new MatType(16);\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[4] = c * m10 + s * m20;\n dst[5] = c * m11 + s * m21;\n dst[6] = c * m12 + s * m22;\n dst[7] = c * m13 + s * m23;\n dst[8] = c * m20 - s * m10;\n dst[9] = c * m21 - s * m11;\n dst[10] = c * m22 - s * m12;\n dst[11] = c * m23 - s * m13;\n if (m !== dst) {\n dst[0] = m[0];\n dst[1] = m[1];\n dst[2] = m[2];\n dst[3] = m[3];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the y-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotationY(angleInRadians, dst) {\n dst = dst || new MatType(16);\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c;\n dst[1] = 0;\n dst[2] = -s;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = s;\n dst[9] = 0;\n dst[10] = c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the y-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotateY$1(m, angleInRadians, dst) {\n dst = dst || new MatType(16);\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c * m00 - s * m20;\n dst[1] = c * m01 - s * m21;\n dst[2] = c * m02 - s * m22;\n dst[3] = c * m03 - s * m23;\n dst[8] = c * m20 + s * m00;\n dst[9] = c * m21 + s * m01;\n dst[10] = c * m22 + s * m02;\n dst[11] = c * m23 + s * m03;\n if (m !== dst) {\n dst[4] = m[4];\n dst[5] = m[5];\n dst[6] = m[6];\n dst[7] = m[7];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the z-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotationZ(angleInRadians, dst) {\n dst = dst || new MatType(16);\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c;\n dst[1] = s;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = -s;\n dst[5] = c;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the z-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotateZ$1(m, angleInRadians, dst) {\n dst = dst || new MatType(16);\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c * m00 + s * m10;\n dst[1] = c * m01 + s * m11;\n dst[2] = c * m02 + s * m12;\n dst[3] = c * m03 + s * m13;\n dst[4] = c * m10 - s * m00;\n dst[5] = c * m11 - s * m01;\n dst[6] = c * m12 - s * m02;\n dst[7] = c * m13 - s * m03;\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n dst[11] = m[11];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nfunction axisRotation(axis, angleInRadians, dst) {\n dst = dst || new MatType(16);\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n dst[0] = xx + (1 - xx) * c;\n dst[1] = x * y * oneMinusCosine + z * s;\n dst[2] = x * z * oneMinusCosine - y * s;\n dst[3] = 0;\n dst[4] = x * y * oneMinusCosine - z * s;\n dst[5] = yy + (1 - yy) * c;\n dst[6] = y * z * oneMinusCosine + x * s;\n dst[7] = 0;\n dst[8] = x * z * oneMinusCosine + y * s;\n dst[9] = y * z * oneMinusCosine - x * s;\n dst[10] = zz + (1 - zz) * c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle. (same as axisRotation)\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nconst rotation = axisRotation;\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle.\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction axisRotate(m, axis, angleInRadians, dst) {\n dst = dst || new MatType(16);\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n const r00 = xx + (1 - xx) * c;\n const r01 = x * y * oneMinusCosine + z * s;\n const r02 = x * z * oneMinusCosine - y * s;\n const r10 = x * y * oneMinusCosine - z * s;\n const r11 = yy + (1 - yy) * c;\n const r12 = y * z * oneMinusCosine + x * s;\n const r20 = x * z * oneMinusCosine + y * s;\n const r21 = y * z * oneMinusCosine - x * s;\n const r22 = zz + (1 - zz) * c;\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n dst[0] = r00 * m00 + r01 * m10 + r02 * m20;\n dst[1] = r00 * m01 + r01 * m11 + r02 * m21;\n dst[2] = r00 * m02 + r01 * m12 + r02 * m22;\n dst[3] = r00 * m03 + r01 * m13 + r02 * m23;\n dst[4] = r10 * m00 + r11 * m10 + r12 * m20;\n dst[5] = r10 * m01 + r11 * m11 + r12 * m21;\n dst[6] = r10 * m02 + r11 * m12 + r12 * m22;\n dst[7] = r10 * m03 + r11 * m13 + r12 * m23;\n dst[8] = r20 * m00 + r21 * m10 + r22 * m20;\n dst[9] = r20 * m01 + r21 * m11 + r22 * m21;\n dst[10] = r20 * m02 + r21 * m12 + r22 * m22;\n dst[11] = r20 * m03 + r21 * m13 + r22 * m23;\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle. (same as rotate)\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nconst rotate = axisRotate;\n/**\n * Creates a 4-by-4 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * three entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction scaling(v, dst) {\n dst = dst || new MatType(16);\n dst[0] = v[0];\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = v[1];\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = v[2];\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Scales the given 4-by-4 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of three entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction scale$2(m, v, dst) {\n dst = dst || new MatType(16);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n dst[0] = v0 * m[0 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2];\n dst[3] = v0 * m[0 * 4 + 3];\n dst[4] = v1 * m[1 * 4 + 0];\n dst[5] = v1 * m[1 * 4 + 1];\n dst[6] = v1 * m[1 * 4 + 2];\n dst[7] = v1 * m[1 * 4 + 3];\n dst[8] = v2 * m[2 * 4 + 0];\n dst[9] = v2 * m[2 * 4 + 1];\n dst[10] = v2 * m[2 * 4 + 2];\n dst[11] = v2 * m[2 * 4 + 3];\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which scales a uniform amount in each dimension.\n * @param s - the amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction uniformScaling(s, dst) {\n dst = dst || new MatType(16);\n dst[0] = s;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = s;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = s;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Scales the given 4-by-4 matrix in each dimension by a uniform scale.\n * @param m - The matrix to be modified.\n * @param s - The amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction uniformScale(m, s, dst) {\n dst = dst || new MatType(16);\n dst[0] = s * m[0 * 4 + 0];\n dst[1] = s * m[0 * 4 + 1];\n dst[2] = s * m[0 * 4 + 2];\n dst[3] = s * m[0 * 4 + 3];\n dst[4] = s * m[1 * 4 + 0];\n dst[5] = s * m[1 * 4 + 1];\n dst[6] = s * m[1 * 4 + 2];\n dst[7] = s * m[1 * 4 + 3];\n dst[8] = s * m[2 * 4 + 0];\n dst[9] = s * m[2 * 4 + 1];\n dst[10] = s * m[2 * 4 + 2];\n dst[11] = s * m[2 * 4 + 3];\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n\nvar mat4Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setDefaultType: setDefaultType$3,\n create: create$2,\n set: set$2,\n fromMat3: fromMat3,\n fromQuat: fromQuat,\n negate: negate$1,\n copy: copy$2,\n clone: clone$2,\n equalsApproximately: equalsApproximately$2,\n equals: equals$2,\n identity: identity$1,\n transpose: transpose,\n inverse: inverse$2,\n determinant: determinant,\n invert: invert$1,\n multiply: multiply$2,\n mul: mul$2,\n setTranslation: setTranslation,\n getTranslation: getTranslation,\n getAxis: getAxis,\n setAxis: setAxis,\n getScaling: getScaling,\n perspective: perspective,\n ortho: ortho,\n frustum: frustum,\n aim: aim,\n cameraAim: cameraAim,\n lookAt: lookAt,\n translation: translation,\n translate: translate,\n rotationX: rotationX,\n rotateX: rotateX$1,\n rotationY: rotationY,\n rotateY: rotateY$1,\n rotationZ: rotationZ,\n rotateZ: rotateZ$1,\n axisRotation: axisRotation,\n rotation: rotation,\n axisRotate: axisRotate,\n rotate: rotate,\n scaling: scaling,\n scale: scale$2,\n uniformScaling: uniformScaling,\n uniformScale: uniformScale\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Quat4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Quat4`. In other words you can do this\n *\n * const v = quat4.cross(v1, v2); // Creates a new Quat4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = quat4.create();\n * quat4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * quat4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet QuatType = Float32Array;\n/**\n * Sets the type this library creates for a Quat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Quat4\n */\nfunction setDefaultType$2(ctor) {\n const oldType = QuatType;\n QuatType = ctor;\n return oldType;\n}\n/**\n * Creates a quat4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nfunction create$1(x, y, z, w) {\n const dst = new QuatType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a Quat; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nconst fromValues$1 = create$1;\n/**\n * Sets the values of a Quat\n * Also see {@link quat.create} and {@link quat.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set$1(x, y, z, w, dst) {\n dst = dst || new QuatType(4);\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n return dst;\n}\n/**\n * Sets a quaternion from the given angle and axis,\n * then returns it.\n *\n * @param axis - the axis to rotate around\n * @param angleInRadians - the angle\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The quaternion that represents the given axis and angle\n **/\nfunction fromAxisAngle(axis, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const s = Math.sin(halfAngle);\n dst[0] = s * axis[0];\n dst[1] = s * axis[1];\n dst[2] = s * axis[2];\n dst[3] = Math.cos(halfAngle);\n return dst;\n}\n/**\n * Gets the rotation axis and angle\n * @param q - quaternion to compute from\n * @param dst - Vec3 to hold result. If not passed in a new one is created.\n * @return angle and axis\n */\nfunction toAxisAngle(q, dst) {\n dst = dst || create$4(4);\n const angle = Math.acos(q[3]) * 2;\n const s = Math.sin(angle * 0.5);\n if (s > EPSILON) {\n dst[0] = q[0] / s;\n dst[1] = q[1] / s;\n dst[2] = q[2] / s;\n }\n else {\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n }\n return { angle, axis: dst };\n}\n/**\n * Returns the angle in degrees between two rotations a and b.\n * @param a - quaternion a\n * @param b - quaternion b\n * @return angle in radians between the two quaternions\n */\nfunction angle(a, b) {\n const d = dot$1(a, b);\n return Math.acos(2 * d * d - 1);\n}\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction multiply$1(a, b, dst) {\n dst = dst || new QuatType(4);\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const bw = b[3];\n dst[0] = ax * bw + aw * bx + ay * bz - az * by;\n dst[1] = ay * bw + aw * by + az * bx - ax * bz;\n dst[2] = az * bw + aw * bz + ax * by - ay * bx;\n dst[3] = aw * bw - ax * bx - ay * by - az * bz;\n return dst;\n}\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nconst mul$1 = multiply$1;\n/**\n * Rotates the given quaternion around the X axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction rotateX(q, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const bx = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n dst[0] = qx * bw + qw * bx;\n dst[1] = qy * bw + qz * bx;\n dst[2] = qz * bw - qy * bx;\n dst[3] = qw * bw - qx * bx;\n return dst;\n}\n/**\n * Rotates the given quaternion around the Y axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction rotateY(q, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const by = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n dst[0] = qx * bw - qz * by;\n dst[1] = qy * bw + qw * by;\n dst[2] = qz * bw + qx * by;\n dst[3] = qw * bw - qy * by;\n return dst;\n}\n/**\n * Rotates the given quaternion around the Z axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction rotateZ(q, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const bz = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n dst[0] = qx * bw + qy * bz;\n dst[1] = qy * bw - qx * bz;\n dst[2] = qz * bw + qw * bz;\n dst[3] = qw * bw - qz * bz;\n return dst;\n}\n/**\n * Spherically linear interpolate between two quaternions\n *\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction slerp(a, b, t, dst) {\n dst = dst || new QuatType(4);\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n let bx = b[0];\n let by = b[1];\n let bz = b[2];\n let bw = b[3];\n let cosOmega = ax * bx + ay * by + az * bz + aw * bw;\n if (cosOmega < 0) {\n cosOmega = -cosOmega;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n let scale0;\n let scale1;\n if (1.0 - cosOmega > EPSILON) {\n const omega = Math.acos(cosOmega);\n const sinOmega = Math.sin(omega);\n scale0 = Math.sin((1 - t) * omega) / sinOmega;\n scale1 = Math.sin(t * omega) / sinOmega;\n }\n else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n dst[0] = scale0 * ax + scale1 * bx;\n dst[1] = scale0 * ay + scale1 * by;\n dst[2] = scale0 * az + scale1 * bz;\n dst[3] = scale0 * aw + scale1 * bw;\n return dst;\n}\n/**\n * Compute the inverse of a quaternion\n *\n * @param q - quaternion to compute the inverse of\n * @returns A quaternion that is the result of a * b\n */\nfunction inverse$1(q, dst) {\n dst = dst || new QuatType(4);\n const a0 = q[0];\n const a1 = q[1];\n const a2 = q[2];\n const a3 = q[3];\n const dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n const invDot = dot ? 1 / dot : 0;\n dst[0] = -a0 * invDot;\n dst[1] = -a1 * invDot;\n dst[2] = -a2 * invDot;\n dst[3] = a3 * invDot;\n return dst;\n}\n/**\n * Compute the conjugate of a quaternion\n * For quaternions with a magnitude of 1 (a unit quaternion)\n * this returns the same as the inverse but is faster to calculate.\n *\n * @param q - quaternion to compute the conjugate of.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The conjugate of q\n */\nfunction conjugate(q, dst) {\n dst = dst || new QuatType(4);\n dst[0] = -q[0];\n dst[1] = -q[1];\n dst[2] = -q[2];\n dst[3] = q[3];\n return dst;\n}\n/**\n * Creates a quaternion from the given rotation matrix.\n *\n * The created quaternion is not normalized.\n *\n * @param m - rotation matrix\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nfunction fromMat(m, dst) {\n dst = dst || new QuatType(4);\n /*\n 0 1 2\n 3 4 5\n 6 7 8\n \n 0 1 2\n 4 5 6\n 8 9 10\n */\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n const trace = m[0] + m[5] + m[10];\n if (trace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n const root = Math.sqrt(trace + 1); // 2w\n dst[3] = 0.5 * root;\n const invRoot = 0.5 / root; // 1/(4w)\n dst[0] = (m[6] - m[9]) * invRoot;\n dst[1] = (m[8] - m[2]) * invRoot;\n dst[2] = (m[1] - m[4]) * invRoot;\n }\n else {\n // |w| <= 1/2\n let i = 0;\n if (m[5] > m[0]) {\n i = 1;\n }\n if (m[10] > m[i * 4 + i]) {\n i = 2;\n }\n const j = (i + 1) % 3;\n const k = (i + 2) % 3;\n const root = Math.sqrt(m[i * 4 + i] - m[j * 4 + j] - m[k * 4 + k] + 1.0);\n dst[i] = 0.5 * root;\n const invRoot = 0.5 / root;\n dst[3] = (m[j * 4 + k] - m[k * 4 + j]) * invRoot;\n dst[j] = (m[j * 4 + i] + m[i * 4 + j]) * invRoot;\n dst[k] = (m[k * 4 + i] + m[i * 4 + k]) * invRoot;\n }\n return dst;\n}\n/**\n * Creates a quaternion from the given euler angle x, y, z using the provided intrinsic order for the conversion.\n *\n * @param xAngleInRadians - angle to rotate around X axis in radians.\n * @param yAngleInRadians - angle to rotate around Y axis in radians.\n * @param zAngleInRadians - angle to rotate around Z axis in radians.\n * @param order - order to apply euler angles\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion representing the same rotation as the euler angles applied in the given order\n */\nfunction fromEuler(xAngleInRadians, yAngleInRadians, zAngleInRadians, order, dst) {\n dst = dst || new QuatType(4);\n const xHalfAngle = xAngleInRadians * 0.5;\n const yHalfAngle = yAngleInRadians * 0.5;\n const zHalfAngle = zAngleInRadians * 0.5;\n const sx = Math.sin(xHalfAngle);\n const cx = Math.cos(xHalfAngle);\n const sy = Math.sin(yHalfAngle);\n const cy = Math.cos(yHalfAngle);\n const sz = Math.sin(zHalfAngle);\n const cz = Math.cos(zHalfAngle);\n switch (order) {\n case 'xyz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'xzy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n case 'yxz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n case 'yzx':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'zxy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'zyx':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n default:\n throw new Error(`Unknown rotation order: ${order}`);\n }\n return dst;\n}\n/**\n * Copies a quaternion. (same as {@link quat.clone})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is a copy of q\n */\nfunction copy$1(q, dst) {\n dst = dst || new QuatType(4);\n dst[0] = q[0];\n dst[1] = q[1];\n dst[2] = q[2];\n dst[3] = q[3];\n return dst;\n}\n/**\n * Clones a quaternion. (same as {@link quat.copy})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A copy of q.\n */\nconst clone$1 = copy$1;\n/**\n * Adds two quaternions; assumes a and b have the same dimension.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the sum of a and b.\n */\nfunction add$1(a, b, dst) {\n dst = dst || new QuatType(4);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n return dst;\n}\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nfunction subtract$1(a, b, dst) {\n dst = dst || new QuatType(4);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n return dst;\n}\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nconst sub$1 = subtract$1;\n/**\n * Multiplies a quaternion by a scalar.\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nfunction mulScalar$1(v, k, dst) {\n dst = dst || new QuatType(4);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n return dst;\n}\n/**\n * Multiplies a quaternion by a scalar. (same as mulScalar)\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nconst scale$1 = mulScalar$1;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nfunction divScalar$1(v, k, dst) {\n dst = dst || new QuatType(4);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n return dst;\n}\n/**\n * Computes the dot product of two quaternions\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns dot product\n */\nfunction dot$1(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n/**\n * Performs linear interpolation on two quaternions.\n * Given quaternions a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param t - Interpolation coefficient.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp$1(a, b, t, dst) {\n dst = dst || new QuatType(4);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n return dst;\n}\n/**\n * Computes the length of quaternion\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nfunction length$1(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n/**\n * Computes the length of quaternion (same as length)\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nconst len$1 = length$1;\n/**\n * Computes the square of the length of quaternion\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nfunction lengthSq$1(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n/**\n * Computes the square of the length of quaternion (same as lengthSq)\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nconst lenSq$1 = lengthSq$1;\n/**\n * Divides a quaternion by its Euclidean length and returns the quotient.\n * @param v - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The normalized quaternion.\n */\nfunction normalize$1(v, dst) {\n dst = dst || new QuatType(4);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n return dst;\n}\n/**\n * Check if 2 quaternions are approximately equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are approximately equal\n */\nfunction equalsApproximately$1(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON;\n}\n/**\n * Check if 2 quaternions are exactly equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are exactly equal\n */\nfunction equals$1(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Creates an identity quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns an identity quaternion\n */\nfunction identity(dst) {\n dst = dst || new QuatType(4);\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n return dst;\n}\nlet tempVec3;\nlet xUnitVec3;\nlet yUnitVec3;\n/**\n * Computes a quaternion to represent the shortest rotation from one vector to another.\n *\n * @param aUnit - the start vector\n * @param bUnit - the end vector\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nfunction rotationTo(aUnit, bUnit, dst) {\n dst = dst || new QuatType(4);\n tempVec3 = tempVec3 || create$4();\n xUnitVec3 = xUnitVec3 || create$4(1, 0, 0);\n yUnitVec3 = yUnitVec3 || create$4(0, 1, 0);\n const dot = dot$2(aUnit, bUnit);\n if (dot < -0.999999) {\n cross(xUnitVec3, aUnit, tempVec3);\n if (len$2(tempVec3) < 0.000001) {\n cross(yUnitVec3, aUnit, tempVec3);\n }\n normalize$2(tempVec3, tempVec3);\n fromAxisAngle(tempVec3, Math.PI, dst);\n return dst;\n }\n else if (dot > 0.999999) {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n return dst;\n }\n else {\n cross(aUnit, bUnit, tempVec3);\n dst[0] = tempVec3[0];\n dst[1] = tempVec3[1];\n dst[2] = tempVec3[2];\n dst[3] = 1 + dot;\n return normalize$1(dst, dst);\n }\n}\nlet tempQuat1;\nlet tempQuat2;\n/**\n * Performs a spherical linear interpolation with two control points\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param c - the third quaternion\n * @param d - the fourth quaternion\n * @param t - Interpolation coefficient 0 to 1\n * @returns result\n */\nfunction sqlerp(a, b, c, d, t, dst) {\n dst = dst || new QuatType(4);\n tempQuat1 = tempQuat1 || new QuatType(4);\n tempQuat2 = tempQuat2 || new QuatType(4);\n slerp(a, d, t, tempQuat1);\n slerp(b, c, t, tempQuat2);\n slerp(tempQuat1, tempQuat2, 2 * t * (1 - t), dst);\n return dst;\n}\n\nvar quatImpl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create$1,\n setDefaultType: setDefaultType$2,\n fromValues: fromValues$1,\n set: set$1,\n fromAxisAngle: fromAxisAngle,\n toAxisAngle: toAxisAngle,\n angle: angle,\n multiply: multiply$1,\n mul: mul$1,\n rotateX: rotateX,\n rotateY: rotateY,\n rotateZ: rotateZ,\n slerp: slerp,\n inverse: inverse$1,\n conjugate: conjugate,\n fromMat: fromMat,\n fromEuler: fromEuler,\n copy: copy$1,\n clone: clone$1,\n add: add$1,\n subtract: subtract$1,\n sub: sub$1,\n mulScalar: mulScalar$1,\n scale: scale$1,\n divScalar: divScalar$1,\n dot: dot$1,\n lerp: lerp$1,\n length: length$1,\n len: len$1,\n lengthSq: lengthSq$1,\n lenSq: lenSq$1,\n normalize: normalize$1,\n equalsApproximately: equalsApproximately$1,\n equals: equals$1,\n identity: identity,\n rotationTo: rotationTo,\n sqlerp: sqlerp\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Vec4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec4`. In other words you can do this\n *\n * const v = vec4.cross(v1, v2); // Creates a new Vec4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec4.create();\n * vec4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet VecType = Float32Array;\n/**\n * Sets the type this library creates for a Vec4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec4\n */\nfunction setDefaultType$1(ctor) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n/**\n * Creates a vec4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nfunction create(x, y, z, w) {\n const dst = new VecType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a vec4; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nconst fromValues = create;\n/**\n * Sets the values of a Vec4\n * Also see {@link vec4.create} and {@link vec4.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set(x, y, z, w, dst) {\n dst = dst || new VecType(4);\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n return dst;\n}\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nfunction ceil(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n dst[3] = Math.ceil(v[3]);\n return dst;\n}\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nfunction floor(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n dst[3] = Math.floor(v[3]);\n return dst;\n}\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nfunction round(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n dst[3] = Math.round(v[3]);\n return dst;\n}\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nfunction clamp(v, min = 0, max = 1, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n dst[3] = Math.min(max, Math.max(min, v[3]));\n return dst;\n}\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nfunction add(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n return dst;\n}\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nfunction addScaled(a, b, scale, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n dst[3] = a[3] + b[3] * scale;\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nfunction subtract(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nconst sub = subtract;\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nfunction equalsApproximately(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON;\n}\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nfunction equals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp(a, b, t, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n return dst;\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nfunction lerpV(a, b, t, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n dst[3] = a[3] + t[3] * (b[3] - a[3]);\n return dst;\n}\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nfunction max(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n dst[3] = Math.max(a[3], b[3]);\n return dst;\n}\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nfunction min(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n dst[3] = Math.min(a[3], b[3]);\n return dst;\n}\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction mulScalar(v, k, dst) {\n dst = dst || new VecType(4);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n return dst;\n}\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nconst scale = mulScalar;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction divScalar(v, k, dst) {\n dst = dst || new VecType(4);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n return dst;\n}\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nfunction inverse(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n dst[3] = 1 / v[3];\n return dst;\n}\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nconst invert = inverse;\n/**\n * Computes the dot product of two vectors\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nfunction dot(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nfunction length(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nconst len = length;\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nfunction lengthSq(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nconst lenSq = lengthSq;\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nfunction distance(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return Math.sqrt(dx * dx + dy * dy + dz * dz + dw * dw);\n}\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nconst dist = distance;\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nfunction distanceSq(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return dx * dx + dy * dy + dz * dz + dw * dw;\n}\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nconst distSq = distanceSq;\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nfunction normalize(v, dst) {\n dst = dst || new VecType(4);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n return dst;\n}\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nfunction negate(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n dst[3] = -v[3];\n return dst;\n}\n/**\n * Copies a vector. (same as {@link vec4.clone})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nfunction copy(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n dst[3] = v[3];\n return dst;\n}\n/**\n * Clones a vector. (same as {@link vec4.copy})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nconst clone = copy;\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nfunction multiply(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n dst[3] = a[3] * b[3];\n return dst;\n}\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nconst mul = multiply;\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nfunction divide(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n dst[3] = a[3] / b[3];\n return dst;\n}\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nconst div = divide;\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nfunction zero(dst) {\n dst = dst || new VecType(4);\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n return dst;\n}\n/**\n * transform vec4 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec4 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat4(v, m, dst) {\n dst = dst || new VecType(4);\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = v[3];\n dst[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n dst[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n dst[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n dst[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return dst;\n}\n\nvar vec4Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create,\n setDefaultType: setDefaultType$1,\n fromValues: fromValues,\n set: set,\n ceil: ceil,\n floor: floor,\n round: round,\n clamp: clamp,\n add: add,\n addScaled: addScaled,\n subtract: subtract,\n sub: sub,\n equalsApproximately: equalsApproximately,\n equals: equals,\n lerp: lerp,\n lerpV: lerpV,\n max: max,\n min: min,\n mulScalar: mulScalar,\n scale: scale,\n divScalar: divScalar,\n inverse: inverse,\n invert: invert,\n dot: dot,\n length: length,\n len: len,\n lengthSq: lengthSq,\n lenSq: lenSq,\n distance: distance,\n dist: dist,\n distanceSq: distanceSq,\n distSq: distSq,\n normalize: normalize,\n negate: negate,\n copy: copy,\n clone: clone,\n multiply: multiply,\n mul: mul,\n divide: divide,\n div: div,\n zero: zero,\n transformMat4: transformMat4\n});\n\n/**\n * Sets the type this library creates for all types\n *\n * example:\n *\n * ```\n * setDefaultType(Float64Array);\n * ```\n *\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n */\nfunction setDefaultType(ctor) {\n setDefaultType$4(ctor);\n setDefaultType$3(ctor);\n setDefaultType$2(ctor);\n setDefaultType$6(ctor);\n setDefaultType$5(ctor);\n setDefaultType$1(ctor);\n}\n\nexport { mat3Impl as mat3, mat4Impl as mat4, quatImpl as quat, setDefaultType, utils, vec2Impl as vec2, vec3Impl as vec3, vec4Impl as vec4 };\n//# sourceMappingURL=wgpu-matrix.module.js.map\n","/**\n * dat-gui JavaScript Controller Library\n * https://github.com/dataarts/dat.gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction ___$insertStyle(css) {\n if (!css) {\n return;\n }\n if (typeof window === 'undefined') {\n return;\n }\n\n var style = document.createElement('style');\n\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n document.head.appendChild(style);\n\n return css;\n}\n\nfunction colorToString (color, forceCSSHex) {\n var colorFormat = color.__state.conversionName.toString();\n var r = Math.round(color.r);\n var g = Math.round(color.g);\n var b = Math.round(color.b);\n var a = color.a;\n var h = Math.round(color.h);\n var s = color.s.toFixed(1);\n var v = color.v.toFixed(1);\n if (forceCSSHex || colorFormat === 'THREE_CHAR_HEX' || colorFormat === 'SIX_CHAR_HEX') {\n var str = color.hex.toString(16);\n while (str.length < 6) {\n str = '0' + str;\n }\n return '#' + str;\n } else if (colorFormat === 'CSS_RGB') {\n return 'rgb(' + r + ',' + g + ',' + b + ')';\n } else if (colorFormat === 'CSS_RGBA') {\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n } else if (colorFormat === 'HEX') {\n return '0x' + color.hex.toString(16);\n } else if (colorFormat === 'RGB_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ']';\n } else if (colorFormat === 'RGBA_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ',' + a + ']';\n } else if (colorFormat === 'RGB_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + '}';\n } else if (colorFormat === 'RGBA_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}';\n } else if (colorFormat === 'HSV_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + '}';\n } else if (colorFormat === 'HSVA_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}';\n }\n return 'unknown format';\n}\n\nvar ARR_EACH = Array.prototype.forEach;\nvar ARR_SLICE = Array.prototype.slice;\nvar Common = {\n BREAK: {},\n extend: function extend(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (!this.isUndefined(obj[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n defaults: function defaults(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (this.isUndefined(target[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n compose: function compose() {\n var toCall = ARR_SLICE.call(arguments);\n return function () {\n var args = ARR_SLICE.call(arguments);\n for (var i = toCall.length - 1; i >= 0; i--) {\n args = [toCall[i].apply(this, args)];\n }\n return args[0];\n };\n },\n each: function each(obj, itr, scope) {\n if (!obj) {\n return;\n }\n if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) {\n obj.forEach(itr, scope);\n } else if (obj.length === obj.length + 0) {\n var key = void 0;\n var l = void 0;\n for (key = 0, l = obj.length; key < l; key++) {\n if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) {\n return;\n }\n }\n } else {\n for (var _key in obj) {\n if (itr.call(scope, obj[_key], _key) === this.BREAK) {\n return;\n }\n }\n }\n },\n defer: function defer(fnc) {\n setTimeout(fnc, 0);\n },\n debounce: function debounce(func, threshold, callImmediately) {\n var timeout = void 0;\n return function () {\n var obj = this;\n var args = arguments;\n function delayed() {\n timeout = null;\n if (!callImmediately) func.apply(obj, args);\n }\n var callNow = callImmediately || !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(delayed, threshold);\n if (callNow) {\n func.apply(obj, args);\n }\n };\n },\n toArray: function toArray(obj) {\n if (obj.toArray) return obj.toArray();\n return ARR_SLICE.call(obj);\n },\n isUndefined: function isUndefined(obj) {\n return obj === undefined;\n },\n isNull: function isNull(obj) {\n return obj === null;\n },\n isNaN: function (_isNaN) {\n function isNaN(_x) {\n return _isNaN.apply(this, arguments);\n }\n isNaN.toString = function () {\n return _isNaN.toString();\n };\n return isNaN;\n }(function (obj) {\n return isNaN(obj);\n }),\n isArray: Array.isArray || function (obj) {\n return obj.constructor === Array;\n },\n isObject: function isObject(obj) {\n return obj === Object(obj);\n },\n isNumber: function isNumber(obj) {\n return obj === obj + 0;\n },\n isString: function isString(obj) {\n return obj === obj + '';\n },\n isBoolean: function isBoolean(obj) {\n return obj === false || obj === true;\n },\n isFunction: function isFunction(obj) {\n return obj instanceof Function;\n }\n};\n\nvar INTERPRETATIONS = [\n{\n litmus: Common.isString,\n conversions: {\n THREE_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString() + test[1].toString() + test[2].toString() + test[2].toString() + test[3].toString() + test[3].toString(), 0)\n };\n },\n write: colorToString\n },\n SIX_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9]{6})$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString(), 0)\n };\n },\n write: colorToString\n },\n CSS_RGB: {\n read: function read(original) {\n var test = original.match(/^rgb\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3])\n };\n },\n write: colorToString\n },\n CSS_RGBA: {\n read: function read(original) {\n var test = original.match(/^rgba\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3]),\n a: parseFloat(test[4])\n };\n },\n write: colorToString\n }\n }\n},\n{\n litmus: Common.isNumber,\n conversions: {\n HEX: {\n read: function read(original) {\n return {\n space: 'HEX',\n hex: original,\n conversionName: 'HEX'\n };\n },\n write: function write(color) {\n return color.hex;\n }\n }\n }\n},\n{\n litmus: Common.isArray,\n conversions: {\n RGB_ARRAY: {\n read: function read(original) {\n if (original.length !== 3) {\n return false;\n }\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b];\n }\n },\n RGBA_ARRAY: {\n read: function read(original) {\n if (original.length !== 4) return false;\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2],\n a: original[3]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b, color.a];\n }\n }\n }\n},\n{\n litmus: Common.isObject,\n conversions: {\n RGBA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b) && Common.isNumber(original.a)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b,\n a: color.a\n };\n }\n },\n RGB_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b\n };\n }\n },\n HSVA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v) && Common.isNumber(original.a)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v,\n a: color.a\n };\n }\n },\n HSV_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v\n };\n }\n }\n }\n}];\nvar result = void 0;\nvar toReturn = void 0;\nvar interpret = function interpret() {\n toReturn = false;\n var original = arguments.length > 1 ? Common.toArray(arguments) : arguments[0];\n Common.each(INTERPRETATIONS, function (family) {\n if (family.litmus(original)) {\n Common.each(family.conversions, function (conversion, conversionName) {\n result = conversion.read(original);\n if (toReturn === false && result !== false) {\n toReturn = result;\n result.conversionName = conversionName;\n result.conversion = conversion;\n return Common.BREAK;\n }\n });\n return Common.BREAK;\n }\n });\n return toReturn;\n};\n\nvar tmpComponent = void 0;\nvar ColorMath = {\n hsv_to_rgb: function hsv_to_rgb(h, s, v) {\n var hi = Math.floor(h / 60) % 6;\n var f = h / 60 - Math.floor(h / 60);\n var p = v * (1.0 - s);\n var q = v * (1.0 - f * s);\n var t = v * (1.0 - (1.0 - f) * s);\n var c = [[v, t, p], [q, v, p], [p, v, t], [p, q, v], [t, p, v], [v, p, q]][hi];\n return {\n r: c[0] * 255,\n g: c[1] * 255,\n b: c[2] * 255\n };\n },\n rgb_to_hsv: function rgb_to_hsv(r, g, b) {\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var h = void 0;\n var s = void 0;\n if (max !== 0) {\n s = delta / max;\n } else {\n return {\n h: NaN,\n s: 0,\n v: 0\n };\n }\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h /= 6;\n if (h < 0) {\n h += 1;\n }\n return {\n h: h * 360,\n s: s,\n v: max / 255\n };\n },\n rgb_to_hex: function rgb_to_hex(r, g, b) {\n var hex = this.hex_with_component(0, 2, r);\n hex = this.hex_with_component(hex, 1, g);\n hex = this.hex_with_component(hex, 0, b);\n return hex;\n },\n component_from_hex: function component_from_hex(hex, componentIndex) {\n return hex >> componentIndex * 8 & 0xFF;\n },\n hex_with_component: function hex_with_component(hex, componentIndex, value) {\n return value << (tmpComponent = componentIndex * 8) | hex & ~(0xFF << tmpComponent);\n }\n};\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar Color = function () {\n function Color() {\n classCallCheck(this, Color);\n this.__state = interpret.apply(this, arguments);\n if (this.__state === false) {\n throw new Error('Failed to interpret color arguments');\n }\n this.__state.a = this.__state.a || 1;\n }\n createClass(Color, [{\n key: 'toString',\n value: function toString() {\n return colorToString(this);\n }\n }, {\n key: 'toHexString',\n value: function toHexString() {\n return colorToString(this, true);\n }\n }, {\n key: 'toOriginal',\n value: function toOriginal() {\n return this.__state.conversion.write(this);\n }\n }]);\n return Color;\n}();\nfunction defineRGBComponent(target, component, componentHexIndex) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'RGB') {\n return this.__state[component];\n }\n Color.recalculateRGB(this, component, componentHexIndex);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'RGB') {\n Color.recalculateRGB(this, component, componentHexIndex);\n this.__state.space = 'RGB';\n }\n this.__state[component] = v;\n }\n });\n}\nfunction defineHSVComponent(target, component) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'HSV') {\n return this.__state[component];\n }\n Color.recalculateHSV(this);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'HSV') {\n Color.recalculateHSV(this);\n this.__state.space = 'HSV';\n }\n this.__state[component] = v;\n }\n });\n}\nColor.recalculateRGB = function (color, component, componentHexIndex) {\n if (color.__state.space === 'HEX') {\n color.__state[component] = ColorMath.component_from_hex(color.__state.hex, componentHexIndex);\n } else if (color.__state.space === 'HSV') {\n Common.extend(color.__state, ColorMath.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v));\n } else {\n throw new Error('Corrupted color state');\n }\n};\nColor.recalculateHSV = function (color) {\n var result = ColorMath.rgb_to_hsv(color.r, color.g, color.b);\n Common.extend(color.__state, {\n s: result.s,\n v: result.v\n });\n if (!Common.isNaN(result.h)) {\n color.__state.h = result.h;\n } else if (Common.isUndefined(color.__state.h)) {\n color.__state.h = 0;\n }\n};\nColor.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a'];\ndefineRGBComponent(Color.prototype, 'r', 2);\ndefineRGBComponent(Color.prototype, 'g', 1);\ndefineRGBComponent(Color.prototype, 'b', 0);\ndefineHSVComponent(Color.prototype, 'h');\ndefineHSVComponent(Color.prototype, 's');\ndefineHSVComponent(Color.prototype, 'v');\nObject.defineProperty(Color.prototype, 'a', {\n get: function get$$1() {\n return this.__state.a;\n },\n set: function set$$1(v) {\n this.__state.a = v;\n }\n});\nObject.defineProperty(Color.prototype, 'hex', {\n get: function get$$1() {\n if (this.__state.space !== 'HEX') {\n this.__state.hex = ColorMath.rgb_to_hex(this.r, this.g, this.b);\n this.__state.space = 'HEX';\n }\n return this.__state.hex;\n },\n set: function set$$1(v) {\n this.__state.space = 'HEX';\n this.__state.hex = v;\n }\n});\n\nvar Controller = function () {\n function Controller(object, property) {\n classCallCheck(this, Controller);\n this.initialValue = object[property];\n this.domElement = document.createElement('div');\n this.object = object;\n this.property = property;\n this.__onChange = undefined;\n this.__onFinishChange = undefined;\n }\n createClass(Controller, [{\n key: 'onChange',\n value: function onChange(fnc) {\n this.__onChange = fnc;\n return this;\n }\n }, {\n key: 'onFinishChange',\n value: function onFinishChange(fnc) {\n this.__onFinishChange = fnc;\n return this;\n }\n }, {\n key: 'setValue',\n value: function setValue(newValue) {\n this.object[this.property] = newValue;\n if (this.__onChange) {\n this.__onChange.call(this, newValue);\n }\n this.updateDisplay();\n return this;\n }\n }, {\n key: 'getValue',\n value: function getValue() {\n return this.object[this.property];\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n return this;\n }\n }, {\n key: 'isModified',\n value: function isModified() {\n return this.initialValue !== this.getValue();\n }\n }]);\n return Controller;\n}();\n\nvar EVENT_MAP = {\n HTMLEvents: ['change'],\n MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'],\n KeyboardEvents: ['keydown']\n};\nvar EVENT_MAP_INV = {};\nCommon.each(EVENT_MAP, function (v, k) {\n Common.each(v, function (e) {\n EVENT_MAP_INV[e] = k;\n });\n});\nvar CSS_VALUE_PIXELS = /(\\d+(\\.\\d+)?)px/;\nfunction cssValueToPixels(val) {\n if (val === '0' || Common.isUndefined(val)) {\n return 0;\n }\n var match = val.match(CSS_VALUE_PIXELS);\n if (!Common.isNull(match)) {\n return parseFloat(match[1]);\n }\n return 0;\n}\nvar dom = {\n makeSelectable: function makeSelectable(elem, selectable) {\n if (elem === undefined || elem.style === undefined) return;\n elem.onselectstart = selectable ? function () {\n return false;\n } : function () {};\n elem.style.MozUserSelect = selectable ? 'auto' : 'none';\n elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none';\n elem.unselectable = selectable ? 'on' : 'off';\n },\n makeFullscreen: function makeFullscreen(elem, hor, vert) {\n var vertical = vert;\n var horizontal = hor;\n if (Common.isUndefined(horizontal)) {\n horizontal = true;\n }\n if (Common.isUndefined(vertical)) {\n vertical = true;\n }\n elem.style.position = 'absolute';\n if (horizontal) {\n elem.style.left = 0;\n elem.style.right = 0;\n }\n if (vertical) {\n elem.style.top = 0;\n elem.style.bottom = 0;\n }\n },\n fakeEvent: function fakeEvent(elem, eventType, pars, aux) {\n var params = pars || {};\n var className = EVENT_MAP_INV[eventType];\n if (!className) {\n throw new Error('Event type ' + eventType + ' not supported.');\n }\n var evt = document.createEvent(className);\n switch (className) {\n case 'MouseEvents':\n {\n var clientX = params.x || params.clientX || 0;\n var clientY = params.y || params.clientY || 0;\n evt.initMouseEvent(eventType, params.bubbles || false, params.cancelable || true, window, params.clickCount || 1, 0,\n 0,\n clientX,\n clientY,\n false, false, false, false, 0, null);\n break;\n }\n case 'KeyboardEvents':\n {\n var init = evt.initKeyboardEvent || evt.initKeyEvent;\n Common.defaults(params, {\n cancelable: true,\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n keyCode: undefined,\n charCode: undefined\n });\n init(eventType, params.bubbles || false, params.cancelable, window, params.ctrlKey, params.altKey, params.shiftKey, params.metaKey, params.keyCode, params.charCode);\n break;\n }\n default:\n {\n evt.initEvent(eventType, params.bubbles || false, params.cancelable || true);\n break;\n }\n }\n Common.defaults(evt, aux);\n elem.dispatchEvent(evt);\n },\n bind: function bind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.addEventListener) {\n elem.addEventListener(event, func, bool);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + event, func);\n }\n return dom;\n },\n unbind: function unbind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.removeEventListener) {\n elem.removeEventListener(event, func, bool);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + event, func);\n }\n return dom;\n },\n addClass: function addClass(elem, className) {\n if (elem.className === undefined) {\n elem.className = className;\n } else if (elem.className !== className) {\n var classes = elem.className.split(/ +/);\n if (classes.indexOf(className) === -1) {\n classes.push(className);\n elem.className = classes.join(' ').replace(/^\\s+/, '').replace(/\\s+$/, '');\n }\n }\n return dom;\n },\n removeClass: function removeClass(elem, className) {\n if (className) {\n if (elem.className === className) {\n elem.removeAttribute('class');\n } else {\n var classes = elem.className.split(/ +/);\n var index = classes.indexOf(className);\n if (index !== -1) {\n classes.splice(index, 1);\n elem.className = classes.join(' ');\n }\n }\n } else {\n elem.className = undefined;\n }\n return dom;\n },\n hasClass: function hasClass(elem, className) {\n return new RegExp('(?:^|\\\\s+)' + className + '(?:\\\\s+|$)').test(elem.className) || false;\n },\n getWidth: function getWidth(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-left-width']) + cssValueToPixels(style['border-right-width']) + cssValueToPixels(style['padding-left']) + cssValueToPixels(style['padding-right']) + cssValueToPixels(style.width);\n },\n getHeight: function getHeight(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-top-width']) + cssValueToPixels(style['border-bottom-width']) + cssValueToPixels(style['padding-top']) + cssValueToPixels(style['padding-bottom']) + cssValueToPixels(style.height);\n },\n getOffset: function getOffset(el) {\n var elem = el;\n var offset = { left: 0, top: 0 };\n if (elem.offsetParent) {\n do {\n offset.left += elem.offsetLeft;\n offset.top += elem.offsetTop;\n elem = elem.offsetParent;\n } while (elem);\n }\n return offset;\n },\n isActive: function isActive(elem) {\n return elem === document.activeElement && (elem.type || elem.href);\n }\n};\n\nvar BooleanController = function (_Controller) {\n inherits(BooleanController, _Controller);\n function BooleanController(object, property) {\n classCallCheck(this, BooleanController);\n var _this2 = possibleConstructorReturn(this, (BooleanController.__proto__ || Object.getPrototypeOf(BooleanController)).call(this, object, property));\n var _this = _this2;\n _this2.__prev = _this2.getValue();\n _this2.__checkbox = document.createElement('input');\n _this2.__checkbox.setAttribute('type', 'checkbox');\n function onChange() {\n _this.setValue(!_this.__prev);\n }\n dom.bind(_this2.__checkbox, 'change', onChange, false);\n _this2.domElement.appendChild(_this2.__checkbox);\n _this2.updateDisplay();\n return _this2;\n }\n createClass(BooleanController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n this.__prev = this.getValue();\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (this.getValue() === true) {\n this.__checkbox.setAttribute('checked', 'checked');\n this.__checkbox.checked = true;\n this.__prev = true;\n } else {\n this.__checkbox.checked = false;\n this.__prev = false;\n }\n return get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return BooleanController;\n}(Controller);\n\nvar OptionController = function (_Controller) {\n inherits(OptionController, _Controller);\n function OptionController(object, property, opts) {\n classCallCheck(this, OptionController);\n var _this2 = possibleConstructorReturn(this, (OptionController.__proto__ || Object.getPrototypeOf(OptionController)).call(this, object, property));\n var options = opts;\n var _this = _this2;\n _this2.__select = document.createElement('select');\n if (Common.isArray(options)) {\n var map = {};\n Common.each(options, function (element) {\n map[element] = element;\n });\n options = map;\n }\n Common.each(options, function (value, key) {\n var opt = document.createElement('option');\n opt.innerHTML = key;\n opt.setAttribute('value', value);\n _this.__select.appendChild(opt);\n });\n _this2.updateDisplay();\n dom.bind(_this2.__select, 'change', function () {\n var desiredValue = this.options[this.selectedIndex].value;\n _this.setValue(desiredValue);\n });\n _this2.domElement.appendChild(_this2.__select);\n return _this2;\n }\n createClass(OptionController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (dom.isActive(this.__select)) return this;\n this.__select.value = this.getValue();\n return get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return OptionController;\n}(Controller);\n\nvar StringController = function (_Controller) {\n inherits(StringController, _Controller);\n function StringController(object, property) {\n classCallCheck(this, StringController);\n var _this2 = possibleConstructorReturn(this, (StringController.__proto__ || Object.getPrototypeOf(StringController)).call(this, object, property));\n var _this = _this2;\n function onChange() {\n _this.setValue(_this.__input.value);\n }\n function onBlur() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'keyup', onChange);\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n this.blur();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(StringController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (!dom.isActive(this.__input)) {\n this.__input.value = this.getValue();\n }\n return get(StringController.prototype.__proto__ || Object.getPrototypeOf(StringController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return StringController;\n}(Controller);\n\nfunction numDecimals(x) {\n var _x = x.toString();\n if (_x.indexOf('.') > -1) {\n return _x.length - _x.indexOf('.') - 1;\n }\n return 0;\n}\nvar NumberController = function (_Controller) {\n inherits(NumberController, _Controller);\n function NumberController(object, property, params) {\n classCallCheck(this, NumberController);\n var _this = possibleConstructorReturn(this, (NumberController.__proto__ || Object.getPrototypeOf(NumberController)).call(this, object, property));\n var _params = params || {};\n _this.__min = _params.min;\n _this.__max = _params.max;\n _this.__step = _params.step;\n if (Common.isUndefined(_this.__step)) {\n if (_this.initialValue === 0) {\n _this.__impliedStep = 1;\n } else {\n _this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(_this.initialValue)) / Math.LN10)) / 10;\n }\n } else {\n _this.__impliedStep = _this.__step;\n }\n _this.__precision = numDecimals(_this.__impliedStep);\n return _this;\n }\n createClass(NumberController, [{\n key: 'setValue',\n value: function setValue(v) {\n var _v = v;\n if (this.__min !== undefined && _v < this.__min) {\n _v = this.__min;\n } else if (this.__max !== undefined && _v > this.__max) {\n _v = this.__max;\n }\n if (this.__step !== undefined && _v % this.__step !== 0) {\n _v = Math.round(_v / this.__step) * this.__step;\n }\n return get(NumberController.prototype.__proto__ || Object.getPrototypeOf(NumberController.prototype), 'setValue', this).call(this, _v);\n }\n }, {\n key: 'min',\n value: function min(minValue) {\n this.__min = minValue;\n return this;\n }\n }, {\n key: 'max',\n value: function max(maxValue) {\n this.__max = maxValue;\n return this;\n }\n }, {\n key: 'step',\n value: function step(stepValue) {\n this.__step = stepValue;\n this.__impliedStep = stepValue;\n this.__precision = numDecimals(stepValue);\n return this;\n }\n }]);\n return NumberController;\n}(Controller);\n\nfunction roundToDecimal(value, decimals) {\n var tenTo = Math.pow(10, decimals);\n return Math.round(value * tenTo) / tenTo;\n}\nvar NumberControllerBox = function (_NumberController) {\n inherits(NumberControllerBox, _NumberController);\n function NumberControllerBox(object, property, params) {\n classCallCheck(this, NumberControllerBox);\n var _this2 = possibleConstructorReturn(this, (NumberControllerBox.__proto__ || Object.getPrototypeOf(NumberControllerBox)).call(this, object, property, params));\n _this2.__truncationSuspended = false;\n var _this = _this2;\n var prevY = void 0;\n function onChange() {\n var attempted = parseFloat(_this.__input.value);\n if (!Common.isNaN(attempted)) {\n _this.setValue(attempted);\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onBlur() {\n onFinish();\n }\n function onMouseDrag(e) {\n var diff = prevY - e.clientY;\n _this.setValue(_this.getValue() + diff * _this.__impliedStep);\n prevY = e.clientY;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n onFinish();\n }\n function onMouseDown(e) {\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n prevY = e.clientY;\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'mousedown', onMouseDown);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n _this.__truncationSuspended = true;\n this.blur();\n _this.__truncationSuspended = false;\n onFinish();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(NumberControllerBox, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision);\n return get(NumberControllerBox.prototype.__proto__ || Object.getPrototypeOf(NumberControllerBox.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerBox;\n}(NumberController);\n\nfunction map(v, i1, i2, o1, o2) {\n return o1 + (o2 - o1) * ((v - i1) / (i2 - i1));\n}\nvar NumberControllerSlider = function (_NumberController) {\n inherits(NumberControllerSlider, _NumberController);\n function NumberControllerSlider(object, property, min, max, step) {\n classCallCheck(this, NumberControllerSlider);\n var _this2 = possibleConstructorReturn(this, (NumberControllerSlider.__proto__ || Object.getPrototypeOf(NumberControllerSlider)).call(this, object, property, { min: min, max: max, step: step }));\n var _this = _this2;\n _this2.__background = document.createElement('div');\n _this2.__foreground = document.createElement('div');\n dom.bind(_this2.__background, 'mousedown', onMouseDown);\n dom.bind(_this2.__background, 'touchstart', onTouchStart);\n dom.addClass(_this2.__background, 'slider');\n dom.addClass(_this2.__foreground, 'slider-fg');\n function onMouseDown(e) {\n document.activeElement.blur();\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n onMouseDrag(e);\n }\n function onMouseDrag(e) {\n e.preventDefault();\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n return false;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onTouchStart(e) {\n if (e.touches.length !== 1) {\n return;\n }\n dom.bind(window, 'touchmove', onTouchMove);\n dom.bind(window, 'touchend', onTouchEnd);\n onTouchMove(e);\n }\n function onTouchMove(e) {\n var clientX = e.touches[0].clientX;\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n }\n function onTouchEnd() {\n dom.unbind(window, 'touchmove', onTouchMove);\n dom.unbind(window, 'touchend', onTouchEnd);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.updateDisplay();\n _this2.__background.appendChild(_this2.__foreground);\n _this2.domElement.appendChild(_this2.__background);\n return _this2;\n }\n createClass(NumberControllerSlider, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var pct = (this.getValue() - this.__min) / (this.__max - this.__min);\n this.__foreground.style.width = pct * 100 + '%';\n return get(NumberControllerSlider.prototype.__proto__ || Object.getPrototypeOf(NumberControllerSlider.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerSlider;\n}(NumberController);\n\nvar FunctionController = function (_Controller) {\n inherits(FunctionController, _Controller);\n function FunctionController(object, property, text) {\n classCallCheck(this, FunctionController);\n var _this2 = possibleConstructorReturn(this, (FunctionController.__proto__ || Object.getPrototypeOf(FunctionController)).call(this, object, property));\n var _this = _this2;\n _this2.__button = document.createElement('div');\n _this2.__button.innerHTML = text === undefined ? 'Fire' : text;\n dom.bind(_this2.__button, 'click', function (e) {\n e.preventDefault();\n _this.fire();\n return false;\n });\n dom.addClass(_this2.__button, 'button');\n _this2.domElement.appendChild(_this2.__button);\n return _this2;\n }\n createClass(FunctionController, [{\n key: 'fire',\n value: function fire() {\n if (this.__onChange) {\n this.__onChange.call(this);\n }\n this.getValue().call(this.object);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n }\n }]);\n return FunctionController;\n}(Controller);\n\nvar ColorController = function (_Controller) {\n inherits(ColorController, _Controller);\n function ColorController(object, property) {\n classCallCheck(this, ColorController);\n var _this2 = possibleConstructorReturn(this, (ColorController.__proto__ || Object.getPrototypeOf(ColorController)).call(this, object, property));\n _this2.__color = new Color(_this2.getValue());\n _this2.__temp = new Color(0);\n var _this = _this2;\n _this2.domElement = document.createElement('div');\n dom.makeSelectable(_this2.domElement, false);\n _this2.__selector = document.createElement('div');\n _this2.__selector.className = 'selector';\n _this2.__saturation_field = document.createElement('div');\n _this2.__saturation_field.className = 'saturation-field';\n _this2.__field_knob = document.createElement('div');\n _this2.__field_knob.className = 'field-knob';\n _this2.__field_knob_border = '2px solid ';\n _this2.__hue_knob = document.createElement('div');\n _this2.__hue_knob.className = 'hue-knob';\n _this2.__hue_field = document.createElement('div');\n _this2.__hue_field.className = 'hue-field';\n _this2.__input = document.createElement('input');\n _this2.__input.type = 'text';\n _this2.__input_textShadow = '0 1px 1px ';\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n onBlur.call(this);\n }\n });\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__selector, 'mousedown', function () {\n dom.addClass(this, 'drag').bind(window, 'mouseup', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n dom.bind(_this2.__selector, 'touchstart', function () {\n dom.addClass(this, 'drag').bind(window, 'touchend', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n var valueField = document.createElement('div');\n Common.extend(_this2.__selector.style, {\n width: '122px',\n height: '102px',\n padding: '3px',\n backgroundColor: '#222',\n boxShadow: '0px 1px 3px rgba(0,0,0,0.3)'\n });\n Common.extend(_this2.__field_knob.style, {\n position: 'absolute',\n width: '12px',\n height: '12px',\n border: _this2.__field_knob_border + (_this2.__color.v < 0.5 ? '#fff' : '#000'),\n boxShadow: '0px 1px 3px rgba(0,0,0,0.5)',\n borderRadius: '12px',\n zIndex: 1\n });\n Common.extend(_this2.__hue_knob.style, {\n position: 'absolute',\n width: '15px',\n height: '2px',\n borderRight: '4px solid #fff',\n zIndex: 1\n });\n Common.extend(_this2.__saturation_field.style, {\n width: '100px',\n height: '100px',\n border: '1px solid #555',\n marginRight: '3px',\n display: 'inline-block',\n cursor: 'pointer'\n });\n Common.extend(valueField.style, {\n width: '100%',\n height: '100%',\n background: 'none'\n });\n linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000');\n Common.extend(_this2.__hue_field.style, {\n width: '15px',\n height: '100px',\n border: '1px solid #555',\n cursor: 'ns-resize',\n position: 'absolute',\n top: '3px',\n right: '3px'\n });\n hueGradient(_this2.__hue_field);\n Common.extend(_this2.__input.style, {\n outline: 'none',\n textAlign: 'center',\n color: '#fff',\n border: 0,\n fontWeight: 'bold',\n textShadow: _this2.__input_textShadow + 'rgba(0,0,0,0.7)'\n });\n dom.bind(_this2.__saturation_field, 'mousedown', fieldDown);\n dom.bind(_this2.__saturation_field, 'touchstart', fieldDown);\n dom.bind(_this2.__field_knob, 'mousedown', fieldDown);\n dom.bind(_this2.__field_knob, 'touchstart', fieldDown);\n dom.bind(_this2.__hue_field, 'mousedown', fieldDownH);\n dom.bind(_this2.__hue_field, 'touchstart', fieldDownH);\n function fieldDown(e) {\n setSV(e);\n dom.bind(window, 'mousemove', setSV);\n dom.bind(window, 'touchmove', setSV);\n dom.bind(window, 'mouseup', fieldUpSV);\n dom.bind(window, 'touchend', fieldUpSV);\n }\n function fieldDownH(e) {\n setH(e);\n dom.bind(window, 'mousemove', setH);\n dom.bind(window, 'touchmove', setH);\n dom.bind(window, 'mouseup', fieldUpH);\n dom.bind(window, 'touchend', fieldUpH);\n }\n function fieldUpSV() {\n dom.unbind(window, 'mousemove', setSV);\n dom.unbind(window, 'touchmove', setSV);\n dom.unbind(window, 'mouseup', fieldUpSV);\n dom.unbind(window, 'touchend', fieldUpSV);\n onFinish();\n }\n function fieldUpH() {\n dom.unbind(window, 'mousemove', setH);\n dom.unbind(window, 'touchmove', setH);\n dom.unbind(window, 'mouseup', fieldUpH);\n dom.unbind(window, 'touchend', fieldUpH);\n onFinish();\n }\n function onBlur() {\n var i = interpret(this.value);\n if (i !== false) {\n _this.__color.__state = i;\n _this.setValue(_this.__color.toOriginal());\n } else {\n this.value = _this.__color.toString();\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.__color.toOriginal());\n }\n }\n _this2.__saturation_field.appendChild(valueField);\n _this2.__selector.appendChild(_this2.__field_knob);\n _this2.__selector.appendChild(_this2.__saturation_field);\n _this2.__selector.appendChild(_this2.__hue_field);\n _this2.__hue_field.appendChild(_this2.__hue_knob);\n _this2.domElement.appendChild(_this2.__input);\n _this2.domElement.appendChild(_this2.__selector);\n _this2.updateDisplay();\n function setSV(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__saturation_field.getBoundingClientRect();\n var _ref = e.touches && e.touches[0] || e,\n clientX = _ref.clientX,\n clientY = _ref.clientY;\n var s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left);\n var v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (v > 1) {\n v = 1;\n } else if (v < 0) {\n v = 0;\n }\n if (s > 1) {\n s = 1;\n } else if (s < 0) {\n s = 0;\n }\n _this.__color.v = v;\n _this.__color.s = s;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n function setH(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__hue_field.getBoundingClientRect();\n var _ref2 = e.touches && e.touches[0] || e,\n clientY = _ref2.clientY;\n var h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (h > 1) {\n h = 1;\n } else if (h < 0) {\n h = 0;\n }\n _this.__color.h = h * 360;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n return _this2;\n }\n createClass(ColorController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var i = interpret(this.getValue());\n if (i !== false) {\n var mismatch = false;\n Common.each(Color.COMPONENTS, function (component) {\n if (!Common.isUndefined(i[component]) && !Common.isUndefined(this.__color.__state[component]) && i[component] !== this.__color.__state[component]) {\n mismatch = true;\n return {};\n }\n }, this);\n if (mismatch) {\n Common.extend(this.__color.__state, i);\n }\n }\n Common.extend(this.__temp.__state, this.__color.__state);\n this.__temp.a = 1;\n var flip = this.__color.v < 0.5 || this.__color.s > 0.5 ? 255 : 0;\n var _flip = 255 - flip;\n Common.extend(this.__field_knob.style, {\n marginLeft: 100 * this.__color.s - 7 + 'px',\n marginTop: 100 * (1 - this.__color.v) - 7 + 'px',\n backgroundColor: this.__temp.toHexString(),\n border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')'\n });\n this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px';\n this.__temp.s = 1;\n this.__temp.v = 1;\n linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString());\n this.__input.value = this.__color.toString();\n Common.extend(this.__input.style, {\n backgroundColor: this.__color.toHexString(),\n color: 'rgb(' + flip + ',' + flip + ',' + flip + ')',\n textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)'\n });\n }\n }]);\n return ColorController;\n}(Controller);\nvar vendors = ['-moz-', '-o-', '-webkit-', '-ms-', ''];\nfunction linearGradient(elem, x, a, b) {\n elem.style.background = '';\n Common.each(vendors, function (vendor) {\n elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); ';\n });\n}\nfunction hueGradient(elem) {\n elem.style.background = '';\n elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);';\n elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n}\n\nvar css = {\n load: function load(url, indoc) {\n var doc = indoc || document;\n var link = doc.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.href = url;\n doc.getElementsByTagName('head')[0].appendChild(link);\n },\n inject: function inject(cssContent, indoc) {\n var doc = indoc || document;\n var injected = document.createElement('style');\n injected.type = 'text/css';\n injected.innerHTML = cssContent;\n var head = doc.getElementsByTagName('head')[0];\n try {\n head.appendChild(injected);\n } catch (e) {\n }\n }\n};\n\nvar saveDialogContents = \"
\\n\\n Here's the new load parameter for your GUI's constructor:\\n\\n \\n\\n
\\n\\n Automatically save\\n values to localStorage on exit.\\n\\n
The values saved to localStorage will\\n override those passed to dat.GUI's constructor. This makes it\\n easier to work incrementally, but localStorage is fragile,\\n and your friends may not see the same values you do.\\n\\n
\\n\\n
\\n\\n
\";\n\nvar ControllerFactory = function ControllerFactory(object, property) {\n var initialValue = object[property];\n if (Common.isArray(arguments[2]) || Common.isObject(arguments[2])) {\n return new OptionController(object, property, arguments[2]);\n }\n if (Common.isNumber(initialValue)) {\n if (Common.isNumber(arguments[2]) && Common.isNumber(arguments[3])) {\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerSlider(object, property, arguments[2], arguments[3], arguments[4]);\n }\n return new NumberControllerSlider(object, property, arguments[2], arguments[3]);\n }\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3], step: arguments[4] });\n }\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] });\n }\n if (Common.isString(initialValue)) {\n return new StringController(object, property);\n }\n if (Common.isFunction(initialValue)) {\n return new FunctionController(object, property, '');\n }\n if (Common.isBoolean(initialValue)) {\n return new BooleanController(object, property);\n }\n return null;\n};\n\nfunction requestAnimationFrame(callback) {\n setTimeout(callback, 1000 / 60);\n}\nvar requestAnimationFrame$1 = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || requestAnimationFrame;\n\nvar CenteredDiv = function () {\n function CenteredDiv() {\n classCallCheck(this, CenteredDiv);\n this.backgroundElement = document.createElement('div');\n Common.extend(this.backgroundElement.style, {\n backgroundColor: 'rgba(0,0,0,0.8)',\n top: 0,\n left: 0,\n display: 'none',\n zIndex: '1000',\n opacity: 0,\n WebkitTransition: 'opacity 0.2s linear',\n transition: 'opacity 0.2s linear'\n });\n dom.makeFullscreen(this.backgroundElement);\n this.backgroundElement.style.position = 'fixed';\n this.domElement = document.createElement('div');\n Common.extend(this.domElement.style, {\n position: 'fixed',\n display: 'none',\n zIndex: '1001',\n opacity: 0,\n WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear',\n transition: 'transform 0.2s ease-out, opacity 0.2s linear'\n });\n document.body.appendChild(this.backgroundElement);\n document.body.appendChild(this.domElement);\n var _this = this;\n dom.bind(this.backgroundElement, 'click', function () {\n _this.hide();\n });\n }\n createClass(CenteredDiv, [{\n key: 'show',\n value: function show() {\n var _this = this;\n this.backgroundElement.style.display = 'block';\n this.domElement.style.display = 'block';\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n this.layout();\n Common.defer(function () {\n _this.backgroundElement.style.opacity = 1;\n _this.domElement.style.opacity = 1;\n _this.domElement.style.webkitTransform = 'scale(1)';\n });\n }\n }, {\n key: 'hide',\n value: function hide() {\n var _this = this;\n var hide = function hide() {\n _this.domElement.style.display = 'none';\n _this.backgroundElement.style.display = 'none';\n dom.unbind(_this.domElement, 'webkitTransitionEnd', hide);\n dom.unbind(_this.domElement, 'transitionend', hide);\n dom.unbind(_this.domElement, 'oTransitionEnd', hide);\n };\n dom.bind(this.domElement, 'webkitTransitionEnd', hide);\n dom.bind(this.domElement, 'transitionend', hide);\n dom.bind(this.domElement, 'oTransitionEnd', hide);\n this.backgroundElement.style.opacity = 0;\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n }\n }, {\n key: 'layout',\n value: function layout() {\n this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px';\n this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px';\n }\n }]);\n return CenteredDiv;\n}();\n\nvar styleSheet = ___$insertStyle(\".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .cr.function .property-name{width:100%}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\\n\");\n\ncss.inject(styleSheet);\nvar CSS_NAMESPACE = 'dg';\nvar HIDE_KEY_CODE = 72;\nvar CLOSE_BUTTON_HEIGHT = 20;\nvar DEFAULT_DEFAULT_PRESET_NAME = 'Default';\nvar SUPPORTS_LOCAL_STORAGE = function () {\n try {\n return !!window.localStorage;\n } catch (e) {\n return false;\n }\n}();\nvar SAVE_DIALOGUE = void 0;\nvar autoPlaceVirgin = true;\nvar autoPlaceContainer = void 0;\nvar hide = false;\nvar hideableGuis = [];\nvar GUI = function GUI(pars) {\n var _this = this;\n var params = pars || {};\n this.domElement = document.createElement('div');\n this.__ul = document.createElement('ul');\n this.domElement.appendChild(this.__ul);\n dom.addClass(this.domElement, CSS_NAMESPACE);\n this.__folders = {};\n this.__controllers = [];\n this.__rememberedObjects = [];\n this.__rememberedObjectIndecesToControllers = [];\n this.__listening = [];\n params = Common.defaults(params, {\n closeOnTop: false,\n autoPlace: true,\n width: GUI.DEFAULT_WIDTH\n });\n params = Common.defaults(params, {\n resizable: params.autoPlace,\n hideable: params.autoPlace\n });\n if (!Common.isUndefined(params.load)) {\n if (params.preset) {\n params.load.preset = params.preset;\n }\n } else {\n params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME };\n }\n if (Common.isUndefined(params.parent) && params.hideable) {\n hideableGuis.push(this);\n }\n params.resizable = Common.isUndefined(params.parent) && params.resizable;\n if (params.autoPlace && Common.isUndefined(params.scrollable)) {\n params.scrollable = true;\n }\n var useLocalStorage = SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true';\n var saveToLocalStorage = void 0;\n var titleRow = void 0;\n Object.defineProperties(this,\n {\n parent: {\n get: function get$$1() {\n return params.parent;\n }\n },\n scrollable: {\n get: function get$$1() {\n return params.scrollable;\n }\n },\n autoPlace: {\n get: function get$$1() {\n return params.autoPlace;\n }\n },\n closeOnTop: {\n get: function get$$1() {\n return params.closeOnTop;\n }\n },\n preset: {\n get: function get$$1() {\n if (_this.parent) {\n return _this.getRoot().preset;\n }\n return params.load.preset;\n },\n set: function set$$1(v) {\n if (_this.parent) {\n _this.getRoot().preset = v;\n } else {\n params.load.preset = v;\n }\n setPresetSelectIndex(this);\n _this.revert();\n }\n },\n width: {\n get: function get$$1() {\n return params.width;\n },\n set: function set$$1(v) {\n params.width = v;\n setWidth(_this, v);\n }\n },\n name: {\n get: function get$$1() {\n return params.name;\n },\n set: function set$$1(v) {\n params.name = v;\n if (titleRow) {\n titleRow.innerHTML = params.name;\n }\n }\n },\n closed: {\n get: function get$$1() {\n return params.closed;\n },\n set: function set$$1(v) {\n params.closed = v;\n if (params.closed) {\n dom.addClass(_this.__ul, GUI.CLASS_CLOSED);\n } else {\n dom.removeClass(_this.__ul, GUI.CLASS_CLOSED);\n }\n this.onResize();\n if (_this.__closeButton) {\n _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED;\n }\n }\n },\n load: {\n get: function get$$1() {\n return params.load;\n }\n },\n useLocalStorage: {\n get: function get$$1() {\n return useLocalStorage;\n },\n set: function set$$1(bool) {\n if (SUPPORTS_LOCAL_STORAGE) {\n useLocalStorage = bool;\n if (bool) {\n dom.bind(window, 'unload', saveToLocalStorage);\n } else {\n dom.unbind(window, 'unload', saveToLocalStorage);\n }\n localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool);\n }\n }\n }\n });\n if (Common.isUndefined(params.parent)) {\n this.closed = params.closed || false;\n dom.addClass(this.domElement, GUI.CLASS_MAIN);\n dom.makeSelectable(this.domElement, false);\n if (SUPPORTS_LOCAL_STORAGE) {\n if (useLocalStorage) {\n _this.useLocalStorage = true;\n var savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui'));\n if (savedGui) {\n params.load = JSON.parse(savedGui);\n }\n }\n }\n this.__closeButton = document.createElement('div');\n this.__closeButton.innerHTML = GUI.TEXT_CLOSED;\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON);\n if (params.closeOnTop) {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP);\n this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]);\n } else {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM);\n this.domElement.appendChild(this.__closeButton);\n }\n dom.bind(this.__closeButton, 'click', function () {\n _this.closed = !_this.closed;\n });\n } else {\n if (params.closed === undefined) {\n params.closed = true;\n }\n var titleRowName = document.createTextNode(params.name);\n dom.addClass(titleRowName, 'controller-name');\n titleRow = addRow(_this, titleRowName);\n var onClickTitle = function onClickTitle(e) {\n e.preventDefault();\n _this.closed = !_this.closed;\n return false;\n };\n dom.addClass(this.__ul, GUI.CLASS_CLOSED);\n dom.addClass(titleRow, 'title');\n dom.bind(titleRow, 'click', onClickTitle);\n if (!params.closed) {\n this.closed = false;\n }\n }\n if (params.autoPlace) {\n if (Common.isUndefined(params.parent)) {\n if (autoPlaceVirgin) {\n autoPlaceContainer = document.createElement('div');\n dom.addClass(autoPlaceContainer, CSS_NAMESPACE);\n dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER);\n document.body.appendChild(autoPlaceContainer);\n autoPlaceVirgin = false;\n }\n autoPlaceContainer.appendChild(this.domElement);\n dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE);\n }\n if (!this.parent) {\n setWidth(_this, params.width);\n }\n }\n this.__resizeHandler = function () {\n _this.onResizeDebounced();\n };\n dom.bind(window, 'resize', this.__resizeHandler);\n dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler);\n dom.bind(this.__ul, 'transitionend', this.__resizeHandler);\n dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler);\n this.onResize();\n if (params.resizable) {\n addResizeHandle(this);\n }\n saveToLocalStorage = function saveToLocalStorage() {\n if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') {\n localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject()));\n }\n };\n this.saveToLocalStorageIfPossible = saveToLocalStorage;\n function resetWidth() {\n var root = _this.getRoot();\n root.width += 1;\n Common.defer(function () {\n root.width -= 1;\n });\n }\n if (!params.parent) {\n resetWidth();\n }\n};\nGUI.toggleHide = function () {\n hide = !hide;\n Common.each(hideableGuis, function (gui) {\n gui.domElement.style.display = hide ? 'none' : '';\n });\n};\nGUI.CLASS_AUTO_PLACE = 'a';\nGUI.CLASS_AUTO_PLACE_CONTAINER = 'ac';\nGUI.CLASS_MAIN = 'main';\nGUI.CLASS_CONTROLLER_ROW = 'cr';\nGUI.CLASS_TOO_TALL = 'taller-than-window';\nGUI.CLASS_CLOSED = 'closed';\nGUI.CLASS_CLOSE_BUTTON = 'close-button';\nGUI.CLASS_CLOSE_TOP = 'close-top';\nGUI.CLASS_CLOSE_BOTTOM = 'close-bottom';\nGUI.CLASS_DRAG = 'drag';\nGUI.DEFAULT_WIDTH = 245;\nGUI.TEXT_CLOSED = 'Close Controls';\nGUI.TEXT_OPEN = 'Open Controls';\nGUI._keydownHandler = function (e) {\n if (document.activeElement.type !== 'text' && (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) {\n GUI.toggleHide();\n }\n};\ndom.bind(window, 'keydown', GUI._keydownHandler, false);\nCommon.extend(GUI.prototype,\n{\n add: function add(object, property) {\n return _add(this, object, property, {\n factoryArgs: Array.prototype.slice.call(arguments, 2)\n });\n },\n addColor: function addColor(object, property) {\n return _add(this, object, property, {\n color: true\n });\n },\n remove: function remove(controller) {\n this.__ul.removeChild(controller.__li);\n this.__controllers.splice(this.__controllers.indexOf(controller), 1);\n var _this = this;\n Common.defer(function () {\n _this.onResize();\n });\n },\n destroy: function destroy() {\n if (this.parent) {\n throw new Error('Only the root GUI should be removed with .destroy(). ' + 'For subfolders, use gui.removeFolder(folder) instead.');\n }\n if (this.autoPlace) {\n autoPlaceContainer.removeChild(this.domElement);\n }\n var _this = this;\n Common.each(this.__folders, function (subfolder) {\n _this.removeFolder(subfolder);\n });\n dom.unbind(window, 'keydown', GUI._keydownHandler, false);\n removeListeners(this);\n },\n addFolder: function addFolder(name) {\n if (this.__folders[name] !== undefined) {\n throw new Error('You already have a folder in this GUI by the' + ' name \"' + name + '\"');\n }\n var newGuiParams = { name: name, parent: this };\n newGuiParams.autoPlace = this.autoPlace;\n if (this.load &&\n this.load.folders &&\n this.load.folders[name]) {\n newGuiParams.closed = this.load.folders[name].closed;\n newGuiParams.load = this.load.folders[name];\n }\n var gui = new GUI(newGuiParams);\n this.__folders[name] = gui;\n var li = addRow(this, gui.domElement);\n dom.addClass(li, 'folder');\n return gui;\n },\n removeFolder: function removeFolder(folder) {\n this.__ul.removeChild(folder.domElement.parentElement);\n delete this.__folders[folder.name];\n if (this.load &&\n this.load.folders &&\n this.load.folders[folder.name]) {\n delete this.load.folders[folder.name];\n }\n removeListeners(folder);\n var _this = this;\n Common.each(folder.__folders, function (subfolder) {\n folder.removeFolder(subfolder);\n });\n Common.defer(function () {\n _this.onResize();\n });\n },\n open: function open() {\n this.closed = false;\n },\n close: function close() {\n this.closed = true;\n },\n hide: function hide() {\n this.domElement.style.display = 'none';\n },\n show: function show() {\n this.domElement.style.display = '';\n },\n onResize: function onResize() {\n var root = this.getRoot();\n if (root.scrollable) {\n var top = dom.getOffset(root.__ul).top;\n var h = 0;\n Common.each(root.__ul.childNodes, function (node) {\n if (!(root.autoPlace && node === root.__save_row)) {\n h += dom.getHeight(node);\n }\n });\n if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) {\n dom.addClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px';\n } else {\n dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = 'auto';\n }\n }\n if (root.__resize_handle) {\n Common.defer(function () {\n root.__resize_handle.style.height = root.__ul.offsetHeight + 'px';\n });\n }\n if (root.__closeButton) {\n root.__closeButton.style.width = root.width + 'px';\n }\n },\n onResizeDebounced: Common.debounce(function () {\n this.onResize();\n }, 50),\n remember: function remember() {\n if (Common.isUndefined(SAVE_DIALOGUE)) {\n SAVE_DIALOGUE = new CenteredDiv();\n SAVE_DIALOGUE.domElement.innerHTML = saveDialogContents;\n }\n if (this.parent) {\n throw new Error('You can only call remember on a top level GUI.');\n }\n var _this = this;\n Common.each(Array.prototype.slice.call(arguments), function (object) {\n if (_this.__rememberedObjects.length === 0) {\n addSaveMenu(_this);\n }\n if (_this.__rememberedObjects.indexOf(object) === -1) {\n _this.__rememberedObjects.push(object);\n }\n });\n if (this.autoPlace) {\n setWidth(this, this.width);\n }\n },\n getRoot: function getRoot() {\n var gui = this;\n while (gui.parent) {\n gui = gui.parent;\n }\n return gui;\n },\n getSaveObject: function getSaveObject() {\n var toReturn = this.load;\n toReturn.closed = this.closed;\n if (this.__rememberedObjects.length > 0) {\n toReturn.preset = this.preset;\n if (!toReturn.remembered) {\n toReturn.remembered = {};\n }\n toReturn.remembered[this.preset] = getCurrentPreset(this);\n }\n toReturn.folders = {};\n Common.each(this.__folders, function (element, key) {\n toReturn.folders[key] = element.getSaveObject();\n });\n return toReturn;\n },\n save: function save() {\n if (!this.load.remembered) {\n this.load.remembered = {};\n }\n this.load.remembered[this.preset] = getCurrentPreset(this);\n markPresetModified(this, false);\n this.saveToLocalStorageIfPossible();\n },\n saveAs: function saveAs(presetName) {\n if (!this.load.remembered) {\n this.load.remembered = {};\n this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true);\n }\n this.load.remembered[presetName] = getCurrentPreset(this);\n this.preset = presetName;\n addPresetOption(this, presetName, true);\n this.saveToLocalStorageIfPossible();\n },\n revert: function revert(gui) {\n Common.each(this.__controllers, function (controller) {\n if (!this.getRoot().load.remembered) {\n controller.setValue(controller.initialValue);\n } else {\n recallSavedValue(gui || this.getRoot(), controller);\n }\n if (controller.__onFinishChange) {\n controller.__onFinishChange.call(controller, controller.getValue());\n }\n }, this);\n Common.each(this.__folders, function (folder) {\n folder.revert(folder);\n });\n if (!gui) {\n markPresetModified(this.getRoot(), false);\n }\n },\n listen: function listen(controller) {\n var init = this.__listening.length === 0;\n this.__listening.push(controller);\n if (init) {\n updateDisplays(this.__listening);\n }\n },\n updateDisplay: function updateDisplay() {\n Common.each(this.__controllers, function (controller) {\n controller.updateDisplay();\n });\n Common.each(this.__folders, function (folder) {\n folder.updateDisplay();\n });\n }\n});\nfunction addRow(gui, newDom, liBefore) {\n var li = document.createElement('li');\n if (newDom) {\n li.appendChild(newDom);\n }\n if (liBefore) {\n gui.__ul.insertBefore(li, liBefore);\n } else {\n gui.__ul.appendChild(li);\n }\n gui.onResize();\n return li;\n}\nfunction removeListeners(gui) {\n dom.unbind(window, 'resize', gui.__resizeHandler);\n if (gui.saveToLocalStorageIfPossible) {\n dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible);\n }\n}\nfunction markPresetModified(gui, modified) {\n var opt = gui.__preset_select[gui.__preset_select.selectedIndex];\n if (modified) {\n opt.innerHTML = opt.value + '*';\n } else {\n opt.innerHTML = opt.value;\n }\n}\nfunction augmentController(gui, li, controller) {\n controller.__li = li;\n controller.__gui = gui;\n Common.extend(controller, {\n options: function options(_options) {\n if (arguments.length > 1) {\n var nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: nextSibling,\n factoryArgs: [Common.toArray(arguments)]\n });\n }\n if (Common.isArray(_options) || Common.isObject(_options)) {\n var _nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: _nextSibling,\n factoryArgs: [_options]\n });\n }\n },\n name: function name(_name) {\n controller.__li.firstElementChild.firstElementChild.innerHTML = _name;\n return controller;\n },\n listen: function listen() {\n controller.__gui.listen(controller);\n return controller;\n },\n remove: function remove() {\n controller.__gui.remove(controller);\n return controller;\n }\n });\n if (controller instanceof NumberControllerSlider) {\n var box = new NumberControllerBox(controller.object, controller.property, { min: controller.__min, max: controller.__max, step: controller.__step });\n Common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function (method) {\n var pc = controller[method];\n var pb = box[method];\n controller[method] = box[method] = function () {\n var args = Array.prototype.slice.call(arguments);\n pb.apply(box, args);\n return pc.apply(controller, args);\n };\n });\n dom.addClass(li, 'has-slider');\n controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild);\n } else if (controller instanceof NumberControllerBox) {\n var r = function r(returned) {\n if (Common.isNumber(controller.__min) && Common.isNumber(controller.__max)) {\n var oldName = controller.__li.firstElementChild.firstElementChild.innerHTML;\n var wasListening = controller.__gui.__listening.indexOf(controller) > -1;\n controller.remove();\n var newController = _add(gui, controller.object, controller.property, {\n before: controller.__li.nextElementSibling,\n factoryArgs: [controller.__min, controller.__max, controller.__step]\n });\n newController.name(oldName);\n if (wasListening) newController.listen();\n return newController;\n }\n return returned;\n };\n controller.min = Common.compose(r, controller.min);\n controller.max = Common.compose(r, controller.max);\n } else if (controller instanceof BooleanController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__checkbox, 'click');\n });\n dom.bind(controller.__checkbox, 'click', function (e) {\n e.stopPropagation();\n });\n } else if (controller instanceof FunctionController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__button, 'click');\n });\n dom.bind(li, 'mouseover', function () {\n dom.addClass(controller.__button, 'hover');\n });\n dom.bind(li, 'mouseout', function () {\n dom.removeClass(controller.__button, 'hover');\n });\n } else if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n controller.updateDisplay = Common.compose(function (val) {\n li.style.borderLeftColor = controller.__color.toString();\n return val;\n }, controller.updateDisplay);\n controller.updateDisplay();\n }\n controller.setValue = Common.compose(function (val) {\n if (gui.getRoot().__preset_select && controller.isModified()) {\n markPresetModified(gui.getRoot(), true);\n }\n return val;\n }, controller.setValue);\n}\nfunction recallSavedValue(gui, controller) {\n var root = gui.getRoot();\n var matchedIndex = root.__rememberedObjects.indexOf(controller.object);\n if (matchedIndex !== -1) {\n var controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex];\n if (controllerMap === undefined) {\n controllerMap = {};\n root.__rememberedObjectIndecesToControllers[matchedIndex] = controllerMap;\n }\n controllerMap[controller.property] = controller;\n if (root.load && root.load.remembered) {\n var presetMap = root.load.remembered;\n var preset = void 0;\n if (presetMap[gui.preset]) {\n preset = presetMap[gui.preset];\n } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) {\n preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME];\n } else {\n return;\n }\n if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) {\n var value = preset[matchedIndex][controller.property];\n controller.initialValue = value;\n controller.setValue(value);\n }\n }\n }\n}\nfunction _add(gui, object, property, params) {\n if (object[property] === undefined) {\n throw new Error('Object \"' + object + '\" has no property \"' + property + '\"');\n }\n var controller = void 0;\n if (params.color) {\n controller = new ColorController(object, property);\n } else {\n var factoryArgs = [object, property].concat(params.factoryArgs);\n controller = ControllerFactory.apply(gui, factoryArgs);\n }\n if (params.before instanceof Controller) {\n params.before = params.before.__li;\n }\n recallSavedValue(gui, controller);\n dom.addClass(controller.domElement, 'c');\n var name = document.createElement('span');\n dom.addClass(name, 'property-name');\n name.innerHTML = controller.property;\n var container = document.createElement('div');\n container.appendChild(name);\n container.appendChild(controller.domElement);\n var li = addRow(gui, container, params.before);\n dom.addClass(li, GUI.CLASS_CONTROLLER_ROW);\n if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n } else {\n dom.addClass(li, _typeof(controller.getValue()));\n }\n augmentController(gui, li, controller);\n gui.__controllers.push(controller);\n return controller;\n}\nfunction getLocalStorageHash(gui, key) {\n return document.location.href + '.' + key;\n}\nfunction addPresetOption(gui, name, setSelected) {\n var opt = document.createElement('option');\n opt.innerHTML = name;\n opt.value = name;\n gui.__preset_select.appendChild(opt);\n if (setSelected) {\n gui.__preset_select.selectedIndex = gui.__preset_select.length - 1;\n }\n}\nfunction showHideExplain(gui, explain) {\n explain.style.display = gui.useLocalStorage ? 'block' : 'none';\n}\nfunction addSaveMenu(gui) {\n var div = gui.__save_row = document.createElement('li');\n dom.addClass(gui.domElement, 'has-save');\n gui.__ul.insertBefore(div, gui.__ul.firstChild);\n dom.addClass(div, 'save-row');\n var gears = document.createElement('span');\n gears.innerHTML = ' ';\n dom.addClass(gears, 'button gears');\n var button = document.createElement('span');\n button.innerHTML = 'Save';\n dom.addClass(button, 'button');\n dom.addClass(button, 'save');\n var button2 = document.createElement('span');\n button2.innerHTML = 'New';\n dom.addClass(button2, 'button');\n dom.addClass(button2, 'save-as');\n var button3 = document.createElement('span');\n button3.innerHTML = 'Revert';\n dom.addClass(button3, 'button');\n dom.addClass(button3, 'revert');\n var select = gui.__preset_select = document.createElement('select');\n if (gui.load && gui.load.remembered) {\n Common.each(gui.load.remembered, function (value, key) {\n addPresetOption(gui, key, key === gui.preset);\n });\n } else {\n addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false);\n }\n dom.bind(select, 'change', function () {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n gui.__preset_select[index].innerHTML = gui.__preset_select[index].value;\n }\n gui.preset = this.value;\n });\n div.appendChild(select);\n div.appendChild(gears);\n div.appendChild(button);\n div.appendChild(button2);\n div.appendChild(button3);\n if (SUPPORTS_LOCAL_STORAGE) {\n var explain = document.getElementById('dg-local-explain');\n var localStorageCheckBox = document.getElementById('dg-local-storage');\n var saveLocally = document.getElementById('dg-save-locally');\n saveLocally.style.display = 'block';\n if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') {\n localStorageCheckBox.setAttribute('checked', 'checked');\n }\n showHideExplain(gui, explain);\n dom.bind(localStorageCheckBox, 'change', function () {\n gui.useLocalStorage = !gui.useLocalStorage;\n showHideExplain(gui, explain);\n });\n }\n var newConstructorTextArea = document.getElementById('dg-new-constructor');\n dom.bind(newConstructorTextArea, 'keydown', function (e) {\n if (e.metaKey && (e.which === 67 || e.keyCode === 67)) {\n SAVE_DIALOGUE.hide();\n }\n });\n dom.bind(gears, 'click', function () {\n newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2);\n SAVE_DIALOGUE.show();\n newConstructorTextArea.focus();\n newConstructorTextArea.select();\n });\n dom.bind(button, 'click', function () {\n gui.save();\n });\n dom.bind(button2, 'click', function () {\n var presetName = prompt('Enter a new preset name.');\n if (presetName) {\n gui.saveAs(presetName);\n }\n });\n dom.bind(button3, 'click', function () {\n gui.revert();\n });\n}\nfunction addResizeHandle(gui) {\n var pmouseX = void 0;\n gui.__resize_handle = document.createElement('div');\n Common.extend(gui.__resize_handle.style, {\n width: '6px',\n marginLeft: '-3px',\n height: '200px',\n cursor: 'ew-resize',\n position: 'absolute'\n });\n function drag(e) {\n e.preventDefault();\n gui.width += pmouseX - e.clientX;\n gui.onResize();\n pmouseX = e.clientX;\n return false;\n }\n function dragStop() {\n dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.unbind(window, 'mousemove', drag);\n dom.unbind(window, 'mouseup', dragStop);\n }\n function dragStart(e) {\n e.preventDefault();\n pmouseX = e.clientX;\n dom.addClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.bind(window, 'mousemove', drag);\n dom.bind(window, 'mouseup', dragStop);\n return false;\n }\n dom.bind(gui.__resize_handle, 'mousedown', dragStart);\n dom.bind(gui.__closeButton, 'mousedown', dragStart);\n gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild);\n}\nfunction setWidth(gui, w) {\n gui.domElement.style.width = w + 'px';\n if (gui.__save_row && gui.autoPlace) {\n gui.__save_row.style.width = w + 'px';\n }\n if (gui.__closeButton) {\n gui.__closeButton.style.width = w + 'px';\n }\n}\nfunction getCurrentPreset(gui, useInitialValues) {\n var toReturn = {};\n Common.each(gui.__rememberedObjects, function (val, index) {\n var savedValues = {};\n var controllerMap = gui.__rememberedObjectIndecesToControllers[index];\n Common.each(controllerMap, function (controller, property) {\n savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue();\n });\n toReturn[index] = savedValues;\n });\n return toReturn;\n}\nfunction setPresetSelectIndex(gui) {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n if (gui.__preset_select[index].value === gui.preset) {\n gui.__preset_select.selectedIndex = index;\n }\n }\n}\nfunction updateDisplays(controllerArray) {\n if (controllerArray.length !== 0) {\n requestAnimationFrame$1.call(window, function () {\n updateDisplays(controllerArray);\n });\n }\n Common.each(controllerArray, function (c) {\n c.updateDisplay();\n });\n}\n\nvar color = {\n Color: Color,\n math: ColorMath,\n interpret: interpret\n};\nvar controllers = {\n Controller: Controller,\n BooleanController: BooleanController,\n OptionController: OptionController,\n StringController: StringController,\n NumberController: NumberController,\n NumberControllerBox: NumberControllerBox,\n NumberControllerSlider: NumberControllerSlider,\n FunctionController: FunctionController,\n ColorController: ColorController\n};\nvar dom$1 = { dom: dom };\nvar gui = { GUI: GUI };\nvar GUI$1 = GUI;\nvar index = {\n color: color,\n controllers: controllers,\n dom: dom$1,\n gui: gui,\n GUI: GUI$1\n};\n\nexport { color, controllers, dom$1 as dom, gui, GUI$1 as GUI };\nexport default index;\n//# sourceMappingURL=dat.gui.module.js.map\n","exports.positions=[[5.929688,4.125,0],[5.387188,4.125,2.7475],[5.2971,4.494141,2.70917],[5.832031,4.494141,0],[5.401602,4.617188,2.753633],[5.945313,4.617188,0],[5.614209,4.494141,2.844092],[6.175781,4.494141,0],[5.848437,4.125,2.94375],[6.429688,4.125,0],[3.899688,4.125,4.97],[3.830352,4.494141,4.900664],[3.910782,4.617188,4.981094],[4.074414,4.494141,5.144727],[4.254687,4.125,5.325],[1.677188,4.125,6.4575],[1.638858,4.494141,6.367412],[1.68332,4.617188,6.471914],[1.77378,4.494141,6.684522],[1.873438,4.125,6.91875],[-1.070312,4.125,7],[-1.070312,4.494141,6.902344],[-1.070312,4.617188,7.015625],[-1.070312,4.494141,7.246094],[-1.070312,4.125,7.5],[-1.070312,4.125,7],[-4.007656,4.125,6.4575],[-3.859572,4.494141,6.367412],[-1.070312,4.494141,6.902344],[-3.847676,4.617188,6.471914],[-1.070312,4.617188,7.015625],[-3.917371,4.494141,6.684522],[-1.070312,4.494141,7.246094],[-4.014062,4.125,6.91875],[-1.070312,4.125,7.5],[-6.209063,4.125,4.97],[-6.042168,4.494141,4.900664],[-6.0725,4.617188,4.981094],[-6.217675,4.494141,5.144727],[-6.395312,4.125,5.325],[-7.591093,4.125,2.7475],[-7.464421,4.494141,2.70917],[-7.550137,4.617188,2.753633],[-7.755822,4.494141,2.844092],[-7.989062,4.125,2.94375],[-8.070313,4.125,0],[-7.972656,4.494141,0],[-8.085938,4.617188,0],[-8.316406,4.494141,0],[-8.570313,4.125,0],[-8.070313,4.125,0],[-7.527812,4.125,-2.7475],[-7.437724,4.494141,-2.70917],[-7.972656,4.494141,0],[-7.542227,4.617188,-2.753633],[-8.085938,4.617188,0],[-7.754834,4.494141,-2.844092],[-8.316406,4.494141,0],[-7.989062,4.125,-2.94375],[-8.570313,4.125,0],[-6.040312,4.125,-4.97],[-5.970977,4.494141,-4.900664],[-6.051406,4.617188,-4.981094],[-6.215039,4.494141,-5.144727],[-6.395312,4.125,-5.325],[-3.817812,4.125,-6.4575],[-3.779482,4.494141,-6.367412],[-3.823945,4.617188,-6.471914],[-3.914404,4.494141,-6.684522],[-4.014062,4.125,-6.91875],[-1.070312,4.125,-7],[-1.070312,4.494141,-6.902344],[-1.070312,4.617188,-7.015625],[-1.070312,4.494141,-7.246094],[-1.070312,4.125,-7.5],[-1.070312,4.125,-7],[1.677188,4.125,-6.4575],[1.638858,4.494141,-6.367412],[-1.070312,4.494141,-6.902344],[1.68332,4.617188,-6.471914],[-1.070312,4.617188,-7.015625],[1.77378,4.494141,-6.684522],[-1.070312,4.494141,-7.246094],[1.873438,4.125,-6.91875],[-1.070312,4.125,-7.5],[3.899688,4.125,-4.97],[3.830352,4.494141,-4.900664],[3.910782,4.617188,-4.981094],[4.074414,4.494141,-5.144727],[4.254687,4.125,-5.325],[5.387188,4.125,-2.7475],[5.2971,4.494141,-2.70917],[5.401602,4.617188,-2.753633],[5.614209,4.494141,-2.844092],[5.848437,4.125,-2.94375],[5.929688,4.125,0],[5.832031,4.494141,0],[5.945313,4.617188,0],[6.175781,4.494141,0],[6.429688,4.125,0],[6.429688,4.125,0],[5.848437,4.125,2.94375],[6.695264,2.162109,3.304053],[7.347656,2.162109,0],[7.433985,0.234375,3.61836],[8.148438,0.234375,0],[7.956494,-1.623047,3.840674],[8.714844,-1.623047,0],[8.154688,-3.375,3.925],[8.929688,-3.375,0],[4.254687,4.125,5.325],[4.906446,2.162109,5.976758],[5.475,0.234375,6.545312],[5.877149,-1.623047,6.947461],[6.029688,-3.375,7.1],[1.873438,4.125,6.91875],[2.23374,2.162109,7.765576],[2.548047,0.234375,8.504297],[2.770362,-1.623047,9.026807],[2.854688,-3.375,9.225],[-1.070312,4.125,7.5],[-1.070312,2.162109,8.417969],[-1.070312,0.234375,9.21875],[-1.070312,-1.623047,9.785156],[-1.070312,-3.375,10],[-1.070312,4.125,7.5],[-4.014062,4.125,6.91875],[-4.374365,2.162109,7.765576],[-1.070312,2.162109,8.417969],[-4.688672,0.234375,8.504297],[-1.070312,0.234375,9.21875],[-4.910986,-1.623047,9.026807],[-1.070312,-1.623047,9.785156],[-4.995313,-3.375,9.225],[-1.070312,-3.375,10],[-6.395312,4.125,5.325],[-7.047071,2.162109,5.976758],[-7.615624,0.234375,6.545312],[-8.017773,-1.623047,6.947461],[-8.170312,-3.375,7.1],[-7.989062,4.125,2.94375],[-8.835889,2.162109,3.304053],[-9.57461,0.234375,3.61836],[-10.097119,-1.623047,3.840674],[-10.295313,-3.375,3.925],[-8.570313,4.125,0],[-9.488281,2.162109,0],[-10.289063,0.234375,0],[-10.855469,-1.623047,0],[-11.070313,-3.375,0],[-8.570313,4.125,0],[-7.989062,4.125,-2.94375],[-8.835889,2.162109,-3.304053],[-9.488281,2.162109,0],[-9.57461,0.234375,-3.61836],[-10.289063,0.234375,0],[-10.097119,-1.623047,-3.840674],[-10.855469,-1.623047,0],[-10.295313,-3.375,-3.925],[-11.070313,-3.375,0],[-6.395312,4.125,-5.325],[-7.047071,2.162109,-5.976758],[-7.615624,0.234375,-6.545312],[-8.017773,-1.623047,-6.947461],[-8.170312,-3.375,-7.1],[-4.014062,4.125,-6.91875],[-4.374365,2.162109,-7.765576],[-4.688672,0.234375,-8.504297],[-4.910986,-1.623047,-9.026807],[-4.995313,-3.375,-9.225],[-1.070312,4.125,-7.5],[-1.070312,2.162109,-8.417969],[-1.070312,0.234375,-9.21875],[-1.070312,-1.623047,-9.785156],[-1.070312,-3.375,-10],[-1.070312,4.125,-7.5],[1.873438,4.125,-6.91875],[2.23374,2.162109,-7.765576],[-1.070312,2.162109,-8.417969],[2.548047,0.234375,-8.504297],[-1.070312,0.234375,-9.21875],[2.770362,-1.623047,-9.026807],[-1.070312,-1.623047,-9.785156],[2.854688,-3.375,-9.225],[-1.070312,-3.375,-10],[4.254687,4.125,-5.325],[4.906446,2.162109,-5.976758],[5.475,0.234375,-6.545312],[5.877149,-1.623047,-6.947461],[6.029688,-3.375,-7.1],[5.848437,4.125,-2.94375],[6.695264,2.162109,-3.304053],[7.433985,0.234375,-3.61836],[7.956494,-1.623047,-3.840674],[8.154688,-3.375,-3.925],[6.429688,4.125,0],[7.347656,2.162109,0],[8.148438,0.234375,0],[8.714844,-1.623047,0],[8.929688,-3.375,0],[8.929688,-3.375,0],[8.154688,-3.375,3.925],[7.794336,-4.857422,3.77168],[8.539063,-4.857422,0],[7.001562,-5.953125,3.434375],[7.679688,-5.953125,0],[6.208789,-6.697266,3.09707],[6.820313,-6.697266,0],[5.848437,-7.125,2.94375],[6.429688,-7.125,0],[6.029688,-3.375,7.1],[5.752343,-4.857422,6.822656],[5.142187,-5.953125,6.2125],[4.532031,-6.697266,5.602344],[4.254687,-7.125,5.325],[2.854688,-3.375,9.225],[2.701367,-4.857422,8.864649],[2.364063,-5.953125,8.071875],[2.026758,-6.697266,7.279101],[1.873438,-7.125,6.91875],[-1.070312,-3.375,10],[-1.070312,-4.857422,9.609375],[-1.070312,-5.953125,8.75],[-1.070312,-6.697266,7.890625],[-1.070312,-7.125,7.5],[-1.070312,-3.375,10],[-4.995313,-3.375,9.225],[-4.841992,-4.857422,8.864649],[-1.070312,-4.857422,9.609375],[-4.504687,-5.953125,8.071875],[-1.070312,-5.953125,8.75],[-4.167383,-6.697266,7.279101],[-1.070312,-6.697266,7.890625],[-4.014062,-7.125,6.91875],[-1.070312,-7.125,7.5],[-8.170312,-3.375,7.1],[-7.892968,-4.857422,6.822656],[-7.282812,-5.953125,6.2125],[-6.672656,-6.697266,5.602344],[-6.395312,-7.125,5.325],[-10.295313,-3.375,3.925],[-9.934961,-4.857422,3.77168],[-9.142187,-5.953125,3.434375],[-8.349414,-6.697266,3.09707],[-7.989062,-7.125,2.94375],[-11.070313,-3.375,0],[-10.679688,-4.857422,0],[-9.820313,-5.953125,0],[-8.960938,-6.697266,0],[-8.570313,-7.125,0],[-11.070313,-3.375,0],[-10.295313,-3.375,-3.925],[-9.934961,-4.857422,-3.77168],[-10.679688,-4.857422,0],[-9.142187,-5.953125,-3.434375],[-9.820313,-5.953125,0],[-8.349414,-6.697266,-3.09707],[-8.960938,-6.697266,0],[-7.989062,-7.125,-2.94375],[-8.570313,-7.125,0],[-8.170312,-3.375,-7.1],[-7.892968,-4.857422,-6.822656],[-7.282812,-5.953125,-6.2125],[-6.672656,-6.697266,-5.602344],[-6.395312,-7.125,-5.325],[-4.995313,-3.375,-9.225],[-4.841992,-4.857422,-8.864649],[-4.504687,-5.953125,-8.071875],[-4.167383,-6.697266,-7.279101],[-4.014062,-7.125,-6.91875],[-1.070312,-3.375,-10],[-1.070312,-4.857422,-9.609375],[-1.070312,-5.953125,-8.75],[-1.070312,-6.697266,-7.890625],[-1.070312,-7.125,-7.5],[-1.070312,-3.375,-10],[2.854688,-3.375,-9.225],[2.701367,-4.857422,-8.864649],[-1.070312,-4.857422,-9.609375],[2.364063,-5.953125,-8.071875],[-1.070312,-5.953125,-8.75],[2.026758,-6.697266,-7.279101],[-1.070312,-6.697266,-7.890625],[1.873438,-7.125,-6.91875],[-1.070312,-7.125,-7.5],[6.029688,-3.375,-7.1],[5.752343,-4.857422,-6.822656],[5.142187,-5.953125,-6.2125],[4.532031,-6.697266,-5.602344],[4.254687,-7.125,-5.325],[8.154688,-3.375,-3.925],[7.794336,-4.857422,-3.77168],[7.001562,-5.953125,-3.434375],[6.208789,-6.697266,-3.09707],[5.848437,-7.125,-2.94375],[8.929688,-3.375,0],[8.539063,-4.857422,0],[7.679688,-5.953125,0],[6.820313,-6.697266,0],[6.429688,-7.125,0],[6.429688,-7.125,0],[5.848437,-7.125,2.94375],[5.691685,-7.400391,2.877056],[6.259766,-7.400391,0],[4.853868,-7.640625,2.520586],[5.351563,-7.640625,0],[2.783648,-7.810547,1.639761],[3.107422,-7.810547,0],[-1.070312,-7.875,0],[4.254687,-7.125,5.325],[4.134043,-7.400391,5.204355],[3.489219,-7.640625,4.559531],[1.895879,-7.810547,2.966191],[-1.070312,-7.875,0],[1.873438,-7.125,6.91875],[1.806743,-7.400391,6.761997],[1.450274,-7.640625,5.92418],[0.569448,-7.810547,3.85396],[-1.070312,-7.875,0],[-1.070312,-7.125,7.5],[-1.070312,-7.400391,7.330078],[-1.070312,-7.640625,6.421875],[-1.070312,-7.810547,4.177734],[-1.070312,-7.875,0],[-1.070312,-7.125,7.5],[-4.014062,-7.125,6.91875],[-3.947368,-7.400391,6.761997],[-1.070312,-7.400391,7.330078],[-3.590898,-7.640625,5.92418],[-1.070312,-7.640625,6.421875],[-2.710073,-7.810547,3.85396],[-1.070312,-7.810547,4.177734],[-1.070312,-7.875,0],[-6.395312,-7.125,5.325],[-6.274668,-7.400391,5.204355],[-5.629844,-7.640625,4.559531],[-4.036504,-7.810547,2.966191],[-1.070312,-7.875,0],[-7.989062,-7.125,2.94375],[-7.832309,-7.400391,2.877056],[-6.994492,-7.640625,2.520586],[-4.924272,-7.810547,1.639761],[-1.070312,-7.875,0],[-8.570313,-7.125,0],[-8.400391,-7.400391,0],[-7.492188,-7.640625,0],[-5.248047,-7.810547,0],[-1.070312,-7.875,0],[-8.570313,-7.125,0],[-7.989062,-7.125,-2.94375],[-7.832309,-7.400391,-2.877056],[-8.400391,-7.400391,0],[-6.994492,-7.640625,-2.520586],[-7.492188,-7.640625,0],[-4.924272,-7.810547,-1.639761],[-5.248047,-7.810547,0],[-1.070312,-7.875,0],[-6.395312,-7.125,-5.325],[-6.274668,-7.400391,-5.204355],[-5.629844,-7.640625,-4.559531],[-4.036504,-7.810547,-2.966191],[-1.070312,-7.875,0],[-4.014062,-7.125,-6.91875],[-3.947368,-7.400391,-6.761997],[-3.590898,-7.640625,-5.92418],[-2.710073,-7.810547,-3.85396],[-1.070312,-7.875,0],[-1.070312,-7.125,-7.5],[-1.070312,-7.400391,-7.330078],[-1.070312,-7.640625,-6.421875],[-1.070312,-7.810547,-4.177734],[-1.070312,-7.875,0],[-1.070312,-7.125,-7.5],[1.873438,-7.125,-6.91875],[1.806743,-7.400391,-6.761997],[-1.070312,-7.400391,-7.330078],[1.450274,-7.640625,-5.92418],[-1.070312,-7.640625,-6.421875],[0.569448,-7.810547,-3.85396],[-1.070312,-7.810547,-4.177734],[-1.070312,-7.875,0],[4.254687,-7.125,-5.325],[4.134043,-7.400391,-5.204355],[3.489219,-7.640625,-4.559531],[1.895879,-7.810547,-2.966191],[-1.070312,-7.875,0],[5.848437,-7.125,-2.94375],[5.691685,-7.400391,-2.877056],[4.853868,-7.640625,-2.520586],[2.783648,-7.810547,-1.639761],[-1.070312,-7.875,0],[6.429688,-7.125,0],[6.259766,-7.400391,0],[5.351563,-7.640625,0],[3.107422,-7.810547,0],[-1.070312,-7.875,0],[-9.070313,2.25,0],[-8.992188,2.425781,0.84375],[-11.47583,2.405457,0.84375],[-11.40625,2.232422,0],[-13.298828,2.263184,0.84375],[-13.132813,2.109375,0],[-14.421631,1.877014,0.84375],[-14.203125,1.775391,0],[-14.804688,1.125,0.84375],[-14.570313,1.125,0],[-8.820313,2.8125,1.125],[-11.628906,2.786134,1.125],[-13.664063,2.601563,1.125],[-14.902344,2.100586,1.125],[-15.320313,1.125,1.125],[-8.648438,3.199219,0.84375],[-11.781982,3.166809,0.84375],[-14.029297,2.939941,0.84375],[-15.383057,2.324158,0.84375],[-15.835938,1.125,0.84375],[-8.570313,3.375,0],[-11.851563,3.339844,0],[-14.195313,3.09375,0],[-15.601563,2.425781,0],[-16.070313,1.125,0],[-8.570313,3.375,0],[-8.648438,3.199219,-0.84375],[-11.781982,3.166809,-0.84375],[-11.851563,3.339844,0],[-14.029297,2.939941,-0.84375],[-14.195313,3.09375,0],[-15.383057,2.324158,-0.84375],[-15.601563,2.425781,0],[-15.835938,1.125,-0.84375],[-16.070313,1.125,0],[-8.820313,2.8125,-1.125],[-11.628906,2.786134,-1.125],[-13.664063,2.601563,-1.125],[-14.902344,2.100586,-1.125],[-15.320313,1.125,-1.125],[-8.992188,2.425781,-0.84375],[-11.47583,2.405457,-0.84375],[-13.298828,2.263184,-0.84375],[-14.421631,1.877014,-0.84375],[-14.804688,1.125,-0.84375],[-9.070313,2.25,0],[-11.40625,2.232422,0],[-13.132813,2.109375,0],[-14.203125,1.775391,0],[-14.570313,1.125,0],[-14.570313,1.125,0],[-14.804688,1.125,0.84375],[-14.588013,0.00705,0.84375],[-14.375,0.105469,0],[-13.90918,-1.275146,0.84375],[-13.757813,-1.125,0],[-12.724976,-2.540863,0.84375],[-12.671875,-2.355469,0],[-10.992188,-3.609375,0.84375],[-11.070313,-3.375,0],[-15.320313,1.125,1.125],[-15.056641,-0.209473,1.125],[-14.242188,-1.605469,1.125],[-12.841797,-2.94873,1.125],[-10.820313,-4.125,1.125],[-15.835938,1.125,0.84375],[-15.525269,-0.425995,0.84375],[-14.575195,-1.935791,0.84375],[-12.958618,-3.356598,0.84375],[-10.648438,-4.640625,0.84375],[-16.070313,1.125,0],[-15.738281,-0.524414,0],[-14.726563,-2.085938,0],[-13.011719,-3.541992,0],[-10.570313,-4.875,0],[-16.070313,1.125,0],[-15.835938,1.125,-0.84375],[-15.525269,-0.425995,-0.84375],[-15.738281,-0.524414,0],[-14.575195,-1.935791,-0.84375],[-14.726563,-2.085938,0],[-12.958618,-3.356598,-0.84375],[-13.011719,-3.541992,0],[-10.648438,-4.640625,-0.84375],[-10.570313,-4.875,0],[-15.320313,1.125,-1.125],[-15.056641,-0.209473,-1.125],[-14.242188,-1.605469,-1.125],[-12.841797,-2.94873,-1.125],[-10.820313,-4.125,-1.125],[-14.804688,1.125,-0.84375],[-14.588013,0.00705,-0.84375],[-13.90918,-1.275146,-0.84375],[-12.724976,-2.540863,-0.84375],[-10.992188,-3.609375,-0.84375],[-14.570313,1.125,0],[-14.375,0.105469,0],[-13.757813,-1.125,0],[-12.671875,-2.355469,0],[-11.070313,-3.375,0],[7.429688,-0.75,0],[7.429688,-1.394531,1.85625],[10.01123,-0.677124,1.676074],[9.828125,-0.199219,0],[11.101563,0.84668,1.279688],[10.867188,1.125,0],[11.723145,2.629761,0.883301],[11.4375,2.730469,0],[12.898438,4.125,0.703125],[12.429688,4.125,0],[7.429688,-2.8125,2.475],[10.414063,-1.728516,2.234766],[11.617188,0.234375,1.70625],[12.351563,2.408203,1.177734],[13.929688,4.125,0.9375],[7.429688,-4.230469,1.85625],[10.816895,-2.779907,1.676074],[12.132813,-0.37793,1.279688],[12.97998,2.186646,0.883301],[14.960938,4.125,0.703125],[7.429688,-4.875,0],[11,-3.257813,0],[12.367188,-0.65625,0],[13.265625,2.085938,0],[15.429688,4.125,0],[7.429688,-4.875,0],[7.429688,-4.230469,-1.85625],[10.816895,-2.779907,-1.676074],[11,-3.257813,0],[12.132813,-0.37793,-1.279688],[12.367188,-0.65625,0],[12.97998,2.186646,-0.883301],[13.265625,2.085938,0],[14.960938,4.125,-0.703125],[15.429688,4.125,0],[7.429688,-2.8125,-2.475],[10.414063,-1.728516,-2.234766],[11.617188,0.234375,-1.70625],[12.351563,2.408203,-1.177734],[13.929688,4.125,-0.9375],[7.429688,-1.394531,-1.85625],[10.01123,-0.677124,-1.676074],[11.101563,0.84668,-1.279688],[11.723145,2.629761,-0.883301],[12.898438,4.125,-0.703125],[7.429688,-0.75,0],[9.828125,-0.199219,0],[10.867188,1.125,0],[11.4375,2.730469,0],[12.429688,4.125,0],[12.429688,4.125,0],[12.898438,4.125,0.703125],[13.291077,4.346237,0.65918],[12.789063,4.335938,0],[13.525879,4.422729,0.5625],[13.054688,4.40625,0],[13.532898,4.350357,0.46582],[13.132813,4.335938,0],[13.242188,4.125,0.421875],[12.929688,4.125,0],[13.929688,4.125,0.9375],[14.395508,4.368896,0.878906],[14.5625,4.458984,0.75],[14.413086,4.38208,0.621094],[13.929688,4.125,0.5625],[14.960938,4.125,0.703125],[15.499939,4.391556,0.65918],[15.599121,4.495239,0.5625],[15.293274,4.413804,0.46582],[14.617188,4.125,0.421875],[15.429688,4.125,0],[16.001953,4.401855,0],[16.070313,4.511719,0],[15.693359,4.428224,0],[14.929688,4.125,0],[15.429688,4.125,0],[14.960938,4.125,-0.703125],[15.499939,4.391556,-0.65918],[16.001953,4.401855,0],[15.599121,4.495239,-0.5625],[16.070313,4.511719,0],[15.293274,4.413804,-0.46582],[15.693359,4.428224,0],[14.617188,4.125,-0.421875],[14.929688,4.125,0],[13.929688,4.125,-0.9375],[14.395508,4.368896,-0.878906],[14.5625,4.458984,-0.75],[14.413086,4.38208,-0.621094],[13.929688,4.125,-0.5625],[12.898438,4.125,-0.703125],[13.291077,4.346237,-0.65918],[13.525879,4.422729,-0.5625],[13.532898,4.350357,-0.46582],[13.242188,4.125,-0.421875],[12.429688,4.125,0],[12.789063,4.335938,0],[13.054688,4.40625,0],[13.132813,4.335938,0],[12.929688,4.125,0],[0.501414,7.628906,0.670256],[0.632813,7.628906,0],[-1.070312,7.875,0],[0.429278,7.03125,0.639395],[0.554688,7.03125,0],[-0.162029,6.292969,0.38696],[-0.085937,6.292969,0],[-0.147812,5.625,0.3925],[-0.070312,5.625,0],[0.140489,7.628906,1.210801],[-1.070312,7.875,0],[0.084844,7.03125,1.155156],[-0.370879,6.292969,0.699434],[-0.360312,5.625,0.71],[-0.400056,7.628906,1.571726],[-1.070312,7.875,0],[-0.430918,7.03125,1.49959],[-0.683352,6.292969,0.908284],[-0.677812,5.625,0.9225],[-1.070312,7.628906,1.703125],[-1.070312,7.875,0],[-1.070312,7.03125,1.625],[-1.070312,6.292969,0.984375],[-1.070312,5.625,1],[-1.740569,7.628906,1.571726],[-1.070312,7.628906,1.703125],[-1.070312,7.875,0],[-1.709707,7.03125,1.49959],[-1.070312,7.03125,1.625],[-1.457273,6.292969,0.908284],[-1.070312,6.292969,0.984375],[-1.462812,5.625,0.9225],[-1.070312,5.625,1],[-2.281113,7.628906,1.210801],[-1.070312,7.875,0],[-2.225469,7.03125,1.155156],[-1.769746,6.292969,0.699434],[-1.780312,5.625,0.71],[-2.642038,7.628906,0.670256],[-1.070312,7.875,0],[-2.569902,7.03125,0.639395],[-1.978596,6.292969,0.38696],[-1.992812,5.625,0.3925],[-2.773438,7.628906,0],[-1.070312,7.875,0],[-2.695313,7.03125,0],[-2.054687,6.292969,0],[-2.070312,5.625,0],[-2.642038,7.628906,-0.670256],[-2.773438,7.628906,0],[-1.070312,7.875,0],[-2.569902,7.03125,-0.639395],[-2.695313,7.03125,0],[-1.978596,6.292969,-0.38696],[-2.054687,6.292969,0],[-1.992812,5.625,-0.3925],[-2.070312,5.625,0],[-2.281113,7.628906,-1.210801],[-1.070312,7.875,0],[-2.225469,7.03125,-1.155156],[-1.769746,6.292969,-0.699434],[-1.780312,5.625,-0.71],[-1.740569,7.628906,-1.571726],[-1.070312,7.875,0],[-1.709707,7.03125,-1.49959],[-1.457273,6.292969,-0.908284],[-1.462812,5.625,-0.9225],[-1.070312,7.628906,-1.703125],[-1.070312,7.875,0],[-1.070312,7.03125,-1.625],[-1.070312,6.292969,-0.984375],[-1.070312,5.625,-1],[-0.400056,7.628906,-1.571726],[-1.070312,7.628906,-1.703125],[-1.070312,7.875,0],[-0.430918,7.03125,-1.49959],[-1.070312,7.03125,-1.625],[-0.683352,6.292969,-0.908284],[-1.070312,6.292969,-0.984375],[-0.677812,5.625,-0.9225],[-1.070312,5.625,-1],[0.140489,7.628906,-1.210801],[-1.070312,7.875,0],[0.084844,7.03125,-1.155156],[-0.370879,6.292969,-0.699434],[-0.360312,5.625,-0.71],[0.501414,7.628906,-0.670256],[-1.070312,7.875,0],[0.429278,7.03125,-0.639395],[-0.162029,6.292969,-0.38696],[-0.147812,5.625,-0.3925],[0.632813,7.628906,0],[-1.070312,7.875,0],[0.554688,7.03125,0],[-0.085937,6.292969,0],[-0.070312,5.625,0],[-0.070312,5.625,0],[-0.147812,5.625,0.3925],[1.034141,5.179688,0.895391],[1.210938,5.179688,0],[2.735,4.875,1.619062],[3.054688,4.875,0],[4.262891,4.570313,2.26914],[4.710938,4.570313,0],[4.925938,4.125,2.55125],[5.429688,4.125,0],[-0.360312,5.625,0.71],[0.549375,5.179688,1.619688],[1.858438,4.875,2.92875],[3.034375,4.570313,4.104687],[3.544688,4.125,4.615],[-0.677812,5.625,0.9225],[-0.174922,5.179688,2.104453],[0.54875,4.875,3.805313],[1.198828,4.570313,5.333203],[1.480938,4.125,5.99625],[-1.070312,5.625,1],[-1.070312,5.179688,2.28125],[-1.070312,4.875,4.125],[-1.070312,4.570313,5.78125],[-1.070312,4.125,6.5],[-1.070312,5.625,1],[-1.462812,5.625,0.9225],[-1.965703,5.179688,2.104453],[-1.070312,5.179688,2.28125],[-2.689375,4.875,3.805313],[-1.070312,4.875,4.125],[-3.339453,4.570313,5.333203],[-1.070312,4.570313,5.78125],[-3.621562,4.125,5.99625],[-1.070312,4.125,6.5],[-1.780312,5.625,0.71],[-2.69,5.179688,1.619688],[-3.999062,4.875,2.92875],[-5.174999,4.570313,4.104687],[-5.685312,4.125,4.615],[-1.992812,5.625,0.3925],[-3.174765,5.179688,0.895391],[-4.875625,4.875,1.619062],[-6.403516,4.570313,2.26914],[-7.066563,4.125,2.55125],[-2.070312,5.625,0],[-3.351562,5.179688,0],[-5.195313,4.875,0],[-6.851563,4.570313,0],[-7.570313,4.125,0],[-2.070312,5.625,0],[-1.992812,5.625,-0.3925],[-3.174765,5.179688,-0.895391],[-3.351562,5.179688,0],[-4.875625,4.875,-1.619062],[-5.195313,4.875,0],[-6.403516,4.570313,-2.26914],[-6.851563,4.570313,0],[-7.066563,4.125,-2.55125],[-7.570313,4.125,0],[-1.780312,5.625,-0.71],[-2.69,5.179688,-1.619688],[-3.999062,4.875,-2.92875],[-5.174999,4.570313,-4.104687],[-5.685312,4.125,-4.615],[-1.462812,5.625,-0.9225],[-1.965703,5.179688,-2.104453],[-2.689375,4.875,-3.805313],[-3.339453,4.570313,-5.333203],[-3.621562,4.125,-5.99625],[-1.070312,5.625,-1],[-1.070312,5.179688,-2.28125],[-1.070312,4.875,-4.125],[-1.070312,4.570313,-5.78125],[-1.070312,4.125,-6.5],[-1.070312,5.625,-1],[-0.677812,5.625,-0.9225],[-0.174922,5.179688,-2.104453],[-1.070312,5.179688,-2.28125],[0.54875,4.875,-3.805313],[-1.070312,4.875,-4.125],[1.198828,4.570313,-5.333203],[-1.070312,4.570313,-5.78125],[1.480938,4.125,-5.99625],[-1.070312,4.125,-6.5],[-0.360312,5.625,-0.71],[0.549375,5.179688,-1.619688],[1.858438,4.875,-2.92875],[3.034375,4.570313,-4.104687],[3.544688,4.125,-4.615],[-0.147812,5.625,-0.3925],[1.034141,5.179688,-0.895391],[2.735,4.875,-1.619062],[4.262891,4.570313,-2.26914],[4.925938,4.125,-2.55125],[-0.070312,5.625,0],[1.210938,5.179688,0],[3.054688,4.875,0],[4.710938,4.570313,0],[5.429688,4.125,0]];\nexports.cells=[[0,1,2],[2,3,0],[3,2,4],[4,5,3],[5,4,6],[6,7,5],[7,6,8],[8,9,7],[1,10,11],[11,2,1],[2,11,12],[12,4,2],[4,12,13],[13,6,4],[6,13,14],[14,8,6],[10,15,16],[16,11,10],[11,16,17],[17,12,11],[12,17,18],[18,13,12],[13,18,19],[19,14,13],[15,20,21],[21,16,15],[16,21,22],[22,17,16],[17,22,23],[23,18,17],[18,23,24],[24,19,18],[25,26,27],[27,28,25],[28,27,29],[29,30,28],[30,29,31],[31,32,30],[32,31,33],[33,34,32],[26,35,36],[36,27,26],[27,36,37],[37,29,27],[29,37,38],[38,31,29],[31,38,39],[39,33,31],[35,40,41],[41,36,35],[36,41,42],[42,37,36],[37,42,43],[43,38,37],[38,43,44],[44,39,38],[40,45,46],[46,41,40],[41,46,47],[47,42,41],[42,47,48],[48,43,42],[43,48,49],[49,44,43],[50,51,52],[52,53,50],[53,52,54],[54,55,53],[55,54,56],[56,57,55],[57,56,58],[58,59,57],[51,60,61],[61,52,51],[52,61,62],[62,54,52],[54,62,63],[63,56,54],[56,63,64],[64,58,56],[60,65,66],[66,61,60],[61,66,67],[67,62,61],[62,67,68],[68,63,62],[63,68,69],[69,64,63],[65,70,71],[71,66,65],[66,71,72],[72,67,66],[67,72,73],[73,68,67],[68,73,74],[74,69,68],[75,76,77],[77,78,75],[78,77,79],[79,80,78],[80,79,81],[81,82,80],[82,81,83],[83,84,82],[76,85,86],[86,77,76],[77,86,87],[87,79,77],[79,87,88],[88,81,79],[81,88,89],[89,83,81],[85,90,91],[91,86,85],[86,91,92],[92,87,86],[87,92,93],[93,88,87],[88,93,94],[94,89,88],[90,95,96],[96,91,90],[91,96,97],[97,92,91],[92,97,98],[98,93,92],[93,98,99],[99,94,93],[100,101,102],[102,103,100],[103,102,104],[104,105,103],[105,104,106],[106,107,105],[107,106,108],[108,109,107],[101,110,111],[111,102,101],[102,111,112],[112,104,102],[104,112,113],[113,106,104],[106,113,114],[114,108,106],[110,115,116],[116,111,110],[111,116,117],[117,112,111],[112,117,118],[118,113,112],[113,118,119],[119,114,113],[115,120,121],[121,116,115],[116,121,122],[122,117,116],[117,122,123],[123,118,117],[118,123,124],[124,119,118],[125,126,127],[127,128,125],[128,127,129],[129,130,128],[130,129,131],[131,132,130],[132,131,133],[133,134,132],[126,135,136],[136,127,126],[127,136,137],[137,129,127],[129,137,138],[138,131,129],[131,138,139],[139,133,131],[135,140,141],[141,136,135],[136,141,142],[142,137,136],[137,142,143],[143,138,137],[138,143,144],[144,139,138],[140,145,146],[146,141,140],[141,146,147],[147,142,141],[142,147,148],[148,143,142],[143,148,149],[149,144,143],[150,151,152],[152,153,150],[153,152,154],[154,155,153],[155,154,156],[156,157,155],[157,156,158],[158,159,157],[151,160,161],[161,152,151],[152,161,162],[162,154,152],[154,162,163],[163,156,154],[156,163,164],[164,158,156],[160,165,166],[166,161,160],[161,166,167],[167,162,161],[162,167,168],[168,163,162],[163,168,169],[169,164,163],[165,170,171],[171,166,165],[166,171,172],[172,167,166],[167,172,173],[173,168,167],[168,173,174],[174,169,168],[175,176,177],[177,178,175],[178,177,179],[179,180,178],[180,179,181],[181,182,180],[182,181,183],[183,184,182],[176,185,186],[186,177,176],[177,186,187],[187,179,177],[179,187,188],[188,181,179],[181,188,189],[189,183,181],[185,190,191],[191,186,185],[186,191,192],[192,187,186],[187,192,193],[193,188,187],[188,193,194],[194,189,188],[190,195,196],[196,191,190],[191,196,197],[197,192,191],[192,197,198],[198,193,192],[193,198,199],[199,194,193],[200,201,202],[202,203,200],[203,202,204],[204,205,203],[205,204,206],[206,207,205],[207,206,208],[208,209,207],[201,210,211],[211,202,201],[202,211,212],[212,204,202],[204,212,213],[213,206,204],[206,213,214],[214,208,206],[210,215,216],[216,211,210],[211,216,217],[217,212,211],[212,217,218],[218,213,212],[213,218,219],[219,214,213],[215,220,221],[221,216,215],[216,221,222],[222,217,216],[217,222,223],[223,218,217],[218,223,224],[224,219,218],[225,226,227],[227,228,225],[228,227,229],[229,230,228],[230,229,231],[231,232,230],[232,231,233],[233,234,232],[226,235,236],[236,227,226],[227,236,237],[237,229,227],[229,237,238],[238,231,229],[231,238,239],[239,233,231],[235,240,241],[241,236,235],[236,241,242],[242,237,236],[237,242,243],[243,238,237],[238,243,244],[244,239,238],[240,245,246],[246,241,240],[241,246,247],[247,242,241],[242,247,248],[248,243,242],[243,248,249],[249,244,243],[250,251,252],[252,253,250],[253,252,254],[254,255,253],[255,254,256],[256,257,255],[257,256,258],[258,259,257],[251,260,261],[261,252,251],[252,261,262],[262,254,252],[254,262,263],[263,256,254],[256,263,264],[264,258,256],[260,265,266],[266,261,260],[261,266,267],[267,262,261],[262,267,268],[268,263,262],[263,268,269],[269,264,263],[265,270,271],[271,266,265],[266,271,272],[272,267,266],[267,272,273],[273,268,267],[268,273,274],[274,269,268],[275,276,277],[277,278,275],[278,277,279],[279,280,278],[280,279,281],[281,282,280],[282,281,283],[283,284,282],[276,285,286],[286,277,276],[277,286,287],[287,279,277],[279,287,288],[288,281,279],[281,288,289],[289,283,281],[285,290,291],[291,286,285],[286,291,292],[292,287,286],[287,292,293],[293,288,287],[288,293,294],[294,289,288],[290,295,296],[296,291,290],[291,296,297],[297,292,291],[292,297,298],[298,293,292],[293,298,299],[299,294,293],[300,301,302],[302,303,300],[303,302,304],[304,305,303],[305,304,306],[306,307,305],[307,306,308],[301,309,310],[310,302,301],[302,310,311],[311,304,302],[304,311,312],[312,306,304],[306,312,313],[309,314,315],[315,310,309],[310,315,316],[316,311,310],[311,316,317],[317,312,311],[312,317,318],[314,319,320],[320,315,314],[315,320,321],[321,316,315],[316,321,322],[322,317,316],[317,322,323],[324,325,326],[326,327,324],[327,326,328],[328,329,327],[329,328,330],[330,331,329],[331,330,332],[325,333,334],[334,326,325],[326,334,335],[335,328,326],[328,335,336],[336,330,328],[330,336,337],[333,338,339],[339,334,333],[334,339,340],[340,335,334],[335,340,341],[341,336,335],[336,341,342],[338,343,344],[344,339,338],[339,344,345],[345,340,339],[340,345,346],[346,341,340],[341,346,347],[348,349,350],[350,351,348],[351,350,352],[352,353,351],[353,352,354],[354,355,353],[355,354,356],[349,357,358],[358,350,349],[350,358,359],[359,352,350],[352,359,360],[360,354,352],[354,360,361],[357,362,363],[363,358,357],[358,363,364],[364,359,358],[359,364,365],[365,360,359],[360,365,366],[362,367,368],[368,363,362],[363,368,369],[369,364,363],[364,369,370],[370,365,364],[365,370,371],[372,373,374],[374,375,372],[375,374,376],[376,377,375],[377,376,378],[378,379,377],[379,378,380],[373,381,382],[382,374,373],[374,382,383],[383,376,374],[376,383,384],[384,378,376],[378,384,385],[381,386,387],[387,382,381],[382,387,388],[388,383,382],[383,388,389],[389,384,383],[384,389,390],[386,391,392],[392,387,386],[387,392,393],[393,388,387],[388,393,394],[394,389,388],[389,394,395],[396,397,398],[398,399,396],[399,398,400],[400,401,399],[401,400,402],[402,403,401],[403,402,404],[404,405,403],[397,406,407],[407,398,397],[398,407,408],[408,400,398],[400,408,409],[409,402,400],[402,409,410],[410,404,402],[406,411,412],[412,407,406],[407,412,413],[413,408,407],[408,413,414],[414,409,408],[409,414,415],[415,410,409],[411,416,417],[417,412,411],[412,417,418],[418,413,412],[413,418,419],[419,414,413],[414,419,420],[420,415,414],[421,422,423],[423,424,421],[424,423,425],[425,426,424],[426,425,427],[427,428,426],[428,427,429],[429,430,428],[422,431,432],[432,423,422],[423,432,433],[433,425,423],[425,433,434],[434,427,425],[427,434,435],[435,429,427],[431,436,437],[437,432,431],[432,437,438],[438,433,432],[433,438,439],[439,434,433],[434,439,440],[440,435,434],[436,441,442],[442,437,436],[437,442,443],[443,438,437],[438,443,444],[444,439,438],[439,444,445],[445,440,439],[446,447,448],[448,449,446],[449,448,450],[450,451,449],[451,450,452],[452,453,451],[453,452,454],[454,455,453],[447,456,457],[457,448,447],[448,457,458],[458,450,448],[450,458,459],[459,452,450],[452,459,460],[460,454,452],[456,461,462],[462,457,456],[457,462,463],[463,458,457],[458,463,464],[464,459,458],[459,464,465],[465,460,459],[461,466,467],[467,462,461],[462,467,468],[468,463,462],[463,468,469],[469,464,463],[464,469,470],[470,465,464],[471,472,473],[473,474,471],[474,473,475],[475,476,474],[476,475,477],[477,478,476],[478,477,479],[479,480,478],[472,481,482],[482,473,472],[473,482,483],[483,475,473],[475,483,484],[484,477,475],[477,484,485],[485,479,477],[481,486,487],[487,482,481],[482,487,488],[488,483,482],[483,488,489],[489,484,483],[484,489,490],[490,485,484],[486,491,492],[492,487,486],[487,492,493],[493,488,487],[488,493,494],[494,489,488],[489,494,495],[495,490,489],[496,497,498],[498,499,496],[499,498,500],[500,501,499],[501,500,502],[502,503,501],[503,502,504],[504,505,503],[497,506,507],[507,498,497],[498,507,508],[508,500,498],[500,508,509],[509,502,500],[502,509,510],[510,504,502],[506,511,512],[512,507,506],[507,512,513],[513,508,507],[508,513,514],[514,509,508],[509,514,515],[515,510,509],[511,516,517],[517,512,511],[512,517,518],[518,513,512],[513,518,519],[519,514,513],[514,519,520],[520,515,514],[521,522,523],[523,524,521],[524,523,525],[525,526,524],[526,525,527],[527,528,526],[528,527,529],[529,530,528],[522,531,532],[532,523,522],[523,532,533],[533,525,523],[525,533,534],[534,527,525],[527,534,535],[535,529,527],[531,536,537],[537,532,531],[532,537,538],[538,533,532],[533,538,539],[539,534,533],[534,539,540],[540,535,534],[536,541,542],[542,537,536],[537,542,543],[543,538,537],[538,543,544],[544,539,538],[539,544,545],[545,540,539],[546,547,548],[548,549,546],[549,548,550],[550,551,549],[551,550,552],[552,553,551],[553,552,554],[554,555,553],[547,556,557],[557,548,547],[548,557,558],[558,550,548],[550,558,559],[559,552,550],[552,559,560],[560,554,552],[556,561,562],[562,557,556],[557,562,563],[563,558,557],[558,563,564],[564,559,558],[559,564,565],[565,560,559],[561,566,567],[567,562,561],[562,567,568],[568,563,562],[563,568,569],[569,564,563],[564,569,570],[570,565,564],[571,572,573],[573,574,571],[574,573,575],[575,576,574],[576,575,577],[577,578,576],[578,577,579],[579,580,578],[572,581,582],[582,573,572],[573,582,583],[583,575,573],[575,583,584],[584,577,575],[577,584,585],[585,579,577],[581,586,587],[587,582,581],[582,587,588],[588,583,582],[583,588,589],[589,584,583],[584,589,590],[590,585,584],[586,591,592],[592,587,586],[587,592,593],[593,588,587],[588,593,594],[594,589,588],[589,594,595],[595,590,589],[596,597,598],[597,596,599],[599,600,597],[600,599,601],[601,602,600],[602,601,603],[603,604,602],[605,596,606],[596,605,607],[607,599,596],[599,607,608],[608,601,599],[601,608,609],[609,603,601],[610,605,611],[605,610,612],[612,607,605],[607,612,613],[613,608,607],[608,613,614],[614,609,608],[615,610,616],[610,615,617],[617,612,610],[612,617,618],[618,613,612],[613,618,619],[619,614,613],[620,621,622],[621,620,623],[623,624,621],[624,623,625],[625,626,624],[626,625,627],[627,628,626],[629,620,630],[620,629,631],[631,623,620],[623,631,632],[632,625,623],[625,632,633],[633,627,625],[634,629,635],[629,634,636],[636,631,629],[631,636,637],[637,632,631],[632,637,638],[638,633,632],[639,634,640],[634,639,641],[641,636,634],[636,641,642],[642,637,636],[637,642,643],[643,638,637],[644,645,646],[645,644,647],[647,648,645],[648,647,649],[649,650,648],[650,649,651],[651,652,650],[653,644,654],[644,653,655],[655,647,644],[647,655,656],[656,649,647],[649,656,657],[657,651,649],[658,653,659],[653,658,660],[660,655,653],[655,660,661],[661,656,655],[656,661,662],[662,657,656],[663,658,664],[658,663,665],[665,660,658],[660,665,666],[666,661,660],[661,666,667],[667,662,661],[668,669,670],[669,668,671],[671,672,669],[672,671,673],[673,674,672],[674,673,675],[675,676,674],[677,668,678],[668,677,679],[679,671,668],[671,679,680],[680,673,671],[673,680,681],[681,675,673],[682,677,683],[677,682,684],[684,679,677],[679,684,685],[685,680,679],[680,685,686],[686,681,680],[687,682,688],[682,687,689],[689,684,682],[684,689,690],[690,685,684],[685,690,691],[691,686,685],[692,693,694],[694,695,692],[695,694,696],[696,697,695],[697,696,698],[698,699,697],[699,698,700],[700,701,699],[693,702,703],[703,694,693],[694,703,704],[704,696,694],[696,704,705],[705,698,696],[698,705,706],[706,700,698],[702,707,708],[708,703,702],[703,708,709],[709,704,703],[704,709,710],[710,705,704],[705,710,711],[711,706,705],[707,712,713],[713,708,707],[708,713,714],[714,709,708],[709,714,715],[715,710,709],[710,715,716],[716,711,710],[717,718,719],[719,720,717],[720,719,721],[721,722,720],[722,721,723],[723,724,722],[724,723,725],[725,726,724],[718,727,728],[728,719,718],[719,728,729],[729,721,719],[721,729,730],[730,723,721],[723,730,731],[731,725,723],[727,732,733],[733,728,727],[728,733,734],[734,729,728],[729,734,735],[735,730,729],[730,735,736],[736,731,730],[732,737,738],[738,733,732],[733,738,739],[739,734,733],[734,739,740],[740,735,734],[735,740,741],[741,736,735],[742,743,744],[744,745,742],[745,744,746],[746,747,745],[747,746,748],[748,749,747],[749,748,750],[750,751,749],[743,752,753],[753,744,743],[744,753,754],[754,746,744],[746,754,755],[755,748,746],[748,755,756],[756,750,748],[752,757,758],[758,753,752],[753,758,759],[759,754,753],[754,759,760],[760,755,754],[755,760,761],[761,756,755],[757,762,763],[763,758,757],[758,763,764],[764,759,758],[759,764,765],[765,760,759],[760,765,766],[766,761,760],[767,768,769],[769,770,767],[770,769,771],[771,772,770],[772,771,773],[773,774,772],[774,773,775],[775,776,774],[768,777,778],[778,769,768],[769,778,779],[779,771,769],[771,779,780],[780,773,771],[773,780,781],[781,775,773],[777,782,783],[783,778,777],[778,783,784],[784,779,778],[779,784,785],[785,780,779],[780,785,786],[786,781,780],[782,787,788],[788,783,782],[783,788,789],[789,784,783],[784,789,790],[790,785,784],[785,790,791],[791,786,785]];\n","import { vec3 } from 'wgpu-matrix';\n\nexport function computeSurfaceNormals(\n positions: [number, number, number][],\n triangles: [number, number, number][]\n): [number, number, number][] {\n const normals: [number, number, number][] = positions.map(() => {\n // Initialize to zero.\n return [0, 0, 0];\n });\n triangles.forEach(([i0, i1, i2]) => {\n const p0 = positions[i0];\n const p1 = positions[i1];\n const p2 = positions[i2];\n\n const v0 = vec3.subtract(p1, p0);\n const v1 = vec3.subtract(p2, p0);\n\n vec3.normalize(v0, v0);\n vec3.normalize(v1, v1);\n const norm = vec3.cross(v0, v1);\n\n // Accumulate the normals.\n vec3.add(normals[i0], norm, normals[i0]);\n vec3.add(normals[i1], norm, normals[i1]);\n vec3.add(normals[i2], norm, normals[i2]);\n });\n normals.forEach((n) => {\n // Normalize accumulated normals.\n vec3.normalize(n, n);\n });\n\n return normals;\n}\n\ntype ProjectedPlane = 'xy' | 'xz' | 'yz';\n\nconst projectedPlane2Ids: { [key in ProjectedPlane]: [number, number] } = {\n xy: [0, 1],\n xz: [0, 2],\n yz: [1, 2],\n};\n\nexport function computeProjectedPlaneUVs(\n positions: [number, number, number][],\n projectedPlane: ProjectedPlane = 'xy'\n): [number, number][] {\n const idxs = projectedPlane2Ids[projectedPlane];\n const uvs: [number, number][] = positions.map(() => {\n // Initialize to zero.\n return [0, 0];\n });\n const extentMin = [Infinity, Infinity];\n const extentMax = [-Infinity, -Infinity];\n positions.forEach((pos, i) => {\n // Simply project to the selected plane\n uvs[i][0] = pos[idxs[0]];\n uvs[i][1] = pos[idxs[1]];\n\n extentMin[0] = Math.min(pos[idxs[0]], extentMin[0]);\n extentMin[1] = Math.min(pos[idxs[1]], extentMin[1]);\n extentMax[0] = Math.max(pos[idxs[0]], extentMax[0]);\n extentMax[1] = Math.max(pos[idxs[1]], extentMax[1]);\n });\n uvs.forEach((uv) => {\n uv[0] = (uv[0] - extentMin[0]) / (extentMax[0] - extentMin[0]);\n uv[1] = (uv[1] - extentMin[1]) / (extentMax[1] - extentMin[1]);\n });\n return uvs;\n}\n","import teapotData from 'teapot';\nimport { computeSurfaceNormals } from './utils';\n\nexport const mesh = {\n positions: teapotData.positions as [number, number, number][],\n triangles: teapotData.cells as [number, number, number][],\n normals: [] as [number, number, number][],\n};\n\n// Compute surface normals\nmesh.normals = computeSurfaceNormals(mesh.positions, mesh.triangles);\n","import { mat4, vec3 } from 'wgpu-matrix';\nimport { GUI } from 'dat.gui';\n\nimport { mesh } from '../../meshes/teapot';\n\nimport opaqueWGSL from './opaque.wgsl';\nimport translucentWGSL from './translucent.wgsl';\nimport compositeWGSL from './composite.wgsl';\n\nfunction roundUp(n: number, k: number): number {\n return Math.ceil(n / k) * k;\n}\n\nconst canvas = document.querySelector('canvas') as HTMLCanvasElement;\nconst adapter = await navigator.gpu.requestAdapter();\nconst device = await adapter.requestDevice();\n\nconst context = canvas.getContext('webgpu') as GPUCanvasContext;\nconst presentationFormat = navigator.gpu.getPreferredCanvasFormat();\n\ncontext.configure({\n device,\n format: presentationFormat,\n alphaMode: 'premultiplied',\n});\n\nconst params = new URLSearchParams(window.location.search);\n\nconst settings = {\n memoryStrategy: params.get('memoryStrategy') || 'multipass',\n};\n\n// Create the model vertex buffer\nconst vertexBuffer = device.createBuffer({\n size: 3 * mesh.positions.length * Float32Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.VERTEX,\n mappedAtCreation: true,\n label: 'vertexBuffer',\n});\n{\n const mapping = new Float32Array(vertexBuffer.getMappedRange());\n for (let i = 0; i < mesh.positions.length; ++i) {\n mapping.set(mesh.positions[i], 3 * i);\n }\n vertexBuffer.unmap();\n}\n\n// Create the model index buffer\nconst indexCount = mesh.triangles.length * 3;\nconst indexBuffer = device.createBuffer({\n size: indexCount * Uint16Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.INDEX,\n mappedAtCreation: true,\n label: 'indexBuffer',\n});\n{\n const mapping = new Uint16Array(indexBuffer.getMappedRange());\n for (let i = 0; i < mesh.triangles.length; ++i) {\n mapping.set(mesh.triangles[i], 3 * i);\n }\n indexBuffer.unmap();\n}\n\n// Uniforms contains:\n// * modelViewProjectionMatrix: mat4x4f\n// * maxStorableFragments: u32\n// * targetWidth: u32\nconst uniformsSize = roundUp(\n 16 * Float32Array.BYTES_PER_ELEMENT + 2 * Uint32Array.BYTES_PER_ELEMENT,\n 16\n);\n\nconst uniformBuffer = device.createBuffer({\n size: uniformsSize,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n label: 'uniformBuffer',\n});\n\nconst opaqueModule = device.createShaderModule({\n code: opaqueWGSL,\n label: 'opaqueModule',\n});\n\nconst opaquePipeline = device.createRenderPipeline({\n layout: 'auto',\n vertex: {\n module: opaqueModule,\n buffers: [\n {\n arrayStride: 3 * Float32Array.BYTES_PER_ELEMENT,\n attributes: [\n {\n // position\n format: 'float32x3',\n offset: 0,\n shaderLocation: 0,\n },\n ],\n },\n ],\n },\n fragment: {\n module: opaqueModule,\n targets: [\n {\n format: presentationFormat,\n },\n ],\n },\n primitive: {\n topology: 'triangle-list',\n },\n depthStencil: {\n depthWriteEnabled: true,\n depthCompare: 'less',\n format: 'depth24plus',\n },\n label: 'opaquePipeline',\n});\n\nconst opaquePassDescriptor: GPURenderPassDescriptor = {\n colorAttachments: [\n {\n view: undefined,\n clearValue: { r: 0, g: 0, b: 0, a: 1.0 },\n loadOp: 'clear',\n storeOp: 'store',\n },\n ],\n depthStencilAttachment: {\n view: undefined,\n depthClearValue: 1.0,\n depthLoadOp: 'clear',\n depthStoreOp: 'store',\n },\n label: 'opaquePassDescriptor',\n};\n\nconst opaqueBindGroup = device.createBindGroup({\n layout: opaquePipeline.getBindGroupLayout(0),\n entries: [\n {\n binding: 0,\n resource: {\n buffer: uniformBuffer,\n size: 16 * Float32Array.BYTES_PER_ELEMENT,\n label: 'modelViewProjection',\n },\n },\n ],\n label: 'opaquePipeline',\n});\n\nconst translucentModule = device.createShaderModule({\n code: translucentWGSL,\n label: 'translucentModule',\n});\n\nconst translucentBindGroupLayout = device.createBindGroupLayout({\n label: 'translucentBindGroupLayout',\n entries: [\n {\n binding: 0,\n visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'uniform',\n },\n },\n {\n binding: 1,\n visibility: GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'storage',\n },\n },\n {\n binding: 2,\n visibility: GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'storage',\n },\n },\n {\n binding: 3,\n visibility: GPUShaderStage.FRAGMENT,\n texture: { sampleType: 'depth' },\n },\n {\n binding: 4,\n visibility: GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'uniform',\n hasDynamicOffset: true,\n },\n },\n ],\n});\n\nconst translucentPipeline = device.createRenderPipeline({\n layout: device.createPipelineLayout({\n bindGroupLayouts: [translucentBindGroupLayout],\n label: 'translucentPipelineLayout',\n }),\n vertex: {\n module: translucentModule,\n buffers: [\n {\n arrayStride: 3 * Float32Array.BYTES_PER_ELEMENT,\n attributes: [\n {\n format: 'float32x3',\n offset: 0,\n shaderLocation: 0,\n },\n ],\n },\n ],\n },\n fragment: {\n module: translucentModule,\n targets: [\n {\n format: presentationFormat,\n writeMask: 0x0,\n },\n ],\n },\n primitive: {\n topology: 'triangle-list',\n },\n label: 'translucentPipeline',\n});\n\nconst translucentPassDescriptor: GPURenderPassDescriptor = {\n colorAttachments: [\n {\n loadOp: 'load',\n storeOp: 'store',\n view: undefined,\n },\n ],\n label: 'translucentPassDescriptor',\n};\n\nconst compositeModule = device.createShaderModule({\n code: compositeWGSL,\n label: 'compositeModule',\n});\n\nconst compositeBindGroupLayout = device.createBindGroupLayout({\n label: 'compositeBindGroupLayout',\n entries: [\n {\n binding: 0,\n visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'uniform',\n },\n },\n {\n binding: 1,\n visibility: GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'storage',\n },\n },\n {\n binding: 2,\n visibility: GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'storage',\n },\n },\n {\n binding: 3,\n visibility: GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'uniform',\n hasDynamicOffset: true,\n },\n },\n ],\n});\n\nconst compositePipeline = device.createRenderPipeline({\n layout: device.createPipelineLayout({\n bindGroupLayouts: [compositeBindGroupLayout],\n label: 'compositePipelineLayout',\n }),\n vertex: {\n module: compositeModule,\n },\n fragment: {\n module: compositeModule,\n targets: [\n {\n format: presentationFormat,\n blend: {\n color: {\n srcFactor: 'one',\n operation: 'add',\n dstFactor: 'one-minus-src-alpha',\n },\n alpha: {},\n },\n },\n ],\n },\n primitive: {\n topology: 'triangle-list',\n },\n label: 'compositePipeline',\n});\n\nconst compositePassDescriptor: GPURenderPassDescriptor = {\n colorAttachments: [\n {\n view: undefined,\n loadOp: 'load',\n storeOp: 'store',\n },\n ],\n label: 'compositePassDescriptor',\n};\n\nconst configure = () => {\n let devicePixelRatio = window.devicePixelRatio;\n\n // The default maximum storage buffer binding size is 128Mib. The amount\n // of memory we need to store transparent fragments depends on the size\n // of the canvas and the average number of layers per fragment we want to\n // support. When the devicePixelRatio is 1, we know that 128Mib is enough\n // to store 4 layers per pixel at 600x600. However, when the device pixel\n // ratio is high enough we will exceed this limit.\n //\n // We provide 2 choices of mitigations to this issue:\n // 1) Clamp the device pixel ratio to a value which we know will not break\n // the limit. The tradeoff here is that the canvas resolution will not\n // match the native resolution and therefore may have a reduction in\n // quality.\n // 2) Break the frame into a series of horizontal slices using the scissor\n // functionality and process a single slice at a time. This limits memory\n // usage because we only need enough memory to process the dimensions\n // of the slice. The tradeoff is the performance reduction due to multiple\n // passes.\n if (settings.memoryStrategy === 'clamp-pixel-ratio') {\n devicePixelRatio = Math.min(window.devicePixelRatio, 3);\n }\n\n canvas.width = canvas.clientWidth * devicePixelRatio;\n canvas.height = canvas.clientHeight * devicePixelRatio;\n\n const depthTexture = device.createTexture({\n size: [canvas.width, canvas.height],\n format: 'depth24plus',\n usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,\n label: 'depthTexture',\n });\n\n const depthTextureView = depthTexture.createView({\n label: 'depthTextureView',\n });\n\n // Determines how much memory is allocated to store linked-list elements\n const averageLayersPerFragment = 4;\n\n // Each element stores\n // * color : vec4f\n // * depth : f32\n // * index of next element in the list : u32\n const linkedListElementSize =\n 5 * Float32Array.BYTES_PER_ELEMENT + 1 * Uint32Array.BYTES_PER_ELEMENT;\n\n // We want to keep the linked-list buffer size under the maxStorageBufferBindingSize.\n // Split the frame into enough slices to meet that constraint.\n const bytesPerline =\n canvas.width * averageLayersPerFragment * linkedListElementSize;\n const maxLinesSupported = Math.floor(\n device.limits.maxStorageBufferBindingSize / bytesPerline\n );\n const numSlices = Math.ceil(canvas.height / maxLinesSupported);\n const sliceHeight = Math.ceil(canvas.height / numSlices);\n const linkedListBufferSize = sliceHeight * bytesPerline;\n\n const linkedListBuffer = device.createBuffer({\n size: linkedListBufferSize,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n label: 'linkedListBuffer',\n });\n\n // To slice up the frame we need to pass the starting fragment y position of the slice.\n // We do this using a uniform buffer with a dynamic offset.\n const sliceInfoBuffer = device.createBuffer({\n size: numSlices * device.limits.minUniformBufferOffsetAlignment,\n usage: GPUBufferUsage.UNIFORM,\n mappedAtCreation: true,\n label: 'sliceInfoBuffer',\n });\n {\n const mapping = new Int32Array(sliceInfoBuffer.getMappedRange());\n\n // This assumes minUniformBufferOffsetAlignment is a multiple of 4\n const stride =\n device.limits.minUniformBufferOffsetAlignment /\n Int32Array.BYTES_PER_ELEMENT;\n for (let i = 0; i < numSlices; ++i) {\n mapping[i * stride] = i * sliceHeight;\n }\n sliceInfoBuffer.unmap();\n }\n\n // `Heads` struct contains the start index of the linked-list of translucent fragments\n // for a given pixel.\n // * numFragments : u32\n // * data : array\n const headsBuffer = device.createBuffer({\n size: (1 + canvas.width * sliceHeight) * Uint32Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n label: 'headsBuffer',\n });\n\n const headsInitBuffer = device.createBuffer({\n size: (1 + canvas.width * sliceHeight) * Uint32Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.COPY_SRC,\n mappedAtCreation: true,\n label: 'headsInitBuffer',\n });\n {\n const buffer = new Uint32Array(headsInitBuffer.getMappedRange());\n\n for (let i = 0; i < buffer.length; ++i) {\n buffer[i] = 0xffffffff;\n }\n\n headsInitBuffer.unmap();\n }\n\n const translucentBindGroup = device.createBindGroup({\n layout: translucentBindGroupLayout,\n entries: [\n {\n binding: 0,\n resource: {\n buffer: uniformBuffer,\n label: 'uniforms',\n },\n },\n {\n binding: 1,\n resource: {\n buffer: headsBuffer,\n label: 'headsBuffer',\n },\n },\n {\n binding: 2,\n resource: {\n buffer: linkedListBuffer,\n label: 'linkedListBuffer',\n },\n },\n {\n binding: 3,\n resource: depthTextureView,\n },\n {\n binding: 4,\n resource: {\n buffer: sliceInfoBuffer,\n size: device.limits.minUniformBufferOffsetAlignment,\n label: 'sliceInfoBuffer',\n },\n },\n ],\n label: 'translucentBindGroup',\n });\n\n const compositeBindGroup = device.createBindGroup({\n layout: compositePipeline.getBindGroupLayout(0),\n entries: [\n {\n binding: 0,\n resource: {\n buffer: uniformBuffer,\n label: 'uniforms',\n },\n },\n {\n binding: 1,\n resource: {\n buffer: headsBuffer,\n label: 'headsBuffer',\n },\n },\n {\n binding: 2,\n resource: {\n buffer: linkedListBuffer,\n label: 'linkedListBuffer',\n },\n },\n {\n binding: 3,\n resource: {\n buffer: sliceInfoBuffer,\n size: device.limits.minUniformBufferOffsetAlignment,\n label: 'sliceInfoBuffer',\n },\n },\n ],\n });\n\n opaquePassDescriptor.depthStencilAttachment.view = depthTextureView;\n\n // Rotates the camera around the origin based on time.\n function getCameraViewProjMatrix() {\n const aspect = canvas.width / canvas.height;\n\n const projectionMatrix = mat4.perspective(\n (2 * Math.PI) / 5,\n aspect,\n 1,\n 2000.0\n );\n\n const upVector = vec3.fromValues(0, 1, 0);\n const origin = vec3.fromValues(0, 0, 0);\n const eyePosition = vec3.fromValues(0, 5, -100);\n\n const rad = Math.PI * (Date.now() / 5000);\n const rotation = mat4.rotateY(mat4.translation(origin), rad);\n vec3.transformMat4(eyePosition, rotation, eyePosition);\n\n const viewMatrix = mat4.lookAt(eyePosition, origin, upVector);\n\n const viewProjMatrix = mat4.multiply(projectionMatrix, viewMatrix);\n return viewProjMatrix as Float32Array;\n }\n\n return function doDraw() {\n // update the uniform buffer\n {\n const buffer = new ArrayBuffer(uniformBuffer.size);\n\n new Float32Array(buffer).set(getCameraViewProjMatrix());\n new Uint32Array(buffer, 16 * Float32Array.BYTES_PER_ELEMENT).set([\n averageLayersPerFragment * canvas.width * sliceHeight,\n canvas.width,\n ]);\n\n device.queue.writeBuffer(uniformBuffer, 0, buffer);\n }\n\n const commandEncoder = device.createCommandEncoder();\n const textureView = context.getCurrentTexture().createView();\n\n // Draw the opaque objects\n opaquePassDescriptor.colorAttachments[0].view = textureView;\n const opaquePassEncoder =\n commandEncoder.beginRenderPass(opaquePassDescriptor);\n opaquePassEncoder.setPipeline(opaquePipeline);\n opaquePassEncoder.setBindGroup(0, opaqueBindGroup);\n opaquePassEncoder.setVertexBuffer(0, vertexBuffer);\n opaquePassEncoder.setIndexBuffer(indexBuffer, 'uint16');\n opaquePassEncoder.drawIndexed(mesh.triangles.length * 3, 8);\n opaquePassEncoder.end();\n\n for (let slice = 0; slice < numSlices; ++slice) {\n // initialize the heads buffer\n commandEncoder.copyBufferToBuffer(\n headsInitBuffer,\n 0,\n headsBuffer,\n 0,\n headsInitBuffer.size\n );\n\n const scissorX = 0;\n const scissorY = slice * sliceHeight;\n const scissorWidth = canvas.width;\n const scissorHeight =\n Math.min((slice + 1) * sliceHeight, canvas.height) -\n slice * sliceHeight;\n\n // Draw the translucent objects\n translucentPassDescriptor.colorAttachments[0].view = textureView;\n const translucentPassEncoder = commandEncoder.beginRenderPass(\n translucentPassDescriptor\n );\n\n // Set the scissor to only process a horizontal slice of the frame\n translucentPassEncoder.setScissorRect(\n scissorX,\n scissorY,\n scissorWidth,\n scissorHeight\n );\n\n translucentPassEncoder.setPipeline(translucentPipeline);\n translucentPassEncoder.setBindGroup(0, translucentBindGroup, [\n slice * device.limits.minUniformBufferOffsetAlignment,\n ]);\n translucentPassEncoder.setVertexBuffer(0, vertexBuffer);\n translucentPassEncoder.setIndexBuffer(indexBuffer, 'uint16');\n translucentPassEncoder.drawIndexed(mesh.triangles.length * 3, 8);\n translucentPassEncoder.end();\n\n // Composite the opaque and translucent objects\n compositePassDescriptor.colorAttachments[0].view = textureView;\n const compositePassEncoder = commandEncoder.beginRenderPass(\n compositePassDescriptor\n );\n\n // Set the scissor to only process a horizontal slice of the frame\n compositePassEncoder.setScissorRect(\n scissorX,\n scissorY,\n scissorWidth,\n scissorHeight\n );\n\n compositePassEncoder.setPipeline(compositePipeline);\n compositePassEncoder.setBindGroup(0, compositeBindGroup, [\n slice * device.limits.minUniformBufferOffsetAlignment,\n ]);\n compositePassEncoder.draw(6);\n compositePassEncoder.end();\n }\n\n device.queue.submit([commandEncoder.finish()]);\n };\n};\n\nlet doDraw = configure();\n\nconst updateSettings = () => {\n doDraw = configure();\n};\n\nconst gui = new GUI();\ngui\n .add(settings, 'memoryStrategy', ['multipass', 'clamp-pixel-ratio'])\n .onFinishChange(updateSettings);\n\nfunction frame() {\n doDraw();\n\n requestAnimationFrame(frame);\n}\n\nrequestAnimationFrame(frame);\n"],"names":["requestAnimationFrame","requestAnimationFrame$1","vec3","teapotData","mat4","GUI"],"mappings":"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O;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC;AAC1C,CAAC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,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,OAAO,GAAG,CAAC;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE;AAC3B,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AACjC,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,C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C,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI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AAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5D,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5D,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5D,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5D,IAAI,GAAG,CAAC,EAAE,CAAC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GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,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,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AACj2oB,MAAA,CAAA,KAAA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,C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","x_google_ignoreList":[0,1,2]} \ No newline at end of file diff --git a/sample/a-buffer/main.ts b/sample/a-buffer/main.ts index 39f8b2b3..ede56880 100644 --- a/sample/a-buffer/main.ts +++ b/sample/a-buffer/main.ts @@ -62,7 +62,7 @@ const indexBuffer = device.createBuffer({ } // Uniforms contains: -// * modelViewProjectionMatrix: mat4x4 +// * modelViewProjectionMatrix: mat4x4f // * maxStorableFragments: u32 // * targetWidth: u32 const uniformsSize = roundUp( @@ -365,7 +365,7 @@ const configure = () => { const averageLayersPerFragment = 4; // Each element stores - // * color : vec4 + // * color : vec4f // * depth : f32 // * index of next element in the list : u32 const linkedListElementSize = diff --git a/sample/a-buffer/opaque.wgsl b/sample/a-buffer/opaque.wgsl index 2f9ab25b..ec943f64 100644 --- a/sample/a-buffer/opaque.wgsl +++ b/sample/a-buffer/opaque.wgsl @@ -1,16 +1,16 @@ struct Uniforms { - modelViewProjectionMatrix: mat4x4, + modelViewProjectionMatrix: mat4x4f, }; @binding(0) @group(0) var uniforms: Uniforms; struct VertexOutput { - @builtin(position) position: vec4, + @builtin(position) position: vec4f, @location(0) @interpolate(flat) instance: u32 }; @vertex -fn main_vs(@location(0) position: vec4, @builtin(instance_index) instance: u32) -> VertexOutput { +fn main_vs(@location(0) position: vec4f, @builtin(instance_index) instance: u32) -> VertexOutput { var output: VertexOutput; // distribute instances into a staggered 4x4 grid @@ -30,8 +30,8 @@ fn main_vs(@location(0) position: vec4, @builtin(instance_index) instance: } @fragment -fn main_fs(@location(0) @interpolate(flat) instance: u32) -> @location(0) vec4 { - const colors = array,6>( +fn main_fs(@location(0) @interpolate(flat) instance: u32) -> @location(0) vec4f { + const colors = array( vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0), vec3(0.0, 0.0, 1.0), diff --git a/sample/a-buffer/translucent.wgsl b/sample/a-buffer/translucent.wgsl index 22399d5a..b74bc096 100644 --- a/sample/a-buffer/translucent.wgsl +++ b/sample/a-buffer/translucent.wgsl @@ -1,5 +1,5 @@ struct Uniforms { - modelViewProjectionMatrix: mat4x4, + modelViewProjectionMatrix: mat4x4f, maxStorableFragments: u32, targetWidth: u32, }; @@ -14,7 +14,7 @@ struct Heads { }; struct LinkedListElement { - color: vec4, + color: vec4f, depth: f32, next: u32 }; @@ -30,12 +30,12 @@ struct LinkedList { @binding(4) @group(0) var sliceInfo: SliceInfo; struct VertexOutput { - @builtin(position) position: vec4, + @builtin(position) position: vec4f, @location(0) @interpolate(flat) instance: u32 }; @vertex -fn main_vs(@location(0) position: vec4, @builtin(instance_index) instance: u32) -> VertexOutput { +fn main_vs(@location(0) position: vec4f, @builtin(instance_index) instance: u32) -> VertexOutput { var output: VertexOutput; // distribute instances into a staggered 4x4 grid @@ -56,8 +56,8 @@ fn main_vs(@location(0) position: vec4, @builtin(instance_index) instance: } @fragment -fn main_fs(@builtin(position) position: vec4, @location(0) @interpolate(flat) instance: u32) { - const colors = array,6>( +fn main_fs(@builtin(position) position: vec4f, @location(0) @interpolate(flat) instance: u32) { + const colors = array( vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0), vec3(0.0, 0.0, 1.0), @@ -66,7 +66,7 @@ fn main_fs(@builtin(position) position: vec4, @location(0) @interpolate(fla vec3(0.0, 1.0, 1.0), ); - let fragCoords = vec2(position.xy); + let fragCoords = vec2i(position.xy); let opaqueDepth = textureLoad(opaqueDepthTexture, fragCoords, 0); // reject fragments behind opaque objects diff --git a/sample/animometer/animometer.wgsl b/sample/animometer/animometer.wgsl index b38d4660..3b1bed18 100644 --- a/sample/animometer/animometer.wgsl +++ b/sample/animometer/animometer.wgsl @@ -14,14 +14,14 @@ struct Uniforms { @binding(0) @group(1) var uniforms : Uniforms; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) v_color : vec4, + @builtin(position) Position : vec4f, + @location(0) v_color : vec4f, } @vertex fn vert_main( - @location(0) position : vec4, - @location(1) color : vec4 + @location(0) position : vec4f, + @location(1) color : vec4f ) -> VertexOutput { var fade = (uniforms.scalarOffset + time.value * uniforms.scalar / 10.0) % 1.0; if (fade < 0.5) { @@ -44,6 +44,6 @@ fn vert_main( } @fragment -fn frag_main(@location(0) v_color : vec4) -> @location(0) vec4 { +fn frag_main(@location(0) v_color : vec4f) -> @location(0) vec4f { return v_color; } diff --git a/sample/animometer/main.js b/sample/animometer/main.js index 2ddb5a66..508b3b9e 100644 --- a/sample/animometer/main.js +++ b/sample/animometer/main.js @@ -2509,14 +2509,14 @@ struct Uniforms { @binding(0) @group(1) var uniforms : Uniforms; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) v_color : vec4, + @builtin(position) Position : vec4f, + @location(0) v_color : vec4f, } @vertex fn vert_main( - @location(0) position : vec4, - @location(1) color : vec4 + @location(0) position : vec4f, + @location(1) color : vec4f ) -> VertexOutput { var fade = (uniforms.scalarOffset + time.value * uniforms.scalar / 10.0) % 1.0; if (fade < 0.5) { @@ -2539,7 +2539,7 @@ fn vert_main( } @fragment -fn frag_main(@location(0) v_color : vec4) -> @location(0) vec4 { +fn frag_main(@location(0) v_color : vec4f) -> @location(0) vec4f { return v_color; } `; diff --git a/sample/bitonicSort/bitonicCompute.ts b/sample/bitonicSort/bitonicCompute.ts index 0b11f8f2..8e05334f 100644 --- a/sample/bitonicSort/bitonicCompute.ts +++ b/sample/bitonicSort/bitonicCompute.ts @@ -36,12 +36,12 @@ fn local_compare_and_swap(idx_before: u32, idx_after: u32) { } // invoke_id goes from 0 to workgroupSize -fn get_flip_indices(invoke_id: u32, block_height: u32) -> vec2 { +fn get_flip_indices(invoke_id: u32, block_height: u32) -> vec2u { // Caculate index offset (i.e move indices into correct block) let block_offset: u32 = ((2 * invoke_id) / block_height) * block_height; let half_height = block_height / 2; // Calculate index spacing - var idx: vec2 = vec2( + var idx: vec2u = vec2u( invoke_id % half_height, block_height - (invoke_id % half_height) - 1, ); idx.x += block_offset; @@ -49,10 +49,10 @@ fn get_flip_indices(invoke_id: u32, block_height: u32) -> vec2 { return idx; } -fn get_disperse_indices(invoke_id: u32, block_height: u32) -> vec2 { +fn get_disperse_indices(invoke_id: u32, block_height: u32) -> vec2u { var block_offset: u32 = ((2 * invoke_id) / block_height) * block_height; let half_height = block_height / 2; - var idx: vec2 = vec2( + var idx: vec2u = vec2u( invoke_id % half_height, (invoke_id % half_height) + half_height ); idx.x += block_offset; @@ -76,9 +76,9 @@ const ALGO_GLOBAL_FLIP = 3; // Our compute shader will execute specified # of invocations or elements / 2 invocations @compute @workgroup_size(${workgroupSize}, 1, 1) fn computeMain( - @builtin(global_invocation_id) global_id: vec3, - @builtin(local_invocation_id) local_id: vec3, - @builtin(workgroup_id) workgroup_id: vec3, + @builtin(global_invocation_id) global_id: vec3u, + @builtin(local_invocation_id) local_id: vec3u, + @builtin(workgroup_id) workgroup_id: vec3u, ) { let offset = ${workgroupSize} * 2 * workgroup_id.x; diff --git a/sample/bitonicSort/bitonicDisplay.frag.wgsl b/sample/bitonicSort/bitonicDisplay.frag.wgsl index 17842eab..33bbf49c 100644 --- a/sample/bitonicSort/bitonicDisplay.frag.wgsl +++ b/sample/bitonicSort/bitonicDisplay.frag.wgsl @@ -11,8 +11,8 @@ struct FragmentUniforms { } struct VertexOutput { - @builtin(position) Position: vec4, - @location(0) fragUV: vec2 + @builtin(position) Position: vec4f, + @location(0) fragUV: vec2f } // Uniforms from compute shader @@ -22,13 +22,13 @@ struct VertexOutput { @group(1) @binding(0) var fragment_uniforms: FragmentUniforms; @fragment -fn frag_main(input: VertexOutput) -> @location(0) vec4 { - var uv: vec2 = vec2( +fn frag_main(input: VertexOutput) -> @location(0) vec4f { + var uv: vec2f = vec2f( input.fragUV.x * uniforms.width, input.fragUV.y * uniforms.height ); - var pixel: vec2 = vec2( + var pixel: vec2u = vec2u( u32(floor(uv.x)), u32(floor(uv.y)), ); @@ -41,16 +41,16 @@ fn frag_main(input: VertexOutput) -> @location(0) vec4 { if (fragment_uniforms.highlight == 1) { return select( //If element is above halfHeight, highlight green - vec4(vec3(0.0, 1.0 - subtracter, 0.0).rgb, 1.0), + vec4f(vec3f(0.0, 1.0 - subtracter, 0.0).rgb, 1.0), //If element is below halfheight, highlight red - vec4(vec3(1.0 - subtracter, 0.0, 0.0).rgb, 1.0), + vec4f(vec3f(1.0 - subtracter, 0.0, 0.0).rgb, 1.0), elementIndex % uniforms.blockHeight < uniforms.blockHeight / 2 ); } - var color: vec3 = vec3f( + var color: vec3f = vec3f( 1.0 - subtracter ); - return vec4(color.rgb, 1.0); + return vec4f(color.rgb, 1.0); } diff --git a/sample/bitonicSort/main.js b/sample/bitonicSort/main.js index e46a285d..5e124968 100644 --- a/sample/bitonicSort/main.js +++ b/sample/bitonicSort/main.js @@ -2667,8 +2667,8 @@ var fullscreenTexturedQuad = `@group(0) @binding(0) var mySampler : sampler; @group(0) @binding(1) var myTexture : texture_2d; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) fragUV : vec2, + @builtin(position) Position : vec4f, + @location(0) fragUV : vec2f, } @vertex @@ -2698,7 +2698,7 @@ fn vert_main(@builtin(vertex_index) VertexIndex : u32) -> VertexOutput { } @fragment -fn frag_main(@location(0) fragUV : vec2) -> @location(0) vec4 { +fn frag_main(@location(0) fragUV : vec2f) -> @location(0) vec4f { return textureSample(myTexture, mySampler, fragUV); } `; @@ -2844,8 +2844,8 @@ struct FragmentUniforms { } struct VertexOutput { - @builtin(position) Position: vec4, - @location(0) fragUV: vec2 + @builtin(position) Position: vec4f, + @location(0) fragUV: vec2f } // Uniforms from compute shader @@ -2855,13 +2855,13 @@ struct VertexOutput { @group(1) @binding(0) var fragment_uniforms: FragmentUniforms; @fragment -fn frag_main(input: VertexOutput) -> @location(0) vec4 { - var uv: vec2 = vec2( +fn frag_main(input: VertexOutput) -> @location(0) vec4f { + var uv: vec2f = vec2f( input.fragUV.x * uniforms.width, input.fragUV.y * uniforms.height ); - var pixel: vec2 = vec2( + var pixel: vec2u = vec2u( u32(floor(uv.x)), u32(floor(uv.y)), ); @@ -2874,18 +2874,18 @@ fn frag_main(input: VertexOutput) -> @location(0) vec4 { if (fragment_uniforms.highlight == 1) { return select( //If element is above halfHeight, highlight green - vec4(vec3(0.0, 1.0 - subtracter, 0.0).rgb, 1.0), + vec4f(vec3f(0.0, 1.0 - subtracter, 0.0).rgb, 1.0), //If element is below halfheight, highlight red - vec4(vec3(1.0 - subtracter, 0.0, 0.0).rgb, 1.0), + vec4f(vec3f(1.0 - subtracter, 0.0, 0.0).rgb, 1.0), elementIndex % uniforms.blockHeight < uniforms.blockHeight / 2 ); } - var color: vec3 = vec3f( + var color: vec3f = vec3f( 1.0 - subtracter ); - return vec4(color.rgb, 1.0); + return vec4f(color.rgb, 1.0); } `; @@ -2953,12 +2953,12 @@ fn local_compare_and_swap(idx_before: u32, idx_after: u32) { } // invoke_id goes from 0 to workgroupSize -fn get_flip_indices(invoke_id: u32, block_height: u32) -> vec2 { +fn get_flip_indices(invoke_id: u32, block_height: u32) -> vec2u { // Caculate index offset (i.e move indices into correct block) let block_offset: u32 = ((2 * invoke_id) / block_height) * block_height; let half_height = block_height / 2; // Calculate index spacing - var idx: vec2 = vec2( + var idx: vec2u = vec2u( invoke_id % half_height, block_height - (invoke_id % half_height) - 1, ); idx.x += block_offset; @@ -2966,10 +2966,10 @@ fn get_flip_indices(invoke_id: u32, block_height: u32) -> vec2 { return idx; } -fn get_disperse_indices(invoke_id: u32, block_height: u32) -> vec2 { +fn get_disperse_indices(invoke_id: u32, block_height: u32) -> vec2u { var block_offset: u32 = ((2 * invoke_id) / block_height) * block_height; let half_height = block_height / 2; - var idx: vec2 = vec2( + var idx: vec2u = vec2u( invoke_id % half_height, (invoke_id % half_height) + half_height ); idx.x += block_offset; @@ -2993,9 +2993,9 @@ const ALGO_GLOBAL_FLIP = 3; // Our compute shader will execute specified # of invocations or elements / 2 invocations @compute @workgroup_size(${workgroupSize}, 1, 1) fn computeMain( - @builtin(global_invocation_id) global_id: vec3, - @builtin(local_invocation_id) local_id: vec3, - @builtin(workgroup_id) workgroup_id: vec3, + @builtin(global_invocation_id) global_id: vec3u, + @builtin(local_invocation_id) local_id: vec3u, + @builtin(workgroup_id) workgroup_id: vec3u, ) { let offset = ${workgroupSize} * 2 * workgroup_id.x; diff --git a/sample/bitonicSort/main.js.map b/sample/bitonicSort/main.js.map index 43da21fc..f2b33349 100644 --- a/sample/bitonicSort/main.js.map +++ b/sample/bitonicSort/main.js.map @@ -1 +1 @@ -{"version":3,"file":"main.js","sources":["../../../node_modules/dat.gui/build/dat.gui.module.js","../../../node_modules/stats.js/build/stats.module.js","../../../../../sample/bitonicSort/utils.ts","../../../../../sample/bitonicSort/bitonicDisplay.ts","../../../../../sample/bitonicSort/bitonicCompute.ts","../../../../../sample/bitonicSort/main.ts"],"sourcesContent":["/**\n * dat-gui JavaScript Controller Library\n * https://github.com/dataarts/dat.gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction ___$insertStyle(css) {\n if (!css) {\n return;\n }\n if (typeof window === 'undefined') {\n return;\n }\n\n var style = document.createElement('style');\n\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n document.head.appendChild(style);\n\n return css;\n}\n\nfunction colorToString (color, forceCSSHex) {\n var colorFormat = color.__state.conversionName.toString();\n var r = Math.round(color.r);\n var g = Math.round(color.g);\n var b = Math.round(color.b);\n var a = color.a;\n var h = Math.round(color.h);\n var s = color.s.toFixed(1);\n var v = color.v.toFixed(1);\n if (forceCSSHex || colorFormat === 'THREE_CHAR_HEX' || colorFormat === 'SIX_CHAR_HEX') {\n var str = color.hex.toString(16);\n while (str.length < 6) {\n str = '0' + str;\n }\n return '#' + str;\n } else if (colorFormat === 'CSS_RGB') {\n return 'rgb(' + r + ',' + g + ',' + b + ')';\n } else if (colorFormat === 'CSS_RGBA') {\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n } else if (colorFormat === 'HEX') {\n return '0x' + color.hex.toString(16);\n } else if (colorFormat === 'RGB_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ']';\n } else if (colorFormat === 'RGBA_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ',' + a + ']';\n } else if (colorFormat === 'RGB_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + '}';\n } else if (colorFormat === 'RGBA_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}';\n } else if (colorFormat === 'HSV_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + '}';\n } else if (colorFormat === 'HSVA_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}';\n }\n return 'unknown format';\n}\n\nvar ARR_EACH = Array.prototype.forEach;\nvar ARR_SLICE = Array.prototype.slice;\nvar Common = {\n BREAK: {},\n extend: function extend(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (!this.isUndefined(obj[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n defaults: function defaults(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (this.isUndefined(target[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n compose: function compose() {\n var toCall = ARR_SLICE.call(arguments);\n return function () {\n var args = ARR_SLICE.call(arguments);\n for (var i = toCall.length - 1; i >= 0; i--) {\n args = [toCall[i].apply(this, args)];\n }\n return args[0];\n };\n },\n each: function each(obj, itr, scope) {\n if (!obj) {\n return;\n }\n if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) {\n obj.forEach(itr, scope);\n } else if (obj.length === obj.length + 0) {\n var key = void 0;\n var l = void 0;\n for (key = 0, l = obj.length; key < l; key++) {\n if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) {\n return;\n }\n }\n } else {\n for (var _key in obj) {\n if (itr.call(scope, obj[_key], _key) === this.BREAK) {\n return;\n }\n }\n }\n },\n defer: function defer(fnc) {\n setTimeout(fnc, 0);\n },\n debounce: function debounce(func, threshold, callImmediately) {\n var timeout = void 0;\n return function () {\n var obj = this;\n var args = arguments;\n function delayed() {\n timeout = null;\n if (!callImmediately) func.apply(obj, args);\n }\n var callNow = callImmediately || !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(delayed, threshold);\n if (callNow) {\n func.apply(obj, args);\n }\n };\n },\n toArray: function toArray(obj) {\n if (obj.toArray) return obj.toArray();\n return ARR_SLICE.call(obj);\n },\n isUndefined: function isUndefined(obj) {\n return obj === undefined;\n },\n isNull: function isNull(obj) {\n return obj === null;\n },\n isNaN: function (_isNaN) {\n function isNaN(_x) {\n return _isNaN.apply(this, arguments);\n }\n isNaN.toString = function () {\n return _isNaN.toString();\n };\n return isNaN;\n }(function (obj) {\n return isNaN(obj);\n }),\n isArray: Array.isArray || function (obj) {\n return obj.constructor === Array;\n },\n isObject: function isObject(obj) {\n return obj === Object(obj);\n },\n isNumber: function isNumber(obj) {\n return obj === obj + 0;\n },\n isString: function isString(obj) {\n return obj === obj + '';\n },\n isBoolean: function isBoolean(obj) {\n return obj === false || obj === true;\n },\n isFunction: function isFunction(obj) {\n return obj instanceof Function;\n }\n};\n\nvar INTERPRETATIONS = [\n{\n litmus: Common.isString,\n conversions: {\n THREE_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString() + test[1].toString() + test[2].toString() + test[2].toString() + test[3].toString() + test[3].toString(), 0)\n };\n },\n write: colorToString\n },\n SIX_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9]{6})$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString(), 0)\n };\n },\n write: colorToString\n },\n CSS_RGB: {\n read: function read(original) {\n var test = original.match(/^rgb\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3])\n };\n },\n write: colorToString\n },\n CSS_RGBA: {\n read: function read(original) {\n var test = original.match(/^rgba\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3]),\n a: parseFloat(test[4])\n };\n },\n write: colorToString\n }\n }\n},\n{\n litmus: Common.isNumber,\n conversions: {\n HEX: {\n read: function read(original) {\n return {\n space: 'HEX',\n hex: original,\n conversionName: 'HEX'\n };\n },\n write: function write(color) {\n return color.hex;\n }\n }\n }\n},\n{\n litmus: Common.isArray,\n conversions: {\n RGB_ARRAY: {\n read: function read(original) {\n if (original.length !== 3) {\n return false;\n }\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b];\n }\n },\n RGBA_ARRAY: {\n read: function read(original) {\n if (original.length !== 4) return false;\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2],\n a: original[3]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b, color.a];\n }\n }\n }\n},\n{\n litmus: Common.isObject,\n conversions: {\n RGBA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b) && Common.isNumber(original.a)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b,\n a: color.a\n };\n }\n },\n RGB_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b\n };\n }\n },\n HSVA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v) && Common.isNumber(original.a)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v,\n a: color.a\n };\n }\n },\n HSV_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v\n };\n }\n }\n }\n}];\nvar result = void 0;\nvar toReturn = void 0;\nvar interpret = function interpret() {\n toReturn = false;\n var original = arguments.length > 1 ? Common.toArray(arguments) : arguments[0];\n Common.each(INTERPRETATIONS, function (family) {\n if (family.litmus(original)) {\n Common.each(family.conversions, function (conversion, conversionName) {\n result = conversion.read(original);\n if (toReturn === false && result !== false) {\n toReturn = result;\n result.conversionName = conversionName;\n result.conversion = conversion;\n return Common.BREAK;\n }\n });\n return Common.BREAK;\n }\n });\n return toReturn;\n};\n\nvar tmpComponent = void 0;\nvar ColorMath = {\n hsv_to_rgb: function hsv_to_rgb(h, s, v) {\n var hi = Math.floor(h / 60) % 6;\n var f = h / 60 - Math.floor(h / 60);\n var p = v * (1.0 - s);\n var q = v * (1.0 - f * s);\n var t = v * (1.0 - (1.0 - f) * s);\n var c = [[v, t, p], [q, v, p], [p, v, t], [p, q, v], [t, p, v], [v, p, q]][hi];\n return {\n r: c[0] * 255,\n g: c[1] * 255,\n b: c[2] * 255\n };\n },\n rgb_to_hsv: function rgb_to_hsv(r, g, b) {\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var h = void 0;\n var s = void 0;\n if (max !== 0) {\n s = delta / max;\n } else {\n return {\n h: NaN,\n s: 0,\n v: 0\n };\n }\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h /= 6;\n if (h < 0) {\n h += 1;\n }\n return {\n h: h * 360,\n s: s,\n v: max / 255\n };\n },\n rgb_to_hex: function rgb_to_hex(r, g, b) {\n var hex = this.hex_with_component(0, 2, r);\n hex = this.hex_with_component(hex, 1, g);\n hex = this.hex_with_component(hex, 0, b);\n return hex;\n },\n component_from_hex: function component_from_hex(hex, componentIndex) {\n return hex >> componentIndex * 8 & 0xFF;\n },\n hex_with_component: function hex_with_component(hex, componentIndex, value) {\n return value << (tmpComponent = componentIndex * 8) | hex & ~(0xFF << tmpComponent);\n }\n};\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar Color = function () {\n function Color() {\n classCallCheck(this, Color);\n this.__state = interpret.apply(this, arguments);\n if (this.__state === false) {\n throw new Error('Failed to interpret color arguments');\n }\n this.__state.a = this.__state.a || 1;\n }\n createClass(Color, [{\n key: 'toString',\n value: function toString() {\n return colorToString(this);\n }\n }, {\n key: 'toHexString',\n value: function toHexString() {\n return colorToString(this, true);\n }\n }, {\n key: 'toOriginal',\n value: function toOriginal() {\n return this.__state.conversion.write(this);\n }\n }]);\n return Color;\n}();\nfunction defineRGBComponent(target, component, componentHexIndex) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'RGB') {\n return this.__state[component];\n }\n Color.recalculateRGB(this, component, componentHexIndex);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'RGB') {\n Color.recalculateRGB(this, component, componentHexIndex);\n this.__state.space = 'RGB';\n }\n this.__state[component] = v;\n }\n });\n}\nfunction defineHSVComponent(target, component) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'HSV') {\n return this.__state[component];\n }\n Color.recalculateHSV(this);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'HSV') {\n Color.recalculateHSV(this);\n this.__state.space = 'HSV';\n }\n this.__state[component] = v;\n }\n });\n}\nColor.recalculateRGB = function (color, component, componentHexIndex) {\n if (color.__state.space === 'HEX') {\n color.__state[component] = ColorMath.component_from_hex(color.__state.hex, componentHexIndex);\n } else if (color.__state.space === 'HSV') {\n Common.extend(color.__state, ColorMath.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v));\n } else {\n throw new Error('Corrupted color state');\n }\n};\nColor.recalculateHSV = function (color) {\n var result = ColorMath.rgb_to_hsv(color.r, color.g, color.b);\n Common.extend(color.__state, {\n s: result.s,\n v: result.v\n });\n if (!Common.isNaN(result.h)) {\n color.__state.h = result.h;\n } else if (Common.isUndefined(color.__state.h)) {\n color.__state.h = 0;\n }\n};\nColor.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a'];\ndefineRGBComponent(Color.prototype, 'r', 2);\ndefineRGBComponent(Color.prototype, 'g', 1);\ndefineRGBComponent(Color.prototype, 'b', 0);\ndefineHSVComponent(Color.prototype, 'h');\ndefineHSVComponent(Color.prototype, 's');\ndefineHSVComponent(Color.prototype, 'v');\nObject.defineProperty(Color.prototype, 'a', {\n get: function get$$1() {\n return this.__state.a;\n },\n set: function set$$1(v) {\n this.__state.a = v;\n }\n});\nObject.defineProperty(Color.prototype, 'hex', {\n get: function get$$1() {\n if (this.__state.space !== 'HEX') {\n this.__state.hex = ColorMath.rgb_to_hex(this.r, this.g, this.b);\n this.__state.space = 'HEX';\n }\n return this.__state.hex;\n },\n set: function set$$1(v) {\n this.__state.space = 'HEX';\n this.__state.hex = v;\n }\n});\n\nvar Controller = function () {\n function Controller(object, property) {\n classCallCheck(this, Controller);\n this.initialValue = object[property];\n this.domElement = document.createElement('div');\n this.object = object;\n this.property = property;\n this.__onChange = undefined;\n this.__onFinishChange = undefined;\n }\n createClass(Controller, [{\n key: 'onChange',\n value: function onChange(fnc) {\n this.__onChange = fnc;\n return this;\n }\n }, {\n key: 'onFinishChange',\n value: function onFinishChange(fnc) {\n this.__onFinishChange = fnc;\n return this;\n }\n }, {\n key: 'setValue',\n value: function setValue(newValue) {\n this.object[this.property] = newValue;\n if (this.__onChange) {\n this.__onChange.call(this, newValue);\n }\n this.updateDisplay();\n return this;\n }\n }, {\n key: 'getValue',\n value: function getValue() {\n return this.object[this.property];\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n return this;\n }\n }, {\n key: 'isModified',\n value: function isModified() {\n return this.initialValue !== this.getValue();\n }\n }]);\n return Controller;\n}();\n\nvar EVENT_MAP = {\n HTMLEvents: ['change'],\n MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'],\n KeyboardEvents: ['keydown']\n};\nvar EVENT_MAP_INV = {};\nCommon.each(EVENT_MAP, function (v, k) {\n Common.each(v, function (e) {\n EVENT_MAP_INV[e] = k;\n });\n});\nvar CSS_VALUE_PIXELS = /(\\d+(\\.\\d+)?)px/;\nfunction cssValueToPixels(val) {\n if (val === '0' || Common.isUndefined(val)) {\n return 0;\n }\n var match = val.match(CSS_VALUE_PIXELS);\n if (!Common.isNull(match)) {\n return parseFloat(match[1]);\n }\n return 0;\n}\nvar dom = {\n makeSelectable: function makeSelectable(elem, selectable) {\n if (elem === undefined || elem.style === undefined) return;\n elem.onselectstart = selectable ? function () {\n return false;\n } : function () {};\n elem.style.MozUserSelect = selectable ? 'auto' : 'none';\n elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none';\n elem.unselectable = selectable ? 'on' : 'off';\n },\n makeFullscreen: function makeFullscreen(elem, hor, vert) {\n var vertical = vert;\n var horizontal = hor;\n if (Common.isUndefined(horizontal)) {\n horizontal = true;\n }\n if (Common.isUndefined(vertical)) {\n vertical = true;\n }\n elem.style.position = 'absolute';\n if (horizontal) {\n elem.style.left = 0;\n elem.style.right = 0;\n }\n if (vertical) {\n elem.style.top = 0;\n elem.style.bottom = 0;\n }\n },\n fakeEvent: function fakeEvent(elem, eventType, pars, aux) {\n var params = pars || {};\n var className = EVENT_MAP_INV[eventType];\n if (!className) {\n throw new Error('Event type ' + eventType + ' not supported.');\n }\n var evt = document.createEvent(className);\n switch (className) {\n case 'MouseEvents':\n {\n var clientX = params.x || params.clientX || 0;\n var clientY = params.y || params.clientY || 0;\n evt.initMouseEvent(eventType, params.bubbles || false, params.cancelable || true, window, params.clickCount || 1, 0,\n 0,\n clientX,\n clientY,\n false, false, false, false, 0, null);\n break;\n }\n case 'KeyboardEvents':\n {\n var init = evt.initKeyboardEvent || evt.initKeyEvent;\n Common.defaults(params, {\n cancelable: true,\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n keyCode: undefined,\n charCode: undefined\n });\n init(eventType, params.bubbles || false, params.cancelable, window, params.ctrlKey, params.altKey, params.shiftKey, params.metaKey, params.keyCode, params.charCode);\n break;\n }\n default:\n {\n evt.initEvent(eventType, params.bubbles || false, params.cancelable || true);\n break;\n }\n }\n Common.defaults(evt, aux);\n elem.dispatchEvent(evt);\n },\n bind: function bind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.addEventListener) {\n elem.addEventListener(event, func, bool);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + event, func);\n }\n return dom;\n },\n unbind: function unbind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.removeEventListener) {\n elem.removeEventListener(event, func, bool);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + event, func);\n }\n return dom;\n },\n addClass: function addClass(elem, className) {\n if (elem.className === undefined) {\n elem.className = className;\n } else if (elem.className !== className) {\n var classes = elem.className.split(/ +/);\n if (classes.indexOf(className) === -1) {\n classes.push(className);\n elem.className = classes.join(' ').replace(/^\\s+/, '').replace(/\\s+$/, '');\n }\n }\n return dom;\n },\n removeClass: function removeClass(elem, className) {\n if (className) {\n if (elem.className === className) {\n elem.removeAttribute('class');\n } else {\n var classes = elem.className.split(/ +/);\n var index = classes.indexOf(className);\n if (index !== -1) {\n classes.splice(index, 1);\n elem.className = classes.join(' ');\n }\n }\n } else {\n elem.className = undefined;\n }\n return dom;\n },\n hasClass: function hasClass(elem, className) {\n return new RegExp('(?:^|\\\\s+)' + className + '(?:\\\\s+|$)').test(elem.className) || false;\n },\n getWidth: function getWidth(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-left-width']) + cssValueToPixels(style['border-right-width']) + cssValueToPixels(style['padding-left']) + cssValueToPixels(style['padding-right']) + cssValueToPixels(style.width);\n },\n getHeight: function getHeight(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-top-width']) + cssValueToPixels(style['border-bottom-width']) + cssValueToPixels(style['padding-top']) + cssValueToPixels(style['padding-bottom']) + cssValueToPixels(style.height);\n },\n getOffset: function getOffset(el) {\n var elem = el;\n var offset = { left: 0, top: 0 };\n if (elem.offsetParent) {\n do {\n offset.left += elem.offsetLeft;\n offset.top += elem.offsetTop;\n elem = elem.offsetParent;\n } while (elem);\n }\n return offset;\n },\n isActive: function isActive(elem) {\n return elem === document.activeElement && (elem.type || elem.href);\n }\n};\n\nvar BooleanController = function (_Controller) {\n inherits(BooleanController, _Controller);\n function BooleanController(object, property) {\n classCallCheck(this, BooleanController);\n var _this2 = possibleConstructorReturn(this, (BooleanController.__proto__ || Object.getPrototypeOf(BooleanController)).call(this, object, property));\n var _this = _this2;\n _this2.__prev = _this2.getValue();\n _this2.__checkbox = document.createElement('input');\n _this2.__checkbox.setAttribute('type', 'checkbox');\n function onChange() {\n _this.setValue(!_this.__prev);\n }\n dom.bind(_this2.__checkbox, 'change', onChange, false);\n _this2.domElement.appendChild(_this2.__checkbox);\n _this2.updateDisplay();\n return _this2;\n }\n createClass(BooleanController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n this.__prev = this.getValue();\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (this.getValue() === true) {\n this.__checkbox.setAttribute('checked', 'checked');\n this.__checkbox.checked = true;\n this.__prev = true;\n } else {\n this.__checkbox.checked = false;\n this.__prev = false;\n }\n return get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return BooleanController;\n}(Controller);\n\nvar OptionController = function (_Controller) {\n inherits(OptionController, _Controller);\n function OptionController(object, property, opts) {\n classCallCheck(this, OptionController);\n var _this2 = possibleConstructorReturn(this, (OptionController.__proto__ || Object.getPrototypeOf(OptionController)).call(this, object, property));\n var options = opts;\n var _this = _this2;\n _this2.__select = document.createElement('select');\n if (Common.isArray(options)) {\n var map = {};\n Common.each(options, function (element) {\n map[element] = element;\n });\n options = map;\n }\n Common.each(options, function (value, key) {\n var opt = document.createElement('option');\n opt.innerHTML = key;\n opt.setAttribute('value', value);\n _this.__select.appendChild(opt);\n });\n _this2.updateDisplay();\n dom.bind(_this2.__select, 'change', function () {\n var desiredValue = this.options[this.selectedIndex].value;\n _this.setValue(desiredValue);\n });\n _this2.domElement.appendChild(_this2.__select);\n return _this2;\n }\n createClass(OptionController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (dom.isActive(this.__select)) return this;\n this.__select.value = this.getValue();\n return get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return OptionController;\n}(Controller);\n\nvar StringController = function (_Controller) {\n inherits(StringController, _Controller);\n function StringController(object, property) {\n classCallCheck(this, StringController);\n var _this2 = possibleConstructorReturn(this, (StringController.__proto__ || Object.getPrototypeOf(StringController)).call(this, object, property));\n var _this = _this2;\n function onChange() {\n _this.setValue(_this.__input.value);\n }\n function onBlur() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'keyup', onChange);\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n this.blur();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(StringController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (!dom.isActive(this.__input)) {\n this.__input.value = this.getValue();\n }\n return get(StringController.prototype.__proto__ || Object.getPrototypeOf(StringController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return StringController;\n}(Controller);\n\nfunction numDecimals(x) {\n var _x = x.toString();\n if (_x.indexOf('.') > -1) {\n return _x.length - _x.indexOf('.') - 1;\n }\n return 0;\n}\nvar NumberController = function (_Controller) {\n inherits(NumberController, _Controller);\n function NumberController(object, property, params) {\n classCallCheck(this, NumberController);\n var _this = possibleConstructorReturn(this, (NumberController.__proto__ || Object.getPrototypeOf(NumberController)).call(this, object, property));\n var _params = params || {};\n _this.__min = _params.min;\n _this.__max = _params.max;\n _this.__step = _params.step;\n if (Common.isUndefined(_this.__step)) {\n if (_this.initialValue === 0) {\n _this.__impliedStep = 1;\n } else {\n _this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(_this.initialValue)) / Math.LN10)) / 10;\n }\n } else {\n _this.__impliedStep = _this.__step;\n }\n _this.__precision = numDecimals(_this.__impliedStep);\n return _this;\n }\n createClass(NumberController, [{\n key: 'setValue',\n value: function setValue(v) {\n var _v = v;\n if (this.__min !== undefined && _v < this.__min) {\n _v = this.__min;\n } else if (this.__max !== undefined && _v > this.__max) {\n _v = this.__max;\n }\n if (this.__step !== undefined && _v % this.__step !== 0) {\n _v = Math.round(_v / this.__step) * this.__step;\n }\n return get(NumberController.prototype.__proto__ || Object.getPrototypeOf(NumberController.prototype), 'setValue', this).call(this, _v);\n }\n }, {\n key: 'min',\n value: function min(minValue) {\n this.__min = minValue;\n return this;\n }\n }, {\n key: 'max',\n value: function max(maxValue) {\n this.__max = maxValue;\n return this;\n }\n }, {\n key: 'step',\n value: function step(stepValue) {\n this.__step = stepValue;\n this.__impliedStep = stepValue;\n this.__precision = numDecimals(stepValue);\n return this;\n }\n }]);\n return NumberController;\n}(Controller);\n\nfunction roundToDecimal(value, decimals) {\n var tenTo = Math.pow(10, decimals);\n return Math.round(value * tenTo) / tenTo;\n}\nvar NumberControllerBox = function (_NumberController) {\n inherits(NumberControllerBox, _NumberController);\n function NumberControllerBox(object, property, params) {\n classCallCheck(this, NumberControllerBox);\n var _this2 = possibleConstructorReturn(this, (NumberControllerBox.__proto__ || Object.getPrototypeOf(NumberControllerBox)).call(this, object, property, params));\n _this2.__truncationSuspended = false;\n var _this = _this2;\n var prevY = void 0;\n function onChange() {\n var attempted = parseFloat(_this.__input.value);\n if (!Common.isNaN(attempted)) {\n _this.setValue(attempted);\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onBlur() {\n onFinish();\n }\n function onMouseDrag(e) {\n var diff = prevY - e.clientY;\n _this.setValue(_this.getValue() + diff * _this.__impliedStep);\n prevY = e.clientY;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n onFinish();\n }\n function onMouseDown(e) {\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n prevY = e.clientY;\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'mousedown', onMouseDown);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n _this.__truncationSuspended = true;\n this.blur();\n _this.__truncationSuspended = false;\n onFinish();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(NumberControllerBox, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision);\n return get(NumberControllerBox.prototype.__proto__ || Object.getPrototypeOf(NumberControllerBox.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerBox;\n}(NumberController);\n\nfunction map(v, i1, i2, o1, o2) {\n return o1 + (o2 - o1) * ((v - i1) / (i2 - i1));\n}\nvar NumberControllerSlider = function (_NumberController) {\n inherits(NumberControllerSlider, _NumberController);\n function NumberControllerSlider(object, property, min, max, step) {\n classCallCheck(this, NumberControllerSlider);\n var _this2 = possibleConstructorReturn(this, (NumberControllerSlider.__proto__ || Object.getPrototypeOf(NumberControllerSlider)).call(this, object, property, { min: min, max: max, step: step }));\n var _this = _this2;\n _this2.__background = document.createElement('div');\n _this2.__foreground = document.createElement('div');\n dom.bind(_this2.__background, 'mousedown', onMouseDown);\n dom.bind(_this2.__background, 'touchstart', onTouchStart);\n dom.addClass(_this2.__background, 'slider');\n dom.addClass(_this2.__foreground, 'slider-fg');\n function onMouseDown(e) {\n document.activeElement.blur();\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n onMouseDrag(e);\n }\n function onMouseDrag(e) {\n e.preventDefault();\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n return false;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onTouchStart(e) {\n if (e.touches.length !== 1) {\n return;\n }\n dom.bind(window, 'touchmove', onTouchMove);\n dom.bind(window, 'touchend', onTouchEnd);\n onTouchMove(e);\n }\n function onTouchMove(e) {\n var clientX = e.touches[0].clientX;\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n }\n function onTouchEnd() {\n dom.unbind(window, 'touchmove', onTouchMove);\n dom.unbind(window, 'touchend', onTouchEnd);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.updateDisplay();\n _this2.__background.appendChild(_this2.__foreground);\n _this2.domElement.appendChild(_this2.__background);\n return _this2;\n }\n createClass(NumberControllerSlider, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var pct = (this.getValue() - this.__min) / (this.__max - this.__min);\n this.__foreground.style.width = pct * 100 + '%';\n return get(NumberControllerSlider.prototype.__proto__ || Object.getPrototypeOf(NumberControllerSlider.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerSlider;\n}(NumberController);\n\nvar FunctionController = function (_Controller) {\n inherits(FunctionController, _Controller);\n function FunctionController(object, property, text) {\n classCallCheck(this, FunctionController);\n var _this2 = possibleConstructorReturn(this, (FunctionController.__proto__ || Object.getPrototypeOf(FunctionController)).call(this, object, property));\n var _this = _this2;\n _this2.__button = document.createElement('div');\n _this2.__button.innerHTML = text === undefined ? 'Fire' : text;\n dom.bind(_this2.__button, 'click', function (e) {\n e.preventDefault();\n _this.fire();\n return false;\n });\n dom.addClass(_this2.__button, 'button');\n _this2.domElement.appendChild(_this2.__button);\n return _this2;\n }\n createClass(FunctionController, [{\n key: 'fire',\n value: function fire() {\n if (this.__onChange) {\n this.__onChange.call(this);\n }\n this.getValue().call(this.object);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n }\n }]);\n return FunctionController;\n}(Controller);\n\nvar ColorController = function (_Controller) {\n inherits(ColorController, _Controller);\n function ColorController(object, property) {\n classCallCheck(this, ColorController);\n var _this2 = possibleConstructorReturn(this, (ColorController.__proto__ || Object.getPrototypeOf(ColorController)).call(this, object, property));\n _this2.__color = new Color(_this2.getValue());\n _this2.__temp = new Color(0);\n var _this = _this2;\n _this2.domElement = document.createElement('div');\n dom.makeSelectable(_this2.domElement, false);\n _this2.__selector = document.createElement('div');\n _this2.__selector.className = 'selector';\n _this2.__saturation_field = document.createElement('div');\n _this2.__saturation_field.className = 'saturation-field';\n _this2.__field_knob = document.createElement('div');\n _this2.__field_knob.className = 'field-knob';\n _this2.__field_knob_border = '2px solid ';\n _this2.__hue_knob = document.createElement('div');\n _this2.__hue_knob.className = 'hue-knob';\n _this2.__hue_field = document.createElement('div');\n _this2.__hue_field.className = 'hue-field';\n _this2.__input = document.createElement('input');\n _this2.__input.type = 'text';\n _this2.__input_textShadow = '0 1px 1px ';\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n onBlur.call(this);\n }\n });\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__selector, 'mousedown', function () {\n dom.addClass(this, 'drag').bind(window, 'mouseup', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n dom.bind(_this2.__selector, 'touchstart', function () {\n dom.addClass(this, 'drag').bind(window, 'touchend', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n var valueField = document.createElement('div');\n Common.extend(_this2.__selector.style, {\n width: '122px',\n height: '102px',\n padding: '3px',\n backgroundColor: '#222',\n boxShadow: '0px 1px 3px rgba(0,0,0,0.3)'\n });\n Common.extend(_this2.__field_knob.style, {\n position: 'absolute',\n width: '12px',\n height: '12px',\n border: _this2.__field_knob_border + (_this2.__color.v < 0.5 ? '#fff' : '#000'),\n boxShadow: '0px 1px 3px rgba(0,0,0,0.5)',\n borderRadius: '12px',\n zIndex: 1\n });\n Common.extend(_this2.__hue_knob.style, {\n position: 'absolute',\n width: '15px',\n height: '2px',\n borderRight: '4px solid #fff',\n zIndex: 1\n });\n Common.extend(_this2.__saturation_field.style, {\n width: '100px',\n height: '100px',\n border: '1px solid #555',\n marginRight: '3px',\n display: 'inline-block',\n cursor: 'pointer'\n });\n Common.extend(valueField.style, {\n width: '100%',\n height: '100%',\n background: 'none'\n });\n linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000');\n Common.extend(_this2.__hue_field.style, {\n width: '15px',\n height: '100px',\n border: '1px solid #555',\n cursor: 'ns-resize',\n position: 'absolute',\n top: '3px',\n right: '3px'\n });\n hueGradient(_this2.__hue_field);\n Common.extend(_this2.__input.style, {\n outline: 'none',\n textAlign: 'center',\n color: '#fff',\n border: 0,\n fontWeight: 'bold',\n textShadow: _this2.__input_textShadow + 'rgba(0,0,0,0.7)'\n });\n dom.bind(_this2.__saturation_field, 'mousedown', fieldDown);\n dom.bind(_this2.__saturation_field, 'touchstart', fieldDown);\n dom.bind(_this2.__field_knob, 'mousedown', fieldDown);\n dom.bind(_this2.__field_knob, 'touchstart', fieldDown);\n dom.bind(_this2.__hue_field, 'mousedown', fieldDownH);\n dom.bind(_this2.__hue_field, 'touchstart', fieldDownH);\n function fieldDown(e) {\n setSV(e);\n dom.bind(window, 'mousemove', setSV);\n dom.bind(window, 'touchmove', setSV);\n dom.bind(window, 'mouseup', fieldUpSV);\n dom.bind(window, 'touchend', fieldUpSV);\n }\n function fieldDownH(e) {\n setH(e);\n dom.bind(window, 'mousemove', setH);\n dom.bind(window, 'touchmove', setH);\n dom.bind(window, 'mouseup', fieldUpH);\n dom.bind(window, 'touchend', fieldUpH);\n }\n function fieldUpSV() {\n dom.unbind(window, 'mousemove', setSV);\n dom.unbind(window, 'touchmove', setSV);\n dom.unbind(window, 'mouseup', fieldUpSV);\n dom.unbind(window, 'touchend', fieldUpSV);\n onFinish();\n }\n function fieldUpH() {\n dom.unbind(window, 'mousemove', setH);\n dom.unbind(window, 'touchmove', setH);\n dom.unbind(window, 'mouseup', fieldUpH);\n dom.unbind(window, 'touchend', fieldUpH);\n onFinish();\n }\n function onBlur() {\n var i = interpret(this.value);\n if (i !== false) {\n _this.__color.__state = i;\n _this.setValue(_this.__color.toOriginal());\n } else {\n this.value = _this.__color.toString();\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.__color.toOriginal());\n }\n }\n _this2.__saturation_field.appendChild(valueField);\n _this2.__selector.appendChild(_this2.__field_knob);\n _this2.__selector.appendChild(_this2.__saturation_field);\n _this2.__selector.appendChild(_this2.__hue_field);\n _this2.__hue_field.appendChild(_this2.__hue_knob);\n _this2.domElement.appendChild(_this2.__input);\n _this2.domElement.appendChild(_this2.__selector);\n _this2.updateDisplay();\n function setSV(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__saturation_field.getBoundingClientRect();\n var _ref = e.touches && e.touches[0] || e,\n clientX = _ref.clientX,\n clientY = _ref.clientY;\n var s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left);\n var v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (v > 1) {\n v = 1;\n } else if (v < 0) {\n v = 0;\n }\n if (s > 1) {\n s = 1;\n } else if (s < 0) {\n s = 0;\n }\n _this.__color.v = v;\n _this.__color.s = s;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n function setH(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__hue_field.getBoundingClientRect();\n var _ref2 = e.touches && e.touches[0] || e,\n clientY = _ref2.clientY;\n var h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (h > 1) {\n h = 1;\n } else if (h < 0) {\n h = 0;\n }\n _this.__color.h = h * 360;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n return _this2;\n }\n createClass(ColorController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var i = interpret(this.getValue());\n if (i !== false) {\n var mismatch = false;\n Common.each(Color.COMPONENTS, function (component) {\n if (!Common.isUndefined(i[component]) && !Common.isUndefined(this.__color.__state[component]) && i[component] !== this.__color.__state[component]) {\n mismatch = true;\n return {};\n }\n }, this);\n if (mismatch) {\n Common.extend(this.__color.__state, i);\n }\n }\n Common.extend(this.__temp.__state, this.__color.__state);\n this.__temp.a = 1;\n var flip = this.__color.v < 0.5 || this.__color.s > 0.5 ? 255 : 0;\n var _flip = 255 - flip;\n Common.extend(this.__field_knob.style, {\n marginLeft: 100 * this.__color.s - 7 + 'px',\n marginTop: 100 * (1 - this.__color.v) - 7 + 'px',\n backgroundColor: this.__temp.toHexString(),\n border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')'\n });\n this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px';\n this.__temp.s = 1;\n this.__temp.v = 1;\n linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString());\n this.__input.value = this.__color.toString();\n Common.extend(this.__input.style, {\n backgroundColor: this.__color.toHexString(),\n color: 'rgb(' + flip + ',' + flip + ',' + flip + ')',\n textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)'\n });\n }\n }]);\n return ColorController;\n}(Controller);\nvar vendors = ['-moz-', '-o-', '-webkit-', '-ms-', ''];\nfunction linearGradient(elem, x, a, b) {\n elem.style.background = '';\n Common.each(vendors, function (vendor) {\n elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); ';\n });\n}\nfunction hueGradient(elem) {\n elem.style.background = '';\n elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);';\n elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n}\n\nvar css = {\n load: function load(url, indoc) {\n var doc = indoc || document;\n var link = doc.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.href = url;\n doc.getElementsByTagName('head')[0].appendChild(link);\n },\n inject: function inject(cssContent, indoc) {\n var doc = indoc || document;\n var injected = document.createElement('style');\n injected.type = 'text/css';\n injected.innerHTML = cssContent;\n var head = doc.getElementsByTagName('head')[0];\n try {\n head.appendChild(injected);\n } catch (e) {\n }\n }\n};\n\nvar saveDialogContents = \"
\\n\\n Here's the new load parameter for your GUI's constructor:\\n\\n \\n\\n
\\n\\n Automatically save\\n values to localStorage on exit.\\n\\n
The values saved to localStorage will\\n override those passed to dat.GUI's constructor. This makes it\\n easier to work incrementally, but localStorage is fragile,\\n and your friends may not see the same values you do.\\n\\n
\\n\\n
\\n\\n
\";\n\nvar ControllerFactory = function ControllerFactory(object, property) {\n var initialValue = object[property];\n if (Common.isArray(arguments[2]) || Common.isObject(arguments[2])) {\n return new OptionController(object, property, arguments[2]);\n }\n if (Common.isNumber(initialValue)) {\n if (Common.isNumber(arguments[2]) && Common.isNumber(arguments[3])) {\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerSlider(object, property, arguments[2], arguments[3], arguments[4]);\n }\n return new NumberControllerSlider(object, property, arguments[2], arguments[3]);\n }\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3], step: arguments[4] });\n }\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] });\n }\n if (Common.isString(initialValue)) {\n return new StringController(object, property);\n }\n if (Common.isFunction(initialValue)) {\n return new FunctionController(object, property, '');\n }\n if (Common.isBoolean(initialValue)) {\n return new BooleanController(object, property);\n }\n return null;\n};\n\nfunction requestAnimationFrame(callback) {\n setTimeout(callback, 1000 / 60);\n}\nvar requestAnimationFrame$1 = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || requestAnimationFrame;\n\nvar CenteredDiv = function () {\n function CenteredDiv() {\n classCallCheck(this, CenteredDiv);\n this.backgroundElement = document.createElement('div');\n Common.extend(this.backgroundElement.style, {\n backgroundColor: 'rgba(0,0,0,0.8)',\n top: 0,\n left: 0,\n display: 'none',\n zIndex: '1000',\n opacity: 0,\n WebkitTransition: 'opacity 0.2s linear',\n transition: 'opacity 0.2s linear'\n });\n dom.makeFullscreen(this.backgroundElement);\n this.backgroundElement.style.position = 'fixed';\n this.domElement = document.createElement('div');\n Common.extend(this.domElement.style, {\n position: 'fixed',\n display: 'none',\n zIndex: '1001',\n opacity: 0,\n WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear',\n transition: 'transform 0.2s ease-out, opacity 0.2s linear'\n });\n document.body.appendChild(this.backgroundElement);\n document.body.appendChild(this.domElement);\n var _this = this;\n dom.bind(this.backgroundElement, 'click', function () {\n _this.hide();\n });\n }\n createClass(CenteredDiv, [{\n key: 'show',\n value: function show() {\n var _this = this;\n this.backgroundElement.style.display = 'block';\n this.domElement.style.display = 'block';\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n this.layout();\n Common.defer(function () {\n _this.backgroundElement.style.opacity = 1;\n _this.domElement.style.opacity = 1;\n _this.domElement.style.webkitTransform = 'scale(1)';\n });\n }\n }, {\n key: 'hide',\n value: function hide() {\n var _this = this;\n var hide = function hide() {\n _this.domElement.style.display = 'none';\n _this.backgroundElement.style.display = 'none';\n dom.unbind(_this.domElement, 'webkitTransitionEnd', hide);\n dom.unbind(_this.domElement, 'transitionend', hide);\n dom.unbind(_this.domElement, 'oTransitionEnd', hide);\n };\n dom.bind(this.domElement, 'webkitTransitionEnd', hide);\n dom.bind(this.domElement, 'transitionend', hide);\n dom.bind(this.domElement, 'oTransitionEnd', hide);\n this.backgroundElement.style.opacity = 0;\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n }\n }, {\n key: 'layout',\n value: function layout() {\n this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px';\n this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px';\n }\n }]);\n return CenteredDiv;\n}();\n\nvar styleSheet = ___$insertStyle(\".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .cr.function .property-name{width:100%}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\\n\");\n\ncss.inject(styleSheet);\nvar CSS_NAMESPACE = 'dg';\nvar HIDE_KEY_CODE = 72;\nvar CLOSE_BUTTON_HEIGHT = 20;\nvar DEFAULT_DEFAULT_PRESET_NAME = 'Default';\nvar SUPPORTS_LOCAL_STORAGE = function () {\n try {\n return !!window.localStorage;\n } catch (e) {\n return false;\n }\n}();\nvar SAVE_DIALOGUE = void 0;\nvar autoPlaceVirgin = true;\nvar autoPlaceContainer = void 0;\nvar hide = false;\nvar hideableGuis = [];\nvar GUI = function GUI(pars) {\n var _this = this;\n var params = pars || {};\n this.domElement = document.createElement('div');\n this.__ul = document.createElement('ul');\n this.domElement.appendChild(this.__ul);\n dom.addClass(this.domElement, CSS_NAMESPACE);\n this.__folders = {};\n this.__controllers = [];\n this.__rememberedObjects = [];\n this.__rememberedObjectIndecesToControllers = [];\n this.__listening = [];\n params = Common.defaults(params, {\n closeOnTop: false,\n autoPlace: true,\n width: GUI.DEFAULT_WIDTH\n });\n params = Common.defaults(params, {\n resizable: params.autoPlace,\n hideable: params.autoPlace\n });\n if (!Common.isUndefined(params.load)) {\n if (params.preset) {\n params.load.preset = params.preset;\n }\n } else {\n params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME };\n }\n if (Common.isUndefined(params.parent) && params.hideable) {\n hideableGuis.push(this);\n }\n params.resizable = Common.isUndefined(params.parent) && params.resizable;\n if (params.autoPlace && Common.isUndefined(params.scrollable)) {\n params.scrollable = true;\n }\n var useLocalStorage = SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true';\n var saveToLocalStorage = void 0;\n var titleRow = void 0;\n Object.defineProperties(this,\n {\n parent: {\n get: function get$$1() {\n return params.parent;\n }\n },\n scrollable: {\n get: function get$$1() {\n return params.scrollable;\n }\n },\n autoPlace: {\n get: function get$$1() {\n return params.autoPlace;\n }\n },\n closeOnTop: {\n get: function get$$1() {\n return params.closeOnTop;\n }\n },\n preset: {\n get: function get$$1() {\n if (_this.parent) {\n return _this.getRoot().preset;\n }\n return params.load.preset;\n },\n set: function set$$1(v) {\n if (_this.parent) {\n _this.getRoot().preset = v;\n } else {\n params.load.preset = v;\n }\n setPresetSelectIndex(this);\n _this.revert();\n }\n },\n width: {\n get: function get$$1() {\n return params.width;\n },\n set: function set$$1(v) {\n params.width = v;\n setWidth(_this, v);\n }\n },\n name: {\n get: function get$$1() {\n return params.name;\n },\n set: function set$$1(v) {\n params.name = v;\n if (titleRow) {\n titleRow.innerHTML = params.name;\n }\n }\n },\n closed: {\n get: function get$$1() {\n return params.closed;\n },\n set: function set$$1(v) {\n params.closed = v;\n if (params.closed) {\n dom.addClass(_this.__ul, GUI.CLASS_CLOSED);\n } else {\n dom.removeClass(_this.__ul, GUI.CLASS_CLOSED);\n }\n this.onResize();\n if (_this.__closeButton) {\n _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED;\n }\n }\n },\n load: {\n get: function get$$1() {\n return params.load;\n }\n },\n useLocalStorage: {\n get: function get$$1() {\n return useLocalStorage;\n },\n set: function set$$1(bool) {\n if (SUPPORTS_LOCAL_STORAGE) {\n useLocalStorage = bool;\n if (bool) {\n dom.bind(window, 'unload', saveToLocalStorage);\n } else {\n dom.unbind(window, 'unload', saveToLocalStorage);\n }\n localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool);\n }\n }\n }\n });\n if (Common.isUndefined(params.parent)) {\n this.closed = params.closed || false;\n dom.addClass(this.domElement, GUI.CLASS_MAIN);\n dom.makeSelectable(this.domElement, false);\n if (SUPPORTS_LOCAL_STORAGE) {\n if (useLocalStorage) {\n _this.useLocalStorage = true;\n var savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui'));\n if (savedGui) {\n params.load = JSON.parse(savedGui);\n }\n }\n }\n this.__closeButton = document.createElement('div');\n this.__closeButton.innerHTML = GUI.TEXT_CLOSED;\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON);\n if (params.closeOnTop) {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP);\n this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]);\n } else {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM);\n this.domElement.appendChild(this.__closeButton);\n }\n dom.bind(this.__closeButton, 'click', function () {\n _this.closed = !_this.closed;\n });\n } else {\n if (params.closed === undefined) {\n params.closed = true;\n }\n var titleRowName = document.createTextNode(params.name);\n dom.addClass(titleRowName, 'controller-name');\n titleRow = addRow(_this, titleRowName);\n var onClickTitle = function onClickTitle(e) {\n e.preventDefault();\n _this.closed = !_this.closed;\n return false;\n };\n dom.addClass(this.__ul, GUI.CLASS_CLOSED);\n dom.addClass(titleRow, 'title');\n dom.bind(titleRow, 'click', onClickTitle);\n if (!params.closed) {\n this.closed = false;\n }\n }\n if (params.autoPlace) {\n if (Common.isUndefined(params.parent)) {\n if (autoPlaceVirgin) {\n autoPlaceContainer = document.createElement('div');\n dom.addClass(autoPlaceContainer, CSS_NAMESPACE);\n dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER);\n document.body.appendChild(autoPlaceContainer);\n autoPlaceVirgin = false;\n }\n autoPlaceContainer.appendChild(this.domElement);\n dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE);\n }\n if (!this.parent) {\n setWidth(_this, params.width);\n }\n }\n this.__resizeHandler = function () {\n _this.onResizeDebounced();\n };\n dom.bind(window, 'resize', this.__resizeHandler);\n dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler);\n dom.bind(this.__ul, 'transitionend', this.__resizeHandler);\n dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler);\n this.onResize();\n if (params.resizable) {\n addResizeHandle(this);\n }\n saveToLocalStorage = function saveToLocalStorage() {\n if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') {\n localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject()));\n }\n };\n this.saveToLocalStorageIfPossible = saveToLocalStorage;\n function resetWidth() {\n var root = _this.getRoot();\n root.width += 1;\n Common.defer(function () {\n root.width -= 1;\n });\n }\n if (!params.parent) {\n resetWidth();\n }\n};\nGUI.toggleHide = function () {\n hide = !hide;\n Common.each(hideableGuis, function (gui) {\n gui.domElement.style.display = hide ? 'none' : '';\n });\n};\nGUI.CLASS_AUTO_PLACE = 'a';\nGUI.CLASS_AUTO_PLACE_CONTAINER = 'ac';\nGUI.CLASS_MAIN = 'main';\nGUI.CLASS_CONTROLLER_ROW = 'cr';\nGUI.CLASS_TOO_TALL = 'taller-than-window';\nGUI.CLASS_CLOSED = 'closed';\nGUI.CLASS_CLOSE_BUTTON = 'close-button';\nGUI.CLASS_CLOSE_TOP = 'close-top';\nGUI.CLASS_CLOSE_BOTTOM = 'close-bottom';\nGUI.CLASS_DRAG = 'drag';\nGUI.DEFAULT_WIDTH = 245;\nGUI.TEXT_CLOSED = 'Close Controls';\nGUI.TEXT_OPEN = 'Open Controls';\nGUI._keydownHandler = function (e) {\n if (document.activeElement.type !== 'text' && (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) {\n GUI.toggleHide();\n }\n};\ndom.bind(window, 'keydown', GUI._keydownHandler, false);\nCommon.extend(GUI.prototype,\n{\n add: function add(object, property) {\n return _add(this, object, property, {\n factoryArgs: Array.prototype.slice.call(arguments, 2)\n });\n },\n addColor: function addColor(object, property) {\n return _add(this, object, property, {\n color: true\n });\n },\n remove: function remove(controller) {\n this.__ul.removeChild(controller.__li);\n this.__controllers.splice(this.__controllers.indexOf(controller), 1);\n var _this = this;\n Common.defer(function () {\n _this.onResize();\n });\n },\n destroy: function destroy() {\n if (this.parent) {\n throw new Error('Only the root GUI should be removed with .destroy(). ' + 'For subfolders, use gui.removeFolder(folder) instead.');\n }\n if (this.autoPlace) {\n autoPlaceContainer.removeChild(this.domElement);\n }\n var _this = this;\n Common.each(this.__folders, function (subfolder) {\n _this.removeFolder(subfolder);\n });\n dom.unbind(window, 'keydown', GUI._keydownHandler, false);\n removeListeners(this);\n },\n addFolder: function addFolder(name) {\n if (this.__folders[name] !== undefined) {\n throw new Error('You already have a folder in this GUI by the' + ' name \"' + name + '\"');\n }\n var newGuiParams = { name: name, parent: this };\n newGuiParams.autoPlace = this.autoPlace;\n if (this.load &&\n this.load.folders &&\n this.load.folders[name]) {\n newGuiParams.closed = this.load.folders[name].closed;\n newGuiParams.load = this.load.folders[name];\n }\n var gui = new GUI(newGuiParams);\n this.__folders[name] = gui;\n var li = addRow(this, gui.domElement);\n dom.addClass(li, 'folder');\n return gui;\n },\n removeFolder: function removeFolder(folder) {\n this.__ul.removeChild(folder.domElement.parentElement);\n delete this.__folders[folder.name];\n if (this.load &&\n this.load.folders &&\n this.load.folders[folder.name]) {\n delete this.load.folders[folder.name];\n }\n removeListeners(folder);\n var _this = this;\n Common.each(folder.__folders, function (subfolder) {\n folder.removeFolder(subfolder);\n });\n Common.defer(function () {\n _this.onResize();\n });\n },\n open: function open() {\n this.closed = false;\n },\n close: function close() {\n this.closed = true;\n },\n hide: function hide() {\n this.domElement.style.display = 'none';\n },\n show: function show() {\n this.domElement.style.display = '';\n },\n onResize: function onResize() {\n var root = this.getRoot();\n if (root.scrollable) {\n var top = dom.getOffset(root.__ul).top;\n var h = 0;\n Common.each(root.__ul.childNodes, function (node) {\n if (!(root.autoPlace && node === root.__save_row)) {\n h += dom.getHeight(node);\n }\n });\n if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) {\n dom.addClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px';\n } else {\n dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = 'auto';\n }\n }\n if (root.__resize_handle) {\n Common.defer(function () {\n root.__resize_handle.style.height = root.__ul.offsetHeight + 'px';\n });\n }\n if (root.__closeButton) {\n root.__closeButton.style.width = root.width + 'px';\n }\n },\n onResizeDebounced: Common.debounce(function () {\n this.onResize();\n }, 50),\n remember: function remember() {\n if (Common.isUndefined(SAVE_DIALOGUE)) {\n SAVE_DIALOGUE = new CenteredDiv();\n SAVE_DIALOGUE.domElement.innerHTML = saveDialogContents;\n }\n if (this.parent) {\n throw new Error('You can only call remember on a top level GUI.');\n }\n var _this = this;\n Common.each(Array.prototype.slice.call(arguments), function (object) {\n if (_this.__rememberedObjects.length === 0) {\n addSaveMenu(_this);\n }\n if (_this.__rememberedObjects.indexOf(object) === -1) {\n _this.__rememberedObjects.push(object);\n }\n });\n if (this.autoPlace) {\n setWidth(this, this.width);\n }\n },\n getRoot: function getRoot() {\n var gui = this;\n while (gui.parent) {\n gui = gui.parent;\n }\n return gui;\n },\n getSaveObject: function getSaveObject() {\n var toReturn = this.load;\n toReturn.closed = this.closed;\n if (this.__rememberedObjects.length > 0) {\n toReturn.preset = this.preset;\n if (!toReturn.remembered) {\n toReturn.remembered = {};\n }\n toReturn.remembered[this.preset] = getCurrentPreset(this);\n }\n toReturn.folders = {};\n Common.each(this.__folders, function (element, key) {\n toReturn.folders[key] = element.getSaveObject();\n });\n return toReturn;\n },\n save: function save() {\n if (!this.load.remembered) {\n this.load.remembered = {};\n }\n this.load.remembered[this.preset] = getCurrentPreset(this);\n markPresetModified(this, false);\n this.saveToLocalStorageIfPossible();\n },\n saveAs: function saveAs(presetName) {\n if (!this.load.remembered) {\n this.load.remembered = {};\n this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true);\n }\n this.load.remembered[presetName] = getCurrentPreset(this);\n this.preset = presetName;\n addPresetOption(this, presetName, true);\n this.saveToLocalStorageIfPossible();\n },\n revert: function revert(gui) {\n Common.each(this.__controllers, function (controller) {\n if (!this.getRoot().load.remembered) {\n controller.setValue(controller.initialValue);\n } else {\n recallSavedValue(gui || this.getRoot(), controller);\n }\n if (controller.__onFinishChange) {\n controller.__onFinishChange.call(controller, controller.getValue());\n }\n }, this);\n Common.each(this.__folders, function (folder) {\n folder.revert(folder);\n });\n if (!gui) {\n markPresetModified(this.getRoot(), false);\n }\n },\n listen: function listen(controller) {\n var init = this.__listening.length === 0;\n this.__listening.push(controller);\n if (init) {\n updateDisplays(this.__listening);\n }\n },\n updateDisplay: function updateDisplay() {\n Common.each(this.__controllers, function (controller) {\n controller.updateDisplay();\n });\n Common.each(this.__folders, function (folder) {\n folder.updateDisplay();\n });\n }\n});\nfunction addRow(gui, newDom, liBefore) {\n var li = document.createElement('li');\n if (newDom) {\n li.appendChild(newDom);\n }\n if (liBefore) {\n gui.__ul.insertBefore(li, liBefore);\n } else {\n gui.__ul.appendChild(li);\n }\n gui.onResize();\n return li;\n}\nfunction removeListeners(gui) {\n dom.unbind(window, 'resize', gui.__resizeHandler);\n if (gui.saveToLocalStorageIfPossible) {\n dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible);\n }\n}\nfunction markPresetModified(gui, modified) {\n var opt = gui.__preset_select[gui.__preset_select.selectedIndex];\n if (modified) {\n opt.innerHTML = opt.value + '*';\n } else {\n opt.innerHTML = opt.value;\n }\n}\nfunction augmentController(gui, li, controller) {\n controller.__li = li;\n controller.__gui = gui;\n Common.extend(controller, {\n options: function options(_options) {\n if (arguments.length > 1) {\n var nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: nextSibling,\n factoryArgs: [Common.toArray(arguments)]\n });\n }\n if (Common.isArray(_options) || Common.isObject(_options)) {\n var _nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: _nextSibling,\n factoryArgs: [_options]\n });\n }\n },\n name: function name(_name) {\n controller.__li.firstElementChild.firstElementChild.innerHTML = _name;\n return controller;\n },\n listen: function listen() {\n controller.__gui.listen(controller);\n return controller;\n },\n remove: function remove() {\n controller.__gui.remove(controller);\n return controller;\n }\n });\n if (controller instanceof NumberControllerSlider) {\n var box = new NumberControllerBox(controller.object, controller.property, { min: controller.__min, max: controller.__max, step: controller.__step });\n Common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function (method) {\n var pc = controller[method];\n var pb = box[method];\n controller[method] = box[method] = function () {\n var args = Array.prototype.slice.call(arguments);\n pb.apply(box, args);\n return pc.apply(controller, args);\n };\n });\n dom.addClass(li, 'has-slider');\n controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild);\n } else if (controller instanceof NumberControllerBox) {\n var r = function r(returned) {\n if (Common.isNumber(controller.__min) && Common.isNumber(controller.__max)) {\n var oldName = controller.__li.firstElementChild.firstElementChild.innerHTML;\n var wasListening = controller.__gui.__listening.indexOf(controller) > -1;\n controller.remove();\n var newController = _add(gui, controller.object, controller.property, {\n before: controller.__li.nextElementSibling,\n factoryArgs: [controller.__min, controller.__max, controller.__step]\n });\n newController.name(oldName);\n if (wasListening) newController.listen();\n return newController;\n }\n return returned;\n };\n controller.min = Common.compose(r, controller.min);\n controller.max = Common.compose(r, controller.max);\n } else if (controller instanceof BooleanController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__checkbox, 'click');\n });\n dom.bind(controller.__checkbox, 'click', function (e) {\n e.stopPropagation();\n });\n } else if (controller instanceof FunctionController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__button, 'click');\n });\n dom.bind(li, 'mouseover', function () {\n dom.addClass(controller.__button, 'hover');\n });\n dom.bind(li, 'mouseout', function () {\n dom.removeClass(controller.__button, 'hover');\n });\n } else if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n controller.updateDisplay = Common.compose(function (val) {\n li.style.borderLeftColor = controller.__color.toString();\n return val;\n }, controller.updateDisplay);\n controller.updateDisplay();\n }\n controller.setValue = Common.compose(function (val) {\n if (gui.getRoot().__preset_select && controller.isModified()) {\n markPresetModified(gui.getRoot(), true);\n }\n return val;\n }, controller.setValue);\n}\nfunction recallSavedValue(gui, controller) {\n var root = gui.getRoot();\n var matchedIndex = root.__rememberedObjects.indexOf(controller.object);\n if (matchedIndex !== -1) {\n var controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex];\n if (controllerMap === undefined) {\n controllerMap = {};\n root.__rememberedObjectIndecesToControllers[matchedIndex] = controllerMap;\n }\n controllerMap[controller.property] = controller;\n if (root.load && root.load.remembered) {\n var presetMap = root.load.remembered;\n var preset = void 0;\n if (presetMap[gui.preset]) {\n preset = presetMap[gui.preset];\n } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) {\n preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME];\n } else {\n return;\n }\n if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) {\n var value = preset[matchedIndex][controller.property];\n controller.initialValue = value;\n controller.setValue(value);\n }\n }\n }\n}\nfunction _add(gui, object, property, params) {\n if (object[property] === undefined) {\n throw new Error('Object \"' + object + '\" has no property \"' + property + '\"');\n }\n var controller = void 0;\n if (params.color) {\n controller = new ColorController(object, property);\n } else {\n var factoryArgs = [object, property].concat(params.factoryArgs);\n controller = ControllerFactory.apply(gui, factoryArgs);\n }\n if (params.before instanceof Controller) {\n params.before = params.before.__li;\n }\n recallSavedValue(gui, controller);\n dom.addClass(controller.domElement, 'c');\n var name = document.createElement('span');\n dom.addClass(name, 'property-name');\n name.innerHTML = controller.property;\n var container = document.createElement('div');\n container.appendChild(name);\n container.appendChild(controller.domElement);\n var li = addRow(gui, container, params.before);\n dom.addClass(li, GUI.CLASS_CONTROLLER_ROW);\n if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n } else {\n dom.addClass(li, _typeof(controller.getValue()));\n }\n augmentController(gui, li, controller);\n gui.__controllers.push(controller);\n return controller;\n}\nfunction getLocalStorageHash(gui, key) {\n return document.location.href + '.' + key;\n}\nfunction addPresetOption(gui, name, setSelected) {\n var opt = document.createElement('option');\n opt.innerHTML = name;\n opt.value = name;\n gui.__preset_select.appendChild(opt);\n if (setSelected) {\n gui.__preset_select.selectedIndex = gui.__preset_select.length - 1;\n }\n}\nfunction showHideExplain(gui, explain) {\n explain.style.display = gui.useLocalStorage ? 'block' : 'none';\n}\nfunction addSaveMenu(gui) {\n var div = gui.__save_row = document.createElement('li');\n dom.addClass(gui.domElement, 'has-save');\n gui.__ul.insertBefore(div, gui.__ul.firstChild);\n dom.addClass(div, 'save-row');\n var gears = document.createElement('span');\n gears.innerHTML = ' ';\n dom.addClass(gears, 'button gears');\n var button = document.createElement('span');\n button.innerHTML = 'Save';\n dom.addClass(button, 'button');\n dom.addClass(button, 'save');\n var button2 = document.createElement('span');\n button2.innerHTML = 'New';\n dom.addClass(button2, 'button');\n dom.addClass(button2, 'save-as');\n var button3 = document.createElement('span');\n button3.innerHTML = 'Revert';\n dom.addClass(button3, 'button');\n dom.addClass(button3, 'revert');\n var select = gui.__preset_select = document.createElement('select');\n if (gui.load && gui.load.remembered) {\n Common.each(gui.load.remembered, function (value, key) {\n addPresetOption(gui, key, key === gui.preset);\n });\n } else {\n addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false);\n }\n dom.bind(select, 'change', function () {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n gui.__preset_select[index].innerHTML = gui.__preset_select[index].value;\n }\n gui.preset = this.value;\n });\n div.appendChild(select);\n div.appendChild(gears);\n div.appendChild(button);\n div.appendChild(button2);\n div.appendChild(button3);\n if (SUPPORTS_LOCAL_STORAGE) {\n var explain = document.getElementById('dg-local-explain');\n var localStorageCheckBox = document.getElementById('dg-local-storage');\n var saveLocally = document.getElementById('dg-save-locally');\n saveLocally.style.display = 'block';\n if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') {\n localStorageCheckBox.setAttribute('checked', 'checked');\n }\n showHideExplain(gui, explain);\n dom.bind(localStorageCheckBox, 'change', function () {\n gui.useLocalStorage = !gui.useLocalStorage;\n showHideExplain(gui, explain);\n });\n }\n var newConstructorTextArea = document.getElementById('dg-new-constructor');\n dom.bind(newConstructorTextArea, 'keydown', function (e) {\n if (e.metaKey && (e.which === 67 || e.keyCode === 67)) {\n SAVE_DIALOGUE.hide();\n }\n });\n dom.bind(gears, 'click', function () {\n newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2);\n SAVE_DIALOGUE.show();\n newConstructorTextArea.focus();\n newConstructorTextArea.select();\n });\n dom.bind(button, 'click', function () {\n gui.save();\n });\n dom.bind(button2, 'click', function () {\n var presetName = prompt('Enter a new preset name.');\n if (presetName) {\n gui.saveAs(presetName);\n }\n });\n dom.bind(button3, 'click', function () {\n gui.revert();\n });\n}\nfunction addResizeHandle(gui) {\n var pmouseX = void 0;\n gui.__resize_handle = document.createElement('div');\n Common.extend(gui.__resize_handle.style, {\n width: '6px',\n marginLeft: '-3px',\n height: '200px',\n cursor: 'ew-resize',\n position: 'absolute'\n });\n function drag(e) {\n e.preventDefault();\n gui.width += pmouseX - e.clientX;\n gui.onResize();\n pmouseX = e.clientX;\n return false;\n }\n function dragStop() {\n dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.unbind(window, 'mousemove', drag);\n dom.unbind(window, 'mouseup', dragStop);\n }\n function dragStart(e) {\n e.preventDefault();\n pmouseX = e.clientX;\n dom.addClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.bind(window, 'mousemove', drag);\n dom.bind(window, 'mouseup', dragStop);\n return false;\n }\n dom.bind(gui.__resize_handle, 'mousedown', dragStart);\n dom.bind(gui.__closeButton, 'mousedown', dragStart);\n gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild);\n}\nfunction setWidth(gui, w) {\n gui.domElement.style.width = w + 'px';\n if (gui.__save_row && gui.autoPlace) {\n gui.__save_row.style.width = w + 'px';\n }\n if (gui.__closeButton) {\n gui.__closeButton.style.width = w + 'px';\n }\n}\nfunction getCurrentPreset(gui, useInitialValues) {\n var toReturn = {};\n Common.each(gui.__rememberedObjects, function (val, index) {\n var savedValues = {};\n var controllerMap = gui.__rememberedObjectIndecesToControllers[index];\n Common.each(controllerMap, function (controller, property) {\n savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue();\n });\n toReturn[index] = savedValues;\n });\n return toReturn;\n}\nfunction setPresetSelectIndex(gui) {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n if (gui.__preset_select[index].value === gui.preset) {\n gui.__preset_select.selectedIndex = index;\n }\n }\n}\nfunction updateDisplays(controllerArray) {\n if (controllerArray.length !== 0) {\n requestAnimationFrame$1.call(window, function () {\n updateDisplays(controllerArray);\n });\n }\n Common.each(controllerArray, function (c) {\n c.updateDisplay();\n });\n}\n\nvar color = {\n Color: Color,\n math: ColorMath,\n interpret: interpret\n};\nvar controllers = {\n Controller: Controller,\n BooleanController: BooleanController,\n OptionController: OptionController,\n StringController: StringController,\n NumberController: NumberController,\n NumberControllerBox: NumberControllerBox,\n NumberControllerSlider: NumberControllerSlider,\n FunctionController: FunctionController,\n ColorController: ColorController\n};\nvar dom$1 = { dom: dom };\nvar gui = { GUI: GUI };\nvar GUI$1 = GUI;\nvar index = {\n color: color,\n controllers: controllers,\n dom: dom$1,\n gui: gui,\n GUI: GUI$1\n};\n\nexport { color, controllers, dom$1 as dom, gui, GUI$1 as GUI };\nexport default index;\n//# sourceMappingURL=dat.gui.module.js.map\n","/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar Stats = function () {\n\n\tvar mode = 0;\n\n\tvar container = document.createElement( 'div' );\n\tcontainer.style.cssText = 'position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000';\n\tcontainer.addEventListener( 'click', function ( event ) {\n\n\t\tevent.preventDefault();\n\t\tshowPanel( ++ mode % container.children.length );\n\n\t}, false );\n\n\t//\n\n\tfunction addPanel( panel ) {\n\n\t\tcontainer.appendChild( panel.dom );\n\t\treturn panel;\n\n\t}\n\n\tfunction showPanel( id ) {\n\n\t\tfor ( var i = 0; i < container.children.length; i ++ ) {\n\n\t\t\tcontainer.children[ i ].style.display = i === id ? 'block' : 'none';\n\n\t\t}\n\n\t\tmode = id;\n\n\t}\n\n\t//\n\n\tvar beginTime = ( performance || Date ).now(), prevTime = beginTime, frames = 0;\n\n\tvar fpsPanel = addPanel( new Stats.Panel( 'FPS', '#0ff', '#002' ) );\n\tvar msPanel = addPanel( new Stats.Panel( 'MS', '#0f0', '#020' ) );\n\n\tif ( self.performance && self.performance.memory ) {\n\n\t\tvar memPanel = addPanel( new Stats.Panel( 'MB', '#f08', '#201' ) );\n\n\t}\n\n\tshowPanel( 0 );\n\n\treturn {\n\n\t\tREVISION: 16,\n\n\t\tdom: container,\n\n\t\taddPanel: addPanel,\n\t\tshowPanel: showPanel,\n\n\t\tbegin: function () {\n\n\t\t\tbeginTime = ( performance || Date ).now();\n\n\t\t},\n\n\t\tend: function () {\n\n\t\t\tframes ++;\n\n\t\t\tvar time = ( performance || Date ).now();\n\n\t\t\tmsPanel.update( time - beginTime, 200 );\n\n\t\t\tif ( time >= prevTime + 1000 ) {\n\n\t\t\t\tfpsPanel.update( ( frames * 1000 ) / ( time - prevTime ), 100 );\n\n\t\t\t\tprevTime = time;\n\t\t\t\tframes = 0;\n\n\t\t\t\tif ( memPanel ) {\n\n\t\t\t\t\tvar memory = performance.memory;\n\t\t\t\t\tmemPanel.update( memory.usedJSHeapSize / 1048576, memory.jsHeapSizeLimit / 1048576 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn time;\n\n\t\t},\n\n\t\tupdate: function () {\n\n\t\t\tbeginTime = this.end();\n\n\t\t},\n\n\t\t// Backwards Compatibility\n\n\t\tdomElement: container,\n\t\tsetMode: showPanel\n\n\t};\n\n};\n\nStats.Panel = function ( name, fg, bg ) {\n\n\tvar min = Infinity, max = 0, round = Math.round;\n\tvar PR = round( window.devicePixelRatio || 1 );\n\n\tvar WIDTH = 80 * PR, HEIGHT = 48 * PR,\n\t\t\tTEXT_X = 3 * PR, TEXT_Y = 2 * PR,\n\t\t\tGRAPH_X = 3 * PR, GRAPH_Y = 15 * PR,\n\t\t\tGRAPH_WIDTH = 74 * PR, GRAPH_HEIGHT = 30 * PR;\n\n\tvar canvas = document.createElement( 'canvas' );\n\tcanvas.width = WIDTH;\n\tcanvas.height = HEIGHT;\n\tcanvas.style.cssText = 'width:80px;height:48px';\n\n\tvar context = canvas.getContext( '2d' );\n\tcontext.font = 'bold ' + ( 9 * PR ) + 'px Helvetica,Arial,sans-serif';\n\tcontext.textBaseline = 'top';\n\n\tcontext.fillStyle = bg;\n\tcontext.fillRect( 0, 0, WIDTH, HEIGHT );\n\n\tcontext.fillStyle = fg;\n\tcontext.fillText( name, TEXT_X, TEXT_Y );\n\tcontext.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );\n\n\tcontext.fillStyle = bg;\n\tcontext.globalAlpha = 0.9;\n\tcontext.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );\n\n\treturn {\n\n\t\tdom: canvas,\n\n\t\tupdate: function ( value, maxValue ) {\n\n\t\t\tmin = Math.min( min, value );\n\t\t\tmax = Math.max( max, value );\n\n\t\t\tcontext.fillStyle = bg;\n\t\t\tcontext.globalAlpha = 1;\n\t\t\tcontext.fillRect( 0, 0, WIDTH, GRAPH_Y );\n\t\t\tcontext.fillStyle = fg;\n\t\t\tcontext.fillText( round( value ) + ' ' + name + ' (' + round( min ) + '-' + round( max ) + ')', TEXT_X, TEXT_Y );\n\n\t\t\tcontext.drawImage( canvas, GRAPH_X + PR, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT, GRAPH_X, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT );\n\n\t\t\tcontext.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT );\n\n\t\t\tcontext.fillStyle = bg;\n\t\t\tcontext.globalAlpha = 0.9;\n\t\t\tcontext.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, round( ( 1 - ( value / maxValue ) ) * GRAPH_HEIGHT ) );\n\n\t\t}\n\n\t};\n\n};\n\nexport default Stats;\n","import type { GUI } from 'dat.gui';\nimport fullscreenTexturedQuad from '../../shaders/fullscreenTexturedQuad.wgsl';\n\ntype BindGroupBindingLayout =\n | GPUBufferBindingLayout\n | GPUTextureBindingLayout\n | GPUSamplerBindingLayout\n | GPUStorageTextureBindingLayout\n | GPUExternalTextureBindingLayout;\n\n// An object containing\n// 1. A generated Bind Group Layout\n// 2. An array of Bind Groups that accord to that layout\nexport type BindGroupCluster = {\n bindGroups: GPUBindGroup[];\n bindGroupLayout: GPUBindGroupLayout;\n};\n\ntype ResourceTypeName =\n | 'buffer'\n | 'texture'\n | 'sampler'\n | 'externalTexture'\n | 'storageTexture';\n\n/**\n * @param {number[]} bindings - The binding value of each resource in the bind group.\n * @param {number[]} visibilities - The GPUShaderStage visibility of the resource at the corresponding index.\n * @param {ResourceTypeName[]} resourceTypes - The resourceType at the corresponding index.\n * @returns {BindGroupsObjectsAndLayout} An object containing an array of bindGroups and the bindGroupLayout they implement.\n */\nexport const createBindGroupCluster = (\n bindings: number[],\n visibilities: number[],\n resourceTypes: ResourceTypeName[],\n resourceLayouts: BindGroupBindingLayout[],\n resources: GPUBindingResource[][],\n label: string,\n device: GPUDevice\n): BindGroupCluster => {\n const layoutEntries: GPUBindGroupLayoutEntry[] = [];\n for (let i = 0; i < bindings.length; i++) {\n layoutEntries.push({\n binding: bindings[i],\n visibility: visibilities[i % visibilities.length],\n [resourceTypes[i]]: resourceLayouts[i],\n });\n }\n\n const bindGroupLayout = device.createBindGroupLayout({\n label: `${label}.bindGroupLayout`,\n entries: layoutEntries,\n });\n\n const bindGroups: GPUBindGroup[] = [];\n //i represent the bindGroup index, j represents the binding index of the resource within the bindgroup\n //i=0, j=0 bindGroup: 0, binding: 0\n //i=1, j=1, bindGroup: 0, binding: 1\n //NOTE: not the same as @group(0) @binding(1) group index within the fragment shader is set within a pipeline\n for (let i = 0; i < resources.length; i++) {\n const groupEntries: GPUBindGroupEntry[] = [];\n for (let j = 0; j < resources[0].length; j++) {\n groupEntries.push({\n binding: j,\n resource: resources[i][j],\n });\n }\n const newBindGroup = device.createBindGroup({\n label: `${label}.bindGroup${i}`,\n layout: bindGroupLayout,\n entries: groupEntries,\n });\n bindGroups.push(newBindGroup);\n }\n\n return {\n bindGroups,\n bindGroupLayout,\n };\n};\n\nexport type ShaderKeyInterface = {\n [K in T[number]]: number;\n};\n\nexport type SampleInitParams = {\n canvas: HTMLCanvasElement;\n gui?: GUI;\n stats?: Stats;\n};\n\ninterface DeviceInitParms {\n device: GPUDevice;\n}\n\ninterface DeviceInit3DParams extends DeviceInitParms {\n context: GPUCanvasContext;\n presentationFormat: GPUTextureFormat;\n timestampQueryAvailable: boolean;\n}\n\ntype CallbackSync3D = (params: SampleInitParams & DeviceInit3DParams) => void;\ntype CallbackAsync3D = (\n params: SampleInitParams & DeviceInit3DParams\n) => Promise;\n\ntype SampleInitCallback3D = CallbackSync3D | CallbackAsync3D;\nexport type SampleInit = (params: SampleInitParams) => void;\n\nexport const SampleInitFactoryWebGPU = async (\n callback: SampleInitCallback3D\n): Promise => {\n const init = async ({ canvas, gui, stats }) => {\n const adapter = await navigator.gpu.requestAdapter();\n const timestampQueryAvailable = adapter.features.has('timestamp-query');\n let device: GPUDevice;\n if (timestampQueryAvailable) {\n device = await adapter.requestDevice({\n requiredFeatures: ['timestamp-query'],\n });\n } else {\n device = await adapter.requestDevice();\n }\n const context = canvas.getContext('webgpu') as GPUCanvasContext;\n const devicePixelRatio = window.devicePixelRatio;\n canvas.width = canvas.clientWidth * devicePixelRatio;\n canvas.height = canvas.clientHeight * devicePixelRatio;\n const presentationFormat = navigator.gpu.getPreferredCanvasFormat();\n context.configure({\n device,\n format: presentationFormat,\n alphaMode: 'premultiplied',\n });\n\n callback({\n canvas,\n gui,\n device,\n context,\n presentationFormat,\n stats,\n timestampQueryAvailable,\n });\n };\n return init;\n};\n\nexport abstract class Base2DRendererClass {\n abstract switchBindGroup(name: string): void;\n abstract startRun(\n commandEncoder: GPUCommandEncoder,\n ...args: unknown[]\n ): void;\n renderPassDescriptor: GPURenderPassDescriptor;\n pipeline: GPURenderPipeline;\n bindGroupMap: Record;\n currentBindGroup: GPUBindGroup;\n currentBindGroupName: string;\n\n executeRun(\n commandEncoder: GPUCommandEncoder,\n renderPassDescriptor: GPURenderPassDescriptor,\n pipeline: GPURenderPipeline,\n bindGroups: GPUBindGroup[]\n ) {\n const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);\n passEncoder.setPipeline(pipeline);\n for (let i = 0; i < bindGroups.length; i++) {\n passEncoder.setBindGroup(i, bindGroups[i]);\n }\n passEncoder.draw(6, 1, 0, 0);\n passEncoder.end();\n }\n\n setUniformArguments(\n device: GPUDevice,\n uniformBuffer: GPUBuffer,\n instance: T,\n keys: K\n ) {\n for (let i = 0; i < keys.length; i++) {\n device.queue.writeBuffer(\n uniformBuffer,\n i * 4,\n new Float32Array([instance[keys[i]]])\n );\n }\n }\n\n create2DRenderPipeline(\n device: GPUDevice,\n label: string,\n bgLayouts: GPUBindGroupLayout[],\n code: string,\n presentationFormat: GPUTextureFormat\n ) {\n return device.createRenderPipeline({\n label: `${label}.pipeline`,\n layout: device.createPipelineLayout({\n bindGroupLayouts: bgLayouts,\n }),\n vertex: {\n module: device.createShaderModule({\n code: fullscreenTexturedQuad,\n }),\n },\n fragment: {\n module: device.createShaderModule({\n code: code,\n }),\n targets: [\n {\n format: presentationFormat,\n },\n ],\n },\n primitive: {\n topology: 'triangle-list',\n cullMode: 'none',\n },\n });\n }\n}\n","import {\n BindGroupCluster,\n Base2DRendererClass,\n createBindGroupCluster,\n} from './utils';\n\nimport bitonicDisplay from './bitonicDisplay.frag.wgsl';\n\ninterface BitonicDisplayRenderArgs {\n highlight: number;\n}\n\nexport default class BitonicDisplayRenderer extends Base2DRendererClass {\n switchBindGroup: (name: string) => void;\n setArguments: (args: BitonicDisplayRenderArgs) => void;\n computeBGDescript: BindGroupCluster;\n\n constructor(\n device: GPUDevice,\n presentationFormat: GPUTextureFormat,\n renderPassDescriptor: GPURenderPassDescriptor,\n computeBGDescript: BindGroupCluster,\n label: string\n ) {\n super();\n this.renderPassDescriptor = renderPassDescriptor;\n this.computeBGDescript = computeBGDescript;\n\n const uniformBuffer = device.createBuffer({\n size: Uint32Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n\n const bgCluster = createBindGroupCluster(\n [0],\n [GPUShaderStage.FRAGMENT],\n ['buffer'],\n [{ type: 'uniform' }],\n [[{ buffer: uniformBuffer }]],\n label,\n device\n );\n\n this.currentBindGroup = bgCluster.bindGroups[0];\n\n this.pipeline = super.create2DRenderPipeline(\n device,\n label,\n [this.computeBGDescript.bindGroupLayout, bgCluster.bindGroupLayout],\n bitonicDisplay,\n presentationFormat\n );\n\n this.setArguments = (args: BitonicDisplayRenderArgs) => {\n device.queue.writeBuffer(\n uniformBuffer,\n 0,\n new Uint32Array([args.highlight])\n );\n };\n }\n\n startRun(commandEncoder: GPUCommandEncoder, args: BitonicDisplayRenderArgs) {\n this.setArguments(args);\n super.executeRun(commandEncoder, this.renderPassDescriptor, this.pipeline, [\n this.computeBGDescript.bindGroups[0],\n this.currentBindGroup,\n ]);\n }\n}\n","export const computeArgKeys = ['width', 'height', 'algo', 'blockHeight'];\n\nexport const NaiveBitonicCompute = (workgroupSize: number) => {\n if (workgroupSize % 2 !== 0 || workgroupSize > 256) {\n workgroupSize = 256;\n }\n // Ensure that workgroupSize is half the number of elements\n return `\n\nstruct Uniforms {\n width: f32,\n height: f32,\n algo: u32,\n blockHeight: u32,\n}\n\n// Create local workgroup data that can contain all elements\nvar local_data: array;\n\n// Define groups (functions refer to this data)\n@group(0) @binding(0) var input_data: array;\n@group(0) @binding(1) var output_data: array;\n@group(0) @binding(2) var uniforms: Uniforms;\n@group(0) @binding(3) var counter: atomic;\n\n// Compare and swap values in local_data\nfn local_compare_and_swap(idx_before: u32, idx_after: u32) {\n //idx_before should always be < idx_after\n if (local_data[idx_after] < local_data[idx_before]) {\n atomicAdd(&counter, 1);\n var temp: u32 = local_data[idx_before];\n local_data[idx_before] = local_data[idx_after];\n local_data[idx_after] = temp;\n }\n return;\n}\n\n// invoke_id goes from 0 to workgroupSize\nfn get_flip_indices(invoke_id: u32, block_height: u32) -> vec2 {\n // Caculate index offset (i.e move indices into correct block)\n let block_offset: u32 = ((2 * invoke_id) / block_height) * block_height;\n let half_height = block_height / 2;\n // Calculate index spacing\n var idx: vec2 = vec2(\n invoke_id % half_height, block_height - (invoke_id % half_height) - 1,\n );\n idx.x += block_offset;\n idx.y += block_offset;\n return idx;\n}\n\nfn get_disperse_indices(invoke_id: u32, block_height: u32) -> vec2 {\n var block_offset: u32 = ((2 * invoke_id) / block_height) * block_height;\n let half_height = block_height / 2;\n\tvar idx: vec2 = vec2(\n invoke_id % half_height, (invoke_id % half_height) + half_height\n );\n idx.x += block_offset;\n idx.y += block_offset;\n return idx;\n}\n\nfn global_compare_and_swap(idx_before: u32, idx_after: u32) {\n if (input_data[idx_after] < input_data[idx_before]) {\n output_data[idx_before] = input_data[idx_after];\n output_data[idx_after] = input_data[idx_before];\n } \n}\n\n// Constants/enum\nconst ALGO_NONE = 0;\nconst ALGO_LOCAL_FLIP = 1;\nconst ALGO_LOCAL_DISPERSE = 2;\nconst ALGO_GLOBAL_FLIP = 3;\n\n// Our compute shader will execute specified # of invocations or elements / 2 invocations\n@compute @workgroup_size(${workgroupSize}, 1, 1)\nfn computeMain(\n @builtin(global_invocation_id) global_id: vec3,\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3,\n) {\n\n let offset = ${workgroupSize} * 2 * workgroup_id.x;\n // If we will perform a local swap, then populate the local data\n if (uniforms.algo <= 2) {\n // Assign range of input_data to local_data.\n // Range cannot exceed maxWorkgroupsX * 2\n // Each invocation will populate the workgroup data... (1 invocation for every 2 elements)\n local_data[local_id.x * 2] = input_data[offset + local_id.x * 2];\n local_data[local_id.x * 2 + 1] = input_data[offset + local_id.x * 2 + 1];\n }\n\n //...and wait for each other to finish their own bit of data population.\n workgroupBarrier();\n\n switch uniforms.algo {\n case 1: { // Local Flip\n let idx = get_flip_indices(local_id.x, uniforms.blockHeight);\n local_compare_and_swap(idx.x, idx.y);\n } \n case 2: { // Local Disperse\n let idx = get_disperse_indices(local_id.x, uniforms.blockHeight);\n local_compare_and_swap(idx.x, idx.y);\n } \n case 3: { // Global Flip\n let idx = get_flip_indices(global_id.x, uniforms.blockHeight);\n global_compare_and_swap(idx.x, idx.y);\n }\n case 4: { \n let idx = get_disperse_indices(global_id.x, uniforms.blockHeight);\n global_compare_and_swap(idx.x, idx.y);\n }\n default: { \n \n }\n }\n\n // Ensure that all invocations have swapped their own regions of data\n workgroupBarrier();\n\n if (uniforms.algo <= ALGO_LOCAL_DISPERSE) {\n //Repopulate global data with local data\n output_data[offset + local_id.x * 2] = local_data[local_id.x * 2];\n output_data[offset + local_id.x * 2 + 1] = local_data[local_id.x * 2 + 1];\n }\n\n}`;\n};\n","import { GUI } from 'dat.gui';\nimport Stats from 'stats.js';\nimport { createBindGroupCluster, SampleInitFactoryWebGPU } from './utils';\nimport BitonicDisplayRenderer from './bitonicDisplay';\nimport { NaiveBitonicCompute } from './bitonicCompute';\nimport atomicToZero from './atomicToZero.wgsl';\n\n// Type of step that will be executed in our shader\nenum StepEnum {\n NONE,\n FLIP_LOCAL,\n DISPERSE_LOCAL,\n FLIP_GLOBAL,\n DISPERSE_GLOBAL,\n}\n\ntype StepType =\n // NONE: No sort step has or will occur\n | 'NONE'\n // FLIP_LOCAL: A sort step that performs a flip operation over indices in a workgroup's locally addressable area\n // (i.e invocations * workgroup_index -> invocations * (workgroup_index + 1) - 1.\n | 'FLIP_LOCAL'\n // DISPERSE_LOCAL A sort step that performs a flip operation over indices in a workgroup's locally addressable area.\n | 'DISPERSE_LOCAL'\n // FLIP_GLOBAL A sort step that performs a flip step across a range of indices outside a workgroup's locally addressable area.\n | 'FLIP_GLOBAL'\n // DISPERSE_GLOBAL A sort step that performs a disperse operation across a range of indices outside a workgroup's locally addressable area.\n | 'DISPERSE_GLOBAL';\n\ntype DisplayType = 'Elements' | 'Swap Highlight';\n\ninterface ConfigInfo {\n // Number of sorts executed under a given elements + size limit config\n sorts: number;\n // Total collective time taken to execute each complete sort under this config\n time: number;\n}\n\ninterface StringKeyToNumber {\n [key: string]: ConfigInfo;\n}\n\n// Gui settings object\ninterface SettingsInterface {\n 'Total Elements': number;\n 'Grid Width': number;\n 'Grid Height': number;\n 'Grid Dimensions': string;\n 'Workgroup Size': number;\n 'Size Limit': number;\n 'Workgroups Per Step': number;\n 'Hovered Cell': number;\n 'Swapped Cell': number;\n 'Current Step': string;\n 'Step Index': number;\n 'Total Steps': number;\n 'Prev Step': StepType;\n 'Next Step': StepType;\n 'Prev Swap Span': number;\n 'Next Swap Span': number;\n executeStep: boolean;\n 'Randomize Values': () => void;\n 'Execute Sort Step': () => void;\n 'Log Elements': () => void;\n 'Auto Sort': () => void;\n 'Auto Sort Speed': number;\n 'Display Mode': DisplayType;\n 'Total Swaps': number;\n stepTime: number;\n 'Step Time': string;\n sortTime: number;\n 'Sort Time': string;\n 'Average Sort Time': string;\n configToCompleteSwapsMap: StringKeyToNumber;\n configKey: string;\n}\n\nconst getNumSteps = (numElements: number) => {\n const n = Math.log2(numElements);\n return (n * (n + 1)) / 2;\n};\n\nSampleInitFactoryWebGPU(\n async ({\n device,\n gui,\n presentationFormat,\n context,\n canvas,\n timestampQueryAvailable,\n }) => {\n const maxInvocationsX = device.limits.maxComputeWorkgroupSizeX;\n\n let querySet: GPUQuerySet;\n let timestampQueryResolveBuffer: GPUBuffer;\n let timestampQueryResultBuffer: GPUBuffer;\n if (timestampQueryAvailable) {\n querySet = device.createQuerySet({ type: 'timestamp', count: 2 });\n timestampQueryResolveBuffer = device.createBuffer({\n // 2 timestamps * BigInt size for nanoseconds\n size: 2 * BigInt64Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC,\n });\n timestampQueryResultBuffer = device.createBuffer({\n // 2 timestamps * BigInt size for nanoseconds\n size: 2 * BigInt64Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n });\n }\n\n const totalElementOptions = [];\n const maxElements = maxInvocationsX * 32;\n for (let i = maxElements; i >= 4; i /= 2) {\n totalElementOptions.push(i);\n }\n\n const sizeLimitOptions: number[] = [];\n for (let i = maxInvocationsX; i >= 2; i /= 2) {\n sizeLimitOptions.push(i);\n }\n\n const defaultGridWidth =\n Math.sqrt(maxElements) % 2 === 0\n ? Math.floor(Math.sqrt(maxElements))\n : Math.floor(Math.sqrt(maxElements / 2));\n\n const defaultGridHeight = maxElements / defaultGridWidth;\n\n const settings: SettingsInterface = {\n // TOTAL ELEMENT AND GRID SETTINGS\n // The number of elements to be sorted. Must equal gridWidth * gridHeight || Workgroup Size * Workgroups * 2.\n // When changed, all relevant values within the settings object are reset to their defaults at the beginning of a sort with n elements.\n 'Total Elements': maxElements,\n // The width of the screen in cells.\n 'Grid Width': defaultGridWidth,\n // The height of the screen in cells.\n 'Grid Height': defaultGridHeight,\n // Grid Dimensions as string\n 'Grid Dimensions': `${defaultGridWidth}x${defaultGridHeight}`,\n\n // INVOCATION, WORKGROUP SIZE, AND WORKGROUP DISPATCH SETTINGS\n // The size of a workgroup, or the number of invocations executed within each workgroup\n // Determined algorithmically based on 'Size Limit', maxInvocationsX, and the current number of elements to sort\n 'Workgroup Size': maxInvocationsX,\n // An artifical constraint on the maximum workgroup size/maximumn invocations per workgroup as specified by device.limits.maxComputeWorkgroupSizeX\n 'Size Limit': maxInvocationsX,\n // Total workgroups that are dispatched during each step of the bitonic sort\n 'Workgroups Per Step': maxElements / (maxInvocationsX * 2),\n\n // HOVER SETTINGS\n // The element/cell in the element visualizer directly beneath the mouse cursor\n 'Hovered Cell': 0,\n // The element/cell in the element visualizer that the hovered cell will swap with in the next execution step of the bitonic sort.\n 'Swapped Cell': 1,\n\n // STEP INDEX, STEP TYPE, AND STEP SWAP SPAN SETTINGS\n // The index of the current step in the bitonic sort.\n 'Step Index': 0,\n // The total number of steps required to sort the displayed elements.\n 'Total Steps': getNumSteps(maxElements),\n // A string that condenses 'Step Index' and 'Total Steps' into a single GUI Controller display element.\n 'Current Step': `0 of 91`,\n // The category of the previously executed step. Always begins the bitonic sort with a value of 'NONE' and ends with a value of 'DISPERSE_LOCAL'\n 'Prev Step': 'NONE',\n // The category of the next step that will be executed. Always begins the bitonic sort with a value of 'FLIP_LOCAL' and ends with a value of 'NONE'\n 'Next Step': 'FLIP_LOCAL',\n // The maximum span of a swap operation in the sort's previous step.\n 'Prev Swap Span': 0,\n // The maximum span of a swap operation in the sort's upcoming step.\n 'Next Swap Span': 2,\n\n // ANIMATION LOOP AND FUNCTION SETTINGS\n // A flag that designates whether we will dispatch a workload this frame.\n executeStep: false,\n // A function that randomizes the values of each element.\n // When called, all relevant values within the settings object are reset to their defaults at the beginning of a sort with n elements.\n 'Randomize Values': () => {\n return;\n },\n // A function that manually executes a single step of the bitonic sort.\n 'Execute Sort Step': () => {\n return;\n },\n // A function that logs the values of each element as an array to the browser's console.\n 'Log Elements': () => {\n return;\n },\n // A function that automatically executes each step of the bitonic sort at an interval determined by 'Auto Sort Speed'\n 'Auto Sort': () => {\n return;\n },\n // The speed at which each step of the bitonic sort will be executed after 'Auto Sort' has been called.\n 'Auto Sort Speed': 50,\n\n // MISCELLANEOUS SETTINGS\n 'Display Mode': 'Elements',\n // An atomic value representing the total number of swap operations executed over the course of the bitonic sort.\n 'Total Swaps': 0,\n\n // TIMESTAMP SETTINGS\n // NOTE: Timestep values below all are calculated in terms of milliseconds rather than the nanoseconds a timestamp query set usually outputs.\n // Time taken to execute the previous step of the bitonic sort in milliseconds\n 'Step Time': '0ms',\n stepTime: 0,\n // Total taken to colletively execute each step of the complete bitonic sort, represented in milliseconds.\n 'Sort Time': '0ms',\n sortTime: 0,\n // Average time taken to complete a bitonic sort with the current combination of n 'Total Elements' and x 'Size Limit'\n 'Average Sort Time': '0ms',\n // A string to number map that maps a string representation of the current 'Total Elements' + 'Size Limit' configuration to a number\n // representing the total number of sorts that have been executed under that same configuration.\n configToCompleteSwapsMap: {\n '8192 256': {\n sorts: 0,\n time: 0,\n },\n },\n // Current key into configToCompleteSwapsMap\n configKey: '8192 256',\n };\n\n // Initialize initial elements array\n let elements = new Uint32Array(\n Array.from({ length: settings['Total Elements'] }, (_, i) => i)\n );\n\n // Initialize elementsBuffer and elementsStagingBuffer\n const elementsBufferSize =\n Float32Array.BYTES_PER_ELEMENT * totalElementOptions[0];\n // Initialize input, output, staging buffers\n const elementsInputBuffer = device.createBuffer({\n size: elementsBufferSize,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n });\n const elementsOutputBuffer = device.createBuffer({\n size: elementsBufferSize,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,\n });\n const elementsStagingBuffer = device.createBuffer({\n size: elementsBufferSize,\n usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n });\n\n // Initialize atomic swap buffer on GPU and CPU. Counts number of swaps actually performed by\n // compute shader (when value at index x is greater than value at index y)\n const atomicSwapsOutputBuffer = device.createBuffer({\n size: Uint32Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,\n });\n const atomicSwapsStagingBuffer = device.createBuffer({\n size: Uint32Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n });\n\n // Create uniform buffer for compute shader\n const computeUniformsBuffer = device.createBuffer({\n // width, height, blockHeight, algo\n size: Float32Array.BYTES_PER_ELEMENT * 4,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n\n const computeBGCluster = createBindGroupCluster(\n [0, 1, 2, 3],\n [\n GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT,\n GPUShaderStage.COMPUTE,\n GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT,\n GPUShaderStage.COMPUTE,\n ],\n ['buffer', 'buffer', 'buffer', 'buffer'],\n [\n { type: 'read-only-storage' },\n { type: 'storage' },\n { type: 'uniform' },\n { type: 'storage' },\n ],\n [\n [\n { buffer: elementsInputBuffer },\n { buffer: elementsOutputBuffer },\n { buffer: computeUniformsBuffer },\n { buffer: atomicSwapsOutputBuffer },\n ],\n ],\n 'BitonicSort',\n device\n );\n\n let computePipeline = device.createComputePipeline({\n layout: device.createPipelineLayout({\n bindGroupLayouts: [computeBGCluster.bindGroupLayout],\n }),\n compute: {\n module: device.createShaderModule({\n code: NaiveBitonicCompute(settings['Workgroup Size']),\n }),\n },\n });\n\n // Simple pipeline that zeros out an atomic value at group 0 binding 3\n const atomicToZeroComputePipeline = device.createComputePipeline({\n layout: device.createPipelineLayout({\n bindGroupLayouts: [computeBGCluster.bindGroupLayout],\n }),\n compute: {\n module: device.createShaderModule({\n code: atomicToZero,\n }),\n },\n });\n\n // Create bitonic debug renderer\n const renderPassDescriptor: GPURenderPassDescriptor = {\n colorAttachments: [\n {\n view: undefined, // Assigned later\n\n clearValue: { r: 0.1, g: 0.4, b: 0.5, a: 1.0 },\n loadOp: 'clear',\n storeOp: 'store',\n },\n ],\n };\n\n const bitonicDisplayRenderer = new BitonicDisplayRenderer(\n device,\n presentationFormat,\n renderPassDescriptor,\n computeBGCluster,\n 'BitonicDisplay'\n );\n\n const resetTimeInfo = () => {\n settings.stepTime = 0;\n settings.sortTime = 0;\n stepTimeController.setValue('0ms');\n sortTimeController.setValue(`0ms`);\n const nanCheck =\n settings.configToCompleteSwapsMap[settings.configKey].time /\n settings.configToCompleteSwapsMap[settings.configKey].sorts;\n const ast = nanCheck ? nanCheck : 0;\n averageSortTimeController.setValue(`${ast.toFixed(5)}ms`);\n };\n\n const resetExecutionInformation = () => {\n // The workgroup size is either elements / 2 or Size Limit\n workgroupSizeController.setValue(\n Math.min(settings['Total Elements'] / 2, settings['Size Limit'])\n );\n\n // Dispatch a workgroup for every (Size Limit * 2) elements\n const workgroupsPerStep =\n (settings['Total Elements'] - 1) / (settings['Size Limit'] * 2);\n\n workgroupsPerStepController.setValue(Math.ceil(workgroupsPerStep));\n\n // Reset step Index and number of steps based on elements size\n settings['Step Index'] = 0;\n settings['Total Steps'] = getNumSteps(settings['Total Elements']);\n currentStepController.setValue(\n `${settings['Step Index']} of ${settings['Total Steps']}`\n );\n\n // Get new width and height of screen display in cells\n const newCellWidth =\n Math.sqrt(settings['Total Elements']) % 2 === 0\n ? Math.floor(Math.sqrt(settings['Total Elements']))\n : Math.floor(Math.sqrt(settings['Total Elements'] / 2));\n const newCellHeight = settings['Total Elements'] / newCellWidth;\n settings['Grid Width'] = newCellWidth;\n settings['Grid Height'] = newCellHeight;\n gridDimensionsController.setValue(`${newCellWidth}x${newCellHeight}`);\n\n // Set prevStep to None (restart) and next step to FLIP\n prevStepController.setValue('NONE');\n nextStepController.setValue('FLIP_LOCAL');\n\n // Reset block heights\n prevBlockHeightController.setValue(0);\n nextBlockHeightController.setValue(2);\n\n // Reset Total Swaps by setting atomic value to 0\n const commandEncoder = device.createCommandEncoder();\n const computePassEncoder = commandEncoder.beginComputePass();\n computePassEncoder.setPipeline(atomicToZeroComputePipeline);\n computePassEncoder.setBindGroup(0, computeBGCluster.bindGroups[0]);\n computePassEncoder.dispatchWorkgroups(1);\n computePassEncoder.end();\n device.queue.submit([commandEncoder.finish()]);\n totalSwapsController.setValue(0);\n\n highestBlockHeight = 2;\n };\n\n const randomizeElementArray = () => {\n let currentIndex = elements.length;\n // While there are elements to shuffle\n while (currentIndex !== 0) {\n // Pick a remaining element\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n [elements[currentIndex], elements[randomIndex]] = [\n elements[randomIndex],\n elements[currentIndex],\n ];\n }\n };\n\n const resizeElementArray = () => {\n // Recreate elements array with new length\n elements = new Uint32Array(\n Array.from({ length: settings['Total Elements'] }, (_, i) => i)\n );\n\n resetExecutionInformation();\n\n // Create new shader invocation with workgroupSize that reflects number of invocations\n computePipeline = device.createComputePipeline({\n layout: device.createPipelineLayout({\n bindGroupLayouts: [computeBGCluster.bindGroupLayout],\n }),\n compute: {\n module: device.createShaderModule({\n code: NaiveBitonicCompute(\n Math.min(settings['Total Elements'] / 2, settings['Size Limit'])\n ),\n }),\n },\n });\n // Randomize array elements\n randomizeElementArray();\n highestBlockHeight = 2;\n };\n\n randomizeElementArray();\n\n const setSwappedCell = () => {\n let swappedIndex: number;\n switch (settings['Next Step']) {\n case 'FLIP_LOCAL':\n case 'FLIP_GLOBAL':\n {\n const blockHeight = settings['Next Swap Span'];\n const p2 = Math.floor(settings['Hovered Cell'] / blockHeight) + 1;\n const p3 = settings['Hovered Cell'] % blockHeight;\n swappedIndex = blockHeight * p2 - p3 - 1;\n swappedCellController.setValue(swappedIndex);\n }\n break;\n case 'DISPERSE_LOCAL':\n {\n const blockHeight = settings['Next Swap Span'];\n const halfHeight = blockHeight / 2;\n swappedIndex =\n settings['Hovered Cell'] % blockHeight < halfHeight\n ? settings['Hovered Cell'] + halfHeight\n : settings['Hovered Cell'] - halfHeight;\n swappedCellController.setValue(swappedIndex);\n }\n break;\n case 'NONE': {\n swappedIndex = settings['Hovered Cell'];\n swappedCellController.setValue(swappedIndex);\n }\n default:\n {\n swappedIndex = settings['Hovered Cell'];\n swappedCellController.setValue(swappedIndex);\n }\n break;\n }\n };\n\n let autoSortIntervalID: ReturnType | null = null;\n const endSortInterval = () => {\n if (autoSortIntervalID !== null) {\n clearInterval(autoSortIntervalID);\n autoSortIntervalID = null;\n }\n };\n const startSortInterval = () => {\n const currentIntervalSpeed = settings['Auto Sort Speed'];\n autoSortIntervalID = setInterval(() => {\n if (settings['Next Step'] === 'NONE') {\n clearInterval(autoSortIntervalID);\n autoSortIntervalID = null;\n sizeLimitController.domElement.style.pointerEvents = 'auto';\n }\n if (settings['Auto Sort Speed'] !== currentIntervalSpeed) {\n clearInterval(autoSortIntervalID);\n autoSortIntervalID = null;\n startSortInterval();\n }\n settings.executeStep = true;\n setSwappedCell();\n }, settings['Auto Sort Speed']);\n };\n\n // At top level, information about resources used to execute the compute shader\n // i.e elements sorted, invocations per workgroup, and workgroups dispatched\n const computeResourcesFolder = gui.addFolder('Compute Resources');\n computeResourcesFolder\n .add(settings, 'Total Elements', totalElementOptions)\n .onChange(() => {\n endSortInterval();\n resizeElementArray();\n sizeLimitController.domElement.style.pointerEvents = 'auto';\n // Create new config key for current element + size limit configuration\n const currConfigKey = `${settings['Total Elements']} ${settings['Size Limit']}`;\n // If configKey doesn't exist in the map, create it.\n if (!settings.configToCompleteSwapsMap[currConfigKey]) {\n settings.configToCompleteSwapsMap[currConfigKey] = {\n sorts: 0,\n time: 0,\n };\n }\n settings.configKey = currConfigKey;\n resetTimeInfo();\n });\n const sizeLimitController = computeResourcesFolder\n .add(settings, 'Size Limit', sizeLimitOptions)\n .onChange(() => {\n // Change total workgroups per step and size of a workgroup based on arbitrary constraint\n // imposed by size limit.\n const constraint = Math.min(\n settings['Total Elements'] / 2,\n settings['Size Limit']\n );\n const workgroupsPerStep =\n (settings['Total Elements'] - 1) / (settings['Size Limit'] * 2);\n workgroupSizeController.setValue(constraint);\n workgroupsPerStepController.setValue(Math.ceil(workgroupsPerStep));\n // Apply new compute resources values to the sort's compute pipeline\n computePipeline = computePipeline = device.createComputePipeline({\n layout: device.createPipelineLayout({\n bindGroupLayouts: [computeBGCluster.bindGroupLayout],\n }),\n compute: {\n module: device.createShaderModule({\n code: NaiveBitonicCompute(\n Math.min(settings['Total Elements'] / 2, settings['Size Limit'])\n ),\n }),\n },\n });\n // Create new config key for current element + size limit configuration\n const currConfigKey = `${settings['Total Elements']} ${settings['Size Limit']}`;\n // If configKey doesn't exist in the map, create it.\n if (!settings.configToCompleteSwapsMap[currConfigKey]) {\n settings.configToCompleteSwapsMap[currConfigKey] = {\n sorts: 0,\n time: 0,\n };\n }\n settings.configKey = currConfigKey;\n resetTimeInfo();\n });\n const workgroupSizeController = computeResourcesFolder.add(\n settings,\n 'Workgroup Size'\n );\n const workgroupsPerStepController = computeResourcesFolder.add(\n settings,\n 'Workgroups Per Step'\n );\n\n computeResourcesFolder.open();\n\n // Folder with functions that control the execution of the sort\n const controlFolder = gui.addFolder('Sort Controls');\n controlFolder.add(settings, 'Execute Sort Step').onChange(() => {\n // Size Limit locked upon sort\n sizeLimitController.domElement.style.pointerEvents = 'none';\n endSortInterval();\n settings.executeStep = true;\n });\n controlFolder.add(settings, 'Randomize Values').onChange(() => {\n endSortInterval();\n randomizeElementArray();\n resetExecutionInformation();\n resetTimeInfo();\n // Unlock workgroup size limit controller since sort has stopped\n sizeLimitController.domElement.style.pointerEvents = 'auto';\n });\n controlFolder\n .add(settings, 'Log Elements')\n .onChange(() => console.log(elements));\n controlFolder.add(settings, 'Auto Sort').onChange(() => {\n // Invocation Limit locked upon sort\n sizeLimitController.domElement.style.pointerEvents = 'none';\n startSortInterval();\n });\n controlFolder.add(settings, 'Auto Sort Speed', 50, 1000).step(50);\n controlFolder.open();\n\n // Information about grid display\n const gridFolder = gui.addFolder('Grid Information');\n gridFolder.add(settings, 'Display Mode', ['Elements', 'Swap Highlight']);\n const gridDimensionsController = gridFolder.add(\n settings,\n 'Grid Dimensions'\n );\n const hoveredCellController = gridFolder\n .add(settings, 'Hovered Cell')\n .onChange(setSwappedCell);\n const swappedCellController = gridFolder.add(settings, 'Swapped Cell');\n\n // Additional Information about the execution state of the sort\n const executionInformationFolder = gui.addFolder('Execution Information');\n const currentStepController = executionInformationFolder.add(\n settings,\n 'Current Step'\n );\n const prevStepController = executionInformationFolder.add(\n settings,\n 'Prev Step'\n );\n const nextStepController = executionInformationFolder.add(\n settings,\n 'Next Step'\n );\n const totalSwapsController = executionInformationFolder.add(\n settings,\n 'Total Swaps'\n );\n const prevBlockHeightController = executionInformationFolder.add(\n settings,\n 'Prev Swap Span'\n );\n const nextBlockHeightController = executionInformationFolder.add(\n settings,\n 'Next Swap Span'\n );\n\n // Timestamp information for Chrome 121+ or other compatible browsers\n const timestampFolder = gui.addFolder('Timestamp Info (Chrome 121+)');\n const stepTimeController = timestampFolder.add(settings, 'Step Time');\n const sortTimeController = timestampFolder.add(settings, 'Sort Time');\n const averageSortTimeController = timestampFolder.add(\n settings,\n 'Average Sort Time'\n );\n\n // Adjust styles of Function List Elements within GUI\n const liFunctionElements = document.getElementsByClassName('cr function');\n for (let i = 0; i < liFunctionElements.length; i++) {\n (liFunctionElements[i].children[0] as HTMLElement).style.display = 'flex';\n (liFunctionElements[i].children[0] as HTMLElement).style.justifyContent =\n 'center';\n (\n liFunctionElements[i].children[0].children[1] as HTMLElement\n ).style.position = 'absolute';\n }\n\n // Mouse listener that determines values of hoveredCell and swappedCell\n canvas.addEventListener('mousemove', (event) => {\n const currWidth = canvas.getBoundingClientRect().width;\n const currHeight = canvas.getBoundingClientRect().height;\n const cellSize: [number, number] = [\n currWidth / settings['Grid Width'],\n currHeight / settings['Grid Height'],\n ];\n const xIndex = Math.floor(event.offsetX / cellSize[0]);\n const yIndex =\n settings['Grid Height'] - 1 - Math.floor(event.offsetY / cellSize[1]);\n hoveredCellController.setValue(yIndex * settings['Grid Width'] + xIndex);\n settings['Hovered Cell'] = yIndex * settings['Grid Width'] + xIndex;\n });\n\n // Deactivate interaction with select GUI elements\n sizeLimitController.domElement.style.pointerEvents = 'none';\n workgroupsPerStepController.domElement.style.pointerEvents = 'none';\n hoveredCellController.domElement.style.pointerEvents = 'none';\n swappedCellController.domElement.style.pointerEvents = 'none';\n currentStepController.domElement.style.pointerEvents = 'none';\n prevStepController.domElement.style.pointerEvents = 'none';\n prevBlockHeightController.domElement.style.pointerEvents = 'none';\n nextStepController.domElement.style.pointerEvents = 'none';\n nextBlockHeightController.domElement.style.pointerEvents = 'none';\n workgroupSizeController.domElement.style.pointerEvents = 'none';\n gridDimensionsController.domElement.style.pointerEvents = 'none';\n totalSwapsController.domElement.style.pointerEvents = 'none';\n stepTimeController.domElement.style.pointerEvents = 'none';\n sortTimeController.domElement.style.pointerEvents = 'none';\n averageSortTimeController.domElement.style.pointerEvents = 'none';\n gui.width = 325;\n\n let highestBlockHeight = 2;\n\n startSortInterval();\n\n async function frame() {\n // Write elements buffer\n device.queue.writeBuffer(\n elementsInputBuffer,\n 0,\n elements.buffer,\n elements.byteOffset,\n elements.byteLength\n );\n\n const dims = new Float32Array([\n settings['Grid Width'],\n settings['Grid Height'],\n ]);\n const stepDetails = new Uint32Array([\n StepEnum[settings['Next Step']],\n settings['Next Swap Span'],\n ]);\n device.queue.writeBuffer(\n computeUniformsBuffer,\n 0,\n dims.buffer,\n dims.byteOffset,\n dims.byteLength\n );\n\n device.queue.writeBuffer(computeUniformsBuffer, 8, stepDetails);\n\n renderPassDescriptor.colorAttachments[0].view = context\n .getCurrentTexture()\n .createView();\n\n const commandEncoder = device.createCommandEncoder();\n bitonicDisplayRenderer.startRun(commandEncoder, {\n highlight: settings['Display Mode'] === 'Elements' ? 0 : 1,\n });\n if (\n settings.executeStep &&\n highestBlockHeight < settings['Total Elements'] * 2\n ) {\n let computePassEncoder: GPUComputePassEncoder;\n if (timestampQueryAvailable) {\n computePassEncoder = commandEncoder.beginComputePass({\n timestampWrites: {\n querySet,\n beginningOfPassWriteIndex: 0,\n endOfPassWriteIndex: 1,\n },\n });\n } else {\n computePassEncoder = commandEncoder.beginComputePass();\n }\n computePassEncoder.setPipeline(computePipeline);\n computePassEncoder.setBindGroup(0, computeBGCluster.bindGroups[0]);\n computePassEncoder.dispatchWorkgroups(settings['Workgroups Per Step']);\n computePassEncoder.end();\n // Resolve time passed in between beginning and end of computePass\n if (timestampQueryAvailable) {\n commandEncoder.resolveQuerySet(\n querySet,\n 0,\n 2,\n timestampQueryResolveBuffer,\n 0\n );\n commandEncoder.copyBufferToBuffer(\n timestampQueryResolveBuffer,\n 0,\n timestampQueryResultBuffer,\n 0,\n 2 * BigInt64Array.BYTES_PER_ELEMENT\n );\n }\n settings['Step Index'] = settings['Step Index'] + 1;\n currentStepController.setValue(\n `${settings['Step Index']} of ${settings['Total Steps']}`\n );\n prevStepController.setValue(settings['Next Step']);\n prevBlockHeightController.setValue(settings['Next Swap Span']);\n nextBlockHeightController.setValue(settings['Next Swap Span'] / 2);\n // Each cycle of a bitonic sort contains a flip operation followed by multiple disperse operations\n // Next Swap Span will equal one when the sort needs to begin a new cycle of flip and disperse operations\n if (settings['Next Swap Span'] === 1) {\n // The next cycle's flip operation will have a maximum swap span 2 times that of the previous cycle\n highestBlockHeight *= 2;\n if (highestBlockHeight === settings['Total Elements'] * 2) {\n // The next cycle's maximum swap span exceeds the total number of elements. Therefore, the sort is over.\n // Accordingly, there will be no next step.\n nextStepController.setValue('NONE');\n // And if there is no next step, then there are no swaps, and no block range within which two elements are swapped.\n nextBlockHeightController.setValue(0);\n // Finally, with our sort completed, we can increment the number of total completed sorts executed with n 'Total Elements'\n // and x 'Size Limit', which will allow us to calculate the average time of all sorts executed with this specific\n // configuration of compute resources\n settings.configToCompleteSwapsMap[settings.configKey].sorts += 1;\n } else if (highestBlockHeight > settings['Workgroup Size'] * 2) {\n // The next cycle's maximum swap span exceeds the range of a single workgroup, so our next flip will operate on global indices.\n nextStepController.setValue('FLIP_GLOBAL');\n nextBlockHeightController.setValue(highestBlockHeight);\n } else {\n // The next cycle's maximum swap span can be executed on a range of indices local to the workgroup.\n nextStepController.setValue('FLIP_LOCAL');\n nextBlockHeightController.setValue(highestBlockHeight);\n }\n } else {\n // Otherwise, execute the next disperse operation\n settings['Next Swap Span'] > settings['Workgroup Size'] * 2\n ? nextStepController.setValue('DISPERSE_GLOBAL')\n : nextStepController.setValue('DISPERSE_LOCAL');\n }\n\n // Copy GPU accessible buffers to CPU accessible buffers\n commandEncoder.copyBufferToBuffer(\n elementsOutputBuffer,\n 0,\n elementsStagingBuffer,\n 0,\n elementsBufferSize\n );\n\n commandEncoder.copyBufferToBuffer(\n atomicSwapsOutputBuffer,\n 0,\n atomicSwapsStagingBuffer,\n 0,\n Uint32Array.BYTES_PER_ELEMENT\n );\n }\n device.queue.submit([commandEncoder.finish()]);\n\n if (\n settings.executeStep &&\n highestBlockHeight < settings['Total Elements'] * 4\n ) {\n // Copy GPU element data to CPU\n await elementsStagingBuffer.mapAsync(\n GPUMapMode.READ,\n 0,\n elementsBufferSize\n );\n const copyElementsBuffer = elementsStagingBuffer.getMappedRange(\n 0,\n elementsBufferSize\n );\n // Copy atomic swaps data to CPU\n await atomicSwapsStagingBuffer.mapAsync(\n GPUMapMode.READ,\n 0,\n Uint32Array.BYTES_PER_ELEMENT\n );\n const copySwapsBuffer = atomicSwapsStagingBuffer.getMappedRange(\n 0,\n Uint32Array.BYTES_PER_ELEMENT\n );\n const elementsData = copyElementsBuffer.slice(\n 0,\n Uint32Array.BYTES_PER_ELEMENT * settings['Total Elements']\n );\n const swapsData = copySwapsBuffer.slice(\n 0,\n Uint32Array.BYTES_PER_ELEMENT\n );\n // Extract data\n const elementsOutput = new Uint32Array(elementsData);\n totalSwapsController.setValue(new Uint32Array(swapsData)[0]);\n elementsStagingBuffer.unmap();\n atomicSwapsStagingBuffer.unmap();\n // Elements output becomes elements input, swap accumulate\n elements = elementsOutput;\n setSwappedCell();\n\n // Handle timestamp query stuff\n if (timestampQueryAvailable) {\n // Copy timestamp query result buffer data to CPU\n await timestampQueryResultBuffer.mapAsync(\n GPUMapMode.READ,\n 0,\n 2 * BigInt64Array.BYTES_PER_ELEMENT\n );\n const copyTimestampResult = new BigInt64Array(\n timestampQueryResultBuffer.getMappedRange()\n );\n // Calculate new step, sort, and average sort times\n const newStepTime =\n Number(copyTimestampResult[1] - copyTimestampResult[0]) / 1000000;\n const newSortTime = settings.sortTime + newStepTime;\n // Apply calculated times to settings object as both number and 'ms' appended string\n settings.stepTime = newStepTime;\n settings.sortTime = newSortTime;\n stepTimeController.setValue(`${newStepTime.toFixed(5)}ms`);\n sortTimeController.setValue(`${newSortTime.toFixed(5)}ms`);\n // Calculate new average sort upon end of final execution step of a full bitonic sort.\n if (highestBlockHeight === settings['Total Elements'] * 2) {\n // Lock off access to this larger if block..not best architected solution but eh\n highestBlockHeight *= 2;\n settings.configToCompleteSwapsMap[settings.configKey].time +=\n newSortTime;\n const averageSortTime =\n settings.configToCompleteSwapsMap[settings.configKey].time /\n settings.configToCompleteSwapsMap[settings.configKey].sorts;\n averageSortTimeController.setValue(\n `${averageSortTime.toFixed(5)}ms`\n );\n }\n timestampQueryResultBuffer.unmap();\n // Get correct range of data from CPU copy of GPU Data\n }\n }\n settings.executeStep = false;\n requestAnimationFrame(frame);\n }\n requestAnimationFrame(frame);\n }\n).then((init) => {\n const canvas = document.querySelector('canvas') as HTMLCanvasElement;\n const stats = new Stats();\n const gui = new GUI();\n\n document.body.appendChild(stats.dom);\n\n init({ canvas, stats, gui });\n});\n"],"names":["requestAnimationFrame","requestAnimationFrame$1","GUI"],"mappings":"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","x_google_ignoreList":[0,1]} \ No newline at end of file +{"version":3,"file":"main.js","sources":["../../../node_modules/dat.gui/build/dat.gui.module.js","../../../node_modules/stats.js/build/stats.module.js","../../../../../sample/bitonicSort/utils.ts","../../../../../sample/bitonicSort/bitonicDisplay.ts","../../../../../sample/bitonicSort/bitonicCompute.ts","../../../../../sample/bitonicSort/main.ts"],"sourcesContent":["/**\n * dat-gui JavaScript Controller Library\n * https://github.com/dataarts/dat.gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction ___$insertStyle(css) {\n if (!css) {\n return;\n }\n if (typeof window === 'undefined') {\n return;\n }\n\n var style = document.createElement('style');\n\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n document.head.appendChild(style);\n\n return css;\n}\n\nfunction colorToString (color, forceCSSHex) {\n var colorFormat = color.__state.conversionName.toString();\n var r = Math.round(color.r);\n var g = Math.round(color.g);\n var b = Math.round(color.b);\n var a = color.a;\n var h = Math.round(color.h);\n var s = color.s.toFixed(1);\n var v = color.v.toFixed(1);\n if (forceCSSHex || colorFormat === 'THREE_CHAR_HEX' || colorFormat === 'SIX_CHAR_HEX') {\n var str = color.hex.toString(16);\n while (str.length < 6) {\n str = '0' + str;\n }\n return '#' + str;\n } else if (colorFormat === 'CSS_RGB') {\n return 'rgb(' + r + ',' + g + ',' + b + ')';\n } else if (colorFormat === 'CSS_RGBA') {\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n } else if (colorFormat === 'HEX') {\n return '0x' + color.hex.toString(16);\n } else if (colorFormat === 'RGB_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ']';\n } else if (colorFormat === 'RGBA_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ',' + a + ']';\n } else if (colorFormat === 'RGB_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + '}';\n } else if (colorFormat === 'RGBA_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}';\n } else if (colorFormat === 'HSV_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + '}';\n } else if (colorFormat === 'HSVA_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}';\n }\n return 'unknown format';\n}\n\nvar ARR_EACH = Array.prototype.forEach;\nvar ARR_SLICE = Array.prototype.slice;\nvar Common = {\n BREAK: {},\n extend: function extend(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (!this.isUndefined(obj[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n defaults: function defaults(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (this.isUndefined(target[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n compose: function compose() {\n var toCall = ARR_SLICE.call(arguments);\n return function () {\n var args = ARR_SLICE.call(arguments);\n for (var i = toCall.length - 1; i >= 0; i--) {\n args = [toCall[i].apply(this, args)];\n }\n return args[0];\n };\n },\n each: function each(obj, itr, scope) {\n if (!obj) {\n return;\n }\n if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) {\n obj.forEach(itr, scope);\n } else if (obj.length === obj.length + 0) {\n var key = void 0;\n var l = void 0;\n for (key = 0, l = obj.length; key < l; key++) {\n if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) {\n return;\n }\n }\n } else {\n for (var _key in obj) {\n if (itr.call(scope, obj[_key], _key) === this.BREAK) {\n return;\n }\n }\n }\n },\n defer: function defer(fnc) {\n setTimeout(fnc, 0);\n },\n debounce: function debounce(func, threshold, callImmediately) {\n var timeout = void 0;\n return function () {\n var obj = this;\n var args = arguments;\n function delayed() {\n timeout = null;\n if (!callImmediately) func.apply(obj, args);\n }\n var callNow = callImmediately || !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(delayed, threshold);\n if (callNow) {\n func.apply(obj, args);\n }\n };\n },\n toArray: function toArray(obj) {\n if (obj.toArray) return obj.toArray();\n return ARR_SLICE.call(obj);\n },\n isUndefined: function isUndefined(obj) {\n return obj === undefined;\n },\n isNull: function isNull(obj) {\n return obj === null;\n },\n isNaN: function (_isNaN) {\n function isNaN(_x) {\n return _isNaN.apply(this, arguments);\n }\n isNaN.toString = function () {\n return _isNaN.toString();\n };\n return isNaN;\n }(function (obj) {\n return isNaN(obj);\n }),\n isArray: Array.isArray || function (obj) {\n return obj.constructor === Array;\n },\n isObject: function isObject(obj) {\n return obj === Object(obj);\n },\n isNumber: function isNumber(obj) {\n return obj === obj + 0;\n },\n isString: function isString(obj) {\n return obj === obj + '';\n },\n isBoolean: function isBoolean(obj) {\n return obj === false || obj === true;\n },\n isFunction: function isFunction(obj) {\n return obj instanceof Function;\n }\n};\n\nvar INTERPRETATIONS = [\n{\n litmus: Common.isString,\n conversions: {\n THREE_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString() + test[1].toString() + test[2].toString() + test[2].toString() + test[3].toString() + test[3].toString(), 0)\n };\n },\n write: colorToString\n },\n SIX_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9]{6})$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString(), 0)\n };\n },\n write: colorToString\n },\n CSS_RGB: {\n read: function read(original) {\n var test = original.match(/^rgb\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3])\n };\n },\n write: colorToString\n },\n CSS_RGBA: {\n read: function read(original) {\n var test = original.match(/^rgba\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3]),\n a: parseFloat(test[4])\n };\n },\n write: colorToString\n }\n }\n},\n{\n litmus: Common.isNumber,\n conversions: {\n HEX: {\n read: function read(original) {\n return {\n space: 'HEX',\n hex: original,\n conversionName: 'HEX'\n };\n },\n write: function write(color) {\n return color.hex;\n }\n }\n }\n},\n{\n litmus: Common.isArray,\n conversions: {\n RGB_ARRAY: {\n read: function read(original) {\n if (original.length !== 3) {\n return false;\n }\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b];\n }\n },\n RGBA_ARRAY: {\n read: function read(original) {\n if (original.length !== 4) return false;\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2],\n a: original[3]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b, color.a];\n }\n }\n }\n},\n{\n litmus: Common.isObject,\n conversions: {\n RGBA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b) && Common.isNumber(original.a)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b,\n a: color.a\n };\n }\n },\n RGB_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b\n };\n }\n },\n HSVA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v) && Common.isNumber(original.a)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v,\n a: color.a\n };\n }\n },\n HSV_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v\n };\n }\n }\n }\n}];\nvar result = void 0;\nvar toReturn = void 0;\nvar interpret = function interpret() {\n toReturn = false;\n var original = arguments.length > 1 ? Common.toArray(arguments) : arguments[0];\n Common.each(INTERPRETATIONS, function (family) {\n if (family.litmus(original)) {\n Common.each(family.conversions, function (conversion, conversionName) {\n result = conversion.read(original);\n if (toReturn === false && result !== false) {\n toReturn = result;\n result.conversionName = conversionName;\n result.conversion = conversion;\n return Common.BREAK;\n }\n });\n return Common.BREAK;\n }\n });\n return toReturn;\n};\n\nvar tmpComponent = void 0;\nvar ColorMath = {\n hsv_to_rgb: function hsv_to_rgb(h, s, v) {\n var hi = Math.floor(h / 60) % 6;\n var f = h / 60 - Math.floor(h / 60);\n var p = v * (1.0 - s);\n var q = v * (1.0 - f * s);\n var t = v * (1.0 - (1.0 - f) * s);\n var c = [[v, t, p], [q, v, p], [p, v, t], [p, q, v], [t, p, v], [v, p, q]][hi];\n return {\n r: c[0] * 255,\n g: c[1] * 255,\n b: c[2] * 255\n };\n },\n rgb_to_hsv: function rgb_to_hsv(r, g, b) {\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var h = void 0;\n var s = void 0;\n if (max !== 0) {\n s = delta / max;\n } else {\n return {\n h: NaN,\n s: 0,\n v: 0\n };\n }\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h /= 6;\n if (h < 0) {\n h += 1;\n }\n return {\n h: h * 360,\n s: s,\n v: max / 255\n };\n },\n rgb_to_hex: function rgb_to_hex(r, g, b) {\n var hex = this.hex_with_component(0, 2, r);\n hex = this.hex_with_component(hex, 1, g);\n hex = this.hex_with_component(hex, 0, b);\n return hex;\n },\n component_from_hex: function component_from_hex(hex, componentIndex) {\n return hex >> componentIndex * 8 & 0xFF;\n },\n hex_with_component: function hex_with_component(hex, componentIndex, value) {\n return value << (tmpComponent = componentIndex * 8) | hex & ~(0xFF << tmpComponent);\n }\n};\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar Color = function () {\n function Color() {\n classCallCheck(this, Color);\n this.__state = interpret.apply(this, arguments);\n if (this.__state === false) {\n throw new Error('Failed to interpret color arguments');\n }\n this.__state.a = this.__state.a || 1;\n }\n createClass(Color, [{\n key: 'toString',\n value: function toString() {\n return colorToString(this);\n }\n }, {\n key: 'toHexString',\n value: function toHexString() {\n return colorToString(this, true);\n }\n }, {\n key: 'toOriginal',\n value: function toOriginal() {\n return this.__state.conversion.write(this);\n }\n }]);\n return Color;\n}();\nfunction defineRGBComponent(target, component, componentHexIndex) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'RGB') {\n return this.__state[component];\n }\n Color.recalculateRGB(this, component, componentHexIndex);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'RGB') {\n Color.recalculateRGB(this, component, componentHexIndex);\n this.__state.space = 'RGB';\n }\n this.__state[component] = v;\n }\n });\n}\nfunction defineHSVComponent(target, component) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'HSV') {\n return this.__state[component];\n }\n Color.recalculateHSV(this);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'HSV') {\n Color.recalculateHSV(this);\n this.__state.space = 'HSV';\n }\n this.__state[component] = v;\n }\n });\n}\nColor.recalculateRGB = function (color, component, componentHexIndex) {\n if (color.__state.space === 'HEX') {\n color.__state[component] = ColorMath.component_from_hex(color.__state.hex, componentHexIndex);\n } else if (color.__state.space === 'HSV') {\n Common.extend(color.__state, ColorMath.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v));\n } else {\n throw new Error('Corrupted color state');\n }\n};\nColor.recalculateHSV = function (color) {\n var result = ColorMath.rgb_to_hsv(color.r, color.g, color.b);\n Common.extend(color.__state, {\n s: result.s,\n v: result.v\n });\n if (!Common.isNaN(result.h)) {\n color.__state.h = result.h;\n } else if (Common.isUndefined(color.__state.h)) {\n color.__state.h = 0;\n }\n};\nColor.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a'];\ndefineRGBComponent(Color.prototype, 'r', 2);\ndefineRGBComponent(Color.prototype, 'g', 1);\ndefineRGBComponent(Color.prototype, 'b', 0);\ndefineHSVComponent(Color.prototype, 'h');\ndefineHSVComponent(Color.prototype, 's');\ndefineHSVComponent(Color.prototype, 'v');\nObject.defineProperty(Color.prototype, 'a', {\n get: function get$$1() {\n return this.__state.a;\n },\n set: function set$$1(v) {\n this.__state.a = v;\n }\n});\nObject.defineProperty(Color.prototype, 'hex', {\n get: function get$$1() {\n if (this.__state.space !== 'HEX') {\n this.__state.hex = ColorMath.rgb_to_hex(this.r, this.g, this.b);\n this.__state.space = 'HEX';\n }\n return this.__state.hex;\n },\n set: function set$$1(v) {\n this.__state.space = 'HEX';\n this.__state.hex = v;\n }\n});\n\nvar Controller = function () {\n function Controller(object, property) {\n classCallCheck(this, Controller);\n this.initialValue = object[property];\n this.domElement = document.createElement('div');\n this.object = object;\n this.property = property;\n this.__onChange = undefined;\n this.__onFinishChange = undefined;\n }\n createClass(Controller, [{\n key: 'onChange',\n value: function onChange(fnc) {\n this.__onChange = fnc;\n return this;\n }\n }, {\n key: 'onFinishChange',\n value: function onFinishChange(fnc) {\n this.__onFinishChange = fnc;\n return this;\n }\n }, {\n key: 'setValue',\n value: function setValue(newValue) {\n this.object[this.property] = newValue;\n if (this.__onChange) {\n this.__onChange.call(this, newValue);\n }\n this.updateDisplay();\n return this;\n }\n }, {\n key: 'getValue',\n value: function getValue() {\n return this.object[this.property];\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n return this;\n }\n }, {\n key: 'isModified',\n value: function isModified() {\n return this.initialValue !== this.getValue();\n }\n }]);\n return Controller;\n}();\n\nvar EVENT_MAP = {\n HTMLEvents: ['change'],\n MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'],\n KeyboardEvents: ['keydown']\n};\nvar EVENT_MAP_INV = {};\nCommon.each(EVENT_MAP, function (v, k) {\n Common.each(v, function (e) {\n EVENT_MAP_INV[e] = k;\n });\n});\nvar CSS_VALUE_PIXELS = /(\\d+(\\.\\d+)?)px/;\nfunction cssValueToPixels(val) {\n if (val === '0' || Common.isUndefined(val)) {\n return 0;\n }\n var match = val.match(CSS_VALUE_PIXELS);\n if (!Common.isNull(match)) {\n return parseFloat(match[1]);\n }\n return 0;\n}\nvar dom = {\n makeSelectable: function makeSelectable(elem, selectable) {\n if (elem === undefined || elem.style === undefined) return;\n elem.onselectstart = selectable ? function () {\n return false;\n } : function () {};\n elem.style.MozUserSelect = selectable ? 'auto' : 'none';\n elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none';\n elem.unselectable = selectable ? 'on' : 'off';\n },\n makeFullscreen: function makeFullscreen(elem, hor, vert) {\n var vertical = vert;\n var horizontal = hor;\n if (Common.isUndefined(horizontal)) {\n horizontal = true;\n }\n if (Common.isUndefined(vertical)) {\n vertical = true;\n }\n elem.style.position = 'absolute';\n if (horizontal) {\n elem.style.left = 0;\n elem.style.right = 0;\n }\n if (vertical) {\n elem.style.top = 0;\n elem.style.bottom = 0;\n }\n },\n fakeEvent: function fakeEvent(elem, eventType, pars, aux) {\n var params = pars || {};\n var className = EVENT_MAP_INV[eventType];\n if (!className) {\n throw new Error('Event type ' + eventType + ' not supported.');\n }\n var evt = document.createEvent(className);\n switch (className) {\n case 'MouseEvents':\n {\n var clientX = params.x || params.clientX || 0;\n var clientY = params.y || params.clientY || 0;\n evt.initMouseEvent(eventType, params.bubbles || false, params.cancelable || true, window, params.clickCount || 1, 0,\n 0,\n clientX,\n clientY,\n false, false, false, false, 0, null);\n break;\n }\n case 'KeyboardEvents':\n {\n var init = evt.initKeyboardEvent || evt.initKeyEvent;\n Common.defaults(params, {\n cancelable: true,\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n keyCode: undefined,\n charCode: undefined\n });\n init(eventType, params.bubbles || false, params.cancelable, window, params.ctrlKey, params.altKey, params.shiftKey, params.metaKey, params.keyCode, params.charCode);\n break;\n }\n default:\n {\n evt.initEvent(eventType, params.bubbles || false, params.cancelable || true);\n break;\n }\n }\n Common.defaults(evt, aux);\n elem.dispatchEvent(evt);\n },\n bind: function bind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.addEventListener) {\n elem.addEventListener(event, func, bool);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + event, func);\n }\n return dom;\n },\n unbind: function unbind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.removeEventListener) {\n elem.removeEventListener(event, func, bool);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + event, func);\n }\n return dom;\n },\n addClass: function addClass(elem, className) {\n if (elem.className === undefined) {\n elem.className = className;\n } else if (elem.className !== className) {\n var classes = elem.className.split(/ +/);\n if (classes.indexOf(className) === -1) {\n classes.push(className);\n elem.className = classes.join(' ').replace(/^\\s+/, '').replace(/\\s+$/, '');\n }\n }\n return dom;\n },\n removeClass: function removeClass(elem, className) {\n if (className) {\n if (elem.className === className) {\n elem.removeAttribute('class');\n } else {\n var classes = elem.className.split(/ +/);\n var index = classes.indexOf(className);\n if (index !== -1) {\n classes.splice(index, 1);\n elem.className = classes.join(' ');\n }\n }\n } else {\n elem.className = undefined;\n }\n return dom;\n },\n hasClass: function hasClass(elem, className) {\n return new RegExp('(?:^|\\\\s+)' + className + '(?:\\\\s+|$)').test(elem.className) || false;\n },\n getWidth: function getWidth(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-left-width']) + cssValueToPixels(style['border-right-width']) + cssValueToPixels(style['padding-left']) + cssValueToPixels(style['padding-right']) + cssValueToPixels(style.width);\n },\n getHeight: function getHeight(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-top-width']) + cssValueToPixels(style['border-bottom-width']) + cssValueToPixels(style['padding-top']) + cssValueToPixels(style['padding-bottom']) + cssValueToPixels(style.height);\n },\n getOffset: function getOffset(el) {\n var elem = el;\n var offset = { left: 0, top: 0 };\n if (elem.offsetParent) {\n do {\n offset.left += elem.offsetLeft;\n offset.top += elem.offsetTop;\n elem = elem.offsetParent;\n } while (elem);\n }\n return offset;\n },\n isActive: function isActive(elem) {\n return elem === document.activeElement && (elem.type || elem.href);\n }\n};\n\nvar BooleanController = function (_Controller) {\n inherits(BooleanController, _Controller);\n function BooleanController(object, property) {\n classCallCheck(this, BooleanController);\n var _this2 = possibleConstructorReturn(this, (BooleanController.__proto__ || Object.getPrototypeOf(BooleanController)).call(this, object, property));\n var _this = _this2;\n _this2.__prev = _this2.getValue();\n _this2.__checkbox = document.createElement('input');\n _this2.__checkbox.setAttribute('type', 'checkbox');\n function onChange() {\n _this.setValue(!_this.__prev);\n }\n dom.bind(_this2.__checkbox, 'change', onChange, false);\n _this2.domElement.appendChild(_this2.__checkbox);\n _this2.updateDisplay();\n return _this2;\n }\n createClass(BooleanController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n this.__prev = this.getValue();\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (this.getValue() === true) {\n this.__checkbox.setAttribute('checked', 'checked');\n this.__checkbox.checked = true;\n this.__prev = true;\n } else {\n this.__checkbox.checked = false;\n this.__prev = false;\n }\n return get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return BooleanController;\n}(Controller);\n\nvar OptionController = function (_Controller) {\n inherits(OptionController, _Controller);\n function OptionController(object, property, opts) {\n classCallCheck(this, OptionController);\n var _this2 = possibleConstructorReturn(this, (OptionController.__proto__ || Object.getPrototypeOf(OptionController)).call(this, object, property));\n var options = opts;\n var _this = _this2;\n _this2.__select = document.createElement('select');\n if (Common.isArray(options)) {\n var map = {};\n Common.each(options, function (element) {\n map[element] = element;\n });\n options = map;\n }\n Common.each(options, function (value, key) {\n var opt = document.createElement('option');\n opt.innerHTML = key;\n opt.setAttribute('value', value);\n _this.__select.appendChild(opt);\n });\n _this2.updateDisplay();\n dom.bind(_this2.__select, 'change', function () {\n var desiredValue = this.options[this.selectedIndex].value;\n _this.setValue(desiredValue);\n });\n _this2.domElement.appendChild(_this2.__select);\n return _this2;\n }\n createClass(OptionController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (dom.isActive(this.__select)) return this;\n this.__select.value = this.getValue();\n return get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return OptionController;\n}(Controller);\n\nvar StringController = function (_Controller) {\n inherits(StringController, _Controller);\n function StringController(object, property) {\n classCallCheck(this, StringController);\n var _this2 = possibleConstructorReturn(this, (StringController.__proto__ || Object.getPrototypeOf(StringController)).call(this, object, property));\n var _this = _this2;\n function onChange() {\n _this.setValue(_this.__input.value);\n }\n function onBlur() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'keyup', onChange);\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n this.blur();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(StringController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (!dom.isActive(this.__input)) {\n this.__input.value = this.getValue();\n }\n return get(StringController.prototype.__proto__ || Object.getPrototypeOf(StringController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return StringController;\n}(Controller);\n\nfunction numDecimals(x) {\n var _x = x.toString();\n if (_x.indexOf('.') > -1) {\n return _x.length - _x.indexOf('.') - 1;\n }\n return 0;\n}\nvar NumberController = function (_Controller) {\n inherits(NumberController, _Controller);\n function NumberController(object, property, params) {\n classCallCheck(this, NumberController);\n var _this = possibleConstructorReturn(this, (NumberController.__proto__ || Object.getPrototypeOf(NumberController)).call(this, object, property));\n var _params = params || {};\n _this.__min = _params.min;\n _this.__max = _params.max;\n _this.__step = _params.step;\n if (Common.isUndefined(_this.__step)) {\n if (_this.initialValue === 0) {\n _this.__impliedStep = 1;\n } else {\n _this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(_this.initialValue)) / Math.LN10)) / 10;\n }\n } else {\n _this.__impliedStep = _this.__step;\n }\n _this.__precision = numDecimals(_this.__impliedStep);\n return _this;\n }\n createClass(NumberController, [{\n key: 'setValue',\n value: function setValue(v) {\n var _v = v;\n if (this.__min !== undefined && _v < this.__min) {\n _v = this.__min;\n } else if (this.__max !== undefined && _v > this.__max) {\n _v = this.__max;\n }\n if (this.__step !== undefined && _v % this.__step !== 0) {\n _v = Math.round(_v / this.__step) * this.__step;\n }\n return get(NumberController.prototype.__proto__ || Object.getPrototypeOf(NumberController.prototype), 'setValue', this).call(this, _v);\n }\n }, {\n key: 'min',\n value: function min(minValue) {\n this.__min = minValue;\n return this;\n }\n }, {\n key: 'max',\n value: function max(maxValue) {\n this.__max = maxValue;\n return this;\n }\n }, {\n key: 'step',\n value: function step(stepValue) {\n this.__step = stepValue;\n this.__impliedStep = stepValue;\n this.__precision = numDecimals(stepValue);\n return this;\n }\n }]);\n return NumberController;\n}(Controller);\n\nfunction roundToDecimal(value, decimals) {\n var tenTo = Math.pow(10, decimals);\n return Math.round(value * tenTo) / tenTo;\n}\nvar NumberControllerBox = function (_NumberController) {\n inherits(NumberControllerBox, _NumberController);\n function NumberControllerBox(object, property, params) {\n classCallCheck(this, NumberControllerBox);\n var _this2 = possibleConstructorReturn(this, (NumberControllerBox.__proto__ || Object.getPrototypeOf(NumberControllerBox)).call(this, object, property, params));\n _this2.__truncationSuspended = false;\n var _this = _this2;\n var prevY = void 0;\n function onChange() {\n var attempted = parseFloat(_this.__input.value);\n if (!Common.isNaN(attempted)) {\n _this.setValue(attempted);\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onBlur() {\n onFinish();\n }\n function onMouseDrag(e) {\n var diff = prevY - e.clientY;\n _this.setValue(_this.getValue() + diff * _this.__impliedStep);\n prevY = e.clientY;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n onFinish();\n }\n function onMouseDown(e) {\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n prevY = e.clientY;\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'mousedown', onMouseDown);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n _this.__truncationSuspended = true;\n this.blur();\n _this.__truncationSuspended = false;\n onFinish();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(NumberControllerBox, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision);\n return get(NumberControllerBox.prototype.__proto__ || Object.getPrototypeOf(NumberControllerBox.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerBox;\n}(NumberController);\n\nfunction map(v, i1, i2, o1, o2) {\n return o1 + (o2 - o1) * ((v - i1) / (i2 - i1));\n}\nvar NumberControllerSlider = function (_NumberController) {\n inherits(NumberControllerSlider, _NumberController);\n function NumberControllerSlider(object, property, min, max, step) {\n classCallCheck(this, NumberControllerSlider);\n var _this2 = possibleConstructorReturn(this, (NumberControllerSlider.__proto__ || Object.getPrototypeOf(NumberControllerSlider)).call(this, object, property, { min: min, max: max, step: step }));\n var _this = _this2;\n _this2.__background = document.createElement('div');\n _this2.__foreground = document.createElement('div');\n dom.bind(_this2.__background, 'mousedown', onMouseDown);\n dom.bind(_this2.__background, 'touchstart', onTouchStart);\n dom.addClass(_this2.__background, 'slider');\n dom.addClass(_this2.__foreground, 'slider-fg');\n function onMouseDown(e) {\n document.activeElement.blur();\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n onMouseDrag(e);\n }\n function onMouseDrag(e) {\n e.preventDefault();\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n return false;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onTouchStart(e) {\n if (e.touches.length !== 1) {\n return;\n }\n dom.bind(window, 'touchmove', onTouchMove);\n dom.bind(window, 'touchend', onTouchEnd);\n onTouchMove(e);\n }\n function onTouchMove(e) {\n var clientX = e.touches[0].clientX;\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n }\n function onTouchEnd() {\n dom.unbind(window, 'touchmove', onTouchMove);\n dom.unbind(window, 'touchend', onTouchEnd);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.updateDisplay();\n _this2.__background.appendChild(_this2.__foreground);\n _this2.domElement.appendChild(_this2.__background);\n return _this2;\n }\n createClass(NumberControllerSlider, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var pct = (this.getValue() - this.__min) / (this.__max - this.__min);\n this.__foreground.style.width = pct * 100 + '%';\n return get(NumberControllerSlider.prototype.__proto__ || Object.getPrototypeOf(NumberControllerSlider.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerSlider;\n}(NumberController);\n\nvar FunctionController = function (_Controller) {\n inherits(FunctionController, _Controller);\n function FunctionController(object, property, text) {\n classCallCheck(this, FunctionController);\n var _this2 = possibleConstructorReturn(this, (FunctionController.__proto__ || Object.getPrototypeOf(FunctionController)).call(this, object, property));\n var _this = _this2;\n _this2.__button = document.createElement('div');\n _this2.__button.innerHTML = text === undefined ? 'Fire' : text;\n dom.bind(_this2.__button, 'click', function (e) {\n e.preventDefault();\n _this.fire();\n return false;\n });\n dom.addClass(_this2.__button, 'button');\n _this2.domElement.appendChild(_this2.__button);\n return _this2;\n }\n createClass(FunctionController, [{\n key: 'fire',\n value: function fire() {\n if (this.__onChange) {\n this.__onChange.call(this);\n }\n this.getValue().call(this.object);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n }\n }]);\n return FunctionController;\n}(Controller);\n\nvar ColorController = function (_Controller) {\n inherits(ColorController, _Controller);\n function ColorController(object, property) {\n classCallCheck(this, ColorController);\n var _this2 = possibleConstructorReturn(this, (ColorController.__proto__ || Object.getPrototypeOf(ColorController)).call(this, object, property));\n _this2.__color = new Color(_this2.getValue());\n _this2.__temp = new Color(0);\n var _this = _this2;\n _this2.domElement = document.createElement('div');\n dom.makeSelectable(_this2.domElement, false);\n _this2.__selector = document.createElement('div');\n _this2.__selector.className = 'selector';\n _this2.__saturation_field = document.createElement('div');\n _this2.__saturation_field.className = 'saturation-field';\n _this2.__field_knob = document.createElement('div');\n _this2.__field_knob.className = 'field-knob';\n _this2.__field_knob_border = '2px solid ';\n _this2.__hue_knob = document.createElement('div');\n _this2.__hue_knob.className = 'hue-knob';\n _this2.__hue_field = document.createElement('div');\n _this2.__hue_field.className = 'hue-field';\n _this2.__input = document.createElement('input');\n _this2.__input.type = 'text';\n _this2.__input_textShadow = '0 1px 1px ';\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n onBlur.call(this);\n }\n });\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__selector, 'mousedown', function () {\n dom.addClass(this, 'drag').bind(window, 'mouseup', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n dom.bind(_this2.__selector, 'touchstart', function () {\n dom.addClass(this, 'drag').bind(window, 'touchend', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n var valueField = document.createElement('div');\n Common.extend(_this2.__selector.style, {\n width: '122px',\n height: '102px',\n padding: '3px',\n backgroundColor: '#222',\n boxShadow: '0px 1px 3px rgba(0,0,0,0.3)'\n });\n Common.extend(_this2.__field_knob.style, {\n position: 'absolute',\n width: '12px',\n height: '12px',\n border: _this2.__field_knob_border + (_this2.__color.v < 0.5 ? '#fff' : '#000'),\n boxShadow: '0px 1px 3px rgba(0,0,0,0.5)',\n borderRadius: '12px',\n zIndex: 1\n });\n Common.extend(_this2.__hue_knob.style, {\n position: 'absolute',\n width: '15px',\n height: '2px',\n borderRight: '4px solid #fff',\n zIndex: 1\n });\n Common.extend(_this2.__saturation_field.style, {\n width: '100px',\n height: '100px',\n border: '1px solid #555',\n marginRight: '3px',\n display: 'inline-block',\n cursor: 'pointer'\n });\n Common.extend(valueField.style, {\n width: '100%',\n height: '100%',\n background: 'none'\n });\n linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000');\n Common.extend(_this2.__hue_field.style, {\n width: '15px',\n height: '100px',\n border: '1px solid #555',\n cursor: 'ns-resize',\n position: 'absolute',\n top: '3px',\n right: '3px'\n });\n hueGradient(_this2.__hue_field);\n Common.extend(_this2.__input.style, {\n outline: 'none',\n textAlign: 'center',\n color: '#fff',\n border: 0,\n fontWeight: 'bold',\n textShadow: _this2.__input_textShadow + 'rgba(0,0,0,0.7)'\n });\n dom.bind(_this2.__saturation_field, 'mousedown', fieldDown);\n dom.bind(_this2.__saturation_field, 'touchstart', fieldDown);\n dom.bind(_this2.__field_knob, 'mousedown', fieldDown);\n dom.bind(_this2.__field_knob, 'touchstart', fieldDown);\n dom.bind(_this2.__hue_field, 'mousedown', fieldDownH);\n dom.bind(_this2.__hue_field, 'touchstart', fieldDownH);\n function fieldDown(e) {\n setSV(e);\n dom.bind(window, 'mousemove', setSV);\n dom.bind(window, 'touchmove', setSV);\n dom.bind(window, 'mouseup', fieldUpSV);\n dom.bind(window, 'touchend', fieldUpSV);\n }\n function fieldDownH(e) {\n setH(e);\n dom.bind(window, 'mousemove', setH);\n dom.bind(window, 'touchmove', setH);\n dom.bind(window, 'mouseup', fieldUpH);\n dom.bind(window, 'touchend', fieldUpH);\n }\n function fieldUpSV() {\n dom.unbind(window, 'mousemove', setSV);\n dom.unbind(window, 'touchmove', setSV);\n dom.unbind(window, 'mouseup', fieldUpSV);\n dom.unbind(window, 'touchend', fieldUpSV);\n onFinish();\n }\n function fieldUpH() {\n dom.unbind(window, 'mousemove', setH);\n dom.unbind(window, 'touchmove', setH);\n dom.unbind(window, 'mouseup', fieldUpH);\n dom.unbind(window, 'touchend', fieldUpH);\n onFinish();\n }\n function onBlur() {\n var i = interpret(this.value);\n if (i !== false) {\n _this.__color.__state = i;\n _this.setValue(_this.__color.toOriginal());\n } else {\n this.value = _this.__color.toString();\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.__color.toOriginal());\n }\n }\n _this2.__saturation_field.appendChild(valueField);\n _this2.__selector.appendChild(_this2.__field_knob);\n _this2.__selector.appendChild(_this2.__saturation_field);\n _this2.__selector.appendChild(_this2.__hue_field);\n _this2.__hue_field.appendChild(_this2.__hue_knob);\n _this2.domElement.appendChild(_this2.__input);\n _this2.domElement.appendChild(_this2.__selector);\n _this2.updateDisplay();\n function setSV(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__saturation_field.getBoundingClientRect();\n var _ref = e.touches && e.touches[0] || e,\n clientX = _ref.clientX,\n clientY = _ref.clientY;\n var s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left);\n var v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (v > 1) {\n v = 1;\n } else if (v < 0) {\n v = 0;\n }\n if (s > 1) {\n s = 1;\n } else if (s < 0) {\n s = 0;\n }\n _this.__color.v = v;\n _this.__color.s = s;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n function setH(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__hue_field.getBoundingClientRect();\n var _ref2 = e.touches && e.touches[0] || e,\n clientY = _ref2.clientY;\n var h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (h > 1) {\n h = 1;\n } else if (h < 0) {\n h = 0;\n }\n _this.__color.h = h * 360;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n return _this2;\n }\n createClass(ColorController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var i = interpret(this.getValue());\n if (i !== false) {\n var mismatch = false;\n Common.each(Color.COMPONENTS, function (component) {\n if (!Common.isUndefined(i[component]) && !Common.isUndefined(this.__color.__state[component]) && i[component] !== this.__color.__state[component]) {\n mismatch = true;\n return {};\n }\n }, this);\n if (mismatch) {\n Common.extend(this.__color.__state, i);\n }\n }\n Common.extend(this.__temp.__state, this.__color.__state);\n this.__temp.a = 1;\n var flip = this.__color.v < 0.5 || this.__color.s > 0.5 ? 255 : 0;\n var _flip = 255 - flip;\n Common.extend(this.__field_knob.style, {\n marginLeft: 100 * this.__color.s - 7 + 'px',\n marginTop: 100 * (1 - this.__color.v) - 7 + 'px',\n backgroundColor: this.__temp.toHexString(),\n border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')'\n });\n this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px';\n this.__temp.s = 1;\n this.__temp.v = 1;\n linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString());\n this.__input.value = this.__color.toString();\n Common.extend(this.__input.style, {\n backgroundColor: this.__color.toHexString(),\n color: 'rgb(' + flip + ',' + flip + ',' + flip + ')',\n textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)'\n });\n }\n }]);\n return ColorController;\n}(Controller);\nvar vendors = ['-moz-', '-o-', '-webkit-', '-ms-', ''];\nfunction linearGradient(elem, x, a, b) {\n elem.style.background = '';\n Common.each(vendors, function (vendor) {\n elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); ';\n });\n}\nfunction hueGradient(elem) {\n elem.style.background = '';\n elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);';\n elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n}\n\nvar css = {\n load: function load(url, indoc) {\n var doc = indoc || document;\n var link = doc.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.href = url;\n doc.getElementsByTagName('head')[0].appendChild(link);\n },\n inject: function inject(cssContent, indoc) {\n var doc = indoc || document;\n var injected = document.createElement('style');\n injected.type = 'text/css';\n injected.innerHTML = cssContent;\n var head = doc.getElementsByTagName('head')[0];\n try {\n head.appendChild(injected);\n } catch (e) {\n }\n }\n};\n\nvar saveDialogContents = \"
\\n\\n Here's the new load parameter for your GUI's constructor:\\n\\n \\n\\n
\\n\\n Automatically save\\n values to localStorage on exit.\\n\\n
The values saved to localStorage will\\n override those passed to dat.GUI's constructor. This makes it\\n easier to work incrementally, but localStorage is fragile,\\n and your friends may not see the same values you do.\\n\\n
\\n\\n
\\n\\n
\";\n\nvar ControllerFactory = function ControllerFactory(object, property) {\n var initialValue = object[property];\n if (Common.isArray(arguments[2]) || Common.isObject(arguments[2])) {\n return new OptionController(object, property, arguments[2]);\n }\n if (Common.isNumber(initialValue)) {\n if (Common.isNumber(arguments[2]) && Common.isNumber(arguments[3])) {\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerSlider(object, property, arguments[2], arguments[3], arguments[4]);\n }\n return new NumberControllerSlider(object, property, arguments[2], arguments[3]);\n }\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3], step: arguments[4] });\n }\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] });\n }\n if (Common.isString(initialValue)) {\n return new StringController(object, property);\n }\n if (Common.isFunction(initialValue)) {\n return new FunctionController(object, property, '');\n }\n if (Common.isBoolean(initialValue)) {\n return new BooleanController(object, property);\n }\n return null;\n};\n\nfunction requestAnimationFrame(callback) {\n setTimeout(callback, 1000 / 60);\n}\nvar requestAnimationFrame$1 = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || requestAnimationFrame;\n\nvar CenteredDiv = function () {\n function CenteredDiv() {\n classCallCheck(this, CenteredDiv);\n this.backgroundElement = document.createElement('div');\n Common.extend(this.backgroundElement.style, {\n backgroundColor: 'rgba(0,0,0,0.8)',\n top: 0,\n left: 0,\n display: 'none',\n zIndex: '1000',\n opacity: 0,\n WebkitTransition: 'opacity 0.2s linear',\n transition: 'opacity 0.2s linear'\n });\n dom.makeFullscreen(this.backgroundElement);\n this.backgroundElement.style.position = 'fixed';\n this.domElement = document.createElement('div');\n Common.extend(this.domElement.style, {\n position: 'fixed',\n display: 'none',\n zIndex: '1001',\n opacity: 0,\n WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear',\n transition: 'transform 0.2s ease-out, opacity 0.2s linear'\n });\n document.body.appendChild(this.backgroundElement);\n document.body.appendChild(this.domElement);\n var _this = this;\n dom.bind(this.backgroundElement, 'click', function () {\n _this.hide();\n });\n }\n createClass(CenteredDiv, [{\n key: 'show',\n value: function show() {\n var _this = this;\n this.backgroundElement.style.display = 'block';\n this.domElement.style.display = 'block';\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n this.layout();\n Common.defer(function () {\n _this.backgroundElement.style.opacity = 1;\n _this.domElement.style.opacity = 1;\n _this.domElement.style.webkitTransform = 'scale(1)';\n });\n }\n }, {\n key: 'hide',\n value: function hide() {\n var _this = this;\n var hide = function hide() {\n _this.domElement.style.display = 'none';\n _this.backgroundElement.style.display = 'none';\n dom.unbind(_this.domElement, 'webkitTransitionEnd', hide);\n dom.unbind(_this.domElement, 'transitionend', hide);\n dom.unbind(_this.domElement, 'oTransitionEnd', hide);\n };\n dom.bind(this.domElement, 'webkitTransitionEnd', hide);\n dom.bind(this.domElement, 'transitionend', hide);\n dom.bind(this.domElement, 'oTransitionEnd', hide);\n this.backgroundElement.style.opacity = 0;\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n }\n }, {\n key: 'layout',\n value: function layout() {\n this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px';\n this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px';\n }\n }]);\n return CenteredDiv;\n}();\n\nvar styleSheet = ___$insertStyle(\".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .cr.function .property-name{width:100%}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\\n\");\n\ncss.inject(styleSheet);\nvar CSS_NAMESPACE = 'dg';\nvar HIDE_KEY_CODE = 72;\nvar CLOSE_BUTTON_HEIGHT = 20;\nvar DEFAULT_DEFAULT_PRESET_NAME = 'Default';\nvar SUPPORTS_LOCAL_STORAGE = function () {\n try {\n return !!window.localStorage;\n } catch (e) {\n return false;\n }\n}();\nvar SAVE_DIALOGUE = void 0;\nvar autoPlaceVirgin = true;\nvar autoPlaceContainer = void 0;\nvar hide = false;\nvar hideableGuis = [];\nvar GUI = function GUI(pars) {\n var _this = this;\n var params = pars || {};\n this.domElement = document.createElement('div');\n this.__ul = document.createElement('ul');\n this.domElement.appendChild(this.__ul);\n dom.addClass(this.domElement, CSS_NAMESPACE);\n this.__folders = {};\n this.__controllers = [];\n this.__rememberedObjects = [];\n this.__rememberedObjectIndecesToControllers = [];\n this.__listening = [];\n params = Common.defaults(params, {\n closeOnTop: false,\n autoPlace: true,\n width: GUI.DEFAULT_WIDTH\n });\n params = Common.defaults(params, {\n resizable: params.autoPlace,\n hideable: params.autoPlace\n });\n if (!Common.isUndefined(params.load)) {\n if (params.preset) {\n params.load.preset = params.preset;\n }\n } else {\n params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME };\n }\n if (Common.isUndefined(params.parent) && params.hideable) {\n hideableGuis.push(this);\n }\n params.resizable = Common.isUndefined(params.parent) && params.resizable;\n if (params.autoPlace && Common.isUndefined(params.scrollable)) {\n params.scrollable = true;\n }\n var useLocalStorage = SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true';\n var saveToLocalStorage = void 0;\n var titleRow = void 0;\n Object.defineProperties(this,\n {\n parent: {\n get: function get$$1() {\n return params.parent;\n }\n },\n scrollable: {\n get: function get$$1() {\n return params.scrollable;\n }\n },\n autoPlace: {\n get: function get$$1() {\n return params.autoPlace;\n }\n },\n closeOnTop: {\n get: function get$$1() {\n return params.closeOnTop;\n }\n },\n preset: {\n get: function get$$1() {\n if (_this.parent) {\n return _this.getRoot().preset;\n }\n return params.load.preset;\n },\n set: function set$$1(v) {\n if (_this.parent) {\n _this.getRoot().preset = v;\n } else {\n params.load.preset = v;\n }\n setPresetSelectIndex(this);\n _this.revert();\n }\n },\n width: {\n get: function get$$1() {\n return params.width;\n },\n set: function set$$1(v) {\n params.width = v;\n setWidth(_this, v);\n }\n },\n name: {\n get: function get$$1() {\n return params.name;\n },\n set: function set$$1(v) {\n params.name = v;\n if (titleRow) {\n titleRow.innerHTML = params.name;\n }\n }\n },\n closed: {\n get: function get$$1() {\n return params.closed;\n },\n set: function set$$1(v) {\n params.closed = v;\n if (params.closed) {\n dom.addClass(_this.__ul, GUI.CLASS_CLOSED);\n } else {\n dom.removeClass(_this.__ul, GUI.CLASS_CLOSED);\n }\n this.onResize();\n if (_this.__closeButton) {\n _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED;\n }\n }\n },\n load: {\n get: function get$$1() {\n return params.load;\n }\n },\n useLocalStorage: {\n get: function get$$1() {\n return useLocalStorage;\n },\n set: function set$$1(bool) {\n if (SUPPORTS_LOCAL_STORAGE) {\n useLocalStorage = bool;\n if (bool) {\n dom.bind(window, 'unload', saveToLocalStorage);\n } else {\n dom.unbind(window, 'unload', saveToLocalStorage);\n }\n localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool);\n }\n }\n }\n });\n if (Common.isUndefined(params.parent)) {\n this.closed = params.closed || false;\n dom.addClass(this.domElement, GUI.CLASS_MAIN);\n dom.makeSelectable(this.domElement, false);\n if (SUPPORTS_LOCAL_STORAGE) {\n if (useLocalStorage) {\n _this.useLocalStorage = true;\n var savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui'));\n if (savedGui) {\n params.load = JSON.parse(savedGui);\n }\n }\n }\n this.__closeButton = document.createElement('div');\n this.__closeButton.innerHTML = GUI.TEXT_CLOSED;\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON);\n if (params.closeOnTop) {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP);\n this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]);\n } else {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM);\n this.domElement.appendChild(this.__closeButton);\n }\n dom.bind(this.__closeButton, 'click', function () {\n _this.closed = !_this.closed;\n });\n } else {\n if (params.closed === undefined) {\n params.closed = true;\n }\n var titleRowName = document.createTextNode(params.name);\n dom.addClass(titleRowName, 'controller-name');\n titleRow = addRow(_this, titleRowName);\n var onClickTitle = function onClickTitle(e) {\n e.preventDefault();\n _this.closed = !_this.closed;\n return false;\n };\n dom.addClass(this.__ul, GUI.CLASS_CLOSED);\n dom.addClass(titleRow, 'title');\n dom.bind(titleRow, 'click', onClickTitle);\n if (!params.closed) {\n this.closed = false;\n }\n }\n if (params.autoPlace) {\n if (Common.isUndefined(params.parent)) {\n if (autoPlaceVirgin) {\n autoPlaceContainer = document.createElement('div');\n dom.addClass(autoPlaceContainer, CSS_NAMESPACE);\n dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER);\n document.body.appendChild(autoPlaceContainer);\n autoPlaceVirgin = false;\n }\n autoPlaceContainer.appendChild(this.domElement);\n dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE);\n }\n if (!this.parent) {\n setWidth(_this, params.width);\n }\n }\n this.__resizeHandler = function () {\n _this.onResizeDebounced();\n };\n dom.bind(window, 'resize', this.__resizeHandler);\n dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler);\n dom.bind(this.__ul, 'transitionend', this.__resizeHandler);\n dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler);\n this.onResize();\n if (params.resizable) {\n addResizeHandle(this);\n }\n saveToLocalStorage = function saveToLocalStorage() {\n if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') {\n localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject()));\n }\n };\n this.saveToLocalStorageIfPossible = saveToLocalStorage;\n function resetWidth() {\n var root = _this.getRoot();\n root.width += 1;\n Common.defer(function () {\n root.width -= 1;\n });\n }\n if (!params.parent) {\n resetWidth();\n }\n};\nGUI.toggleHide = function () {\n hide = !hide;\n Common.each(hideableGuis, function (gui) {\n gui.domElement.style.display = hide ? 'none' : '';\n });\n};\nGUI.CLASS_AUTO_PLACE = 'a';\nGUI.CLASS_AUTO_PLACE_CONTAINER = 'ac';\nGUI.CLASS_MAIN = 'main';\nGUI.CLASS_CONTROLLER_ROW = 'cr';\nGUI.CLASS_TOO_TALL = 'taller-than-window';\nGUI.CLASS_CLOSED = 'closed';\nGUI.CLASS_CLOSE_BUTTON = 'close-button';\nGUI.CLASS_CLOSE_TOP = 'close-top';\nGUI.CLASS_CLOSE_BOTTOM = 'close-bottom';\nGUI.CLASS_DRAG = 'drag';\nGUI.DEFAULT_WIDTH = 245;\nGUI.TEXT_CLOSED = 'Close Controls';\nGUI.TEXT_OPEN = 'Open Controls';\nGUI._keydownHandler = function (e) {\n if (document.activeElement.type !== 'text' && (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) {\n GUI.toggleHide();\n }\n};\ndom.bind(window, 'keydown', GUI._keydownHandler, false);\nCommon.extend(GUI.prototype,\n{\n add: function add(object, property) {\n return _add(this, object, property, {\n factoryArgs: Array.prototype.slice.call(arguments, 2)\n });\n },\n addColor: function addColor(object, property) {\n return _add(this, object, property, {\n color: true\n });\n },\n remove: function remove(controller) {\n this.__ul.removeChild(controller.__li);\n this.__controllers.splice(this.__controllers.indexOf(controller), 1);\n var _this = this;\n Common.defer(function () {\n _this.onResize();\n });\n },\n destroy: function destroy() {\n if (this.parent) {\n throw new Error('Only the root GUI should be removed with .destroy(). ' + 'For subfolders, use gui.removeFolder(folder) instead.');\n }\n if (this.autoPlace) {\n autoPlaceContainer.removeChild(this.domElement);\n }\n var _this = this;\n Common.each(this.__folders, function (subfolder) {\n _this.removeFolder(subfolder);\n });\n dom.unbind(window, 'keydown', GUI._keydownHandler, false);\n removeListeners(this);\n },\n addFolder: function addFolder(name) {\n if (this.__folders[name] !== undefined) {\n throw new Error('You already have a folder in this GUI by the' + ' name \"' + name + '\"');\n }\n var newGuiParams = { name: name, parent: this };\n newGuiParams.autoPlace = this.autoPlace;\n if (this.load &&\n this.load.folders &&\n this.load.folders[name]) {\n newGuiParams.closed = this.load.folders[name].closed;\n newGuiParams.load = this.load.folders[name];\n }\n var gui = new GUI(newGuiParams);\n this.__folders[name] = gui;\n var li = addRow(this, gui.domElement);\n dom.addClass(li, 'folder');\n return gui;\n },\n removeFolder: function removeFolder(folder) {\n this.__ul.removeChild(folder.domElement.parentElement);\n delete this.__folders[folder.name];\n if (this.load &&\n this.load.folders &&\n this.load.folders[folder.name]) {\n delete this.load.folders[folder.name];\n }\n removeListeners(folder);\n var _this = this;\n Common.each(folder.__folders, function (subfolder) {\n folder.removeFolder(subfolder);\n });\n Common.defer(function () {\n _this.onResize();\n });\n },\n open: function open() {\n this.closed = false;\n },\n close: function close() {\n this.closed = true;\n },\n hide: function hide() {\n this.domElement.style.display = 'none';\n },\n show: function show() {\n this.domElement.style.display = '';\n },\n onResize: function onResize() {\n var root = this.getRoot();\n if (root.scrollable) {\n var top = dom.getOffset(root.__ul).top;\n var h = 0;\n Common.each(root.__ul.childNodes, function (node) {\n if (!(root.autoPlace && node === root.__save_row)) {\n h += dom.getHeight(node);\n }\n });\n if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) {\n dom.addClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px';\n } else {\n dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = 'auto';\n }\n }\n if (root.__resize_handle) {\n Common.defer(function () {\n root.__resize_handle.style.height = root.__ul.offsetHeight + 'px';\n });\n }\n if (root.__closeButton) {\n root.__closeButton.style.width = root.width + 'px';\n }\n },\n onResizeDebounced: Common.debounce(function () {\n this.onResize();\n }, 50),\n remember: function remember() {\n if (Common.isUndefined(SAVE_DIALOGUE)) {\n SAVE_DIALOGUE = new CenteredDiv();\n SAVE_DIALOGUE.domElement.innerHTML = saveDialogContents;\n }\n if (this.parent) {\n throw new Error('You can only call remember on a top level GUI.');\n }\n var _this = this;\n Common.each(Array.prototype.slice.call(arguments), function (object) {\n if (_this.__rememberedObjects.length === 0) {\n addSaveMenu(_this);\n }\n if (_this.__rememberedObjects.indexOf(object) === -1) {\n _this.__rememberedObjects.push(object);\n }\n });\n if (this.autoPlace) {\n setWidth(this, this.width);\n }\n },\n getRoot: function getRoot() {\n var gui = this;\n while (gui.parent) {\n gui = gui.parent;\n }\n return gui;\n },\n getSaveObject: function getSaveObject() {\n var toReturn = this.load;\n toReturn.closed = this.closed;\n if (this.__rememberedObjects.length > 0) {\n toReturn.preset = this.preset;\n if (!toReturn.remembered) {\n toReturn.remembered = {};\n }\n toReturn.remembered[this.preset] = getCurrentPreset(this);\n }\n toReturn.folders = {};\n Common.each(this.__folders, function (element, key) {\n toReturn.folders[key] = element.getSaveObject();\n });\n return toReturn;\n },\n save: function save() {\n if (!this.load.remembered) {\n this.load.remembered = {};\n }\n this.load.remembered[this.preset] = getCurrentPreset(this);\n markPresetModified(this, false);\n this.saveToLocalStorageIfPossible();\n },\n saveAs: function saveAs(presetName) {\n if (!this.load.remembered) {\n this.load.remembered = {};\n this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true);\n }\n this.load.remembered[presetName] = getCurrentPreset(this);\n this.preset = presetName;\n addPresetOption(this, presetName, true);\n this.saveToLocalStorageIfPossible();\n },\n revert: function revert(gui) {\n Common.each(this.__controllers, function (controller) {\n if (!this.getRoot().load.remembered) {\n controller.setValue(controller.initialValue);\n } else {\n recallSavedValue(gui || this.getRoot(), controller);\n }\n if (controller.__onFinishChange) {\n controller.__onFinishChange.call(controller, controller.getValue());\n }\n }, this);\n Common.each(this.__folders, function (folder) {\n folder.revert(folder);\n });\n if (!gui) {\n markPresetModified(this.getRoot(), false);\n }\n },\n listen: function listen(controller) {\n var init = this.__listening.length === 0;\n this.__listening.push(controller);\n if (init) {\n updateDisplays(this.__listening);\n }\n },\n updateDisplay: function updateDisplay() {\n Common.each(this.__controllers, function (controller) {\n controller.updateDisplay();\n });\n Common.each(this.__folders, function (folder) {\n folder.updateDisplay();\n });\n }\n});\nfunction addRow(gui, newDom, liBefore) {\n var li = document.createElement('li');\n if (newDom) {\n li.appendChild(newDom);\n }\n if (liBefore) {\n gui.__ul.insertBefore(li, liBefore);\n } else {\n gui.__ul.appendChild(li);\n }\n gui.onResize();\n return li;\n}\nfunction removeListeners(gui) {\n dom.unbind(window, 'resize', gui.__resizeHandler);\n if (gui.saveToLocalStorageIfPossible) {\n dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible);\n }\n}\nfunction markPresetModified(gui, modified) {\n var opt = gui.__preset_select[gui.__preset_select.selectedIndex];\n if (modified) {\n opt.innerHTML = opt.value + '*';\n } else {\n opt.innerHTML = opt.value;\n }\n}\nfunction augmentController(gui, li, controller) {\n controller.__li = li;\n controller.__gui = gui;\n Common.extend(controller, {\n options: function options(_options) {\n if (arguments.length > 1) {\n var nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: nextSibling,\n factoryArgs: [Common.toArray(arguments)]\n });\n }\n if (Common.isArray(_options) || Common.isObject(_options)) {\n var _nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: _nextSibling,\n factoryArgs: [_options]\n });\n }\n },\n name: function name(_name) {\n controller.__li.firstElementChild.firstElementChild.innerHTML = _name;\n return controller;\n },\n listen: function listen() {\n controller.__gui.listen(controller);\n return controller;\n },\n remove: function remove() {\n controller.__gui.remove(controller);\n return controller;\n }\n });\n if (controller instanceof NumberControllerSlider) {\n var box = new NumberControllerBox(controller.object, controller.property, { min: controller.__min, max: controller.__max, step: controller.__step });\n Common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function (method) {\n var pc = controller[method];\n var pb = box[method];\n controller[method] = box[method] = function () {\n var args = Array.prototype.slice.call(arguments);\n pb.apply(box, args);\n return pc.apply(controller, args);\n };\n });\n dom.addClass(li, 'has-slider');\n controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild);\n } else if (controller instanceof NumberControllerBox) {\n var r = function r(returned) {\n if (Common.isNumber(controller.__min) && Common.isNumber(controller.__max)) {\n var oldName = controller.__li.firstElementChild.firstElementChild.innerHTML;\n var wasListening = controller.__gui.__listening.indexOf(controller) > -1;\n controller.remove();\n var newController = _add(gui, controller.object, controller.property, {\n before: controller.__li.nextElementSibling,\n factoryArgs: [controller.__min, controller.__max, controller.__step]\n });\n newController.name(oldName);\n if (wasListening) newController.listen();\n return newController;\n }\n return returned;\n };\n controller.min = Common.compose(r, controller.min);\n controller.max = Common.compose(r, controller.max);\n } else if (controller instanceof BooleanController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__checkbox, 'click');\n });\n dom.bind(controller.__checkbox, 'click', function (e) {\n e.stopPropagation();\n });\n } else if (controller instanceof FunctionController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__button, 'click');\n });\n dom.bind(li, 'mouseover', function () {\n dom.addClass(controller.__button, 'hover');\n });\n dom.bind(li, 'mouseout', function () {\n dom.removeClass(controller.__button, 'hover');\n });\n } else if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n controller.updateDisplay = Common.compose(function (val) {\n li.style.borderLeftColor = controller.__color.toString();\n return val;\n }, controller.updateDisplay);\n controller.updateDisplay();\n }\n controller.setValue = Common.compose(function (val) {\n if (gui.getRoot().__preset_select && controller.isModified()) {\n markPresetModified(gui.getRoot(), true);\n }\n return val;\n }, controller.setValue);\n}\nfunction recallSavedValue(gui, controller) {\n var root = gui.getRoot();\n var matchedIndex = root.__rememberedObjects.indexOf(controller.object);\n if (matchedIndex !== -1) {\n var controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex];\n if (controllerMap === undefined) {\n controllerMap = {};\n root.__rememberedObjectIndecesToControllers[matchedIndex] = controllerMap;\n }\n controllerMap[controller.property] = controller;\n if (root.load && root.load.remembered) {\n var presetMap = root.load.remembered;\n var preset = void 0;\n if (presetMap[gui.preset]) {\n preset = presetMap[gui.preset];\n } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) {\n preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME];\n } else {\n return;\n }\n if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) {\n var value = preset[matchedIndex][controller.property];\n controller.initialValue = value;\n controller.setValue(value);\n }\n }\n }\n}\nfunction _add(gui, object, property, params) {\n if (object[property] === undefined) {\n throw new Error('Object \"' + object + '\" has no property \"' + property + '\"');\n }\n var controller = void 0;\n if (params.color) {\n controller = new ColorController(object, property);\n } else {\n var factoryArgs = [object, property].concat(params.factoryArgs);\n controller = ControllerFactory.apply(gui, factoryArgs);\n }\n if (params.before instanceof Controller) {\n params.before = params.before.__li;\n }\n recallSavedValue(gui, controller);\n dom.addClass(controller.domElement, 'c');\n var name = document.createElement('span');\n dom.addClass(name, 'property-name');\n name.innerHTML = controller.property;\n var container = document.createElement('div');\n container.appendChild(name);\n container.appendChild(controller.domElement);\n var li = addRow(gui, container, params.before);\n dom.addClass(li, GUI.CLASS_CONTROLLER_ROW);\n if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n } else {\n dom.addClass(li, _typeof(controller.getValue()));\n }\n augmentController(gui, li, controller);\n gui.__controllers.push(controller);\n return controller;\n}\nfunction getLocalStorageHash(gui, key) {\n return document.location.href + '.' + key;\n}\nfunction addPresetOption(gui, name, setSelected) {\n var opt = document.createElement('option');\n opt.innerHTML = name;\n opt.value = name;\n gui.__preset_select.appendChild(opt);\n if (setSelected) {\n gui.__preset_select.selectedIndex = gui.__preset_select.length - 1;\n }\n}\nfunction showHideExplain(gui, explain) {\n explain.style.display = gui.useLocalStorage ? 'block' : 'none';\n}\nfunction addSaveMenu(gui) {\n var div = gui.__save_row = document.createElement('li');\n dom.addClass(gui.domElement, 'has-save');\n gui.__ul.insertBefore(div, gui.__ul.firstChild);\n dom.addClass(div, 'save-row');\n var gears = document.createElement('span');\n gears.innerHTML = ' ';\n dom.addClass(gears, 'button gears');\n var button = document.createElement('span');\n button.innerHTML = 'Save';\n dom.addClass(button, 'button');\n dom.addClass(button, 'save');\n var button2 = document.createElement('span');\n button2.innerHTML = 'New';\n dom.addClass(button2, 'button');\n dom.addClass(button2, 'save-as');\n var button3 = document.createElement('span');\n button3.innerHTML = 'Revert';\n dom.addClass(button3, 'button');\n dom.addClass(button3, 'revert');\n var select = gui.__preset_select = document.createElement('select');\n if (gui.load && gui.load.remembered) {\n Common.each(gui.load.remembered, function (value, key) {\n addPresetOption(gui, key, key === gui.preset);\n });\n } else {\n addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false);\n }\n dom.bind(select, 'change', function () {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n gui.__preset_select[index].innerHTML = gui.__preset_select[index].value;\n }\n gui.preset = this.value;\n });\n div.appendChild(select);\n div.appendChild(gears);\n div.appendChild(button);\n div.appendChild(button2);\n div.appendChild(button3);\n if (SUPPORTS_LOCAL_STORAGE) {\n var explain = document.getElementById('dg-local-explain');\n var localStorageCheckBox = document.getElementById('dg-local-storage');\n var saveLocally = document.getElementById('dg-save-locally');\n saveLocally.style.display = 'block';\n if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') {\n localStorageCheckBox.setAttribute('checked', 'checked');\n }\n showHideExplain(gui, explain);\n dom.bind(localStorageCheckBox, 'change', function () {\n gui.useLocalStorage = !gui.useLocalStorage;\n showHideExplain(gui, explain);\n });\n }\n var newConstructorTextArea = document.getElementById('dg-new-constructor');\n dom.bind(newConstructorTextArea, 'keydown', function (e) {\n if (e.metaKey && (e.which === 67 || e.keyCode === 67)) {\n SAVE_DIALOGUE.hide();\n }\n });\n dom.bind(gears, 'click', function () {\n newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2);\n SAVE_DIALOGUE.show();\n newConstructorTextArea.focus();\n newConstructorTextArea.select();\n });\n dom.bind(button, 'click', function () {\n gui.save();\n });\n dom.bind(button2, 'click', function () {\n var presetName = prompt('Enter a new preset name.');\n if (presetName) {\n gui.saveAs(presetName);\n }\n });\n dom.bind(button3, 'click', function () {\n gui.revert();\n });\n}\nfunction addResizeHandle(gui) {\n var pmouseX = void 0;\n gui.__resize_handle = document.createElement('div');\n Common.extend(gui.__resize_handle.style, {\n width: '6px',\n marginLeft: '-3px',\n height: '200px',\n cursor: 'ew-resize',\n position: 'absolute'\n });\n function drag(e) {\n e.preventDefault();\n gui.width += pmouseX - e.clientX;\n gui.onResize();\n pmouseX = e.clientX;\n return false;\n }\n function dragStop() {\n dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.unbind(window, 'mousemove', drag);\n dom.unbind(window, 'mouseup', dragStop);\n }\n function dragStart(e) {\n e.preventDefault();\n pmouseX = e.clientX;\n dom.addClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.bind(window, 'mousemove', drag);\n dom.bind(window, 'mouseup', dragStop);\n return false;\n }\n dom.bind(gui.__resize_handle, 'mousedown', dragStart);\n dom.bind(gui.__closeButton, 'mousedown', dragStart);\n gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild);\n}\nfunction setWidth(gui, w) {\n gui.domElement.style.width = w + 'px';\n if (gui.__save_row && gui.autoPlace) {\n gui.__save_row.style.width = w + 'px';\n }\n if (gui.__closeButton) {\n gui.__closeButton.style.width = w + 'px';\n }\n}\nfunction getCurrentPreset(gui, useInitialValues) {\n var toReturn = {};\n Common.each(gui.__rememberedObjects, function (val, index) {\n var savedValues = {};\n var controllerMap = gui.__rememberedObjectIndecesToControllers[index];\n Common.each(controllerMap, function (controller, property) {\n savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue();\n });\n toReturn[index] = savedValues;\n });\n return toReturn;\n}\nfunction setPresetSelectIndex(gui) {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n if (gui.__preset_select[index].value === gui.preset) {\n gui.__preset_select.selectedIndex = index;\n }\n }\n}\nfunction updateDisplays(controllerArray) {\n if (controllerArray.length !== 0) {\n requestAnimationFrame$1.call(window, function () {\n updateDisplays(controllerArray);\n });\n }\n Common.each(controllerArray, function (c) {\n c.updateDisplay();\n });\n}\n\nvar color = {\n Color: Color,\n math: ColorMath,\n interpret: interpret\n};\nvar controllers = {\n Controller: Controller,\n BooleanController: BooleanController,\n OptionController: OptionController,\n StringController: StringController,\n NumberController: NumberController,\n NumberControllerBox: NumberControllerBox,\n NumberControllerSlider: NumberControllerSlider,\n FunctionController: FunctionController,\n ColorController: ColorController\n};\nvar dom$1 = { dom: dom };\nvar gui = { GUI: GUI };\nvar GUI$1 = GUI;\nvar index = {\n color: color,\n controllers: controllers,\n dom: dom$1,\n gui: gui,\n GUI: GUI$1\n};\n\nexport { color, controllers, dom$1 as dom, gui, GUI$1 as GUI };\nexport default index;\n//# sourceMappingURL=dat.gui.module.js.map\n","/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar Stats = function () {\n\n\tvar mode = 0;\n\n\tvar container = document.createElement( 'div' );\n\tcontainer.style.cssText = 'position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000';\n\tcontainer.addEventListener( 'click', function ( event ) {\n\n\t\tevent.preventDefault();\n\t\tshowPanel( ++ mode % container.children.length );\n\n\t}, false );\n\n\t//\n\n\tfunction addPanel( panel ) {\n\n\t\tcontainer.appendChild( panel.dom );\n\t\treturn panel;\n\n\t}\n\n\tfunction showPanel( id ) {\n\n\t\tfor ( var i = 0; i < container.children.length; i ++ ) {\n\n\t\t\tcontainer.children[ i ].style.display = i === id ? 'block' : 'none';\n\n\t\t}\n\n\t\tmode = id;\n\n\t}\n\n\t//\n\n\tvar beginTime = ( performance || Date ).now(), prevTime = beginTime, frames = 0;\n\n\tvar fpsPanel = addPanel( new Stats.Panel( 'FPS', '#0ff', '#002' ) );\n\tvar msPanel = addPanel( new Stats.Panel( 'MS', '#0f0', '#020' ) );\n\n\tif ( self.performance && self.performance.memory ) {\n\n\t\tvar memPanel = addPanel( new Stats.Panel( 'MB', '#f08', '#201' ) );\n\n\t}\n\n\tshowPanel( 0 );\n\n\treturn {\n\n\t\tREVISION: 16,\n\n\t\tdom: container,\n\n\t\taddPanel: addPanel,\n\t\tshowPanel: showPanel,\n\n\t\tbegin: function () {\n\n\t\t\tbeginTime = ( performance || Date ).now();\n\n\t\t},\n\n\t\tend: function () {\n\n\t\t\tframes ++;\n\n\t\t\tvar time = ( performance || Date ).now();\n\n\t\t\tmsPanel.update( time - beginTime, 200 );\n\n\t\t\tif ( time >= prevTime + 1000 ) {\n\n\t\t\t\tfpsPanel.update( ( frames * 1000 ) / ( time - prevTime ), 100 );\n\n\t\t\t\tprevTime = time;\n\t\t\t\tframes = 0;\n\n\t\t\t\tif ( memPanel ) {\n\n\t\t\t\t\tvar memory = performance.memory;\n\t\t\t\t\tmemPanel.update( memory.usedJSHeapSize / 1048576, memory.jsHeapSizeLimit / 1048576 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn time;\n\n\t\t},\n\n\t\tupdate: function () {\n\n\t\t\tbeginTime = this.end();\n\n\t\t},\n\n\t\t// Backwards Compatibility\n\n\t\tdomElement: container,\n\t\tsetMode: showPanel\n\n\t};\n\n};\n\nStats.Panel = function ( name, fg, bg ) {\n\n\tvar min = Infinity, max = 0, round = Math.round;\n\tvar PR = round( window.devicePixelRatio || 1 );\n\n\tvar WIDTH = 80 * PR, HEIGHT = 48 * PR,\n\t\t\tTEXT_X = 3 * PR, TEXT_Y = 2 * PR,\n\t\t\tGRAPH_X = 3 * PR, GRAPH_Y = 15 * PR,\n\t\t\tGRAPH_WIDTH = 74 * PR, GRAPH_HEIGHT = 30 * PR;\n\n\tvar canvas = document.createElement( 'canvas' );\n\tcanvas.width = WIDTH;\n\tcanvas.height = HEIGHT;\n\tcanvas.style.cssText = 'width:80px;height:48px';\n\n\tvar context = canvas.getContext( '2d' );\n\tcontext.font = 'bold ' + ( 9 * PR ) + 'px Helvetica,Arial,sans-serif';\n\tcontext.textBaseline = 'top';\n\n\tcontext.fillStyle = bg;\n\tcontext.fillRect( 0, 0, WIDTH, HEIGHT );\n\n\tcontext.fillStyle = fg;\n\tcontext.fillText( name, TEXT_X, TEXT_Y );\n\tcontext.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );\n\n\tcontext.fillStyle = bg;\n\tcontext.globalAlpha = 0.9;\n\tcontext.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );\n\n\treturn {\n\n\t\tdom: canvas,\n\n\t\tupdate: function ( value, maxValue ) {\n\n\t\t\tmin = Math.min( min, value );\n\t\t\tmax = Math.max( max, value );\n\n\t\t\tcontext.fillStyle = bg;\n\t\t\tcontext.globalAlpha = 1;\n\t\t\tcontext.fillRect( 0, 0, WIDTH, GRAPH_Y );\n\t\t\tcontext.fillStyle = fg;\n\t\t\tcontext.fillText( round( value ) + ' ' + name + ' (' + round( min ) + '-' + round( max ) + ')', TEXT_X, TEXT_Y );\n\n\t\t\tcontext.drawImage( canvas, GRAPH_X + PR, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT, GRAPH_X, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT );\n\n\t\t\tcontext.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT );\n\n\t\t\tcontext.fillStyle = bg;\n\t\t\tcontext.globalAlpha = 0.9;\n\t\t\tcontext.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, round( ( 1 - ( value / maxValue ) ) * GRAPH_HEIGHT ) );\n\n\t\t}\n\n\t};\n\n};\n\nexport default Stats;\n","import type { GUI } from 'dat.gui';\nimport fullscreenTexturedQuad from '../../shaders/fullscreenTexturedQuad.wgsl';\n\ntype BindGroupBindingLayout =\n | GPUBufferBindingLayout\n | GPUTextureBindingLayout\n | GPUSamplerBindingLayout\n | GPUStorageTextureBindingLayout\n | GPUExternalTextureBindingLayout;\n\n// An object containing\n// 1. A generated Bind Group Layout\n// 2. An array of Bind Groups that accord to that layout\nexport type BindGroupCluster = {\n bindGroups: GPUBindGroup[];\n bindGroupLayout: GPUBindGroupLayout;\n};\n\ntype ResourceTypeName =\n | 'buffer'\n | 'texture'\n | 'sampler'\n | 'externalTexture'\n | 'storageTexture';\n\n/**\n * @param {number[]} bindings - The binding value of each resource in the bind group.\n * @param {number[]} visibilities - The GPUShaderStage visibility of the resource at the corresponding index.\n * @param {ResourceTypeName[]} resourceTypes - The resourceType at the corresponding index.\n * @returns {BindGroupsObjectsAndLayout} An object containing an array of bindGroups and the bindGroupLayout they implement.\n */\nexport const createBindGroupCluster = (\n bindings: number[],\n visibilities: number[],\n resourceTypes: ResourceTypeName[],\n resourceLayouts: BindGroupBindingLayout[],\n resources: GPUBindingResource[][],\n label: string,\n device: GPUDevice\n): BindGroupCluster => {\n const layoutEntries: GPUBindGroupLayoutEntry[] = [];\n for (let i = 0; i < bindings.length; i++) {\n layoutEntries.push({\n binding: bindings[i],\n visibility: visibilities[i % visibilities.length],\n [resourceTypes[i]]: resourceLayouts[i],\n });\n }\n\n const bindGroupLayout = device.createBindGroupLayout({\n label: `${label}.bindGroupLayout`,\n entries: layoutEntries,\n });\n\n const bindGroups: GPUBindGroup[] = [];\n //i represent the bindGroup index, j represents the binding index of the resource within the bindgroup\n //i=0, j=0 bindGroup: 0, binding: 0\n //i=1, j=1, bindGroup: 0, binding: 1\n //NOTE: not the same as @group(0) @binding(1) group index within the fragment shader is set within a pipeline\n for (let i = 0; i < resources.length; i++) {\n const groupEntries: GPUBindGroupEntry[] = [];\n for (let j = 0; j < resources[0].length; j++) {\n groupEntries.push({\n binding: j,\n resource: resources[i][j],\n });\n }\n const newBindGroup = device.createBindGroup({\n label: `${label}.bindGroup${i}`,\n layout: bindGroupLayout,\n entries: groupEntries,\n });\n bindGroups.push(newBindGroup);\n }\n\n return {\n bindGroups,\n bindGroupLayout,\n };\n};\n\nexport type ShaderKeyInterface = {\n [K in T[number]]: number;\n};\n\nexport type SampleInitParams = {\n canvas: HTMLCanvasElement;\n gui?: GUI;\n stats?: Stats;\n};\n\ninterface DeviceInitParms {\n device: GPUDevice;\n}\n\ninterface DeviceInit3DParams extends DeviceInitParms {\n context: GPUCanvasContext;\n presentationFormat: GPUTextureFormat;\n timestampQueryAvailable: boolean;\n}\n\ntype CallbackSync3D = (params: SampleInitParams & DeviceInit3DParams) => void;\ntype CallbackAsync3D = (\n params: SampleInitParams & DeviceInit3DParams\n) => Promise;\n\ntype SampleInitCallback3D = CallbackSync3D | CallbackAsync3D;\nexport type SampleInit = (params: SampleInitParams) => void;\n\nexport const SampleInitFactoryWebGPU = async (\n callback: SampleInitCallback3D\n): Promise => {\n const init = async ({ canvas, gui, stats }) => {\n const adapter = await navigator.gpu.requestAdapter();\n const timestampQueryAvailable = adapter.features.has('timestamp-query');\n let device: GPUDevice;\n if (timestampQueryAvailable) {\n device = await adapter.requestDevice({\n requiredFeatures: ['timestamp-query'],\n });\n } else {\n device = await adapter.requestDevice();\n }\n const context = canvas.getContext('webgpu') as GPUCanvasContext;\n const devicePixelRatio = window.devicePixelRatio;\n canvas.width = canvas.clientWidth * devicePixelRatio;\n canvas.height = canvas.clientHeight * devicePixelRatio;\n const presentationFormat = navigator.gpu.getPreferredCanvasFormat();\n context.configure({\n device,\n format: presentationFormat,\n alphaMode: 'premultiplied',\n });\n\n callback({\n canvas,\n gui,\n device,\n context,\n presentationFormat,\n stats,\n timestampQueryAvailable,\n });\n };\n return init;\n};\n\nexport abstract class Base2DRendererClass {\n abstract switchBindGroup(name: string): void;\n abstract startRun(\n commandEncoder: GPUCommandEncoder,\n ...args: unknown[]\n ): void;\n renderPassDescriptor: GPURenderPassDescriptor;\n pipeline: GPURenderPipeline;\n bindGroupMap: Record;\n currentBindGroup: GPUBindGroup;\n currentBindGroupName: string;\n\n executeRun(\n commandEncoder: GPUCommandEncoder,\n renderPassDescriptor: GPURenderPassDescriptor,\n pipeline: GPURenderPipeline,\n bindGroups: GPUBindGroup[]\n ) {\n const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);\n passEncoder.setPipeline(pipeline);\n for (let i = 0; i < bindGroups.length; i++) {\n passEncoder.setBindGroup(i, bindGroups[i]);\n }\n passEncoder.draw(6, 1, 0, 0);\n passEncoder.end();\n }\n\n setUniformArguments(\n device: GPUDevice,\n uniformBuffer: GPUBuffer,\n instance: T,\n keys: K\n ) {\n for (let i = 0; i < keys.length; i++) {\n device.queue.writeBuffer(\n uniformBuffer,\n i * 4,\n new Float32Array([instance[keys[i]]])\n );\n }\n }\n\n create2DRenderPipeline(\n device: GPUDevice,\n label: string,\n bgLayouts: GPUBindGroupLayout[],\n code: string,\n presentationFormat: GPUTextureFormat\n ) {\n return device.createRenderPipeline({\n label: `${label}.pipeline`,\n layout: device.createPipelineLayout({\n bindGroupLayouts: bgLayouts,\n }),\n vertex: {\n module: device.createShaderModule({\n code: fullscreenTexturedQuad,\n }),\n },\n fragment: {\n module: device.createShaderModule({\n code: code,\n }),\n targets: [\n {\n format: presentationFormat,\n },\n ],\n },\n primitive: {\n topology: 'triangle-list',\n cullMode: 'none',\n },\n });\n }\n}\n","import {\n BindGroupCluster,\n Base2DRendererClass,\n createBindGroupCluster,\n} from './utils';\n\nimport bitonicDisplay from './bitonicDisplay.frag.wgsl';\n\ninterface BitonicDisplayRenderArgs {\n highlight: number;\n}\n\nexport default class BitonicDisplayRenderer extends Base2DRendererClass {\n switchBindGroup: (name: string) => void;\n setArguments: (args: BitonicDisplayRenderArgs) => void;\n computeBGDescript: BindGroupCluster;\n\n constructor(\n device: GPUDevice,\n presentationFormat: GPUTextureFormat,\n renderPassDescriptor: GPURenderPassDescriptor,\n computeBGDescript: BindGroupCluster,\n label: string\n ) {\n super();\n this.renderPassDescriptor = renderPassDescriptor;\n this.computeBGDescript = computeBGDescript;\n\n const uniformBuffer = device.createBuffer({\n size: Uint32Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n\n const bgCluster = createBindGroupCluster(\n [0],\n [GPUShaderStage.FRAGMENT],\n ['buffer'],\n [{ type: 'uniform' }],\n [[{ buffer: uniformBuffer }]],\n label,\n device\n );\n\n this.currentBindGroup = bgCluster.bindGroups[0];\n\n this.pipeline = super.create2DRenderPipeline(\n device,\n label,\n [this.computeBGDescript.bindGroupLayout, bgCluster.bindGroupLayout],\n bitonicDisplay,\n presentationFormat\n );\n\n this.setArguments = (args: BitonicDisplayRenderArgs) => {\n device.queue.writeBuffer(\n uniformBuffer,\n 0,\n new Uint32Array([args.highlight])\n );\n };\n }\n\n startRun(commandEncoder: GPUCommandEncoder, args: BitonicDisplayRenderArgs) {\n this.setArguments(args);\n super.executeRun(commandEncoder, this.renderPassDescriptor, this.pipeline, [\n this.computeBGDescript.bindGroups[0],\n this.currentBindGroup,\n ]);\n }\n}\n","export const computeArgKeys = ['width', 'height', 'algo', 'blockHeight'];\n\nexport const NaiveBitonicCompute = (workgroupSize: number) => {\n if (workgroupSize % 2 !== 0 || workgroupSize > 256) {\n workgroupSize = 256;\n }\n // Ensure that workgroupSize is half the number of elements\n return `\n\nstruct Uniforms {\n width: f32,\n height: f32,\n algo: u32,\n blockHeight: u32,\n}\n\n// Create local workgroup data that can contain all elements\nvar local_data: array;\n\n// Define groups (functions refer to this data)\n@group(0) @binding(0) var input_data: array;\n@group(0) @binding(1) var output_data: array;\n@group(0) @binding(2) var uniforms: Uniforms;\n@group(0) @binding(3) var counter: atomic;\n\n// Compare and swap values in local_data\nfn local_compare_and_swap(idx_before: u32, idx_after: u32) {\n //idx_before should always be < idx_after\n if (local_data[idx_after] < local_data[idx_before]) {\n atomicAdd(&counter, 1);\n var temp: u32 = local_data[idx_before];\n local_data[idx_before] = local_data[idx_after];\n local_data[idx_after] = temp;\n }\n return;\n}\n\n// invoke_id goes from 0 to workgroupSize\nfn get_flip_indices(invoke_id: u32, block_height: u32) -> vec2u {\n // Caculate index offset (i.e move indices into correct block)\n let block_offset: u32 = ((2 * invoke_id) / block_height) * block_height;\n let half_height = block_height / 2;\n // Calculate index spacing\n var idx: vec2u = vec2u(\n invoke_id % half_height, block_height - (invoke_id % half_height) - 1,\n );\n idx.x += block_offset;\n idx.y += block_offset;\n return idx;\n}\n\nfn get_disperse_indices(invoke_id: u32, block_height: u32) -> vec2u {\n var block_offset: u32 = ((2 * invoke_id) / block_height) * block_height;\n let half_height = block_height / 2;\n\tvar idx: vec2u = vec2u(\n invoke_id % half_height, (invoke_id % half_height) + half_height\n );\n idx.x += block_offset;\n idx.y += block_offset;\n return idx;\n}\n\nfn global_compare_and_swap(idx_before: u32, idx_after: u32) {\n if (input_data[idx_after] < input_data[idx_before]) {\n output_data[idx_before] = input_data[idx_after];\n output_data[idx_after] = input_data[idx_before];\n } \n}\n\n// Constants/enum\nconst ALGO_NONE = 0;\nconst ALGO_LOCAL_FLIP = 1;\nconst ALGO_LOCAL_DISPERSE = 2;\nconst ALGO_GLOBAL_FLIP = 3;\n\n// Our compute shader will execute specified # of invocations or elements / 2 invocations\n@compute @workgroup_size(${workgroupSize}, 1, 1)\nfn computeMain(\n @builtin(global_invocation_id) global_id: vec3u,\n @builtin(local_invocation_id) local_id: vec3u,\n @builtin(workgroup_id) workgroup_id: vec3u,\n) {\n\n let offset = ${workgroupSize} * 2 * workgroup_id.x;\n // If we will perform a local swap, then populate the local data\n if (uniforms.algo <= 2) {\n // Assign range of input_data to local_data.\n // Range cannot exceed maxWorkgroupsX * 2\n // Each invocation will populate the workgroup data... (1 invocation for every 2 elements)\n local_data[local_id.x * 2] = input_data[offset + local_id.x * 2];\n local_data[local_id.x * 2 + 1] = input_data[offset + local_id.x * 2 + 1];\n }\n\n //...and wait for each other to finish their own bit of data population.\n workgroupBarrier();\n\n switch uniforms.algo {\n case 1: { // Local Flip\n let idx = get_flip_indices(local_id.x, uniforms.blockHeight);\n local_compare_and_swap(idx.x, idx.y);\n } \n case 2: { // Local Disperse\n let idx = get_disperse_indices(local_id.x, uniforms.blockHeight);\n local_compare_and_swap(idx.x, idx.y);\n } \n case 3: { // Global Flip\n let idx = get_flip_indices(global_id.x, uniforms.blockHeight);\n global_compare_and_swap(idx.x, idx.y);\n }\n case 4: { \n let idx = get_disperse_indices(global_id.x, uniforms.blockHeight);\n global_compare_and_swap(idx.x, idx.y);\n }\n default: { \n \n }\n }\n\n // Ensure that all invocations have swapped their own regions of data\n workgroupBarrier();\n\n if (uniforms.algo <= ALGO_LOCAL_DISPERSE) {\n //Repopulate global data with local data\n output_data[offset + local_id.x * 2] = local_data[local_id.x * 2];\n output_data[offset + local_id.x * 2 + 1] = local_data[local_id.x * 2 + 1];\n }\n\n}`;\n};\n","import { GUI } from 'dat.gui';\nimport Stats from 'stats.js';\nimport { createBindGroupCluster, SampleInitFactoryWebGPU } from './utils';\nimport BitonicDisplayRenderer from './bitonicDisplay';\nimport { NaiveBitonicCompute } from './bitonicCompute';\nimport atomicToZero from './atomicToZero.wgsl';\n\n// Type of step that will be executed in our shader\nenum StepEnum {\n NONE,\n FLIP_LOCAL,\n DISPERSE_LOCAL,\n FLIP_GLOBAL,\n DISPERSE_GLOBAL,\n}\n\ntype StepType =\n // NONE: No sort step has or will occur\n | 'NONE'\n // FLIP_LOCAL: A sort step that performs a flip operation over indices in a workgroup's locally addressable area\n // (i.e invocations * workgroup_index -> invocations * (workgroup_index + 1) - 1.\n | 'FLIP_LOCAL'\n // DISPERSE_LOCAL A sort step that performs a flip operation over indices in a workgroup's locally addressable area.\n | 'DISPERSE_LOCAL'\n // FLIP_GLOBAL A sort step that performs a flip step across a range of indices outside a workgroup's locally addressable area.\n | 'FLIP_GLOBAL'\n // DISPERSE_GLOBAL A sort step that performs a disperse operation across a range of indices outside a workgroup's locally addressable area.\n | 'DISPERSE_GLOBAL';\n\ntype DisplayType = 'Elements' | 'Swap Highlight';\n\ninterface ConfigInfo {\n // Number of sorts executed under a given elements + size limit config\n sorts: number;\n // Total collective time taken to execute each complete sort under this config\n time: number;\n}\n\ninterface StringKeyToNumber {\n [key: string]: ConfigInfo;\n}\n\n// Gui settings object\ninterface SettingsInterface {\n 'Total Elements': number;\n 'Grid Width': number;\n 'Grid Height': number;\n 'Grid Dimensions': string;\n 'Workgroup Size': number;\n 'Size Limit': number;\n 'Workgroups Per Step': number;\n 'Hovered Cell': number;\n 'Swapped Cell': number;\n 'Current Step': string;\n 'Step Index': number;\n 'Total Steps': number;\n 'Prev Step': StepType;\n 'Next Step': StepType;\n 'Prev Swap Span': number;\n 'Next Swap Span': number;\n executeStep: boolean;\n 'Randomize Values': () => void;\n 'Execute Sort Step': () => void;\n 'Log Elements': () => void;\n 'Auto Sort': () => void;\n 'Auto Sort Speed': number;\n 'Display Mode': DisplayType;\n 'Total Swaps': number;\n stepTime: number;\n 'Step Time': string;\n sortTime: number;\n 'Sort Time': string;\n 'Average Sort Time': string;\n configToCompleteSwapsMap: StringKeyToNumber;\n configKey: string;\n}\n\nconst getNumSteps = (numElements: number) => {\n const n = Math.log2(numElements);\n return (n * (n + 1)) / 2;\n};\n\nSampleInitFactoryWebGPU(\n async ({\n device,\n gui,\n presentationFormat,\n context,\n canvas,\n timestampQueryAvailable,\n }) => {\n const maxInvocationsX = device.limits.maxComputeWorkgroupSizeX;\n\n let querySet: GPUQuerySet;\n let timestampQueryResolveBuffer: GPUBuffer;\n let timestampQueryResultBuffer: GPUBuffer;\n if (timestampQueryAvailable) {\n querySet = device.createQuerySet({ type: 'timestamp', count: 2 });\n timestampQueryResolveBuffer = device.createBuffer({\n // 2 timestamps * BigInt size for nanoseconds\n size: 2 * BigInt64Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC,\n });\n timestampQueryResultBuffer = device.createBuffer({\n // 2 timestamps * BigInt size for nanoseconds\n size: 2 * BigInt64Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n });\n }\n\n const totalElementOptions = [];\n const maxElements = maxInvocationsX * 32;\n for (let i = maxElements; i >= 4; i /= 2) {\n totalElementOptions.push(i);\n }\n\n const sizeLimitOptions: number[] = [];\n for (let i = maxInvocationsX; i >= 2; i /= 2) {\n sizeLimitOptions.push(i);\n }\n\n const defaultGridWidth =\n Math.sqrt(maxElements) % 2 === 0\n ? Math.floor(Math.sqrt(maxElements))\n : Math.floor(Math.sqrt(maxElements / 2));\n\n const defaultGridHeight = maxElements / defaultGridWidth;\n\n const settings: SettingsInterface = {\n // TOTAL ELEMENT AND GRID SETTINGS\n // The number of elements to be sorted. Must equal gridWidth * gridHeight || Workgroup Size * Workgroups * 2.\n // When changed, all relevant values within the settings object are reset to their defaults at the beginning of a sort with n elements.\n 'Total Elements': maxElements,\n // The width of the screen in cells.\n 'Grid Width': defaultGridWidth,\n // The height of the screen in cells.\n 'Grid Height': defaultGridHeight,\n // Grid Dimensions as string\n 'Grid Dimensions': `${defaultGridWidth}x${defaultGridHeight}`,\n\n // INVOCATION, WORKGROUP SIZE, AND WORKGROUP DISPATCH SETTINGS\n // The size of a workgroup, or the number of invocations executed within each workgroup\n // Determined algorithmically based on 'Size Limit', maxInvocationsX, and the current number of elements to sort\n 'Workgroup Size': maxInvocationsX,\n // An artifical constraint on the maximum workgroup size/maximumn invocations per workgroup as specified by device.limits.maxComputeWorkgroupSizeX\n 'Size Limit': maxInvocationsX,\n // Total workgroups that are dispatched during each step of the bitonic sort\n 'Workgroups Per Step': maxElements / (maxInvocationsX * 2),\n\n // HOVER SETTINGS\n // The element/cell in the element visualizer directly beneath the mouse cursor\n 'Hovered Cell': 0,\n // The element/cell in the element visualizer that the hovered cell will swap with in the next execution step of the bitonic sort.\n 'Swapped Cell': 1,\n\n // STEP INDEX, STEP TYPE, AND STEP SWAP SPAN SETTINGS\n // The index of the current step in the bitonic sort.\n 'Step Index': 0,\n // The total number of steps required to sort the displayed elements.\n 'Total Steps': getNumSteps(maxElements),\n // A string that condenses 'Step Index' and 'Total Steps' into a single GUI Controller display element.\n 'Current Step': `0 of 91`,\n // The category of the previously executed step. Always begins the bitonic sort with a value of 'NONE' and ends with a value of 'DISPERSE_LOCAL'\n 'Prev Step': 'NONE',\n // The category of the next step that will be executed. Always begins the bitonic sort with a value of 'FLIP_LOCAL' and ends with a value of 'NONE'\n 'Next Step': 'FLIP_LOCAL',\n // The maximum span of a swap operation in the sort's previous step.\n 'Prev Swap Span': 0,\n // The maximum span of a swap operation in the sort's upcoming step.\n 'Next Swap Span': 2,\n\n // ANIMATION LOOP AND FUNCTION SETTINGS\n // A flag that designates whether we will dispatch a workload this frame.\n executeStep: false,\n // A function that randomizes the values of each element.\n // When called, all relevant values within the settings object are reset to their defaults at the beginning of a sort with n elements.\n 'Randomize Values': () => {\n return;\n },\n // A function that manually executes a single step of the bitonic sort.\n 'Execute Sort Step': () => {\n return;\n },\n // A function that logs the values of each element as an array to the browser's console.\n 'Log Elements': () => {\n return;\n },\n // A function that automatically executes each step of the bitonic sort at an interval determined by 'Auto Sort Speed'\n 'Auto Sort': () => {\n return;\n },\n // The speed at which each step of the bitonic sort will be executed after 'Auto Sort' has been called.\n 'Auto Sort Speed': 50,\n\n // MISCELLANEOUS SETTINGS\n 'Display Mode': 'Elements',\n // An atomic value representing the total number of swap operations executed over the course of the bitonic sort.\n 'Total Swaps': 0,\n\n // TIMESTAMP SETTINGS\n // NOTE: Timestep values below all are calculated in terms of milliseconds rather than the nanoseconds a timestamp query set usually outputs.\n // Time taken to execute the previous step of the bitonic sort in milliseconds\n 'Step Time': '0ms',\n stepTime: 0,\n // Total taken to colletively execute each step of the complete bitonic sort, represented in milliseconds.\n 'Sort Time': '0ms',\n sortTime: 0,\n // Average time taken to complete a bitonic sort with the current combination of n 'Total Elements' and x 'Size Limit'\n 'Average Sort Time': '0ms',\n // A string to number map that maps a string representation of the current 'Total Elements' + 'Size Limit' configuration to a number\n // representing the total number of sorts that have been executed under that same configuration.\n configToCompleteSwapsMap: {\n '8192 256': {\n sorts: 0,\n time: 0,\n },\n },\n // Current key into configToCompleteSwapsMap\n configKey: '8192 256',\n };\n\n // Initialize initial elements array\n let elements = new Uint32Array(\n Array.from({ length: settings['Total Elements'] }, (_, i) => i)\n );\n\n // Initialize elementsBuffer and elementsStagingBuffer\n const elementsBufferSize =\n Float32Array.BYTES_PER_ELEMENT * totalElementOptions[0];\n // Initialize input, output, staging buffers\n const elementsInputBuffer = device.createBuffer({\n size: elementsBufferSize,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n });\n const elementsOutputBuffer = device.createBuffer({\n size: elementsBufferSize,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,\n });\n const elementsStagingBuffer = device.createBuffer({\n size: elementsBufferSize,\n usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n });\n\n // Initialize atomic swap buffer on GPU and CPU. Counts number of swaps actually performed by\n // compute shader (when value at index x is greater than value at index y)\n const atomicSwapsOutputBuffer = device.createBuffer({\n size: Uint32Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,\n });\n const atomicSwapsStagingBuffer = device.createBuffer({\n size: Uint32Array.BYTES_PER_ELEMENT,\n usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n });\n\n // Create uniform buffer for compute shader\n const computeUniformsBuffer = device.createBuffer({\n // width, height, blockHeight, algo\n size: Float32Array.BYTES_PER_ELEMENT * 4,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n\n const computeBGCluster = createBindGroupCluster(\n [0, 1, 2, 3],\n [\n GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT,\n GPUShaderStage.COMPUTE,\n GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT,\n GPUShaderStage.COMPUTE,\n ],\n ['buffer', 'buffer', 'buffer', 'buffer'],\n [\n { type: 'read-only-storage' },\n { type: 'storage' },\n { type: 'uniform' },\n { type: 'storage' },\n ],\n [\n [\n { buffer: elementsInputBuffer },\n { buffer: elementsOutputBuffer },\n { buffer: computeUniformsBuffer },\n { buffer: atomicSwapsOutputBuffer },\n ],\n ],\n 'BitonicSort',\n device\n );\n\n let computePipeline = device.createComputePipeline({\n layout: device.createPipelineLayout({\n bindGroupLayouts: [computeBGCluster.bindGroupLayout],\n }),\n compute: {\n module: device.createShaderModule({\n code: NaiveBitonicCompute(settings['Workgroup Size']),\n }),\n },\n });\n\n // Simple pipeline that zeros out an atomic value at group 0 binding 3\n const atomicToZeroComputePipeline = device.createComputePipeline({\n layout: device.createPipelineLayout({\n bindGroupLayouts: [computeBGCluster.bindGroupLayout],\n }),\n compute: {\n module: device.createShaderModule({\n code: atomicToZero,\n }),\n },\n });\n\n // Create bitonic debug renderer\n const renderPassDescriptor: GPURenderPassDescriptor = {\n colorAttachments: [\n {\n view: undefined, // Assigned later\n\n clearValue: { r: 0.1, g: 0.4, b: 0.5, a: 1.0 },\n loadOp: 'clear',\n storeOp: 'store',\n },\n ],\n };\n\n const bitonicDisplayRenderer = new BitonicDisplayRenderer(\n device,\n presentationFormat,\n renderPassDescriptor,\n computeBGCluster,\n 'BitonicDisplay'\n );\n\n const resetTimeInfo = () => {\n settings.stepTime = 0;\n settings.sortTime = 0;\n stepTimeController.setValue('0ms');\n sortTimeController.setValue(`0ms`);\n const nanCheck =\n settings.configToCompleteSwapsMap[settings.configKey].time /\n settings.configToCompleteSwapsMap[settings.configKey].sorts;\n const ast = nanCheck ? nanCheck : 0;\n averageSortTimeController.setValue(`${ast.toFixed(5)}ms`);\n };\n\n const resetExecutionInformation = () => {\n // The workgroup size is either elements / 2 or Size Limit\n workgroupSizeController.setValue(\n Math.min(settings['Total Elements'] / 2, settings['Size Limit'])\n );\n\n // Dispatch a workgroup for every (Size Limit * 2) elements\n const workgroupsPerStep =\n (settings['Total Elements'] - 1) / (settings['Size Limit'] * 2);\n\n workgroupsPerStepController.setValue(Math.ceil(workgroupsPerStep));\n\n // Reset step Index and number of steps based on elements size\n settings['Step Index'] = 0;\n settings['Total Steps'] = getNumSteps(settings['Total Elements']);\n currentStepController.setValue(\n `${settings['Step Index']} of ${settings['Total Steps']}`\n );\n\n // Get new width and height of screen display in cells\n const newCellWidth =\n Math.sqrt(settings['Total Elements']) % 2 === 0\n ? Math.floor(Math.sqrt(settings['Total Elements']))\n : Math.floor(Math.sqrt(settings['Total Elements'] / 2));\n const newCellHeight = settings['Total Elements'] / newCellWidth;\n settings['Grid Width'] = newCellWidth;\n settings['Grid Height'] = newCellHeight;\n gridDimensionsController.setValue(`${newCellWidth}x${newCellHeight}`);\n\n // Set prevStep to None (restart) and next step to FLIP\n prevStepController.setValue('NONE');\n nextStepController.setValue('FLIP_LOCAL');\n\n // Reset block heights\n prevBlockHeightController.setValue(0);\n nextBlockHeightController.setValue(2);\n\n // Reset Total Swaps by setting atomic value to 0\n const commandEncoder = device.createCommandEncoder();\n const computePassEncoder = commandEncoder.beginComputePass();\n computePassEncoder.setPipeline(atomicToZeroComputePipeline);\n computePassEncoder.setBindGroup(0, computeBGCluster.bindGroups[0]);\n computePassEncoder.dispatchWorkgroups(1);\n computePassEncoder.end();\n device.queue.submit([commandEncoder.finish()]);\n totalSwapsController.setValue(0);\n\n highestBlockHeight = 2;\n };\n\n const randomizeElementArray = () => {\n let currentIndex = elements.length;\n // While there are elements to shuffle\n while (currentIndex !== 0) {\n // Pick a remaining element\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n [elements[currentIndex], elements[randomIndex]] = [\n elements[randomIndex],\n elements[currentIndex],\n ];\n }\n };\n\n const resizeElementArray = () => {\n // Recreate elements array with new length\n elements = new Uint32Array(\n Array.from({ length: settings['Total Elements'] }, (_, i) => i)\n );\n\n resetExecutionInformation();\n\n // Create new shader invocation with workgroupSize that reflects number of invocations\n computePipeline = device.createComputePipeline({\n layout: device.createPipelineLayout({\n bindGroupLayouts: [computeBGCluster.bindGroupLayout],\n }),\n compute: {\n module: device.createShaderModule({\n code: NaiveBitonicCompute(\n Math.min(settings['Total Elements'] / 2, settings['Size Limit'])\n ),\n }),\n },\n });\n // Randomize array elements\n randomizeElementArray();\n highestBlockHeight = 2;\n };\n\n randomizeElementArray();\n\n const setSwappedCell = () => {\n let swappedIndex: number;\n switch (settings['Next Step']) {\n case 'FLIP_LOCAL':\n case 'FLIP_GLOBAL':\n {\n const blockHeight = settings['Next Swap Span'];\n const p2 = Math.floor(settings['Hovered Cell'] / blockHeight) + 1;\n const p3 = settings['Hovered Cell'] % blockHeight;\n swappedIndex = blockHeight * p2 - p3 - 1;\n swappedCellController.setValue(swappedIndex);\n }\n break;\n case 'DISPERSE_LOCAL':\n {\n const blockHeight = settings['Next Swap Span'];\n const halfHeight = blockHeight / 2;\n swappedIndex =\n settings['Hovered Cell'] % blockHeight < halfHeight\n ? settings['Hovered Cell'] + halfHeight\n : settings['Hovered Cell'] - halfHeight;\n swappedCellController.setValue(swappedIndex);\n }\n break;\n case 'NONE': {\n swappedIndex = settings['Hovered Cell'];\n swappedCellController.setValue(swappedIndex);\n }\n default:\n {\n swappedIndex = settings['Hovered Cell'];\n swappedCellController.setValue(swappedIndex);\n }\n break;\n }\n };\n\n let autoSortIntervalID: ReturnType | null = null;\n const endSortInterval = () => {\n if (autoSortIntervalID !== null) {\n clearInterval(autoSortIntervalID);\n autoSortIntervalID = null;\n }\n };\n const startSortInterval = () => {\n const currentIntervalSpeed = settings['Auto Sort Speed'];\n autoSortIntervalID = setInterval(() => {\n if (settings['Next Step'] === 'NONE') {\n clearInterval(autoSortIntervalID);\n autoSortIntervalID = null;\n sizeLimitController.domElement.style.pointerEvents = 'auto';\n }\n if (settings['Auto Sort Speed'] !== currentIntervalSpeed) {\n clearInterval(autoSortIntervalID);\n autoSortIntervalID = null;\n startSortInterval();\n }\n settings.executeStep = true;\n setSwappedCell();\n }, settings['Auto Sort Speed']);\n };\n\n // At top level, information about resources used to execute the compute shader\n // i.e elements sorted, invocations per workgroup, and workgroups dispatched\n const computeResourcesFolder = gui.addFolder('Compute Resources');\n computeResourcesFolder\n .add(settings, 'Total Elements', totalElementOptions)\n .onChange(() => {\n endSortInterval();\n resizeElementArray();\n sizeLimitController.domElement.style.pointerEvents = 'auto';\n // Create new config key for current element + size limit configuration\n const currConfigKey = `${settings['Total Elements']} ${settings['Size Limit']}`;\n // If configKey doesn't exist in the map, create it.\n if (!settings.configToCompleteSwapsMap[currConfigKey]) {\n settings.configToCompleteSwapsMap[currConfigKey] = {\n sorts: 0,\n time: 0,\n };\n }\n settings.configKey = currConfigKey;\n resetTimeInfo();\n });\n const sizeLimitController = computeResourcesFolder\n .add(settings, 'Size Limit', sizeLimitOptions)\n .onChange(() => {\n // Change total workgroups per step and size of a workgroup based on arbitrary constraint\n // imposed by size limit.\n const constraint = Math.min(\n settings['Total Elements'] / 2,\n settings['Size Limit']\n );\n const workgroupsPerStep =\n (settings['Total Elements'] - 1) / (settings['Size Limit'] * 2);\n workgroupSizeController.setValue(constraint);\n workgroupsPerStepController.setValue(Math.ceil(workgroupsPerStep));\n // Apply new compute resources values to the sort's compute pipeline\n computePipeline = computePipeline = device.createComputePipeline({\n layout: device.createPipelineLayout({\n bindGroupLayouts: [computeBGCluster.bindGroupLayout],\n }),\n compute: {\n module: device.createShaderModule({\n code: NaiveBitonicCompute(\n Math.min(settings['Total Elements'] / 2, settings['Size Limit'])\n ),\n }),\n },\n });\n // Create new config key for current element + size limit configuration\n const currConfigKey = `${settings['Total Elements']} ${settings['Size Limit']}`;\n // If configKey doesn't exist in the map, create it.\n if (!settings.configToCompleteSwapsMap[currConfigKey]) {\n settings.configToCompleteSwapsMap[currConfigKey] = {\n sorts: 0,\n time: 0,\n };\n }\n settings.configKey = currConfigKey;\n resetTimeInfo();\n });\n const workgroupSizeController = computeResourcesFolder.add(\n settings,\n 'Workgroup Size'\n );\n const workgroupsPerStepController = computeResourcesFolder.add(\n settings,\n 'Workgroups Per Step'\n );\n\n computeResourcesFolder.open();\n\n // Folder with functions that control the execution of the sort\n const controlFolder = gui.addFolder('Sort Controls');\n controlFolder.add(settings, 'Execute Sort Step').onChange(() => {\n // Size Limit locked upon sort\n sizeLimitController.domElement.style.pointerEvents = 'none';\n endSortInterval();\n settings.executeStep = true;\n });\n controlFolder.add(settings, 'Randomize Values').onChange(() => {\n endSortInterval();\n randomizeElementArray();\n resetExecutionInformation();\n resetTimeInfo();\n // Unlock workgroup size limit controller since sort has stopped\n sizeLimitController.domElement.style.pointerEvents = 'auto';\n });\n controlFolder\n .add(settings, 'Log Elements')\n .onChange(() => console.log(elements));\n controlFolder.add(settings, 'Auto Sort').onChange(() => {\n // Invocation Limit locked upon sort\n sizeLimitController.domElement.style.pointerEvents = 'none';\n startSortInterval();\n });\n controlFolder.add(settings, 'Auto Sort Speed', 50, 1000).step(50);\n controlFolder.open();\n\n // Information about grid display\n const gridFolder = gui.addFolder('Grid Information');\n gridFolder.add(settings, 'Display Mode', ['Elements', 'Swap Highlight']);\n const gridDimensionsController = gridFolder.add(\n settings,\n 'Grid Dimensions'\n );\n const hoveredCellController = gridFolder\n .add(settings, 'Hovered Cell')\n .onChange(setSwappedCell);\n const swappedCellController = gridFolder.add(settings, 'Swapped Cell');\n\n // Additional Information about the execution state of the sort\n const executionInformationFolder = gui.addFolder('Execution Information');\n const currentStepController = executionInformationFolder.add(\n settings,\n 'Current Step'\n );\n const prevStepController = executionInformationFolder.add(\n settings,\n 'Prev Step'\n );\n const nextStepController = executionInformationFolder.add(\n settings,\n 'Next Step'\n );\n const totalSwapsController = executionInformationFolder.add(\n settings,\n 'Total Swaps'\n );\n const prevBlockHeightController = executionInformationFolder.add(\n settings,\n 'Prev Swap Span'\n );\n const nextBlockHeightController = executionInformationFolder.add(\n settings,\n 'Next Swap Span'\n );\n\n // Timestamp information for Chrome 121+ or other compatible browsers\n const timestampFolder = gui.addFolder('Timestamp Info (Chrome 121+)');\n const stepTimeController = timestampFolder.add(settings, 'Step Time');\n const sortTimeController = timestampFolder.add(settings, 'Sort Time');\n const averageSortTimeController = timestampFolder.add(\n settings,\n 'Average Sort Time'\n );\n\n // Adjust styles of Function List Elements within GUI\n const liFunctionElements = document.getElementsByClassName('cr function');\n for (let i = 0; i < liFunctionElements.length; i++) {\n (liFunctionElements[i].children[0] as HTMLElement).style.display = 'flex';\n (liFunctionElements[i].children[0] as HTMLElement).style.justifyContent =\n 'center';\n (\n liFunctionElements[i].children[0].children[1] as HTMLElement\n ).style.position = 'absolute';\n }\n\n // Mouse listener that determines values of hoveredCell and swappedCell\n canvas.addEventListener('mousemove', (event) => {\n const currWidth = canvas.getBoundingClientRect().width;\n const currHeight = canvas.getBoundingClientRect().height;\n const cellSize: [number, number] = [\n currWidth / settings['Grid Width'],\n currHeight / settings['Grid Height'],\n ];\n const xIndex = Math.floor(event.offsetX / cellSize[0]);\n const yIndex =\n settings['Grid Height'] - 1 - Math.floor(event.offsetY / cellSize[1]);\n hoveredCellController.setValue(yIndex * settings['Grid Width'] + xIndex);\n settings['Hovered Cell'] = yIndex * settings['Grid Width'] + xIndex;\n });\n\n // Deactivate interaction with select GUI elements\n sizeLimitController.domElement.style.pointerEvents = 'none';\n workgroupsPerStepController.domElement.style.pointerEvents = 'none';\n hoveredCellController.domElement.style.pointerEvents = 'none';\n swappedCellController.domElement.style.pointerEvents = 'none';\n currentStepController.domElement.style.pointerEvents = 'none';\n prevStepController.domElement.style.pointerEvents = 'none';\n prevBlockHeightController.domElement.style.pointerEvents = 'none';\n nextStepController.domElement.style.pointerEvents = 'none';\n nextBlockHeightController.domElement.style.pointerEvents = 'none';\n workgroupSizeController.domElement.style.pointerEvents = 'none';\n gridDimensionsController.domElement.style.pointerEvents = 'none';\n totalSwapsController.domElement.style.pointerEvents = 'none';\n stepTimeController.domElement.style.pointerEvents = 'none';\n sortTimeController.domElement.style.pointerEvents = 'none';\n averageSortTimeController.domElement.style.pointerEvents = 'none';\n gui.width = 325;\n\n let highestBlockHeight = 2;\n\n startSortInterval();\n\n async function frame() {\n // Write elements buffer\n device.queue.writeBuffer(\n elementsInputBuffer,\n 0,\n elements.buffer,\n elements.byteOffset,\n elements.byteLength\n );\n\n const dims = new Float32Array([\n settings['Grid Width'],\n settings['Grid Height'],\n ]);\n const stepDetails = new Uint32Array([\n StepEnum[settings['Next Step']],\n settings['Next Swap Span'],\n ]);\n device.queue.writeBuffer(\n computeUniformsBuffer,\n 0,\n dims.buffer,\n dims.byteOffset,\n dims.byteLength\n );\n\n device.queue.writeBuffer(computeUniformsBuffer, 8, stepDetails);\n\n renderPassDescriptor.colorAttachments[0].view = context\n .getCurrentTexture()\n .createView();\n\n const commandEncoder = device.createCommandEncoder();\n bitonicDisplayRenderer.startRun(commandEncoder, {\n highlight: settings['Display Mode'] === 'Elements' ? 0 : 1,\n });\n if (\n settings.executeStep &&\n highestBlockHeight < settings['Total Elements'] * 2\n ) {\n let computePassEncoder: GPUComputePassEncoder;\n if (timestampQueryAvailable) {\n computePassEncoder = commandEncoder.beginComputePass({\n timestampWrites: {\n querySet,\n beginningOfPassWriteIndex: 0,\n endOfPassWriteIndex: 1,\n },\n });\n } else {\n computePassEncoder = commandEncoder.beginComputePass();\n }\n computePassEncoder.setPipeline(computePipeline);\n computePassEncoder.setBindGroup(0, computeBGCluster.bindGroups[0]);\n computePassEncoder.dispatchWorkgroups(settings['Workgroups Per Step']);\n computePassEncoder.end();\n // Resolve time passed in between beginning and end of computePass\n if (timestampQueryAvailable) {\n commandEncoder.resolveQuerySet(\n querySet,\n 0,\n 2,\n timestampQueryResolveBuffer,\n 0\n );\n commandEncoder.copyBufferToBuffer(\n timestampQueryResolveBuffer,\n 0,\n timestampQueryResultBuffer,\n 0,\n 2 * BigInt64Array.BYTES_PER_ELEMENT\n );\n }\n settings['Step Index'] = settings['Step Index'] + 1;\n currentStepController.setValue(\n `${settings['Step Index']} of ${settings['Total Steps']}`\n );\n prevStepController.setValue(settings['Next Step']);\n prevBlockHeightController.setValue(settings['Next Swap Span']);\n nextBlockHeightController.setValue(settings['Next Swap Span'] / 2);\n // Each cycle of a bitonic sort contains a flip operation followed by multiple disperse operations\n // Next Swap Span will equal one when the sort needs to begin a new cycle of flip and disperse operations\n if (settings['Next Swap Span'] === 1) {\n // The next cycle's flip operation will have a maximum swap span 2 times that of the previous cycle\n highestBlockHeight *= 2;\n if (highestBlockHeight === settings['Total Elements'] * 2) {\n // The next cycle's maximum swap span exceeds the total number of elements. Therefore, the sort is over.\n // Accordingly, there will be no next step.\n nextStepController.setValue('NONE');\n // And if there is no next step, then there are no swaps, and no block range within which two elements are swapped.\n nextBlockHeightController.setValue(0);\n // Finally, with our sort completed, we can increment the number of total completed sorts executed with n 'Total Elements'\n // and x 'Size Limit', which will allow us to calculate the average time of all sorts executed with this specific\n // configuration of compute resources\n settings.configToCompleteSwapsMap[settings.configKey].sorts += 1;\n } else if (highestBlockHeight > settings['Workgroup Size'] * 2) {\n // The next cycle's maximum swap span exceeds the range of a single workgroup, so our next flip will operate on global indices.\n nextStepController.setValue('FLIP_GLOBAL');\n nextBlockHeightController.setValue(highestBlockHeight);\n } else {\n // The next cycle's maximum swap span can be executed on a range of indices local to the workgroup.\n nextStepController.setValue('FLIP_LOCAL');\n nextBlockHeightController.setValue(highestBlockHeight);\n }\n } else {\n // Otherwise, execute the next disperse operation\n settings['Next Swap Span'] > settings['Workgroup Size'] * 2\n ? nextStepController.setValue('DISPERSE_GLOBAL')\n : nextStepController.setValue('DISPERSE_LOCAL');\n }\n\n // Copy GPU accessible buffers to CPU accessible buffers\n commandEncoder.copyBufferToBuffer(\n elementsOutputBuffer,\n 0,\n elementsStagingBuffer,\n 0,\n elementsBufferSize\n );\n\n commandEncoder.copyBufferToBuffer(\n atomicSwapsOutputBuffer,\n 0,\n atomicSwapsStagingBuffer,\n 0,\n Uint32Array.BYTES_PER_ELEMENT\n );\n }\n device.queue.submit([commandEncoder.finish()]);\n\n if (\n settings.executeStep &&\n highestBlockHeight < settings['Total Elements'] * 4\n ) {\n // Copy GPU element data to CPU\n await elementsStagingBuffer.mapAsync(\n GPUMapMode.READ,\n 0,\n elementsBufferSize\n );\n const copyElementsBuffer = elementsStagingBuffer.getMappedRange(\n 0,\n elementsBufferSize\n );\n // Copy atomic swaps data to CPU\n await atomicSwapsStagingBuffer.mapAsync(\n GPUMapMode.READ,\n 0,\n Uint32Array.BYTES_PER_ELEMENT\n );\n const copySwapsBuffer = atomicSwapsStagingBuffer.getMappedRange(\n 0,\n Uint32Array.BYTES_PER_ELEMENT\n );\n const elementsData = copyElementsBuffer.slice(\n 0,\n Uint32Array.BYTES_PER_ELEMENT * settings['Total Elements']\n );\n const swapsData = copySwapsBuffer.slice(\n 0,\n Uint32Array.BYTES_PER_ELEMENT\n );\n // Extract data\n const elementsOutput = new Uint32Array(elementsData);\n totalSwapsController.setValue(new Uint32Array(swapsData)[0]);\n elementsStagingBuffer.unmap();\n atomicSwapsStagingBuffer.unmap();\n // Elements output becomes elements input, swap accumulate\n elements = elementsOutput;\n setSwappedCell();\n\n // Handle timestamp query stuff\n if (timestampQueryAvailable) {\n // Copy timestamp query result buffer data to CPU\n await timestampQueryResultBuffer.mapAsync(\n GPUMapMode.READ,\n 0,\n 2 * BigInt64Array.BYTES_PER_ELEMENT\n );\n const copyTimestampResult = new BigInt64Array(\n timestampQueryResultBuffer.getMappedRange()\n );\n // Calculate new step, sort, and average sort times\n const newStepTime =\n Number(copyTimestampResult[1] - copyTimestampResult[0]) / 1000000;\n const newSortTime = settings.sortTime + newStepTime;\n // Apply calculated times to settings object as both number and 'ms' appended string\n settings.stepTime = newStepTime;\n settings.sortTime = newSortTime;\n stepTimeController.setValue(`${newStepTime.toFixed(5)}ms`);\n sortTimeController.setValue(`${newSortTime.toFixed(5)}ms`);\n // Calculate new average sort upon end of final execution step of a full bitonic sort.\n if (highestBlockHeight === settings['Total Elements'] * 2) {\n // Lock off access to this larger if block..not best architected solution but eh\n highestBlockHeight *= 2;\n settings.configToCompleteSwapsMap[settings.configKey].time +=\n newSortTime;\n const averageSortTime =\n settings.configToCompleteSwapsMap[settings.configKey].time /\n settings.configToCompleteSwapsMap[settings.configKey].sorts;\n averageSortTimeController.setValue(\n `${averageSortTime.toFixed(5)}ms`\n );\n }\n timestampQueryResultBuffer.unmap();\n // Get correct range of data from CPU copy of GPU Data\n }\n }\n settings.executeStep = false;\n requestAnimationFrame(frame);\n }\n requestAnimationFrame(frame);\n }\n).then((init) => {\n const canvas = document.querySelector('canvas') as HTMLCanvasElement;\n const stats = new Stats();\n const gui = new GUI();\n\n document.body.appendChild(stats.dom);\n\n init({ canvas, stats, gui });\n});\n"],"names":["requestAnimationFrame","requestAnimationFrame$1","GUI"],"mappings":"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","x_google_ignoreList":[0,1]} \ No newline at end of file diff --git a/sample/cameras/cube.wgsl b/sample/cameras/cube.wgsl index 9ca444c5..0513561f 100644 --- a/sample/cameras/cube.wgsl +++ b/sample/cameras/cube.wgsl @@ -1,5 +1,5 @@ struct Uniforms { - modelViewProjectionMatrix : mat4x4, + modelViewProjectionMatrix : mat4x4f, } @group(0) @binding(0) var uniforms : Uniforms; diff --git a/sample/cameras/main.js b/sample/cameras/main.js index c72c4674..53d8cbc5 100644 --- a/sample/cameras/main.js +++ b/sample/cameras/main.js @@ -4943,7 +4943,7 @@ const cubeVertexArray = new Float32Array([ ]); var cubeWGSL = `struct Uniforms { - modelViewProjectionMatrix : mat4x4, + modelViewProjectionMatrix : mat4x4f, } @group(0) @binding(0) var uniforms : Uniforms; diff --git a/sample/computeBoids/main.js b/sample/computeBoids/main.js index 1a951acb..213d16d3 100644 --- a/sample/computeBoids/main.js +++ b/sample/computeBoids/main.js @@ -1,13 +1,13 @@ var spriteWGSL = `struct VertexOutput { - @builtin(position) position : vec4, - @location(4) color : vec4, + @builtin(position) position : vec4f, + @location(4) color : vec4f, } @vertex fn vert_main( - @location(0) a_particlePos : vec2, - @location(1) a_particleVel : vec2, - @location(2) a_pos : vec2 + @location(0) a_particlePos : vec2f, + @location(1) a_particleVel : vec2f, + @location(2) a_pos : vec2f ) -> VertexOutput { let angle = -atan2(a_particleVel.x, a_particleVel.y); let pos = vec2( @@ -26,14 +26,14 @@ fn vert_main( } @fragment -fn frag_main(@location(4) color : vec4) -> @location(0) vec4 { +fn frag_main(@location(4) color : vec4f) -> @location(0) vec4f { return color; } `; var updateSpritesWGSL = `struct Particle { - pos : vec2, - vel : vec2, + pos : vec2f, + vel : vec2f, } struct SimParams { deltaT : f32, @@ -53,7 +53,7 @@ struct Particles { // https://github.com/austinEng/Project6-Vulkan-Flocking/blob/master/data/shaders/computeparticles/particle.comp @compute @workgroup_size(64) -fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3) { +fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3u) { var index = GlobalInvocationID.x; var vPos = particlesA.particles[index].pos; @@ -63,8 +63,8 @@ fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3) { var colVel = vec2(0.0); var cMassCount = 0u; var cVelCount = 0u; - var pos : vec2; - var vel : vec2; + var pos : vec2f; + var vel : vec2f; for (var i = 0u; i < arrayLength(&particlesA.particles); i++) { if (i == index) { diff --git a/sample/computeBoids/sprite.wgsl b/sample/computeBoids/sprite.wgsl index ecc2978e..ec58780a 100644 --- a/sample/computeBoids/sprite.wgsl +++ b/sample/computeBoids/sprite.wgsl @@ -1,13 +1,13 @@ struct VertexOutput { - @builtin(position) position : vec4, - @location(4) color : vec4, + @builtin(position) position : vec4f, + @location(4) color : vec4f, } @vertex fn vert_main( - @location(0) a_particlePos : vec2, - @location(1) a_particleVel : vec2, - @location(2) a_pos : vec2 + @location(0) a_particlePos : vec2f, + @location(1) a_particleVel : vec2f, + @location(2) a_pos : vec2f ) -> VertexOutput { let angle = -atan2(a_particleVel.x, a_particleVel.y); let pos = vec2( @@ -26,6 +26,6 @@ fn vert_main( } @fragment -fn frag_main(@location(4) color : vec4) -> @location(0) vec4 { +fn frag_main(@location(4) color : vec4f) -> @location(0) vec4f { return color; } diff --git a/sample/computeBoids/updateSprites.wgsl b/sample/computeBoids/updateSprites.wgsl index 4aa4eaa2..afc68956 100644 --- a/sample/computeBoids/updateSprites.wgsl +++ b/sample/computeBoids/updateSprites.wgsl @@ -1,6 +1,6 @@ struct Particle { - pos : vec2, - vel : vec2, + pos : vec2f, + vel : vec2f, } struct SimParams { deltaT : f32, @@ -20,7 +20,7 @@ struct Particles { // https://github.com/austinEng/Project6-Vulkan-Flocking/blob/master/data/shaders/computeparticles/particle.comp @compute @workgroup_size(64) -fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3) { +fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3u) { var index = GlobalInvocationID.x; var vPos = particlesA.particles[index].pos; @@ -30,8 +30,8 @@ fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3) { var colVel = vec2(0.0); var cMassCount = 0u; var cVelCount = 0u; - var pos : vec2; - var vel : vec2; + var pos : vec2f; + var vel : vec2f; for (var i = 0u; i < arrayLength(&particlesA.particles); i++) { if (i == index) { diff --git a/sample/cubemap/main.js b/sample/cubemap/main.js index 70e8bb45..670a2bc1 100644 --- a/sample/cubemap/main.js +++ b/sample/cubemap/main.js @@ -2448,20 +2448,20 @@ const cubeVertexArray = new Float32Array([ ]); var basicVertWGSL = `struct Uniforms { - modelViewProjectionMatrix : mat4x4, + modelViewProjectionMatrix : mat4x4f, } @binding(0) @group(0) var uniforms : Uniforms; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) fragUV : vec2, - @location(1) fragPosition: vec4, + @builtin(position) Position : vec4f, + @location(0) fragUV : vec2f, + @location(1) fragPosition: vec4f, } @vertex fn main( - @location(0) position : vec4, - @location(1) uv : vec2 + @location(0) position : vec4f, + @location(1) uv : vec2f ) -> VertexOutput { var output : VertexOutput; output.Position = uniforms.modelViewProjectionMatrix * position; @@ -2476,9 +2476,9 @@ var sampleCubemapWGSL = `@group(0) @binding(1) var mySampler: sampler; @fragment fn main( - @location(0) fragUV: vec2, - @location(1) fragPosition: vec4 -) -> @location(0) vec4 { + @location(0) fragUV: vec2f, + @location(1) fragPosition: vec4f +) -> @location(0) vec4f { // Our camera and the skybox cube are both centered at (0, 0, 0) // so we can use the cube geomtry position to get viewing vector to sample the cube texture. // The magnitude of the vector doesn't matter. diff --git a/sample/cubemap/sampleCubemap.frag.wgsl b/sample/cubemap/sampleCubemap.frag.wgsl index 70d979f8..757b42d0 100644 --- a/sample/cubemap/sampleCubemap.frag.wgsl +++ b/sample/cubemap/sampleCubemap.frag.wgsl @@ -3,9 +3,9 @@ @fragment fn main( - @location(0) fragUV: vec2, - @location(1) fragPosition: vec4 -) -> @location(0) vec4 { + @location(0) fragUV: vec2f, + @location(1) fragPosition: vec4f +) -> @location(0) vec4f { // Our camera and the skybox cube are both centered at (0, 0, 0) // so we can use the cube geomtry position to get viewing vector to sample the cube texture. // The magnitude of the vector doesn't matter. diff --git a/sample/deferredRendering/fragmentDeferredRendering.wgsl b/sample/deferredRendering/fragmentDeferredRendering.wgsl index 2f90bddd..27031753 100644 --- a/sample/deferredRendering/fragmentDeferredRendering.wgsl +++ b/sample/deferredRendering/fragmentDeferredRendering.wgsl @@ -3,8 +3,8 @@ @group(0) @binding(2) var gBufferDepth: texture_depth_2d; struct LightData { - position : vec4, - color : vec3, + position : vec4f, + color : vec3f, radius : f32, } struct LightsBuffer { @@ -16,13 +16,13 @@ struct Config { numLights : u32, } struct Camera { - viewProjectionMatrix : mat4x4, - invViewProjectionMatrix : mat4x4, + viewProjectionMatrix : mat4x4f, + invViewProjectionMatrix : mat4x4f, } @group(1) @binding(1) var config: Config; @group(1) @binding(2) var camera: Camera; -fn world_from_screen_coord(coord : vec2, depth_sample: f32) -> vec3 { +fn world_from_screen_coord(coord : vec2f, depth_sample: f32) -> vec3f { // reconstruct world-space position from the screen coordinate. let posClip = vec4(coord.x * 2.0 - 1.0, (1.0 - coord.y) * 2.0 - 1.0, depth_sample, 1.0); let posWorldW = camera.invViewProjectionMatrix * posClip; @@ -32,13 +32,13 @@ fn world_from_screen_coord(coord : vec2, depth_sample: f32) -> vec3 { @fragment fn main( - @builtin(position) coord : vec4 -) -> @location(0) vec4 { - var result : vec3; + @builtin(position) coord : vec4f +) -> @location(0) vec4f { + var result : vec3f; let depth = textureLoad( gBufferDepth, - vec2(floor(coord.xy)), + vec2i(floor(coord.xy)), 0 ); @@ -48,18 +48,18 @@ fn main( } let bufferSize = textureDimensions(gBufferDepth); - let coordUV = coord.xy / vec2(bufferSize); + let coordUV = coord.xy / vec2f(bufferSize); let position = world_from_screen_coord(coordUV, depth); let normal = textureLoad( gBufferNormal, - vec2(floor(coord.xy)), + vec2i(floor(coord.xy)), 0 ).xyz; let albedo = textureLoad( gBufferAlbedo, - vec2(floor(coord.xy)), + vec2i(floor(coord.xy)), 0 ).rgb; @@ -70,7 +70,7 @@ fn main( continue; } let lambert = max(dot(normal, normalize(L)), 0.0); - result += vec3( + result += vec3f( lambert * pow(1.0 - distance / lightsBuffer.lights[i].radius, 2.0) * lightsBuffer.lights[i].color * albedo ); } diff --git a/sample/deferredRendering/fragmentGBuffersDebugView.wgsl b/sample/deferredRendering/fragmentGBuffersDebugView.wgsl index 28ef03b3..6e40e2e7 100644 --- a/sample/deferredRendering/fragmentGBuffersDebugView.wgsl +++ b/sample/deferredRendering/fragmentGBuffersDebugView.wgsl @@ -7,14 +7,14 @@ override canvasSizeHeight: f32; @fragment fn main( - @builtin(position) coord : vec4 -) -> @location(0) vec4 { - var result : vec4; - let c = coord.xy / vec2(canvasSizeWidth, canvasSizeHeight); + @builtin(position) coord : vec4f +) -> @location(0) vec4f { + var result : vec4f; + let c = coord.xy / vec2f(canvasSizeWidth, canvasSizeHeight); if (c.x < 0.33333) { let rawDepth = textureLoad( gBufferDepth, - vec2(floor(coord.xy)), + vec2i(floor(coord.xy)), 0 ); // remap depth into something a bit more visible @@ -23,7 +23,7 @@ fn main( } else if (c.x < 0.66667) { result = textureLoad( gBufferNormal, - vec2(floor(coord.xy)), + vec2i(floor(coord.xy)), 0 ); result.x = (result.x + 1.0) * 0.5; @@ -32,7 +32,7 @@ fn main( } else { result = textureLoad( gBufferAlbedo, - vec2(floor(coord.xy)), + vec2i(floor(coord.xy)), 0 ); } diff --git a/sample/deferredRendering/fragmentWriteGBuffers.wgsl b/sample/deferredRendering/fragmentWriteGBuffers.wgsl index f90d0554..3658313f 100644 --- a/sample/deferredRendering/fragmentWriteGBuffers.wgsl +++ b/sample/deferredRendering/fragmentWriteGBuffers.wgsl @@ -1,14 +1,14 @@ struct GBufferOutput { - @location(0) normal : vec4, + @location(0) normal : vec4f, // Textures: diffuse color, specular color, smoothness, emissive etc. could go here - @location(1) albedo : vec4, + @location(1) albedo : vec4f, } @fragment fn main( - @location(0) fragNormal: vec3, - @location(1) fragUV : vec2 + @location(0) fragNormal: vec3f, + @location(1) fragUV : vec2f ) -> GBufferOutput { // faking some kind of checkerboard texture let uv = floor(30.0 * fragUV); diff --git a/sample/deferredRendering/lightUpdate.wgsl b/sample/deferredRendering/lightUpdate.wgsl index 2c7672dd..a2ca49e4 100644 --- a/sample/deferredRendering/lightUpdate.wgsl +++ b/sample/deferredRendering/lightUpdate.wgsl @@ -1,6 +1,6 @@ struct LightData { - position : vec4, - color : vec3, + position : vec4f, + color : vec3f, radius : f32, } struct LightsBuffer { @@ -14,13 +14,13 @@ struct Config { @group(0) @binding(1) var config: Config; struct LightExtent { - min : vec4, - max : vec4, + min : vec4f, + max : vec4f, } @group(0) @binding(2) var lightExtent: LightExtent; @compute @workgroup_size(64, 1, 1) -fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3) { +fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3u) { var index = GlobalInvocationID.x; if (index >= config.numLights) { return; diff --git a/sample/deferredRendering/main.js b/sample/deferredRendering/main.js index 91726cd5..e41c1f48 100644 --- a/sample/deferredRendering/main.js +++ b/sample/deferredRendering/main.js @@ -5653,8 +5653,8 @@ mesh.uvs.push([0, 0], // [1, 0]); var lightUpdate = `struct LightData { - position : vec4, - color : vec3, + position : vec4f, + color : vec3f, radius : f32, } struct LightsBuffer { @@ -5668,13 +5668,13 @@ struct Config { @group(0) @binding(1) var config: Config; struct LightExtent { - min : vec4, - max : vec4, + min : vec4f, + max : vec4f, } @group(0) @binding(2) var lightExtent: LightExtent; @compute @workgroup_size(64, 1, 1) -fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3) { +fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3u) { var index = GlobalInvocationID.x; if (index >= config.numLights) { return; @@ -5689,27 +5689,27 @@ fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3) { `; var vertexWriteGBuffers = `struct Uniforms { - modelMatrix : mat4x4, - normalModelMatrix : mat4x4, + modelMatrix : mat4x4f, + normalModelMatrix : mat4x4f, } struct Camera { - viewProjectionMatrix : mat4x4, - invViewProjectionMatrix : mat4x4, + viewProjectionMatrix : mat4x4f, + invViewProjectionMatrix : mat4x4f, } @group(0) @binding(0) var uniforms : Uniforms; @group(0) @binding(1) var camera : Camera; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) fragNormal: vec3, // normal in world space - @location(1) fragUV: vec2, + @builtin(position) Position : vec4f, + @location(0) fragNormal: vec3f, // normal in world space + @location(1) fragUV: vec2f, } @vertex fn main( - @location(0) position : vec3, - @location(1) normal : vec3, - @location(2) uv : vec2 + @location(0) position : vec3f, + @location(1) normal : vec3f, + @location(2) uv : vec2f ) -> VertexOutput { var output : VertexOutput; let worldPosition = (uniforms.modelMatrix * vec4(position, 1.0)).xyz; @@ -5721,16 +5721,16 @@ fn main( `; var fragmentWriteGBuffers = `struct GBufferOutput { - @location(0) normal : vec4, + @location(0) normal : vec4f, // Textures: diffuse color, specular color, smoothness, emissive etc. could go here - @location(1) albedo : vec4, + @location(1) albedo : vec4f, } @fragment fn main( - @location(0) fragNormal: vec3, - @location(1) fragUV : vec2 + @location(0) fragNormal: vec3f, + @location(1) fragUV : vec2f ) -> GBufferOutput { // faking some kind of checkerboard texture let uv = floor(30.0 * fragUV); @@ -5747,13 +5747,13 @@ fn main( var vertexTextureQuad = `@vertex fn main( @builtin(vertex_index) VertexIndex : u32 -) -> @builtin(position) vec4 { +) -> @builtin(position) vec4f { const pos = array( vec2(-1.0, -1.0), vec2(1.0, -1.0), vec2(-1.0, 1.0), vec2(-1.0, 1.0), vec2(1.0, -1.0), vec2(1.0, 1.0), ); - return vec4(pos[VertexIndex], 0.0, 1.0); + return vec4f(pos[VertexIndex], 0.0, 1.0); } `; @@ -5766,14 +5766,14 @@ override canvasSizeHeight: f32; @fragment fn main( - @builtin(position) coord : vec4 -) -> @location(0) vec4 { - var result : vec4; - let c = coord.xy / vec2(canvasSizeWidth, canvasSizeHeight); + @builtin(position) coord : vec4f +) -> @location(0) vec4f { + var result : vec4f; + let c = coord.xy / vec2f(canvasSizeWidth, canvasSizeHeight); if (c.x < 0.33333) { let rawDepth = textureLoad( gBufferDepth, - vec2(floor(coord.xy)), + vec2i(floor(coord.xy)), 0 ); // remap depth into something a bit more visible @@ -5782,7 +5782,7 @@ fn main( } else if (c.x < 0.66667) { result = textureLoad( gBufferNormal, - vec2(floor(coord.xy)), + vec2i(floor(coord.xy)), 0 ); result.x = (result.x + 1.0) * 0.5; @@ -5791,7 +5791,7 @@ fn main( } else { result = textureLoad( gBufferAlbedo, - vec2(floor(coord.xy)), + vec2i(floor(coord.xy)), 0 ); } @@ -5804,8 +5804,8 @@ var fragmentDeferredRendering = `@group(0) @binding(0) var gBufferNormal: textur @group(0) @binding(2) var gBufferDepth: texture_depth_2d; struct LightData { - position : vec4, - color : vec3, + position : vec4f, + color : vec3f, radius : f32, } struct LightsBuffer { @@ -5817,13 +5817,13 @@ struct Config { numLights : u32, } struct Camera { - viewProjectionMatrix : mat4x4, - invViewProjectionMatrix : mat4x4, + viewProjectionMatrix : mat4x4f, + invViewProjectionMatrix : mat4x4f, } @group(1) @binding(1) var config: Config; @group(1) @binding(2) var camera: Camera; -fn world_from_screen_coord(coord : vec2, depth_sample: f32) -> vec3 { +fn world_from_screen_coord(coord : vec2f, depth_sample: f32) -> vec3f { // reconstruct world-space position from the screen coordinate. let posClip = vec4(coord.x * 2.0 - 1.0, (1.0 - coord.y) * 2.0 - 1.0, depth_sample, 1.0); let posWorldW = camera.invViewProjectionMatrix * posClip; @@ -5833,13 +5833,13 @@ fn world_from_screen_coord(coord : vec2, depth_sample: f32) -> vec3 { @fragment fn main( - @builtin(position) coord : vec4 -) -> @location(0) vec4 { - var result : vec3; + @builtin(position) coord : vec4f +) -> @location(0) vec4f { + var result : vec3f; let depth = textureLoad( gBufferDepth, - vec2(floor(coord.xy)), + vec2i(floor(coord.xy)), 0 ); @@ -5849,18 +5849,18 @@ fn main( } let bufferSize = textureDimensions(gBufferDepth); - let coordUV = coord.xy / vec2(bufferSize); + let coordUV = coord.xy / vec2f(bufferSize); let position = world_from_screen_coord(coordUV, depth); let normal = textureLoad( gBufferNormal, - vec2(floor(coord.xy)), + vec2i(floor(coord.xy)), 0 ).xyz; let albedo = textureLoad( gBufferAlbedo, - vec2(floor(coord.xy)), + vec2i(floor(coord.xy)), 0 ).rgb; @@ -5871,7 +5871,7 @@ fn main( continue; } let lambert = max(dot(normal, normalize(L)), 0.0); - result += vec3( + result += vec3f( lambert * pow(1.0 - distance / lightsBuffer.lights[i].radius, 2.0) * lightsBuffer.lights[i].color * albedo ); } diff --git a/sample/deferredRendering/vertexTextureQuad.wgsl b/sample/deferredRendering/vertexTextureQuad.wgsl index c2cfb18b..c1802e7d 100644 --- a/sample/deferredRendering/vertexTextureQuad.wgsl +++ b/sample/deferredRendering/vertexTextureQuad.wgsl @@ -1,11 +1,11 @@ @vertex fn main( @builtin(vertex_index) VertexIndex : u32 -) -> @builtin(position) vec4 { +) -> @builtin(position) vec4f { const pos = array( vec2(-1.0, -1.0), vec2(1.0, -1.0), vec2(-1.0, 1.0), vec2(-1.0, 1.0), vec2(1.0, -1.0), vec2(1.0, 1.0), ); - return vec4(pos[VertexIndex], 0.0, 1.0); + return vec4f(pos[VertexIndex], 0.0, 1.0); } diff --git a/sample/deferredRendering/vertexWriteGBuffers.wgsl b/sample/deferredRendering/vertexWriteGBuffers.wgsl index eb3b930e..6ffe79ef 100644 --- a/sample/deferredRendering/vertexWriteGBuffers.wgsl +++ b/sample/deferredRendering/vertexWriteGBuffers.wgsl @@ -1,25 +1,25 @@ struct Uniforms { - modelMatrix : mat4x4, - normalModelMatrix : mat4x4, + modelMatrix : mat4x4f, + normalModelMatrix : mat4x4f, } struct Camera { - viewProjectionMatrix : mat4x4, - invViewProjectionMatrix : mat4x4, + viewProjectionMatrix : mat4x4f, + invViewProjectionMatrix : mat4x4f, } @group(0) @binding(0) var uniforms : Uniforms; @group(0) @binding(1) var camera : Camera; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) fragNormal: vec3, // normal in world space - @location(1) fragUV: vec2, + @builtin(position) Position : vec4f, + @location(0) fragNormal: vec3f, // normal in world space + @location(1) fragUV: vec2f, } @vertex fn main( - @location(0) position : vec3, - @location(1) normal : vec3, - @location(2) uv : vec2 + @location(0) position : vec3f, + @location(1) normal : vec3f, + @location(2) uv : vec2f ) -> VertexOutput { var output : VertexOutput; let worldPosition = (uniforms.modelMatrix * vec4(position, 1.0)).xyz; diff --git a/sample/fractalCube/main.js b/sample/fractalCube/main.js index 0642c11c..4bc5eb55 100644 --- a/sample/fractalCube/main.js +++ b/sample/fractalCube/main.js @@ -2448,20 +2448,20 @@ const cubeVertexArray = new Float32Array([ ]); var basicVertWGSL = `struct Uniforms { - modelViewProjectionMatrix : mat4x4, + modelViewProjectionMatrix : mat4x4f, } @binding(0) @group(0) var uniforms : Uniforms; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) fragUV : vec2, - @location(1) fragPosition: vec4, + @builtin(position) Position : vec4f, + @location(0) fragUV : vec2f, + @location(1) fragPosition: vec4f, } @vertex fn main( - @location(0) position : vec4, - @location(1) uv : vec2 + @location(0) position : vec4f, + @location(1) uv : vec2f ) -> VertexOutput { var output : VertexOutput; output.Position = uniforms.modelViewProjectionMatrix * position; @@ -2476,9 +2476,9 @@ var sampleSelfWGSL = `@binding(1) @group(0) var mySampler: sampler; @fragment fn main( - @location(0) fragUV: vec2, - @location(1) fragPosition: vec4 -) -> @location(0) vec4 { + @location(0) fragUV: vec2f, + @location(1) fragPosition: vec4f +) -> @location(0) vec4f { let texColor = textureSample(myTexture, mySampler, fragUV * 0.8 + vec2(0.1)); let f = select(1.0, 0.0, length(texColor.rgb - vec3(0.5)) < 0.01); return f * texColor + (1.0 - f) * fragPosition; diff --git a/sample/fractalCube/sampleSelf.frag.wgsl b/sample/fractalCube/sampleSelf.frag.wgsl index 54192e37..f2c4c14b 100644 --- a/sample/fractalCube/sampleSelf.frag.wgsl +++ b/sample/fractalCube/sampleSelf.frag.wgsl @@ -3,9 +3,9 @@ @fragment fn main( - @location(0) fragUV: vec2, - @location(1) fragPosition: vec4 -) -> @location(0) vec4 { + @location(0) fragUV: vec2f, + @location(1) fragPosition: vec4f +) -> @location(0) vec4f { let texColor = textureSample(myTexture, mySampler, fragUV * 0.8 + vec2(0.1)); let f = select(1.0, 0.0, length(texColor.rgb - vec3(0.5)) < 0.01); return f * texColor + (1.0 - f) * fragPosition; diff --git a/sample/gameOfLife/compute.wgsl b/sample/gameOfLife/compute.wgsl index a9b92f29..286ae7f6 100644 --- a/sample/gameOfLife/compute.wgsl +++ b/sample/gameOfLife/compute.wgsl @@ -1,4 +1,4 @@ -@binding(0) @group(0) var size: vec2; +@binding(0) @group(0) var size: vec2u; @binding(1) @group(0) var current: array; @binding(2) @group(0) var next: array; @@ -22,7 +22,7 @@ fn countNeighbors(x: u32, y: u32) -> u32 { } @compute @workgroup_size(blockSize, blockSize) -fn main(@builtin(global_invocation_id) grid: vec3) { +fn main(@builtin(global_invocation_id) grid: vec3u) { let x = grid.x; let y = grid.y; let n = countNeighbors(x, y); diff --git a/sample/gameOfLife/frag.wgsl b/sample/gameOfLife/frag.wgsl index f70d1f95..d17c5889 100644 --- a/sample/gameOfLife/frag.wgsl +++ b/sample/gameOfLife/frag.wgsl @@ -1,4 +1,4 @@ @fragment -fn main(@location(0) cell: f32) -> @location(0) vec4 { - return vec4(cell, cell, cell, 1.); +fn main(@location(0) cell: f32) -> @location(0) vec4f { + return vec4f(cell, cell, cell, 1.); } diff --git a/sample/gameOfLife/main.js b/sample/gameOfLife/main.js index 398933ef..035aeccf 100644 --- a/sample/gameOfLife/main.js +++ b/sample/gameOfLife/main.js @@ -2493,7 +2493,7 @@ function updateDisplays(controllerArray) { } var GUI$1 = GUI; -var computeWGSL = `@binding(0) @group(0) var size: vec2; +var computeWGSL = `@binding(0) @group(0) var size: vec2u; @binding(1) @group(0) var current: array; @binding(2) @group(0) var next: array; @@ -2517,7 +2517,7 @@ fn countNeighbors(x: u32, y: u32) -> u32 { } @compute @workgroup_size(blockSize, blockSize) -fn main(@builtin(global_invocation_id) grid: vec3) { +fn main(@builtin(global_invocation_id) grid: vec3u) { let x = grid.x; let y = grid.y; let n = countNeighbors(x, y); @@ -2526,26 +2526,26 @@ fn main(@builtin(global_invocation_id) grid: vec3) { `; var vertWGSL = `struct Out { - @builtin(position) pos: vec4, + @builtin(position) pos: vec4f, @location(0) cell: f32, } -@binding(0) @group(0) var size: vec2; +@binding(0) @group(0) var size: vec2u; @vertex -fn main(@builtin(instance_index) i: u32, @location(0) cell: u32, @location(1) pos: vec2) -> Out { +fn main(@builtin(instance_index) i: u32, @location(0) cell: u32, @location(1) pos: vec2u) -> Out { let w = size.x; let h = size.y; let x = (f32(i % w + pos.x) / f32(w) - 0.5) * 2. * f32(w) / f32(max(w, h)); let y = (f32((i - (i % w)) / w + pos.y) / f32(h) - 0.5) * 2. * f32(h) / f32(max(w, h)); - return Out(vec4(x, y, 0., 1.), f32(cell)); + return Out(vec4f(x, y, 0., 1.), f32(cell)); } `; var fragWGSL = `@fragment -fn main(@location(0) cell: f32) -> @location(0) vec4 { - return vec4(cell, cell, cell, 1.); +fn main(@location(0) cell: f32) -> @location(0) vec4f { + return vec4f(cell, cell, cell, 1.); } `; diff --git a/sample/gameOfLife/vert.wgsl b/sample/gameOfLife/vert.wgsl index 443cf6ba..07649a14 100644 --- a/sample/gameOfLife/vert.wgsl +++ b/sample/gameOfLife/vert.wgsl @@ -1,16 +1,16 @@ struct Out { - @builtin(position) pos: vec4, + @builtin(position) pos: vec4f, @location(0) cell: f32, } -@binding(0) @group(0) var size: vec2; +@binding(0) @group(0) var size: vec2u; @vertex -fn main(@builtin(instance_index) i: u32, @location(0) cell: u32, @location(1) pos: vec2) -> Out { +fn main(@builtin(instance_index) i: u32, @location(0) cell: u32, @location(1) pos: vec2u) -> Out { let w = size.x; let h = size.y; let x = (f32(i % w + pos.x) / f32(w) - 0.5) * 2. * f32(w) / f32(max(w, h)); let y = (f32((i - (i % w)) / w + pos.y) / f32(h) - 0.5) * 2. * f32(h) / f32(max(w, h)); - return Out(vec4(x, y, 0., 1.), f32(cell)); + return Out(vec4f(x, y, 0., 1.), f32(cell)); } diff --git a/sample/helloTriangle/main.js b/sample/helloTriangle/main.js index 1f0e7878..9d4c9500 100644 --- a/sample/helloTriangle/main.js +++ b/sample/helloTriangle/main.js @@ -1,19 +1,19 @@ var triangleVertWGSL = `@vertex fn main( @builtin(vertex_index) VertexIndex : u32 -) -> @builtin(position) vec4 { - var pos = array, 3>( +) -> @builtin(position) vec4f { + var pos = array( vec2(0.0, 0.5), vec2(-0.5, -0.5), vec2(0.5, -0.5) ); - return vec4(pos[VertexIndex], 0.0, 1.0); + return vec4f(pos[VertexIndex], 0.0, 1.0); } `; var redFragWGSL = `@fragment -fn main() -> @location(0) vec4 { +fn main() -> @location(0) vec4f { return vec4(1.0, 0.0, 0.0, 1.0); }`; diff --git a/sample/helloTriangleMSAA/main.js b/sample/helloTriangleMSAA/main.js index be8d8204..dd8b075b 100644 --- a/sample/helloTriangleMSAA/main.js +++ b/sample/helloTriangleMSAA/main.js @@ -1,19 +1,19 @@ var triangleVertWGSL = `@vertex fn main( @builtin(vertex_index) VertexIndex : u32 -) -> @builtin(position) vec4 { - var pos = array, 3>( +) -> @builtin(position) vec4f { + var pos = array( vec2(0.0, 0.5), vec2(-0.5, -0.5), vec2(0.5, -0.5) ); - return vec4(pos[VertexIndex], 0.0, 1.0); + return vec4f(pos[VertexIndex], 0.0, 1.0); } `; var redFragWGSL = `@fragment -fn main() -> @location(0) vec4 { +fn main() -> @location(0) vec4f { return vec4(1.0, 0.0, 0.0, 1.0); }`; diff --git a/sample/imageBlur/blur.wgsl b/sample/imageBlur/blur.wgsl index e8c5d1be..ef4184f0 100644 --- a/sample/imageBlur/blur.wgsl +++ b/sample/imageBlur/blur.wgsl @@ -27,16 +27,16 @@ struct Flip { // square blocks of size 128 - (filterSize - 1). We compute the number of blocks // needed in Javascript and dispatch that amount. -var tile : array, 128>, 4>; +var tile : array, 4>; @compute @workgroup_size(32, 1, 1) fn main( - @builtin(workgroup_id) WorkGroupID : vec3, - @builtin(local_invocation_id) LocalInvocationID : vec3 + @builtin(workgroup_id) WorkGroupID : vec3u, + @builtin(local_invocation_id) LocalInvocationID : vec3u ) { let filterOffset = (params.filterDim - 1) / 2; - let dims = vec2(textureDimensions(inputTex, 0)); - let baseIndex = vec2(WorkGroupID.xy * vec2(params.blockDim, 4) + + let dims = vec2i(textureDimensions(inputTex, 0)); + let baseIndex = vec2i(WorkGroupID.xy * vec2(params.blockDim, 4) + LocalInvocationID.xy * vec2(4, 1)) - vec2(filterOffset, 0); @@ -50,7 +50,7 @@ fn main( tile[r][4 * LocalInvocationID.x + u32(c)] = textureSampleLevel( inputTex, samp, - (vec2(loadIndex) + vec2(0.25, 0.25)) / vec2(dims), + (vec2f(loadIndex) + vec2f(0.25, 0.25)) / vec2f(dims), 0.0 ).rgb; } diff --git a/sample/imageBlur/main.js b/sample/imageBlur/main.js index da62b9ba..c6bc6174 100644 --- a/sample/imageBlur/main.js +++ b/sample/imageBlur/main.js @@ -2522,16 +2522,16 @@ struct Flip { // square blocks of size 128 - (filterSize - 1). We compute the number of blocks // needed in Javascript and dispatch that amount. -var tile : array, 128>, 4>; +var tile : array, 4>; @compute @workgroup_size(32, 1, 1) fn main( - @builtin(workgroup_id) WorkGroupID : vec3, - @builtin(local_invocation_id) LocalInvocationID : vec3 + @builtin(workgroup_id) WorkGroupID : vec3u, + @builtin(local_invocation_id) LocalInvocationID : vec3u ) { let filterOffset = (params.filterDim - 1) / 2; - let dims = vec2(textureDimensions(inputTex, 0)); - let baseIndex = vec2(WorkGroupID.xy * vec2(params.blockDim, 4) + + let dims = vec2i(textureDimensions(inputTex, 0)); + let baseIndex = vec2i(WorkGroupID.xy * vec2(params.blockDim, 4) + LocalInvocationID.xy * vec2(4, 1)) - vec2(filterOffset, 0); @@ -2545,7 +2545,7 @@ fn main( tile[r][4 * LocalInvocationID.x + u32(c)] = textureSampleLevel( inputTex, samp, - (vec2(loadIndex) + vec2(0.25, 0.25)) / vec2(dims), + (vec2f(loadIndex) + vec2f(0.25, 0.25)) / vec2f(dims), 0.0 ).rgb; } @@ -2580,8 +2580,8 @@ var fullscreenTexturedQuadWGSL = `@group(0) @binding(0) var mySampler : sampler; @group(0) @binding(1) var myTexture : texture_2d; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) fragUV : vec2, + @builtin(position) Position : vec4f, + @location(0) fragUV : vec2f, } @vertex @@ -2611,7 +2611,7 @@ fn vert_main(@builtin(vertex_index) VertexIndex : u32) -> VertexOutput { } @fragment -fn frag_main(@location(0) fragUV : vec2) -> @location(0) vec4 { +fn frag_main(@location(0) fragUV : vec2f) -> @location(0) vec4f { return textureSample(myTexture, mySampler, fragUV); } `; diff --git a/sample/instancedCube/instanced.vert.wgsl b/sample/instancedCube/instanced.vert.wgsl index 933dafda..c1ccb98b 100644 --- a/sample/instancedCube/instanced.vert.wgsl +++ b/sample/instancedCube/instanced.vert.wgsl @@ -1,20 +1,20 @@ struct Uniforms { - modelViewProjectionMatrix : array, 16>, + modelViewProjectionMatrix : array, } @binding(0) @group(0) var uniforms : Uniforms; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) fragUV : vec2, - @location(1) fragPosition: vec4, + @builtin(position) Position : vec4f, + @location(0) fragUV : vec2f, + @location(1) fragPosition: vec4f, } @vertex fn main( @builtin(instance_index) instanceIdx : u32, - @location(0) position : vec4, - @location(1) uv : vec2 + @location(0) position : vec4f, + @location(1) uv : vec2f ) -> VertexOutput { var output : VertexOutput; output.Position = uniforms.modelViewProjectionMatrix[instanceIdx] * position; diff --git a/sample/instancedCube/main.js b/sample/instancedCube/main.js index 2e0916bb..5718da12 100644 --- a/sample/instancedCube/main.js +++ b/sample/instancedCube/main.js @@ -2448,22 +2448,22 @@ const cubeVertexArray = new Float32Array([ ]); var instancedVertWGSL = `struct Uniforms { - modelViewProjectionMatrix : array, 16>, + modelViewProjectionMatrix : array, } @binding(0) @group(0) var uniforms : Uniforms; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) fragUV : vec2, - @location(1) fragPosition: vec4, + @builtin(position) Position : vec4f, + @location(0) fragUV : vec2f, + @location(1) fragPosition: vec4f, } @vertex fn main( @builtin(instance_index) instanceIdx : u32, - @location(0) position : vec4, - @location(1) uv : vec2 + @location(0) position : vec4f, + @location(1) uv : vec2f ) -> VertexOutput { var output : VertexOutput; output.Position = uniforms.modelViewProjectionMatrix[instanceIdx] * position; @@ -2475,9 +2475,9 @@ fn main( var vertexPositionColorWGSL = `@fragment fn main( - @location(0) fragUV: vec2, - @location(1) fragPosition: vec4 -) -> @location(0) vec4 { + @location(0) fragUV: vec2f, + @location(1) fragPosition: vec4f +) -> @location(0) vec4f { return fragPosition; } `; diff --git a/sample/particles/main.js b/sample/particles/main.js index 5b8389ec..ce8538c6 100644 --- a/sample/particles/main.js +++ b/sample/particles/main.js @@ -4900,17 +4900,17 @@ var GUI$1 = GUI; var particleWGSL = `//////////////////////////////////////////////////////////////////////////////// // Utilities //////////////////////////////////////////////////////////////////////////////// -var rand_seed : vec2; +var rand_seed : vec2f; -fn init_rand(invocation_id : u32, seed : vec4) { +fn init_rand(invocation_id : u32, seed : vec4f) { rand_seed = seed.xz; rand_seed = fract(rand_seed * cos(35.456+f32(invocation_id) * seed.yw)); rand_seed = fract(rand_seed * cos(41.235+f32(invocation_id) * seed.xw)); } fn rand() -> f32 { - rand_seed.x = fract(cos(dot(rand_seed, vec2(23.14077926, 232.61690225))) * 136.8168); - rand_seed.y = fract(cos(dot(rand_seed, vec2(54.47856553, 345.84153136))) * 534.7645); + rand_seed.x = fract(cos(dot(rand_seed, vec2f(23.14077926, 232.61690225))) * 136.8168); + rand_seed.y = fract(cos(dot(rand_seed, vec2f(54.47856553, 345.84153136))) * 534.7645); return rand_seed.y; } @@ -4918,30 +4918,30 @@ fn rand() -> f32 { // Vertex shader //////////////////////////////////////////////////////////////////////////////// struct RenderParams { - modelViewProjectionMatrix : mat4x4, - right : vec3, - up : vec3 + modelViewProjectionMatrix : mat4x4f, + right : vec3f, + up : vec3f } @binding(0) @group(0) var render_params : RenderParams; struct VertexInput { - @location(0) position : vec3, - @location(1) color : vec4, - @location(2) quad_pos : vec2, // -1..+1 + @location(0) position : vec3f, + @location(1) color : vec4f, + @location(2) quad_pos : vec2f, // -1..+1 } struct VertexOutput { - @builtin(position) position : vec4, - @location(0) color : vec4, - @location(1) quad_pos : vec2, // -1..+1 + @builtin(position) position : vec4f, + @location(0) color : vec4f, + @location(1) quad_pos : vec2f, // -1..+1 } @vertex fn vs_main(in : VertexInput) -> VertexOutput { - var quad_pos = mat2x3(render_params.right, render_params.up) * in.quad_pos; + var quad_pos = mat2x3f(render_params.right, render_params.up) * in.quad_pos; var position = in.position + quad_pos * 0.01; var out : VertexOutput; - out.position = render_params.modelViewProjectionMatrix * vec4(position, 1.0); + out.position = render_params.modelViewProjectionMatrix * vec4f(position, 1.0); out.color = in.color; out.quad_pos = in.quad_pos; return out; @@ -4951,7 +4951,7 @@ fn vs_main(in : VertexInput) -> VertexOutput { // Fragment shader //////////////////////////////////////////////////////////////////////////////// @fragment -fn fs_main(in : VertexOutput) -> @location(0) vec4 { +fn fs_main(in : VertexOutput) -> @location(0) vec4f { var color = in.color; // Apply a circular particle alpha mask color.a = color.a * max(1.0 - length(in.quad_pos), 0.0); @@ -4963,14 +4963,14 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4 { //////////////////////////////////////////////////////////////////////////////// struct SimulationParams { deltaTime : f32, - seed : vec4, + seed : vec4f, } struct Particle { - position : vec3, + position : vec3f, lifetime : f32, - color : vec4, - velocity : vec3, + color : vec4f, + velocity : vec3f, } struct Particles { @@ -4982,7 +4982,7 @@ struct Particles { @binding(2) @group(0) var texture : texture_2d; @compute @workgroup_size(64) -fn simulate(@builtin(global_invocation_id) global_invocation_id : vec3) { +fn simulate(@builtin(global_invocation_id) global_invocation_id : vec3u) { let idx = global_invocation_id.x; init_rand(idx, sim_params.seed); @@ -5004,7 +5004,7 @@ fn simulate(@builtin(global_invocation_id) global_invocation_id : vec3) { if (particle.lifetime < 0.0) { // Use the probability map to find where the particle should be spawned. // Starting with the 1x1 mip level. - var coord : vec2; + var coord : vec2i; for (var level = u32(textureNumLevels(texture) - 1); level > 0; level--) { // Load the probability value from the mip-level // Generate a random number and using the probabilty values, pick the @@ -5015,14 +5015,14 @@ fn simulate(@builtin(global_invocation_id) global_invocation_id : vec3) { // | TOP-LEFT | TOP-RIGHT | BOTTOM-LEFT | BOTTOM_RIGHT | // let probabilites = textureLoad(texture, coord, level); - let value = vec4(rand()); - let mask = (value >= vec4(0.0, probabilites.xyz)) & (value < probabilites); + let value = vec4f(rand()); + let mask = (value >= vec4f(0.0, probabilites.xyz)) & (value < probabilites); coord = coord * 2; coord.x = coord.x + select(0, 1, any(mask.yw)); // x y coord.y = coord.y + select(0, 1, any(mask.zw)); // z w } - let uv = vec2(coord) / vec2(textureDimensions(texture)); - particle.position = vec3((uv - 0.5) * 3.0 * vec2(1.0, -1.0), 0.0); + let uv = vec2f(coord) / vec2f(textureDimensions(texture)); + particle.position = vec3f((uv - 0.5) * 3.0 * vec2f(1.0, -1.0), 0.0); particle.color = textureLoad(texture, coord, 0); particle.velocity.x = (rand() - 0.5) * 0.1; particle.velocity.y = (rand() - 0.5) * 0.1; @@ -5057,10 +5057,10 @@ struct Buffer { // the buf_out.weights. //////////////////////////////////////////////////////////////////////////////// @compute @workgroup_size(64) -fn import_level(@builtin(global_invocation_id) coord : vec3) { +fn import_level(@builtin(global_invocation_id) coord : vec3u) { _ = &buf_in; let offset = coord.x + coord.y * ubo.width; - buf_out.weights[offset] = textureLoad(tex_in, vec2(coord.xy), 0).w; + buf_out.weights[offset] = textureLoad(tex_in, vec2i(coord.xy), 0).w; } //////////////////////////////////////////////////////////////////////////////// @@ -5072,8 +5072,8 @@ fn import_level(@builtin(global_invocation_id) coord : vec3) { // probability logic. //////////////////////////////////////////////////////////////////////////////// @compute @workgroup_size(64) -fn export_level(@builtin(global_invocation_id) coord : vec3) { - if (all(coord.xy < vec2(textureDimensions(tex_out)))) { +fn export_level(@builtin(global_invocation_id) coord : vec3u) { + if (all(coord.xy < vec2u(textureDimensions(tex_out)))) { let dst_offset = coord.x + coord.y * ubo.width; let src_offset = coord.x*2u + coord.y*2u * ubo.width; @@ -5081,12 +5081,12 @@ fn export_level(@builtin(global_invocation_id) coord : vec3) { let b = buf_in.weights[src_offset + 1u]; let c = buf_in.weights[src_offset + 0u + ubo.width]; let d = buf_in.weights[src_offset + 1u + ubo.width]; - let sum = dot(vec4(a, b, c, d), vec4(1.0)); + let sum = dot(vec4f(a, b, c, d), vec4f(1.0)); buf_out.weights[dst_offset] = sum / 4.0; - let probabilities = vec4(a, a+b, a+b+c, sum) / max(sum, 0.0001); - textureStore(tex_out, vec2(coord.xy), probabilities); + let probabilities = vec4f(a, a+b, a+b+c, sum) / max(sum, 0.0001); + textureStore(tex_out, vec2i(coord.xy), probabilities); } } `; @@ -5145,7 +5145,7 @@ const renderPipeline = device.createRenderPipeline({ }, { // quad vertex buffer - arrayStride: 2 * 4, // vec2 + arrayStride: 2 * 4, // vec2f stepMode: 'vertex', attributes: [ { @@ -5194,10 +5194,10 @@ const depthTexture = device.createTexture({ format: 'depth24plus', usage: GPUTextureUsage.RENDER_ATTACHMENT, }); -const uniformBufferSize = 4 * 4 * 4 + // modelViewProjectionMatrix : mat4x4 - 3 * 4 + // right : vec3 +const uniformBufferSize = 4 * 4 * 4 + // modelViewProjectionMatrix : mat4x4f + 3 * 4 + // right : vec3f 4 + // padding - 3 * 4 + // up : vec3 + 3 * 4 + // up : vec3f 4 + // padding 0; const uniformBuffer = device.createBuffer({ @@ -5235,7 +5235,7 @@ const renderPassDescriptor = { // Quad vertex buffer ////////////////////////////////////////////////////////////////////////////// const quadVertexBuffer = device.createBuffer({ - size: 6 * 2 * 4, // 6x vec2 + size: 6 * 2 * 4, // 6x vec2f usage: GPUBufferUsage.VERTEX, mappedAtCreation: true, }); diff --git a/sample/particles/main.js.map b/sample/particles/main.js.map index db1716aa..3a5adb07 100644 --- a/sample/particles/main.js.map +++ b/sample/particles/main.js.map @@ -1 +1 @@ -{"version":3,"file":"main.js","sources":["../../../node_modules/wgpu-matrix/dist/2.x/wgpu-matrix.module.js","../../../node_modules/dat.gui/build/dat.gui.module.js","../../../../../sample/particles/main.ts"],"sourcesContent":["/* wgpu-matrix@2.5.1, license MIT */\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nlet EPSILON = 0.000001;\n/**\n * Set the value for EPSILON for various checks\n * @param v - Value to use for EPSILON.\n * @returns previous value of EPSILON;\n */\nfunction setEpsilon(v) {\n const old = EPSILON;\n EPSILON = v;\n return old;\n}\n/**\n * Convert degrees to radians\n * @param degrees - Angle in degrees\n * @returns angle converted to radians\n */\nfunction degToRad(degrees) {\n return degrees * Math.PI / 180;\n}\n/**\n * Convert radians to degrees\n * @param radians - Angle in radians\n * @returns angle converted to degrees\n */\nfunction radToDeg(radians) {\n return radians * 180 / Math.PI;\n}\n/**\n * Lerps between a and b via t\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @returns a + (b - a) * t\n */\nfunction lerp$4(a, b, t) {\n return a + (b - a) * t;\n}\n/**\n * Compute the opposite of lerp. Given a and b and a value between\n * a and b returns a value between 0 and 1. 0 if a, 1 if b.\n * Note: no clamping is done.\n * @param a - start value\n * @param b - end value\n * @param v - value between a and b\n * @returns (v - a) / (b - a)\n */\nfunction inverseLerp(a, b, v) {\n const d = b - a;\n return (Math.abs(b - a) < EPSILON)\n ? a\n : (v - a) / d;\n}\n/**\n * Compute the euclidean modulo\n *\n * ```\n * // table for n / 3\n * -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 <- n\n * ------------------------------------\n * -2 -1 -0 -2 -1 0, 1, 2, 0, 1, 2 <- n % 3\n * 1 2 0 1 2 0, 1, 2, 0, 1, 2 <- euclideanModule(n, 3)\n * ```\n *\n * @param n - dividend\n * @param m - divisor\n * @returns the euclidean modulo of n / m\n */\nfunction euclideanModulo(n, m) {\n return ((n % m) + m) % m;\n}\n\nvar utils = /*#__PURE__*/Object.freeze({\n __proto__: null,\n get EPSILON () { return EPSILON; },\n setEpsilon: setEpsilon,\n degToRad: degToRad,\n radToDeg: radToDeg,\n lerp: lerp$4,\n inverseLerp: inverseLerp,\n euclideanModulo: euclideanModulo\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Vec2 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new Vec2. In other words you can do this\n *\n * const v = vec2.cross(v1, v2); // Creates a new Vec2 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec2.create();\n * vec2.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec2.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet VecType$2 = Float32Array;\n/**\n * Sets the type this library creates for a Vec2\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec2\n */\nfunction setDefaultType$6(ctor) {\n const oldType = VecType$2;\n VecType$2 = ctor;\n return oldType;\n}\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values.\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Vec2's specified type\n * it would be faster to use\n *\n * ```\n * const v = vec2.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Vec2Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `vec2.create` is usually used\n * to create a Vec2 to be filled out as in\n *\n * ```\n * const sum = vec2.create();\n * vec2.add(v1, v2, sum);\n * ```\n *\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nfunction create$5(x = 0, y = 0) {\n const dst = new VecType$2(2);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Vec3 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec3`. In other words you can do this\n *\n * const v = vec3.cross(v1, v2); // Creates a new Vec3 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec3.create();\n * vec3.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec3.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet VecType$1 = Float32Array;\n/**\n * Sets the type this library creates for a Vec3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec3\n */\nfunction setDefaultType$5(ctor) {\n const oldType = VecType$1;\n VecType$1 = ctor;\n return oldType;\n}\n/**\n * Creates a vec3; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nfunction create$4(x, y, z) {\n const dst = new VecType$1(3);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n }\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nconst fromValues$3 = create$5;\n/**\n * Sets the values of a Vec2\n * Also see {@link vec2.create} and {@link vec2.copy}\n *\n * @param x first value\n * @param y second value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set$5(x, y, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = x;\n dst[1] = y;\n return dst;\n}\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nfunction ceil$2(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n return dst;\n}\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nfunction floor$2(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n return dst;\n}\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nfunction round$2(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n return dst;\n}\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nfunction clamp$2(v, min = 0, max = 1, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n return dst;\n}\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nfunction add$3(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n return dst;\n}\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nfunction addScaled$2(a, b, scale, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n return dst;\n}\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nfunction angle$2(a, b) {\n const ax = a[0];\n const ay = a[1];\n const bx = a[0];\n const by = a[1];\n const mag1 = Math.sqrt(ax * ax + ay * ay);\n const mag2 = Math.sqrt(bx * bx + by * by);\n const mag = mag1 * mag2;\n const cosine = mag && dot$3(a, b) / mag;\n return Math.acos(cosine);\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nfunction subtract$3(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nconst sub$3 = subtract$3;\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nfunction equalsApproximately$5(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON;\n}\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nfunction equals$5(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp$3(a, b, t, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n return dst;\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nfunction lerpV$2(a, b, t, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n return dst;\n}\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nfunction max$2(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n return dst;\n}\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nfunction min$2(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n return dst;\n}\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction mulScalar$3(v, k, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n return dst;\n}\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nconst scale$5 = mulScalar$3;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction divScalar$3(v, k, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n return dst;\n}\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nfunction inverse$5(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n return dst;\n}\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nconst invert$4 = inverse$5;\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nfunction cross$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n const z = a[0] * b[1] - a[1] * b[0];\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = z;\n return dst;\n}\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nfunction dot$3(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nfunction length$3(v) {\n const v0 = v[0];\n const v1 = v[1];\n return Math.sqrt(v0 * v0 + v1 * v1);\n}\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nconst len$3 = length$3;\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nfunction lengthSq$3(v) {\n const v0 = v[0];\n const v1 = v[1];\n return v0 * v0 + v1 * v1;\n}\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nconst lenSq$3 = lengthSq$3;\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nfunction distance$2(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return Math.sqrt(dx * dx + dy * dy);\n}\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nconst dist$2 = distance$2;\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nfunction distanceSq$2(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return dx * dx + dy * dy;\n}\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nconst distSq$2 = distanceSq$2;\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nfunction normalize$3(v, dst) {\n dst = dst || new VecType$2(2);\n const v0 = v[0];\n const v1 = v[1];\n const len = Math.sqrt(v0 * v0 + v1 * v1);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n }\n return dst;\n}\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nfunction negate$4(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = -v[0];\n dst[1] = -v[1];\n return dst;\n}\n/**\n * Copies a vector. (same as {@link vec2.clone})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nfunction copy$5(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = v[0];\n dst[1] = v[1];\n return dst;\n}\n/**\n * Clones a vector. (same as {@link vec2.copy})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nconst clone$5 = copy$5;\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nfunction multiply$5(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n return dst;\n}\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nconst mul$5 = multiply$5;\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nfunction divide$2(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n return dst;\n}\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nconst div$2 = divide$2;\n/**\n * Creates a random unit vector * scale\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nfunction random$1(scale = 1, dst) {\n dst = dst || new VecType$2(2);\n const angle = Math.random() * 2 * Math.PI;\n dst[0] = Math.cos(angle) * scale;\n dst[1] = Math.sin(angle) * scale;\n return dst;\n}\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nfunction zero$2(dst) {\n dst = dst || new VecType$2(2);\n dst[0] = 0;\n dst[1] = 0;\n return dst;\n}\n/**\n * transform Vec2 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat4$2(v, m, dst) {\n dst = dst || new VecType$2(2);\n const x = v[0];\n const y = v[1];\n dst[0] = x * m[0] + y * m[4] + m[12];\n dst[1] = x * m[1] + y * m[5] + m[13];\n return dst;\n}\n/**\n * Transforms vec4 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat3$1(v, m, dst) {\n dst = dst || new VecType$2(2);\n const x = v[0];\n const y = v[1];\n dst[0] = m[0] * x + m[4] * y + m[8];\n dst[1] = m[1] * x + m[5] * y + m[9];\n return dst;\n}\n\nvar vec2Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create$5,\n setDefaultType: setDefaultType$6,\n fromValues: fromValues$3,\n set: set$5,\n ceil: ceil$2,\n floor: floor$2,\n round: round$2,\n clamp: clamp$2,\n add: add$3,\n addScaled: addScaled$2,\n angle: angle$2,\n subtract: subtract$3,\n sub: sub$3,\n equalsApproximately: equalsApproximately$5,\n equals: equals$5,\n lerp: lerp$3,\n lerpV: lerpV$2,\n max: max$2,\n min: min$2,\n mulScalar: mulScalar$3,\n scale: scale$5,\n divScalar: divScalar$3,\n inverse: inverse$5,\n invert: invert$4,\n cross: cross$1,\n dot: dot$3,\n length: length$3,\n len: len$3,\n lengthSq: lengthSq$3,\n lenSq: lenSq$3,\n distance: distance$2,\n dist: dist$2,\n distanceSq: distanceSq$2,\n distSq: distSq$2,\n normalize: normalize$3,\n negate: negate$4,\n copy: copy$5,\n clone: clone$5,\n multiply: multiply$5,\n mul: mul$5,\n divide: divide$2,\n div: div$2,\n random: random$1,\n zero: zero$2,\n transformMat4: transformMat4$2,\n transformMat3: transformMat3$1\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * 3x3 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat3.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat3.create();\n * mat3.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat3.identity();\n * const trans = mat3.translation([1, 2, 3]);\n * mat3.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType$1 = Float32Array;\n// This mess is because with Mat3 we have 3 unused elements.\n// For Float32Array and Float64Array that's not an issue\n// but for Array it's troublesome\nconst ctorMap = new Map([\n [Float32Array, () => new Float32Array(12)],\n [Float64Array, () => new Float64Array(12)],\n [Array, () => new Array(12).fill(0)],\n]);\nlet newMat3 = ctorMap.get(Float32Array);\n/**\n * Sets the type this library creates for a Mat3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat3\n */\nfunction setDefaultType$4(ctor) {\n const oldType = MatType$1;\n MatType$1 = ctor;\n newMat3 = ctorMap.get(ctor);\n return oldType;\n}\n/**\n * Create a Mat3 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat3's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat3.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat3Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat3.create` is usually used\n * to create a Mat3 to be filled out as in\n *\n * ```\n * const m = mat3.create();\n * mat3.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @returns matrix created from values.\n */\nfunction create$3(v0, v1, v2, v3, v4, v5, v6, v7, v8) {\n const dst = newMat3();\n // to make the array homogenous\n dst[3] = 0;\n dst[7] = 0;\n dst[11] = 0;\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[4] = v3;\n if (v4 !== undefined) {\n dst[5] = v4;\n if (v5 !== undefined) {\n dst[6] = v5;\n if (v6 !== undefined) {\n dst[8] = v6;\n if (v7 !== undefined) {\n dst[9] = v7;\n if (v8 !== undefined) {\n dst[10] = v8;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return dst;\n}\n/**\n * Sets the values of a Mat3\n * Also see {@link mat3.create} and {@link mat3.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 set from values.\n */\nfunction set$4(v0, v1, v2, v3, v4, v5, v6, v7, v8, dst) {\n dst = dst || newMat3();\n dst[0] = v0;\n dst[1] = v1;\n dst[2] = v2;\n dst[3] = 0;\n dst[4] = v3;\n dst[5] = v4;\n dst[6] = v5;\n dst[7] = 0;\n dst[8] = v6;\n dst[9] = v7;\n dst[10] = v8;\n dst[11] = 0;\n return dst;\n}\n/**\n * Creates a Mat3 from the upper left 3x3 part of a Mat4\n * @param m4 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from m4\n */\nfunction fromMat4(m4, dst) {\n dst = dst || newMat3();\n dst[0] = m4[0];\n dst[1] = m4[1];\n dst[2] = m4[2];\n dst[3] = 0;\n dst[4] = m4[4];\n dst[5] = m4[5];\n dst[6] = m4[6];\n dst[7] = 0;\n dst[8] = m4[8];\n dst[9] = m4[9];\n dst[10] = m4[10];\n dst[11] = 0;\n return dst;\n}\n/**\n * Creates a Mat3 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from q\n */\nfunction fromQuat$1(q, dst) {\n dst = dst || newMat3();\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n dst[0] = 1 - yy - zz;\n dst[1] = yx + wz;\n dst[2] = zx - wy;\n dst[3] = 0;\n dst[4] = yx - wz;\n dst[5] = 1 - xx - zz;\n dst[6] = zy + wx;\n dst[7] = 0;\n dst[8] = zx + wy;\n dst[9] = zy - wx;\n dst[10] = 1 - xx - yy;\n dst[11] = 0;\n return dst;\n}\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nfunction negate$3(m, dst) {\n dst = dst || newMat3();\n dst[0] = -m[0];\n dst[1] = -m[1];\n dst[2] = -m[2];\n dst[4] = -m[4];\n dst[5] = -m[5];\n dst[6] = -m[6];\n dst[8] = -m[8];\n dst[9] = -m[9];\n dst[10] = -m[10];\n return dst;\n}\n/**\n * Copies a matrix. (same as {@link mat3.clone})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nfunction copy$4(m, dst) {\n dst = dst || newMat3();\n dst[0] = m[0];\n dst[1] = m[1];\n dst[2] = m[2];\n dst[4] = m[4];\n dst[5] = m[5];\n dst[6] = m[6];\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n return dst;\n}\n/**\n * Copies a matrix (same as {@link mat3.copy})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nconst clone$4 = copy$4;\n/**\n * Check if 2 matrices are approximately equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are approximately equal\n */\nfunction equalsApproximately$4(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[4] - b[4]) < EPSILON &&\n Math.abs(a[5] - b[5]) < EPSILON &&\n Math.abs(a[6] - b[6]) < EPSILON &&\n Math.abs(a[8] - b[8]) < EPSILON &&\n Math.abs(a[9] - b[9]) < EPSILON &&\n Math.abs(a[10] - b[10]) < EPSILON;\n}\n/**\n * Check if 2 matrices are exactly equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are exactly equal\n */\nfunction equals$4(a, b) {\n return a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[4] === b[4] &&\n a[5] === b[5] &&\n a[6] === b[6] &&\n a[8] === b[8] &&\n a[9] === b[9] &&\n a[10] === b[10];\n}\n/**\n * Creates a 3-by-3 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 3-by-3 identity matrix.\n */\nfunction identity$2(dst) {\n dst = dst || newMat3();\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nfunction transpose$1(m, dst) {\n dst = dst || newMat3();\n if (dst === m) {\n let t;\n // 0 1 2\n // 4 5 6\n // 8 9 10\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n return dst;\n }\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n dst[0] = m00;\n dst[1] = m10;\n dst[2] = m20;\n dst[4] = m01;\n dst[5] = m11;\n dst[6] = m21;\n dst[8] = m02;\n dst[9] = m12;\n dst[10] = m22;\n return dst;\n}\n/**\n * Computes the inverse of a 3-by-3 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nfunction inverse$4(m, dst) {\n dst = dst || newMat3();\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const b01 = m22 * m11 - m12 * m21;\n const b11 = -m22 * m10 + m12 * m20;\n const b21 = m21 * m10 - m11 * m20;\n const invDet = 1 / (m00 * b01 + m01 * b11 + m02 * b21);\n dst[0] = b01 * invDet;\n dst[1] = (-m22 * m01 + m02 * m21) * invDet;\n dst[2] = (m12 * m01 - m02 * m11) * invDet;\n dst[4] = b11 * invDet;\n dst[5] = (m22 * m00 - m02 * m20) * invDet;\n dst[6] = (-m12 * m00 + m02 * m10) * invDet;\n dst[8] = b21 * invDet;\n dst[9] = (-m21 * m00 + m01 * m20) * invDet;\n dst[10] = (m11 * m00 - m01 * m10) * invDet;\n return dst;\n}\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nfunction determinant$1(m) {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n return m00 * (m11 * m22 - m21 * m12) -\n m10 * (m01 * m22 - m21 * m02) +\n m20 * (m01 * m12 - m11 * m02);\n}\n/**\n * Computes the inverse of a 3-by-3 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nconst invert$3 = inverse$4;\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nfunction multiply$4(a, b, dst) {\n dst = dst || newMat3();\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a10 = a[4 + 0];\n const a11 = a[4 + 1];\n const a12 = a[4 + 2];\n const a20 = a[8 + 0];\n const a21 = a[8 + 1];\n const a22 = a[8 + 2];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b10 = b[4 + 0];\n const b11 = b[4 + 1];\n const b12 = b[4 + 2];\n const b20 = b[8 + 0];\n const b21 = b[8 + 1];\n const b22 = b[8 + 2];\n dst[0] = a00 * b00 + a10 * b01 + a20 * b02;\n dst[1] = a01 * b00 + a11 * b01 + a21 * b02;\n dst[2] = a02 * b00 + a12 * b01 + a22 * b02;\n dst[4] = a00 * b10 + a10 * b11 + a20 * b12;\n dst[5] = a01 * b10 + a11 * b11 + a21 * b12;\n dst[6] = a02 * b10 + a12 * b11 + a22 * b12;\n dst[8] = a00 * b20 + a10 * b21 + a20 * b22;\n dst[9] = a01 * b20 + a11 * b21 + a21 * b22;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22;\n return dst;\n}\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nconst mul$4 = multiply$4;\n/**\n * Sets the translation component of a 3-by-3 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nfunction setTranslation$1(a, v, dst) {\n dst = dst || identity$2();\n if (a !== dst) {\n dst[0] = a[0];\n dst[1] = a[1];\n dst[2] = a[2];\n dst[4] = a[4];\n dst[5] = a[5];\n dst[6] = a[6];\n }\n dst[8] = v[0];\n dst[9] = v[1];\n dst[10] = 1;\n return dst;\n}\n/**\n * Returns the translation component of a 3-by-3 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nfunction getTranslation$2(m, dst) {\n dst = dst || create$5();\n dst[0] = m[8];\n dst[1] = m[9];\n return dst;\n}\n/**\n * Returns an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y,\n * @returns The axis component of m.\n */\nfunction getAxis$2(m, axis, dst) {\n dst = dst || create$5();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n return dst;\n}\n/**\n * Sets an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nfunction setAxis$1(m, v, axis, dst) {\n if (dst !== m) {\n dst = copy$4(m, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nfunction getScaling$2(m, dst) {\n dst = dst || create$5();\n const xx = m[0];\n const xy = m[1];\n const yx = m[4];\n const yy = m[5];\n dst[0] = Math.sqrt(xx * xx + xy * xy);\n dst[1] = Math.sqrt(yx * yx + yy * yy);\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which translates by the given vector v.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nfunction translation$1(v, dst) {\n dst = dst || newMat3();\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[8] = v[0];\n dst[9] = v[1];\n dst[10] = 1;\n return dst;\n}\n/**\n * Translates the given 3-by-3 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nfunction translate$1(m, v, dst) {\n dst = dst || newMat3();\n const v0 = v[0];\n const v1 = v[1];\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n if (m !== dst) {\n dst[0] = m00;\n dst[1] = m01;\n dst[2] = m02;\n dst[4] = m10;\n dst[5] = m11;\n dst[6] = m12;\n }\n dst[8] = m00 * v0 + m10 * v1 + m20;\n dst[9] = m01 * v0 + m11 * v1 + m21;\n dst[10] = m02 * v0 + m12 * v1 + m22;\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which rotates by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotation$1(angleInRadians, dst) {\n dst = dst || newMat3();\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c;\n dst[1] = s;\n dst[2] = 0;\n dst[4] = -s;\n dst[5] = c;\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Rotates the given 3-by-3 matrix by the given angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotate$1(m, angleInRadians, dst) {\n dst = dst || newMat3();\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c * m00 + s * m10;\n dst[1] = c * m01 + s * m11;\n dst[2] = c * m02 + s * m12;\n dst[4] = c * m10 - s * m00;\n dst[5] = c * m11 - s * m01;\n dst[6] = c * m12 - s * m02;\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n }\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * 2 entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction scaling$1(v, dst) {\n dst = dst || newMat3();\n dst[0] = v[0];\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = v[1];\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of 2 entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction scale$4(m, v, dst) {\n dst = dst || newMat3();\n const v0 = v[0];\n const v1 = v[1];\n dst[0] = v0 * m[0 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2];\n dst[4] = v1 * m[1 * 4 + 0];\n dst[5] = v1 * m[1 * 4 + 1];\n dst[6] = v1 * m[1 * 4 + 2];\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n }\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which scales uniformly in each dimension\n * @param s - Amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction uniformScaling$1(s, dst) {\n dst = dst || newMat3();\n dst[0] = s;\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = s;\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given.\n * @param m - The matrix to be modified.\n * @param s - Amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction uniformScale$1(m, s, dst) {\n dst = dst || newMat3();\n dst[0] = s * m[0 * 4 + 0];\n dst[1] = s * m[0 * 4 + 1];\n dst[2] = s * m[0 * 4 + 2];\n dst[4] = s * m[1 * 4 + 0];\n dst[5] = s * m[1 * 4 + 1];\n dst[6] = s * m[1 * 4 + 2];\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n }\n return dst;\n}\n\nvar mat3Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setDefaultType: setDefaultType$4,\n create: create$3,\n set: set$4,\n fromMat4: fromMat4,\n fromQuat: fromQuat$1,\n negate: negate$3,\n copy: copy$4,\n clone: clone$4,\n equalsApproximately: equalsApproximately$4,\n equals: equals$4,\n identity: identity$2,\n transpose: transpose$1,\n inverse: inverse$4,\n determinant: determinant$1,\n invert: invert$3,\n multiply: multiply$4,\n mul: mul$4,\n setTranslation: setTranslation$1,\n getTranslation: getTranslation$2,\n getAxis: getAxis$2,\n setAxis: setAxis$1,\n getScaling: getScaling$2,\n translation: translation$1,\n translate: translate$1,\n rotation: rotation$1,\n rotate: rotate$1,\n scaling: scaling$1,\n scale: scale$4,\n uniformScaling: uniformScaling$1,\n uniformScale: uniformScale$1\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a vec3; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nconst fromValues$2 = create$4;\n/**\n * Sets the values of a Vec3\n * Also see {@link vec3.create} and {@link vec3.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set$3(x, y, z, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n return dst;\n}\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nfunction ceil$1(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n return dst;\n}\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nfunction floor$1(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n return dst;\n}\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nfunction round$1(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n return dst;\n}\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nfunction clamp$1(v, min = 0, max = 1, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n return dst;\n}\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nfunction add$2(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n return dst;\n}\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nfunction addScaled$1(a, b, scale, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n return dst;\n}\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nfunction angle$1(a, b) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = a[0];\n const by = a[1];\n const bz = a[2];\n const mag1 = Math.sqrt(ax * ax + ay * ay + az * az);\n const mag2 = Math.sqrt(bx * bx + by * by + bz * bz);\n const mag = mag1 * mag2;\n const cosine = mag && dot$2(a, b) / mag;\n return Math.acos(cosine);\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nfunction subtract$2(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nconst sub$2 = subtract$2;\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nfunction equalsApproximately$3(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON;\n}\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nfunction equals$3(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp$2(a, b, t, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n return dst;\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nfunction lerpV$1(a, b, t, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n return dst;\n}\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nfunction max$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n return dst;\n}\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nfunction min$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n return dst;\n}\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction mulScalar$2(v, k, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n return dst;\n}\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nconst scale$3 = mulScalar$2;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction divScalar$2(v, k, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n return dst;\n}\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nfunction inverse$3(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n return dst;\n}\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nconst invert$2 = inverse$3;\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nfunction cross(a, b, dst) {\n dst = dst || new VecType$1(3);\n const t1 = a[2] * b[0] - a[0] * b[2];\n const t2 = a[0] * b[1] - a[1] * b[0];\n dst[0] = a[1] * b[2] - a[2] * b[1];\n dst[1] = t1;\n dst[2] = t2;\n return dst;\n}\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nfunction dot$2(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]);\n}\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nfunction length$2(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n}\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nconst len$2 = length$2;\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nfunction lengthSq$2(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return v0 * v0 + v1 * v1 + v2 * v2;\n}\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nconst lenSq$2 = lengthSq$2;\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nfunction distance$1(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n}\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nconst dist$1 = distance$1;\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nfunction distanceSq$1(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return dx * dx + dy * dy + dz * dz;\n}\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nconst distSq$1 = distanceSq$1;\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nfunction normalize$2(v, dst) {\n dst = dst || new VecType$1(3);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n }\n return dst;\n}\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nfunction negate$2(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n return dst;\n}\n/**\n * Copies a vector. (same as {@link vec3.clone})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nfunction copy$3(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n return dst;\n}\n/**\n * Clones a vector. (same as {@link vec3.copy})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nconst clone$3 = copy$3;\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nfunction multiply$3(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n return dst;\n}\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nconst mul$3 = multiply$3;\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nfunction divide$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n return dst;\n}\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nconst div$1 = divide$1;\n/**\n * Creates a random vector\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nfunction random(scale = 1, dst) {\n dst = dst || new VecType$1(3);\n const angle = Math.random() * 2 * Math.PI;\n const z = Math.random() * 2 - 1;\n const zScale = Math.sqrt(1 - z * z) * scale;\n dst[0] = Math.cos(angle) * zScale;\n dst[1] = Math.sin(angle) * zScale;\n dst[2] = z * scale;\n return dst;\n}\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nfunction zero$1(dst) {\n dst = dst || new VecType$1(3);\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n return dst;\n}\n/**\n * transform vec3 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat4$1(v, m, dst) {\n dst = dst || new VecType$1(3);\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = (m[3] * x + m[7] * y + m[11] * z + m[15]) || 1;\n dst[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n dst[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n dst[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return dst;\n}\n/**\n * Transform vec4 by upper 3x3 matrix inside 4x4 matrix.\n * @param v - The direction.\n * @param m - The matrix.\n * @param dst - optional Vec3 to store result. If not passed a new one is created.\n * @returns The transformed vector.\n */\nfunction transformMat4Upper3x3(v, m, dst) {\n dst = dst || new VecType$1(3);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n dst[0] = v0 * m[0 * 4 + 0] + v1 * m[1 * 4 + 0] + v2 * m[2 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1] + v1 * m[1 * 4 + 1] + v2 * m[2 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2] + v1 * m[1 * 4 + 2] + v2 * m[2 * 4 + 2];\n return dst;\n}\n/**\n * Transforms vec3 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat3(v, m, dst) {\n dst = dst || new VecType$1(3);\n const x = v[0];\n const y = v[1];\n const z = v[2];\n dst[0] = x * m[0] + y * m[4] + z * m[8];\n dst[1] = x * m[1] + y * m[5] + z * m[9];\n dst[2] = x * m[2] + y * m[6] + z * m[10];\n return dst;\n}\n/**\n * Transforms vec3 by Quaternion\n * @param v - the vector to transform\n * @param q - the quaternion to transform by\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed\n */\nfunction transformQuat(v, q, dst) {\n dst = dst || new VecType$1(3);\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const w2 = q[3] * 2;\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const uvX = qy * z - qz * y;\n const uvY = qz * x - qx * z;\n const uvZ = qx * y - qy * x;\n dst[0] = x + uvX * w2 + (qy * uvZ - qz * uvY) * 2;\n dst[1] = y + uvY * w2 + (qz * uvX - qx * uvZ) * 2;\n dst[2] = z + uvZ * w2 + (qx * uvY - qy * uvX) * 2;\n return dst;\n}\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nfunction getTranslation$1(m, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nfunction getAxis$1(m, axis, dst) {\n dst = dst || new VecType$1(3);\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nfunction getScaling$1(m, dst) {\n dst = dst || new VecType$1(3);\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return dst;\n}\n\nvar vec3Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create$4,\n setDefaultType: setDefaultType$5,\n fromValues: fromValues$2,\n set: set$3,\n ceil: ceil$1,\n floor: floor$1,\n round: round$1,\n clamp: clamp$1,\n add: add$2,\n addScaled: addScaled$1,\n angle: angle$1,\n subtract: subtract$2,\n sub: sub$2,\n equalsApproximately: equalsApproximately$3,\n equals: equals$3,\n lerp: lerp$2,\n lerpV: lerpV$1,\n max: max$1,\n min: min$1,\n mulScalar: mulScalar$2,\n scale: scale$3,\n divScalar: divScalar$2,\n inverse: inverse$3,\n invert: invert$2,\n cross: cross,\n dot: dot$2,\n length: length$2,\n len: len$2,\n lengthSq: lengthSq$2,\n lenSq: lenSq$2,\n distance: distance$1,\n dist: dist$1,\n distanceSq: distanceSq$1,\n distSq: distSq$1,\n normalize: normalize$2,\n negate: negate$2,\n copy: copy$3,\n clone: clone$3,\n multiply: multiply$3,\n mul: mul$3,\n divide: divide$1,\n div: div$1,\n random: random,\n zero: zero$1,\n transformMat4: transformMat4$1,\n transformMat4Upper3x3: transformMat4Upper3x3,\n transformMat3: transformMat3,\n transformQuat: transformQuat,\n getTranslation: getTranslation$1,\n getAxis: getAxis$1,\n getScaling: getScaling$1\n});\n\n/**\n * 4x4 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat4.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat4.create();\n * mat4.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat4.identity();\n * const trans = mat4.translation([1, 2, 3]);\n * mat4.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType = Float32Array;\n/**\n * Sets the type this library creates for a Mat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat4\n */\nfunction setDefaultType$3(ctor) {\n const oldType = MatType;\n MatType = ctor;\n return oldType;\n}\n/**\n * Create a Mat4 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat4's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat4.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat4Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat4.create` is usually used\n * to create a Mat4 to be filled out as in\n *\n * ```\n * const m = mat4.create();\n * mat4.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @returns created from values.\n */\nfunction create$2(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) {\n const dst = new MatType(16);\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[3] = v3;\n if (v4 !== undefined) {\n dst[4] = v4;\n if (v5 !== undefined) {\n dst[5] = v5;\n if (v6 !== undefined) {\n dst[6] = v6;\n if (v7 !== undefined) {\n dst[7] = v7;\n if (v8 !== undefined) {\n dst[8] = v8;\n if (v9 !== undefined) {\n dst[9] = v9;\n if (v10 !== undefined) {\n dst[10] = v10;\n if (v11 !== undefined) {\n dst[11] = v11;\n if (v12 !== undefined) {\n dst[12] = v12;\n if (v13 !== undefined) {\n dst[13] = v13;\n if (v14 !== undefined) {\n dst[14] = v14;\n if (v15 !== undefined) {\n dst[15] = v15;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return dst;\n}\n/**\n * Sets the values of a Mat4\n * Also see {@link mat4.create} and {@link mat4.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 created from values.\n */\nfunction set$2(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, dst) {\n dst = dst || new MatType(16);\n dst[0] = v0;\n dst[1] = v1;\n dst[2] = v2;\n dst[3] = v3;\n dst[4] = v4;\n dst[5] = v5;\n dst[6] = v6;\n dst[7] = v7;\n dst[8] = v8;\n dst[9] = v9;\n dst[10] = v10;\n dst[11] = v11;\n dst[12] = v12;\n dst[13] = v13;\n dst[14] = v14;\n dst[15] = v15;\n return dst;\n}\n/**\n * Creates a Mat4 from a Mat3\n * @param m3 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from m3\n */\nfunction fromMat3(m3, dst) {\n dst = dst || new MatType(16);\n dst[0] = m3[0];\n dst[1] = m3[1];\n dst[2] = m3[2];\n dst[3] = 0;\n dst[4] = m3[4];\n dst[5] = m3[5];\n dst[6] = m3[6];\n dst[7] = 0;\n dst[8] = m3[8];\n dst[9] = m3[9];\n dst[10] = m3[10];\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Creates a Mat4 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from q\n */\nfunction fromQuat(q, dst) {\n dst = dst || new MatType(16);\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n dst[0] = 1 - yy - zz;\n dst[1] = yx + wz;\n dst[2] = zx - wy;\n dst[3] = 0;\n dst[4] = yx - wz;\n dst[5] = 1 - xx - zz;\n dst[6] = zy + wx;\n dst[7] = 0;\n dst[8] = zx + wy;\n dst[9] = zy - wx;\n dst[10] = 1 - xx - yy;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nfunction negate$1(m, dst) {\n dst = dst || new MatType(16);\n dst[0] = -m[0];\n dst[1] = -m[1];\n dst[2] = -m[2];\n dst[3] = -m[3];\n dst[4] = -m[4];\n dst[5] = -m[5];\n dst[6] = -m[6];\n dst[7] = -m[7];\n dst[8] = -m[8];\n dst[9] = -m[9];\n dst[10] = -m[10];\n dst[11] = -m[11];\n dst[12] = -m[12];\n dst[13] = -m[13];\n dst[14] = -m[14];\n dst[15] = -m[15];\n return dst;\n}\n/**\n * Copies a matrix. (same as {@link mat4.clone})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nfunction copy$2(m, dst) {\n dst = dst || new MatType(16);\n dst[0] = m[0];\n dst[1] = m[1];\n dst[2] = m[2];\n dst[3] = m[3];\n dst[4] = m[4];\n dst[5] = m[5];\n dst[6] = m[6];\n dst[7] = m[7];\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n dst[11] = m[11];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n return dst;\n}\n/**\n * Copies a matrix (same as {@link mat4.copy})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nconst clone$2 = copy$2;\n/**\n * Check if 2 matrices are approximately equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are approximately equal\n */\nfunction equalsApproximately$2(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON &&\n Math.abs(a[4] - b[4]) < EPSILON &&\n Math.abs(a[5] - b[5]) < EPSILON &&\n Math.abs(a[6] - b[6]) < EPSILON &&\n Math.abs(a[7] - b[7]) < EPSILON &&\n Math.abs(a[8] - b[8]) < EPSILON &&\n Math.abs(a[9] - b[9]) < EPSILON &&\n Math.abs(a[10] - b[10]) < EPSILON &&\n Math.abs(a[11] - b[11]) < EPSILON &&\n Math.abs(a[12] - b[12]) < EPSILON &&\n Math.abs(a[13] - b[13]) < EPSILON &&\n Math.abs(a[14] - b[14]) < EPSILON &&\n Math.abs(a[15] - b[15]) < EPSILON;\n}\n/**\n * Check if 2 matrices are exactly equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are exactly equal\n */\nfunction equals$2(a, b) {\n return a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[3] === b[3] &&\n a[4] === b[4] &&\n a[5] === b[5] &&\n a[6] === b[6] &&\n a[7] === b[7] &&\n a[8] === b[8] &&\n a[9] === b[9] &&\n a[10] === b[10] &&\n a[11] === b[11] &&\n a[12] === b[12] &&\n a[13] === b[13] &&\n a[14] === b[14] &&\n a[15] === b[15];\n}\n/**\n * Creates a 4-by-4 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 4-by-4 identity matrix.\n */\nfunction identity$1(dst) {\n dst = dst || new MatType(16);\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nfunction transpose(m, dst) {\n dst = dst || new MatType(16);\n if (dst === m) {\n let t;\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n t = m[3];\n m[3] = m[12];\n m[12] = t;\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n t = m[7];\n m[7] = m[13];\n m[13] = t;\n t = m[11];\n m[11] = m[14];\n m[14] = t;\n return dst;\n }\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n dst[0] = m00;\n dst[1] = m10;\n dst[2] = m20;\n dst[3] = m30;\n dst[4] = m01;\n dst[5] = m11;\n dst[6] = m21;\n dst[7] = m31;\n dst[8] = m02;\n dst[9] = m12;\n dst[10] = m22;\n dst[11] = m32;\n dst[12] = m03;\n dst[13] = m13;\n dst[14] = m23;\n dst[15] = m33;\n return dst;\n}\n/**\n * Computes the inverse of a 4-by-4 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nfunction inverse$2(m, dst) {\n dst = dst || new MatType(16);\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n const tmp12 = m20 * m31;\n const tmp13 = m30 * m21;\n const tmp14 = m10 * m31;\n const tmp15 = m30 * m11;\n const tmp16 = m10 * m21;\n const tmp17 = m20 * m11;\n const tmp18 = m00 * m31;\n const tmp19 = m30 * m01;\n const tmp20 = m00 * m21;\n const tmp21 = m20 * m01;\n const tmp22 = m00 * m11;\n const tmp23 = m10 * m01;\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n const d = 1 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\n dst[0] = d * t0;\n dst[1] = d * t1;\n dst[2] = d * t2;\n dst[3] = d * t3;\n dst[4] = d * ((tmp1 * m10 + tmp2 * m20 + tmp5 * m30) -\n (tmp0 * m10 + tmp3 * m20 + tmp4 * m30));\n dst[5] = d * ((tmp0 * m00 + tmp7 * m20 + tmp8 * m30) -\n (tmp1 * m00 + tmp6 * m20 + tmp9 * m30));\n dst[6] = d * ((tmp3 * m00 + tmp6 * m10 + tmp11 * m30) -\n (tmp2 * m00 + tmp7 * m10 + tmp10 * m30));\n dst[7] = d * ((tmp4 * m00 + tmp9 * m10 + tmp10 * m20) -\n (tmp5 * m00 + tmp8 * m10 + tmp11 * m20));\n dst[8] = d * ((tmp12 * m13 + tmp15 * m23 + tmp16 * m33) -\n (tmp13 * m13 + tmp14 * m23 + tmp17 * m33));\n dst[9] = d * ((tmp13 * m03 + tmp18 * m23 + tmp21 * m33) -\n (tmp12 * m03 + tmp19 * m23 + tmp20 * m33));\n dst[10] = d * ((tmp14 * m03 + tmp19 * m13 + tmp22 * m33) -\n (tmp15 * m03 + tmp18 * m13 + tmp23 * m33));\n dst[11] = d * ((tmp17 * m03 + tmp20 * m13 + tmp23 * m23) -\n (tmp16 * m03 + tmp21 * m13 + tmp22 * m23));\n dst[12] = d * ((tmp14 * m22 + tmp17 * m32 + tmp13 * m12) -\n (tmp16 * m32 + tmp12 * m12 + tmp15 * m22));\n dst[13] = d * ((tmp20 * m32 + tmp12 * m02 + tmp19 * m22) -\n (tmp18 * m22 + tmp21 * m32 + tmp13 * m02));\n dst[14] = d * ((tmp18 * m12 + tmp23 * m32 + tmp15 * m02) -\n (tmp22 * m32 + tmp14 * m02 + tmp19 * m12));\n dst[15] = d * ((tmp22 * m22 + tmp16 * m02 + tmp21 * m12) -\n (tmp20 * m12 + tmp23 * m22 + tmp17 * m02));\n return dst;\n}\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nfunction determinant(m) {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n return m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3;\n}\n/**\n * Computes the inverse of a 4-by-4 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nconst invert$1 = inverse$2;\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nfunction multiply$2(a, b, dst) {\n dst = dst || new MatType(16);\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4 + 0];\n const a11 = a[4 + 1];\n const a12 = a[4 + 2];\n const a13 = a[4 + 3];\n const a20 = a[8 + 0];\n const a21 = a[8 + 1];\n const a22 = a[8 + 2];\n const a23 = a[8 + 3];\n const a30 = a[12 + 0];\n const a31 = a[12 + 1];\n const a32 = a[12 + 2];\n const a33 = a[12 + 3];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b03 = b[3];\n const b10 = b[4 + 0];\n const b11 = b[4 + 1];\n const b12 = b[4 + 2];\n const b13 = b[4 + 3];\n const b20 = b[8 + 0];\n const b21 = b[8 + 1];\n const b22 = b[8 + 2];\n const b23 = b[8 + 3];\n const b30 = b[12 + 0];\n const b31 = b[12 + 1];\n const b32 = b[12 + 2];\n const b33 = b[12 + 3];\n dst[0] = a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03;\n dst[1] = a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03;\n dst[2] = a02 * b00 + a12 * b01 + a22 * b02 + a32 * b03;\n dst[3] = a03 * b00 + a13 * b01 + a23 * b02 + a33 * b03;\n dst[4] = a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13;\n dst[5] = a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13;\n dst[6] = a02 * b10 + a12 * b11 + a22 * b12 + a32 * b13;\n dst[7] = a03 * b10 + a13 * b11 + a23 * b12 + a33 * b13;\n dst[8] = a00 * b20 + a10 * b21 + a20 * b22 + a30 * b23;\n dst[9] = a01 * b20 + a11 * b21 + a21 * b22 + a31 * b23;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22 + a32 * b23;\n dst[11] = a03 * b20 + a13 * b21 + a23 * b22 + a33 * b23;\n dst[12] = a00 * b30 + a10 * b31 + a20 * b32 + a30 * b33;\n dst[13] = a01 * b30 + a11 * b31 + a21 * b32 + a31 * b33;\n dst[14] = a02 * b30 + a12 * b31 + a22 * b32 + a32 * b33;\n dst[15] = a03 * b30 + a13 * b31 + a23 * b32 + a33 * b33;\n return dst;\n}\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nconst mul$2 = multiply$2;\n/**\n * Sets the translation component of a 4-by-4 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nfunction setTranslation(a, v, dst) {\n dst = dst || identity$1();\n if (a !== dst) {\n dst[0] = a[0];\n dst[1] = a[1];\n dst[2] = a[2];\n dst[3] = a[3];\n dst[4] = a[4];\n dst[5] = a[5];\n dst[6] = a[6];\n dst[7] = a[7];\n dst[8] = a[8];\n dst[9] = a[9];\n dst[10] = a[10];\n dst[11] = a[11];\n }\n dst[12] = v[0];\n dst[13] = v[1];\n dst[14] = v[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nfunction getTranslation(m, dst) {\n dst = dst || create$4();\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nfunction getAxis(m, axis, dst) {\n dst = dst || create$4();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n/**\n * Sets an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nfunction setAxis(a, v, axis, dst) {\n if (dst !== a) {\n dst = copy$2(a, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n dst[off + 2] = v[2];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nfunction getScaling(m, dst) {\n dst = dst || create$4();\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return dst;\n}\n/**\n * Computes a 4-by-4 perspective transformation matrix given the angular height\n * of the frustum, the aspect ratio, and the near and far clipping planes. The\n * arguments define a frustum extending in the negative z direction. The given\n * angle is the vertical angle of the frustum, and the horizontal angle is\n * determined to produce the given aspect ratio. The arguments near and far are\n * the distances to the near and far clipping planes. Note that near and far\n * are not z coordinates, but rather they are distances along the negative\n * z-axis. The matrix generated sends the viewing frustum to the unit box.\n * We assume a unit box extending from -1 to 1 in the x and y dimensions and\n * from 0 to 1 in the z dimension.\n *\n * Note: If you pass `Infinity` for zFar then it will produce a projection matrix\n * returns -Infinity for Z when transforming coordinates with Z <= 0 and +Infinity for Z\n * otherwise.\n *\n * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians).\n * @param aspect - The aspect ratio width / height.\n * @param zNear - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param zFar - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The perspective matrix.\n */\nfunction perspective(fieldOfViewYInRadians, aspect, zNear, zFar, dst) {\n dst = dst || new MatType(16);\n const f = Math.tan(Math.PI * 0.5 - 0.5 * fieldOfViewYInRadians);\n dst[0] = f / aspect;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = f;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[11] = -1;\n dst[12] = 0;\n dst[13] = 0;\n dst[15] = 0;\n if (zFar === Infinity) {\n dst[10] = -1;\n dst[14] = -zNear;\n }\n else {\n const rangeInv = 1 / (zNear - zFar);\n dst[10] = zFar * rangeInv;\n dst[14] = zFar * zNear * rangeInv;\n }\n return dst;\n}\n/**\n * Computes a 4-by-4 orthogonal transformation matrix that transforms from\n * the given the left, right, bottom, and top dimensions to -1 +1 in x, and y\n * and 0 to +1 in z.\n * @param left - Left side of the near clipping plane viewport.\n * @param right - Right side of the near clipping plane viewport.\n * @param bottom - Bottom of the near clipping plane viewport.\n * @param top - Top of the near clipping plane viewport.\n * @param near - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param far - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The orthographic projection matrix.\n */\nfunction ortho(left, right, bottom, top, near, far, dst) {\n dst = dst || new MatType(16);\n dst[0] = 2 / (right - left);\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 2 / (top - bottom);\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1 / (near - far);\n dst[11] = 0;\n dst[12] = (right + left) / (left - right);\n dst[13] = (top + bottom) / (bottom - top);\n dst[14] = near / (near - far);\n dst[15] = 1;\n return dst;\n}\n/**\n * Computes a 4-by-4 perspective transformation matrix given the left, right,\n * top, bottom, near and far clipping planes. The arguments define a frustum\n * extending in the negative z direction. The arguments near and far are the\n * distances to the near and far clipping planes. Note that near and far are not\n * z coordinates, but rather they are distances along the negative z-axis. The\n * matrix generated sends the viewing frustum to the unit box. We assume a unit\n * box extending from -1 to 1 in the x and y dimensions and from 0 to 1 in the z\n * dimension.\n * @param left - The x coordinate of the left plane of the box.\n * @param right - The x coordinate of the right plane of the box.\n * @param bottom - The y coordinate of the bottom plane of the box.\n * @param top - The y coordinate of the right plane of the box.\n * @param near - The negative z coordinate of the near plane of the box.\n * @param far - The negative z coordinate of the far plane of the box.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The perspective projection matrix.\n */\nfunction frustum(left, right, bottom, top, near, far, dst) {\n dst = dst || new MatType(16);\n const dx = (right - left);\n const dy = (top - bottom);\n const dz = (near - far);\n dst[0] = 2 * near / dx;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 2 * near / dy;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = (left + right) / dx;\n dst[9] = (top + bottom) / dy;\n dst[10] = far / dz;\n dst[11] = -1;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = near * far / dz;\n dst[15] = 0;\n return dst;\n}\nlet xAxis;\nlet yAxis;\nlet zAxis;\n/**\n * Computes a 4-by-4 aim transformation.\n *\n * This is a matrix which positions an object aiming down positive Z.\n * toward the target.\n *\n * Note: this is **NOT** the inverse of lookAt as lookAt looks at negative Z.\n *\n * @param position - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nfunction aim(position, target, up, dst) {\n dst = dst || new MatType(16);\n xAxis = xAxis || create$4();\n yAxis = yAxis || create$4();\n zAxis = zAxis || create$4();\n normalize$2(subtract$2(target, position, zAxis), zAxis);\n normalize$2(cross(up, zAxis, xAxis), xAxis);\n normalize$2(cross(zAxis, xAxis, yAxis), yAxis);\n dst[0] = xAxis[0];\n dst[1] = xAxis[1];\n dst[2] = xAxis[2];\n dst[3] = 0;\n dst[4] = yAxis[0];\n dst[5] = yAxis[1];\n dst[6] = yAxis[2];\n dst[7] = 0;\n dst[8] = zAxis[0];\n dst[9] = zAxis[1];\n dst[10] = zAxis[2];\n dst[11] = 0;\n dst[12] = position[0];\n dst[13] = position[1];\n dst[14] = position[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Computes a 4-by-4 camera aim transformation.\n *\n * This is a matrix which positions an object aiming down negative Z.\n * toward the target.\n *\n * Note: this is the inverse of `lookAt`\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nfunction cameraAim(eye, target, up, dst) {\n dst = dst || new MatType(16);\n xAxis = xAxis || create$4();\n yAxis = yAxis || create$4();\n zAxis = zAxis || create$4();\n normalize$2(subtract$2(eye, target, zAxis), zAxis);\n normalize$2(cross(up, zAxis, xAxis), xAxis);\n normalize$2(cross(zAxis, xAxis, yAxis), yAxis);\n dst[0] = xAxis[0];\n dst[1] = xAxis[1];\n dst[2] = xAxis[2];\n dst[3] = 0;\n dst[4] = yAxis[0];\n dst[5] = yAxis[1];\n dst[6] = yAxis[2];\n dst[7] = 0;\n dst[8] = zAxis[0];\n dst[9] = zAxis[1];\n dst[10] = zAxis[2];\n dst[11] = 0;\n dst[12] = eye[0];\n dst[13] = eye[1];\n dst[14] = eye[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Computes a 4-by-4 view transformation.\n *\n * This is a view matrix which transforms all other objects\n * to be in the space of the view defined by the parameters.\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The look-at matrix.\n */\nfunction lookAt(eye, target, up, dst) {\n dst = dst || new MatType(16);\n xAxis = xAxis || create$4();\n yAxis = yAxis || create$4();\n zAxis = zAxis || create$4();\n normalize$2(subtract$2(eye, target, zAxis), zAxis);\n normalize$2(cross(up, zAxis, xAxis), xAxis);\n normalize$2(cross(zAxis, xAxis, yAxis), yAxis);\n dst[0] = xAxis[0];\n dst[1] = yAxis[0];\n dst[2] = zAxis[0];\n dst[3] = 0;\n dst[4] = xAxis[1];\n dst[5] = yAxis[1];\n dst[6] = zAxis[1];\n dst[7] = 0;\n dst[8] = xAxis[2];\n dst[9] = yAxis[2];\n dst[10] = zAxis[2];\n dst[11] = 0;\n dst[12] = -(xAxis[0] * eye[0] + xAxis[1] * eye[1] + xAxis[2] * eye[2]);\n dst[13] = -(yAxis[0] * eye[0] + yAxis[1] * eye[1] + yAxis[2] * eye[2]);\n dst[14] = -(zAxis[0] * eye[0] + zAxis[1] * eye[1] + zAxis[2] * eye[2]);\n dst[15] = 1;\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which translates by the given vector v.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nfunction translation(v, dst) {\n dst = dst || new MatType(16);\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n dst[11] = 0;\n dst[12] = v[0];\n dst[13] = v[1];\n dst[14] = v[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Translates the given 4-by-4 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nfunction translate(m, v, dst) {\n dst = dst || new MatType(16);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n if (m !== dst) {\n dst[0] = m00;\n dst[1] = m01;\n dst[2] = m02;\n dst[3] = m03;\n dst[4] = m10;\n dst[5] = m11;\n dst[6] = m12;\n dst[7] = m13;\n dst[8] = m20;\n dst[9] = m21;\n dst[10] = m22;\n dst[11] = m23;\n }\n dst[12] = m00 * v0 + m10 * v1 + m20 * v2 + m30;\n dst[13] = m01 * v0 + m11 * v1 + m21 * v2 + m31;\n dst[14] = m02 * v0 + m12 * v1 + m22 * v2 + m32;\n dst[15] = m03 * v0 + m13 * v1 + m23 * v2 + m33;\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the x-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotationX(angleInRadians, dst) {\n dst = dst || new MatType(16);\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = c;\n dst[6] = s;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = -s;\n dst[10] = c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the x-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotateX$1(m, angleInRadians, dst) {\n dst = dst || new MatType(16);\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[4] = c * m10 + s * m20;\n dst[5] = c * m11 + s * m21;\n dst[6] = c * m12 + s * m22;\n dst[7] = c * m13 + s * m23;\n dst[8] = c * m20 - s * m10;\n dst[9] = c * m21 - s * m11;\n dst[10] = c * m22 - s * m12;\n dst[11] = c * m23 - s * m13;\n if (m !== dst) {\n dst[0] = m[0];\n dst[1] = m[1];\n dst[2] = m[2];\n dst[3] = m[3];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the y-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotationY(angleInRadians, dst) {\n dst = dst || new MatType(16);\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c;\n dst[1] = 0;\n dst[2] = -s;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = s;\n dst[9] = 0;\n dst[10] = c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the y-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotateY$1(m, angleInRadians, dst) {\n dst = dst || new MatType(16);\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c * m00 - s * m20;\n dst[1] = c * m01 - s * m21;\n dst[2] = c * m02 - s * m22;\n dst[3] = c * m03 - s * m23;\n dst[8] = c * m20 + s * m00;\n dst[9] = c * m21 + s * m01;\n dst[10] = c * m22 + s * m02;\n dst[11] = c * m23 + s * m03;\n if (m !== dst) {\n dst[4] = m[4];\n dst[5] = m[5];\n dst[6] = m[6];\n dst[7] = m[7];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the z-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotationZ(angleInRadians, dst) {\n dst = dst || new MatType(16);\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c;\n dst[1] = s;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = -s;\n dst[5] = c;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the z-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotateZ$1(m, angleInRadians, dst) {\n dst = dst || new MatType(16);\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c * m00 + s * m10;\n dst[1] = c * m01 + s * m11;\n dst[2] = c * m02 + s * m12;\n dst[3] = c * m03 + s * m13;\n dst[4] = c * m10 - s * m00;\n dst[5] = c * m11 - s * m01;\n dst[6] = c * m12 - s * m02;\n dst[7] = c * m13 - s * m03;\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n dst[11] = m[11];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nfunction axisRotation(axis, angleInRadians, dst) {\n dst = dst || new MatType(16);\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n dst[0] = xx + (1 - xx) * c;\n dst[1] = x * y * oneMinusCosine + z * s;\n dst[2] = x * z * oneMinusCosine - y * s;\n dst[3] = 0;\n dst[4] = x * y * oneMinusCosine - z * s;\n dst[5] = yy + (1 - yy) * c;\n dst[6] = y * z * oneMinusCosine + x * s;\n dst[7] = 0;\n dst[8] = x * z * oneMinusCosine + y * s;\n dst[9] = y * z * oneMinusCosine - x * s;\n dst[10] = zz + (1 - zz) * c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle. (same as axisRotation)\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nconst rotation = axisRotation;\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle.\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction axisRotate(m, axis, angleInRadians, dst) {\n dst = dst || new MatType(16);\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n const r00 = xx + (1 - xx) * c;\n const r01 = x * y * oneMinusCosine + z * s;\n const r02 = x * z * oneMinusCosine - y * s;\n const r10 = x * y * oneMinusCosine - z * s;\n const r11 = yy + (1 - yy) * c;\n const r12 = y * z * oneMinusCosine + x * s;\n const r20 = x * z * oneMinusCosine + y * s;\n const r21 = y * z * oneMinusCosine - x * s;\n const r22 = zz + (1 - zz) * c;\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n dst[0] = r00 * m00 + r01 * m10 + r02 * m20;\n dst[1] = r00 * m01 + r01 * m11 + r02 * m21;\n dst[2] = r00 * m02 + r01 * m12 + r02 * m22;\n dst[3] = r00 * m03 + r01 * m13 + r02 * m23;\n dst[4] = r10 * m00 + r11 * m10 + r12 * m20;\n dst[5] = r10 * m01 + r11 * m11 + r12 * m21;\n dst[6] = r10 * m02 + r11 * m12 + r12 * m22;\n dst[7] = r10 * m03 + r11 * m13 + r12 * m23;\n dst[8] = r20 * m00 + r21 * m10 + r22 * m20;\n dst[9] = r20 * m01 + r21 * m11 + r22 * m21;\n dst[10] = r20 * m02 + r21 * m12 + r22 * m22;\n dst[11] = r20 * m03 + r21 * m13 + r22 * m23;\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle. (same as rotate)\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nconst rotate = axisRotate;\n/**\n * Creates a 4-by-4 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * three entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction scaling(v, dst) {\n dst = dst || new MatType(16);\n dst[0] = v[0];\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = v[1];\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = v[2];\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Scales the given 4-by-4 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of three entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction scale$2(m, v, dst) {\n dst = dst || new MatType(16);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n dst[0] = v0 * m[0 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2];\n dst[3] = v0 * m[0 * 4 + 3];\n dst[4] = v1 * m[1 * 4 + 0];\n dst[5] = v1 * m[1 * 4 + 1];\n dst[6] = v1 * m[1 * 4 + 2];\n dst[7] = v1 * m[1 * 4 + 3];\n dst[8] = v2 * m[2 * 4 + 0];\n dst[9] = v2 * m[2 * 4 + 1];\n dst[10] = v2 * m[2 * 4 + 2];\n dst[11] = v2 * m[2 * 4 + 3];\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which scales a uniform amount in each dimension.\n * @param s - the amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction uniformScaling(s, dst) {\n dst = dst || new MatType(16);\n dst[0] = s;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = s;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = s;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Scales the given 4-by-4 matrix in each dimension by a uniform scale.\n * @param m - The matrix to be modified.\n * @param s - The amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction uniformScale(m, s, dst) {\n dst = dst || new MatType(16);\n dst[0] = s * m[0 * 4 + 0];\n dst[1] = s * m[0 * 4 + 1];\n dst[2] = s * m[0 * 4 + 2];\n dst[3] = s * m[0 * 4 + 3];\n dst[4] = s * m[1 * 4 + 0];\n dst[5] = s * m[1 * 4 + 1];\n dst[6] = s * m[1 * 4 + 2];\n dst[7] = s * m[1 * 4 + 3];\n dst[8] = s * m[2 * 4 + 0];\n dst[9] = s * m[2 * 4 + 1];\n dst[10] = s * m[2 * 4 + 2];\n dst[11] = s * m[2 * 4 + 3];\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n\nvar mat4Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setDefaultType: setDefaultType$3,\n create: create$2,\n set: set$2,\n fromMat3: fromMat3,\n fromQuat: fromQuat,\n negate: negate$1,\n copy: copy$2,\n clone: clone$2,\n equalsApproximately: equalsApproximately$2,\n equals: equals$2,\n identity: identity$1,\n transpose: transpose,\n inverse: inverse$2,\n determinant: determinant,\n invert: invert$1,\n multiply: multiply$2,\n mul: mul$2,\n setTranslation: setTranslation,\n getTranslation: getTranslation,\n getAxis: getAxis,\n setAxis: setAxis,\n getScaling: getScaling,\n perspective: perspective,\n ortho: ortho,\n frustum: frustum,\n aim: aim,\n cameraAim: cameraAim,\n lookAt: lookAt,\n translation: translation,\n translate: translate,\n rotationX: rotationX,\n rotateX: rotateX$1,\n rotationY: rotationY,\n rotateY: rotateY$1,\n rotationZ: rotationZ,\n rotateZ: rotateZ$1,\n axisRotation: axisRotation,\n rotation: rotation,\n axisRotate: axisRotate,\n rotate: rotate,\n scaling: scaling,\n scale: scale$2,\n uniformScaling: uniformScaling,\n uniformScale: uniformScale\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Quat4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Quat4`. In other words you can do this\n *\n * const v = quat4.cross(v1, v2); // Creates a new Quat4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = quat4.create();\n * quat4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * quat4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet QuatType = Float32Array;\n/**\n * Sets the type this library creates for a Quat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Quat4\n */\nfunction setDefaultType$2(ctor) {\n const oldType = QuatType;\n QuatType = ctor;\n return oldType;\n}\n/**\n * Creates a quat4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nfunction create$1(x, y, z, w) {\n const dst = new QuatType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a Quat; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nconst fromValues$1 = create$1;\n/**\n * Sets the values of a Quat\n * Also see {@link quat.create} and {@link quat.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set$1(x, y, z, w, dst) {\n dst = dst || new QuatType(4);\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n return dst;\n}\n/**\n * Sets a quaternion from the given angle and axis,\n * then returns it.\n *\n * @param axis - the axis to rotate around\n * @param angleInRadians - the angle\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The quaternion that represents the given axis and angle\n **/\nfunction fromAxisAngle(axis, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const s = Math.sin(halfAngle);\n dst[0] = s * axis[0];\n dst[1] = s * axis[1];\n dst[2] = s * axis[2];\n dst[3] = Math.cos(halfAngle);\n return dst;\n}\n/**\n * Gets the rotation axis and angle\n * @param q - quaternion to compute from\n * @param dst - Vec3 to hold result. If not passed in a new one is created.\n * @return angle and axis\n */\nfunction toAxisAngle(q, dst) {\n dst = dst || create$4(4);\n const angle = Math.acos(q[3]) * 2;\n const s = Math.sin(angle * 0.5);\n if (s > EPSILON) {\n dst[0] = q[0] / s;\n dst[1] = q[1] / s;\n dst[2] = q[2] / s;\n }\n else {\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n }\n return { angle, axis: dst };\n}\n/**\n * Returns the angle in degrees between two rotations a and b.\n * @param a - quaternion a\n * @param b - quaternion b\n * @return angle in radians between the two quaternions\n */\nfunction angle(a, b) {\n const d = dot$1(a, b);\n return Math.acos(2 * d * d - 1);\n}\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction multiply$1(a, b, dst) {\n dst = dst || new QuatType(4);\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const bw = b[3];\n dst[0] = ax * bw + aw * bx + ay * bz - az * by;\n dst[1] = ay * bw + aw * by + az * bx - ax * bz;\n dst[2] = az * bw + aw * bz + ax * by - ay * bx;\n dst[3] = aw * bw - ax * bx - ay * by - az * bz;\n return dst;\n}\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nconst mul$1 = multiply$1;\n/**\n * Rotates the given quaternion around the X axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction rotateX(q, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const bx = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n dst[0] = qx * bw + qw * bx;\n dst[1] = qy * bw + qz * bx;\n dst[2] = qz * bw - qy * bx;\n dst[3] = qw * bw - qx * bx;\n return dst;\n}\n/**\n * Rotates the given quaternion around the Y axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction rotateY(q, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const by = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n dst[0] = qx * bw - qz * by;\n dst[1] = qy * bw + qw * by;\n dst[2] = qz * bw + qx * by;\n dst[3] = qw * bw - qy * by;\n return dst;\n}\n/**\n * Rotates the given quaternion around the Z axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction rotateZ(q, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const bz = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n dst[0] = qx * bw + qy * bz;\n dst[1] = qy * bw - qx * bz;\n dst[2] = qz * bw + qw * bz;\n dst[3] = qw * bw - qz * bz;\n return dst;\n}\n/**\n * Spherically linear interpolate between two quaternions\n *\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction slerp(a, b, t, dst) {\n dst = dst || new QuatType(4);\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n let bx = b[0];\n let by = b[1];\n let bz = b[2];\n let bw = b[3];\n let cosOmega = ax * bx + ay * by + az * bz + aw * bw;\n if (cosOmega < 0) {\n cosOmega = -cosOmega;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n let scale0;\n let scale1;\n if (1.0 - cosOmega > EPSILON) {\n const omega = Math.acos(cosOmega);\n const sinOmega = Math.sin(omega);\n scale0 = Math.sin((1 - t) * omega) / sinOmega;\n scale1 = Math.sin(t * omega) / sinOmega;\n }\n else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n dst[0] = scale0 * ax + scale1 * bx;\n dst[1] = scale0 * ay + scale1 * by;\n dst[2] = scale0 * az + scale1 * bz;\n dst[3] = scale0 * aw + scale1 * bw;\n return dst;\n}\n/**\n * Compute the inverse of a quaternion\n *\n * @param q - quaternion to compute the inverse of\n * @returns A quaternion that is the result of a * b\n */\nfunction inverse$1(q, dst) {\n dst = dst || new QuatType(4);\n const a0 = q[0];\n const a1 = q[1];\n const a2 = q[2];\n const a3 = q[3];\n const dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n const invDot = dot ? 1 / dot : 0;\n dst[0] = -a0 * invDot;\n dst[1] = -a1 * invDot;\n dst[2] = -a2 * invDot;\n dst[3] = a3 * invDot;\n return dst;\n}\n/**\n * Compute the conjugate of a quaternion\n * For quaternions with a magnitude of 1 (a unit quaternion)\n * this returns the same as the inverse but is faster to calculate.\n *\n * @param q - quaternion to compute the conjugate of.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The conjugate of q\n */\nfunction conjugate(q, dst) {\n dst = dst || new QuatType(4);\n dst[0] = -q[0];\n dst[1] = -q[1];\n dst[2] = -q[2];\n dst[3] = q[3];\n return dst;\n}\n/**\n * Creates a quaternion from the given rotation matrix.\n *\n * The created quaternion is not normalized.\n *\n * @param m - rotation matrix\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nfunction fromMat(m, dst) {\n dst = dst || new QuatType(4);\n /*\n 0 1 2\n 3 4 5\n 6 7 8\n \n 0 1 2\n 4 5 6\n 8 9 10\n */\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n const trace = m[0] + m[5] + m[10];\n if (trace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n const root = Math.sqrt(trace + 1); // 2w\n dst[3] = 0.5 * root;\n const invRoot = 0.5 / root; // 1/(4w)\n dst[0] = (m[6] - m[9]) * invRoot;\n dst[1] = (m[8] - m[2]) * invRoot;\n dst[2] = (m[1] - m[4]) * invRoot;\n }\n else {\n // |w| <= 1/2\n let i = 0;\n if (m[5] > m[0]) {\n i = 1;\n }\n if (m[10] > m[i * 4 + i]) {\n i = 2;\n }\n const j = (i + 1) % 3;\n const k = (i + 2) % 3;\n const root = Math.sqrt(m[i * 4 + i] - m[j * 4 + j] - m[k * 4 + k] + 1.0);\n dst[i] = 0.5 * root;\n const invRoot = 0.5 / root;\n dst[3] = (m[j * 4 + k] - m[k * 4 + j]) * invRoot;\n dst[j] = (m[j * 4 + i] + m[i * 4 + j]) * invRoot;\n dst[k] = (m[k * 4 + i] + m[i * 4 + k]) * invRoot;\n }\n return dst;\n}\n/**\n * Creates a quaternion from the given euler angle x, y, z using the provided intrinsic order for the conversion.\n *\n * @param xAngleInRadians - angle to rotate around X axis in radians.\n * @param yAngleInRadians - angle to rotate around Y axis in radians.\n * @param zAngleInRadians - angle to rotate around Z axis in radians.\n * @param order - order to apply euler angles\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion representing the same rotation as the euler angles applied in the given order\n */\nfunction fromEuler(xAngleInRadians, yAngleInRadians, zAngleInRadians, order, dst) {\n dst = dst || new QuatType(4);\n const xHalfAngle = xAngleInRadians * 0.5;\n const yHalfAngle = yAngleInRadians * 0.5;\n const zHalfAngle = zAngleInRadians * 0.5;\n const sx = Math.sin(xHalfAngle);\n const cx = Math.cos(xHalfAngle);\n const sy = Math.sin(yHalfAngle);\n const cy = Math.cos(yHalfAngle);\n const sz = Math.sin(zHalfAngle);\n const cz = Math.cos(zHalfAngle);\n switch (order) {\n case 'xyz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'xzy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n case 'yxz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n case 'yzx':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'zxy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'zyx':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n default:\n throw new Error(`Unknown rotation order: ${order}`);\n }\n return dst;\n}\n/**\n * Copies a quaternion. (same as {@link quat.clone})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is a copy of q\n */\nfunction copy$1(q, dst) {\n dst = dst || new QuatType(4);\n dst[0] = q[0];\n dst[1] = q[1];\n dst[2] = q[2];\n dst[3] = q[3];\n return dst;\n}\n/**\n * Clones a quaternion. (same as {@link quat.copy})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A copy of q.\n */\nconst clone$1 = copy$1;\n/**\n * Adds two quaternions; assumes a and b have the same dimension.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the sum of a and b.\n */\nfunction add$1(a, b, dst) {\n dst = dst || new QuatType(4);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n return dst;\n}\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nfunction subtract$1(a, b, dst) {\n dst = dst || new QuatType(4);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n return dst;\n}\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nconst sub$1 = subtract$1;\n/**\n * Multiplies a quaternion by a scalar.\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nfunction mulScalar$1(v, k, dst) {\n dst = dst || new QuatType(4);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n return dst;\n}\n/**\n * Multiplies a quaternion by a scalar. (same as mulScalar)\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nconst scale$1 = mulScalar$1;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nfunction divScalar$1(v, k, dst) {\n dst = dst || new QuatType(4);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n return dst;\n}\n/**\n * Computes the dot product of two quaternions\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns dot product\n */\nfunction dot$1(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n/**\n * Performs linear interpolation on two quaternions.\n * Given quaternions a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param t - Interpolation coefficient.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp$1(a, b, t, dst) {\n dst = dst || new QuatType(4);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n return dst;\n}\n/**\n * Computes the length of quaternion\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nfunction length$1(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n/**\n * Computes the length of quaternion (same as length)\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nconst len$1 = length$1;\n/**\n * Computes the square of the length of quaternion\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nfunction lengthSq$1(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n/**\n * Computes the square of the length of quaternion (same as lengthSq)\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nconst lenSq$1 = lengthSq$1;\n/**\n * Divides a quaternion by its Euclidean length and returns the quotient.\n * @param v - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The normalized quaternion.\n */\nfunction normalize$1(v, dst) {\n dst = dst || new QuatType(4);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n return dst;\n}\n/**\n * Check if 2 quaternions are approximately equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are approximately equal\n */\nfunction equalsApproximately$1(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON;\n}\n/**\n * Check if 2 quaternions are exactly equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are exactly equal\n */\nfunction equals$1(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Creates an identity quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns an identity quaternion\n */\nfunction identity(dst) {\n dst = dst || new QuatType(4);\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n return dst;\n}\nlet tempVec3;\nlet xUnitVec3;\nlet yUnitVec3;\n/**\n * Computes a quaternion to represent the shortest rotation from one vector to another.\n *\n * @param aUnit - the start vector\n * @param bUnit - the end vector\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nfunction rotationTo(aUnit, bUnit, dst) {\n dst = dst || new QuatType(4);\n tempVec3 = tempVec3 || create$4();\n xUnitVec3 = xUnitVec3 || create$4(1, 0, 0);\n yUnitVec3 = yUnitVec3 || create$4(0, 1, 0);\n const dot = dot$2(aUnit, bUnit);\n if (dot < -0.999999) {\n cross(xUnitVec3, aUnit, tempVec3);\n if (len$2(tempVec3) < 0.000001) {\n cross(yUnitVec3, aUnit, tempVec3);\n }\n normalize$2(tempVec3, tempVec3);\n fromAxisAngle(tempVec3, Math.PI, dst);\n return dst;\n }\n else if (dot > 0.999999) {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n return dst;\n }\n else {\n cross(aUnit, bUnit, tempVec3);\n dst[0] = tempVec3[0];\n dst[1] = tempVec3[1];\n dst[2] = tempVec3[2];\n dst[3] = 1 + dot;\n return normalize$1(dst, dst);\n }\n}\nlet tempQuat1;\nlet tempQuat2;\n/**\n * Performs a spherical linear interpolation with two control points\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param c - the third quaternion\n * @param d - the fourth quaternion\n * @param t - Interpolation coefficient 0 to 1\n * @returns result\n */\nfunction sqlerp(a, b, c, d, t, dst) {\n dst = dst || new QuatType(4);\n tempQuat1 = tempQuat1 || new QuatType(4);\n tempQuat2 = tempQuat2 || new QuatType(4);\n slerp(a, d, t, tempQuat1);\n slerp(b, c, t, tempQuat2);\n slerp(tempQuat1, tempQuat2, 2 * t * (1 - t), dst);\n return dst;\n}\n\nvar quatImpl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create$1,\n setDefaultType: setDefaultType$2,\n fromValues: fromValues$1,\n set: set$1,\n fromAxisAngle: fromAxisAngle,\n toAxisAngle: toAxisAngle,\n angle: angle,\n multiply: multiply$1,\n mul: mul$1,\n rotateX: rotateX,\n rotateY: rotateY,\n rotateZ: rotateZ,\n slerp: slerp,\n inverse: inverse$1,\n conjugate: conjugate,\n fromMat: fromMat,\n fromEuler: fromEuler,\n copy: copy$1,\n clone: clone$1,\n add: add$1,\n subtract: subtract$1,\n sub: sub$1,\n mulScalar: mulScalar$1,\n scale: scale$1,\n divScalar: divScalar$1,\n dot: dot$1,\n lerp: lerp$1,\n length: length$1,\n len: len$1,\n lengthSq: lengthSq$1,\n lenSq: lenSq$1,\n normalize: normalize$1,\n equalsApproximately: equalsApproximately$1,\n equals: equals$1,\n identity: identity,\n rotationTo: rotationTo,\n sqlerp: sqlerp\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Vec4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec4`. In other words you can do this\n *\n * const v = vec4.cross(v1, v2); // Creates a new Vec4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec4.create();\n * vec4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet VecType = Float32Array;\n/**\n * Sets the type this library creates for a Vec4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec4\n */\nfunction setDefaultType$1(ctor) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n/**\n * Creates a vec4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nfunction create(x, y, z, w) {\n const dst = new VecType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a vec4; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nconst fromValues = create;\n/**\n * Sets the values of a Vec4\n * Also see {@link vec4.create} and {@link vec4.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set(x, y, z, w, dst) {\n dst = dst || new VecType(4);\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n return dst;\n}\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nfunction ceil(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n dst[3] = Math.ceil(v[3]);\n return dst;\n}\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nfunction floor(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n dst[3] = Math.floor(v[3]);\n return dst;\n}\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nfunction round(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n dst[3] = Math.round(v[3]);\n return dst;\n}\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nfunction clamp(v, min = 0, max = 1, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n dst[3] = Math.min(max, Math.max(min, v[3]));\n return dst;\n}\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nfunction add(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n return dst;\n}\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nfunction addScaled(a, b, scale, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n dst[3] = a[3] + b[3] * scale;\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nfunction subtract(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nconst sub = subtract;\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nfunction equalsApproximately(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON;\n}\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nfunction equals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp(a, b, t, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n return dst;\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nfunction lerpV(a, b, t, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n dst[3] = a[3] + t[3] * (b[3] - a[3]);\n return dst;\n}\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nfunction max(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n dst[3] = Math.max(a[3], b[3]);\n return dst;\n}\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nfunction min(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n dst[3] = Math.min(a[3], b[3]);\n return dst;\n}\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction mulScalar(v, k, dst) {\n dst = dst || new VecType(4);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n return dst;\n}\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nconst scale = mulScalar;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction divScalar(v, k, dst) {\n dst = dst || new VecType(4);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n return dst;\n}\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nfunction inverse(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n dst[3] = 1 / v[3];\n return dst;\n}\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nconst invert = inverse;\n/**\n * Computes the dot product of two vectors\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nfunction dot(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nfunction length(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nconst len = length;\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nfunction lengthSq(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nconst lenSq = lengthSq;\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nfunction distance(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return Math.sqrt(dx * dx + dy * dy + dz * dz + dw * dw);\n}\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nconst dist = distance;\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nfunction distanceSq(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return dx * dx + dy * dy + dz * dz + dw * dw;\n}\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nconst distSq = distanceSq;\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nfunction normalize(v, dst) {\n dst = dst || new VecType(4);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n return dst;\n}\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nfunction negate(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n dst[3] = -v[3];\n return dst;\n}\n/**\n * Copies a vector. (same as {@link vec4.clone})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nfunction copy(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n dst[3] = v[3];\n return dst;\n}\n/**\n * Clones a vector. (same as {@link vec4.copy})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nconst clone = copy;\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nfunction multiply(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n dst[3] = a[3] * b[3];\n return dst;\n}\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nconst mul = multiply;\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nfunction divide(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n dst[3] = a[3] / b[3];\n return dst;\n}\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nconst div = divide;\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nfunction zero(dst) {\n dst = dst || new VecType(4);\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n return dst;\n}\n/**\n * transform vec4 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec4 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat4(v, m, dst) {\n dst = dst || new VecType(4);\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = v[3];\n dst[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n dst[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n dst[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n dst[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return dst;\n}\n\nvar vec4Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create,\n setDefaultType: setDefaultType$1,\n fromValues: fromValues,\n set: set,\n ceil: ceil,\n floor: floor,\n round: round,\n clamp: clamp,\n add: add,\n addScaled: addScaled,\n subtract: subtract,\n sub: sub,\n equalsApproximately: equalsApproximately,\n equals: equals,\n lerp: lerp,\n lerpV: lerpV,\n max: max,\n min: min,\n mulScalar: mulScalar,\n scale: scale,\n divScalar: divScalar,\n inverse: inverse,\n invert: invert,\n dot: dot,\n length: length,\n len: len,\n lengthSq: lengthSq,\n lenSq: lenSq,\n distance: distance,\n dist: dist,\n distanceSq: distanceSq,\n distSq: distSq,\n normalize: normalize,\n negate: negate,\n copy: copy,\n clone: clone,\n multiply: multiply,\n mul: mul,\n divide: divide,\n div: div,\n zero: zero,\n transformMat4: transformMat4\n});\n\n/**\n * Sets the type this library creates for all types\n *\n * example:\n *\n * ```\n * setDefaultType(Float64Array);\n * ```\n *\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n */\nfunction setDefaultType(ctor) {\n setDefaultType$4(ctor);\n setDefaultType$3(ctor);\n setDefaultType$2(ctor);\n setDefaultType$6(ctor);\n setDefaultType$5(ctor);\n setDefaultType$1(ctor);\n}\n\nexport { mat3Impl as mat3, mat4Impl as mat4, quatImpl as quat, setDefaultType, utils, vec2Impl as vec2, vec3Impl as vec3, vec4Impl as vec4 };\n//# sourceMappingURL=wgpu-matrix.module.js.map\n","/**\n * dat-gui JavaScript Controller Library\n * https://github.com/dataarts/dat.gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction ___$insertStyle(css) {\n if (!css) {\n return;\n }\n if (typeof window === 'undefined') {\n return;\n }\n\n var style = document.createElement('style');\n\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n document.head.appendChild(style);\n\n return css;\n}\n\nfunction colorToString (color, forceCSSHex) {\n var colorFormat = color.__state.conversionName.toString();\n var r = Math.round(color.r);\n var g = Math.round(color.g);\n var b = Math.round(color.b);\n var a = color.a;\n var h = Math.round(color.h);\n var s = color.s.toFixed(1);\n var v = color.v.toFixed(1);\n if (forceCSSHex || colorFormat === 'THREE_CHAR_HEX' || colorFormat === 'SIX_CHAR_HEX') {\n var str = color.hex.toString(16);\n while (str.length < 6) {\n str = '0' + str;\n }\n return '#' + str;\n } else if (colorFormat === 'CSS_RGB') {\n return 'rgb(' + r + ',' + g + ',' + b + ')';\n } else if (colorFormat === 'CSS_RGBA') {\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n } else if (colorFormat === 'HEX') {\n return '0x' + color.hex.toString(16);\n } else if (colorFormat === 'RGB_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ']';\n } else if (colorFormat === 'RGBA_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ',' + a + ']';\n } else if (colorFormat === 'RGB_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + '}';\n } else if (colorFormat === 'RGBA_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}';\n } else if (colorFormat === 'HSV_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + '}';\n } else if (colorFormat === 'HSVA_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}';\n }\n return 'unknown format';\n}\n\nvar ARR_EACH = Array.prototype.forEach;\nvar ARR_SLICE = Array.prototype.slice;\nvar Common = {\n BREAK: {},\n extend: function extend(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (!this.isUndefined(obj[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n defaults: function defaults(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (this.isUndefined(target[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n compose: function compose() {\n var toCall = ARR_SLICE.call(arguments);\n return function () {\n var args = ARR_SLICE.call(arguments);\n for (var i = toCall.length - 1; i >= 0; i--) {\n args = [toCall[i].apply(this, args)];\n }\n return args[0];\n };\n },\n each: function each(obj, itr, scope) {\n if (!obj) {\n return;\n }\n if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) {\n obj.forEach(itr, scope);\n } else if (obj.length === obj.length + 0) {\n var key = void 0;\n var l = void 0;\n for (key = 0, l = obj.length; key < l; key++) {\n if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) {\n return;\n }\n }\n } else {\n for (var _key in obj) {\n if (itr.call(scope, obj[_key], _key) === this.BREAK) {\n return;\n }\n }\n }\n },\n defer: function defer(fnc) {\n setTimeout(fnc, 0);\n },\n debounce: function debounce(func, threshold, callImmediately) {\n var timeout = void 0;\n return function () {\n var obj = this;\n var args = arguments;\n function delayed() {\n timeout = null;\n if (!callImmediately) func.apply(obj, args);\n }\n var callNow = callImmediately || !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(delayed, threshold);\n if (callNow) {\n func.apply(obj, args);\n }\n };\n },\n toArray: function toArray(obj) {\n if (obj.toArray) return obj.toArray();\n return ARR_SLICE.call(obj);\n },\n isUndefined: function isUndefined(obj) {\n return obj === undefined;\n },\n isNull: function isNull(obj) {\n return obj === null;\n },\n isNaN: function (_isNaN) {\n function isNaN(_x) {\n return _isNaN.apply(this, arguments);\n }\n isNaN.toString = function () {\n return _isNaN.toString();\n };\n return isNaN;\n }(function (obj) {\n return isNaN(obj);\n }),\n isArray: Array.isArray || function (obj) {\n return obj.constructor === Array;\n },\n isObject: function isObject(obj) {\n return obj === Object(obj);\n },\n isNumber: function isNumber(obj) {\n return obj === obj + 0;\n },\n isString: function isString(obj) {\n return obj === obj + '';\n },\n isBoolean: function isBoolean(obj) {\n return obj === false || obj === true;\n },\n isFunction: function isFunction(obj) {\n return obj instanceof Function;\n }\n};\n\nvar INTERPRETATIONS = [\n{\n litmus: Common.isString,\n conversions: {\n THREE_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString() + test[1].toString() + test[2].toString() + test[2].toString() + test[3].toString() + test[3].toString(), 0)\n };\n },\n write: colorToString\n },\n SIX_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9]{6})$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString(), 0)\n };\n },\n write: colorToString\n },\n CSS_RGB: {\n read: function read(original) {\n var test = original.match(/^rgb\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3])\n };\n },\n write: colorToString\n },\n CSS_RGBA: {\n read: function read(original) {\n var test = original.match(/^rgba\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3]),\n a: parseFloat(test[4])\n };\n },\n write: colorToString\n }\n }\n},\n{\n litmus: Common.isNumber,\n conversions: {\n HEX: {\n read: function read(original) {\n return {\n space: 'HEX',\n hex: original,\n conversionName: 'HEX'\n };\n },\n write: function write(color) {\n return color.hex;\n }\n }\n }\n},\n{\n litmus: Common.isArray,\n conversions: {\n RGB_ARRAY: {\n read: function read(original) {\n if (original.length !== 3) {\n return false;\n }\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b];\n }\n },\n RGBA_ARRAY: {\n read: function read(original) {\n if (original.length !== 4) return false;\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2],\n a: original[3]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b, color.a];\n }\n }\n }\n},\n{\n litmus: Common.isObject,\n conversions: {\n RGBA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b) && Common.isNumber(original.a)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b,\n a: color.a\n };\n }\n },\n RGB_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b\n };\n }\n },\n HSVA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v) && Common.isNumber(original.a)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v,\n a: color.a\n };\n }\n },\n HSV_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v\n };\n }\n }\n }\n}];\nvar result = void 0;\nvar toReturn = void 0;\nvar interpret = function interpret() {\n toReturn = false;\n var original = arguments.length > 1 ? Common.toArray(arguments) : arguments[0];\n Common.each(INTERPRETATIONS, function (family) {\n if (family.litmus(original)) {\n Common.each(family.conversions, function (conversion, conversionName) {\n result = conversion.read(original);\n if (toReturn === false && result !== false) {\n toReturn = result;\n result.conversionName = conversionName;\n result.conversion = conversion;\n return Common.BREAK;\n }\n });\n return Common.BREAK;\n }\n });\n return toReturn;\n};\n\nvar tmpComponent = void 0;\nvar ColorMath = {\n hsv_to_rgb: function hsv_to_rgb(h, s, v) {\n var hi = Math.floor(h / 60) % 6;\n var f = h / 60 - Math.floor(h / 60);\n var p = v * (1.0 - s);\n var q = v * (1.0 - f * s);\n var t = v * (1.0 - (1.0 - f) * s);\n var c = [[v, t, p], [q, v, p], [p, v, t], [p, q, v], [t, p, v], [v, p, q]][hi];\n return {\n r: c[0] * 255,\n g: c[1] * 255,\n b: c[2] * 255\n };\n },\n rgb_to_hsv: function rgb_to_hsv(r, g, b) {\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var h = void 0;\n var s = void 0;\n if (max !== 0) {\n s = delta / max;\n } else {\n return {\n h: NaN,\n s: 0,\n v: 0\n };\n }\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h /= 6;\n if (h < 0) {\n h += 1;\n }\n return {\n h: h * 360,\n s: s,\n v: max / 255\n };\n },\n rgb_to_hex: function rgb_to_hex(r, g, b) {\n var hex = this.hex_with_component(0, 2, r);\n hex = this.hex_with_component(hex, 1, g);\n hex = this.hex_with_component(hex, 0, b);\n return hex;\n },\n component_from_hex: function component_from_hex(hex, componentIndex) {\n return hex >> componentIndex * 8 & 0xFF;\n },\n hex_with_component: function hex_with_component(hex, componentIndex, value) {\n return value << (tmpComponent = componentIndex * 8) | hex & ~(0xFF << tmpComponent);\n }\n};\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar Color = function () {\n function Color() {\n classCallCheck(this, Color);\n this.__state = interpret.apply(this, arguments);\n if (this.__state === false) {\n throw new Error('Failed to interpret color arguments');\n }\n this.__state.a = this.__state.a || 1;\n }\n createClass(Color, [{\n key: 'toString',\n value: function toString() {\n return colorToString(this);\n }\n }, {\n key: 'toHexString',\n value: function toHexString() {\n return colorToString(this, true);\n }\n }, {\n key: 'toOriginal',\n value: function toOriginal() {\n return this.__state.conversion.write(this);\n }\n }]);\n return Color;\n}();\nfunction defineRGBComponent(target, component, componentHexIndex) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'RGB') {\n return this.__state[component];\n }\n Color.recalculateRGB(this, component, componentHexIndex);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'RGB') {\n Color.recalculateRGB(this, component, componentHexIndex);\n this.__state.space = 'RGB';\n }\n this.__state[component] = v;\n }\n });\n}\nfunction defineHSVComponent(target, component) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'HSV') {\n return this.__state[component];\n }\n Color.recalculateHSV(this);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'HSV') {\n Color.recalculateHSV(this);\n this.__state.space = 'HSV';\n }\n this.__state[component] = v;\n }\n });\n}\nColor.recalculateRGB = function (color, component, componentHexIndex) {\n if (color.__state.space === 'HEX') {\n color.__state[component] = ColorMath.component_from_hex(color.__state.hex, componentHexIndex);\n } else if (color.__state.space === 'HSV') {\n Common.extend(color.__state, ColorMath.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v));\n } else {\n throw new Error('Corrupted color state');\n }\n};\nColor.recalculateHSV = function (color) {\n var result = ColorMath.rgb_to_hsv(color.r, color.g, color.b);\n Common.extend(color.__state, {\n s: result.s,\n v: result.v\n });\n if (!Common.isNaN(result.h)) {\n color.__state.h = result.h;\n } else if (Common.isUndefined(color.__state.h)) {\n color.__state.h = 0;\n }\n};\nColor.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a'];\ndefineRGBComponent(Color.prototype, 'r', 2);\ndefineRGBComponent(Color.prototype, 'g', 1);\ndefineRGBComponent(Color.prototype, 'b', 0);\ndefineHSVComponent(Color.prototype, 'h');\ndefineHSVComponent(Color.prototype, 's');\ndefineHSVComponent(Color.prototype, 'v');\nObject.defineProperty(Color.prototype, 'a', {\n get: function get$$1() {\n return this.__state.a;\n },\n set: function set$$1(v) {\n this.__state.a = v;\n }\n});\nObject.defineProperty(Color.prototype, 'hex', {\n get: function get$$1() {\n if (this.__state.space !== 'HEX') {\n this.__state.hex = ColorMath.rgb_to_hex(this.r, this.g, this.b);\n this.__state.space = 'HEX';\n }\n return this.__state.hex;\n },\n set: function set$$1(v) {\n this.__state.space = 'HEX';\n this.__state.hex = v;\n }\n});\n\nvar Controller = function () {\n function Controller(object, property) {\n classCallCheck(this, Controller);\n this.initialValue = object[property];\n this.domElement = document.createElement('div');\n this.object = object;\n this.property = property;\n this.__onChange = undefined;\n this.__onFinishChange = undefined;\n }\n createClass(Controller, [{\n key: 'onChange',\n value: function onChange(fnc) {\n this.__onChange = fnc;\n return this;\n }\n }, {\n key: 'onFinishChange',\n value: function onFinishChange(fnc) {\n this.__onFinishChange = fnc;\n return this;\n }\n }, {\n key: 'setValue',\n value: function setValue(newValue) {\n this.object[this.property] = newValue;\n if (this.__onChange) {\n this.__onChange.call(this, newValue);\n }\n this.updateDisplay();\n return this;\n }\n }, {\n key: 'getValue',\n value: function getValue() {\n return this.object[this.property];\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n return this;\n }\n }, {\n key: 'isModified',\n value: function isModified() {\n return this.initialValue !== this.getValue();\n }\n }]);\n return Controller;\n}();\n\nvar EVENT_MAP = {\n HTMLEvents: ['change'],\n MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'],\n KeyboardEvents: ['keydown']\n};\nvar EVENT_MAP_INV = {};\nCommon.each(EVENT_MAP, function (v, k) {\n Common.each(v, function (e) {\n EVENT_MAP_INV[e] = k;\n });\n});\nvar CSS_VALUE_PIXELS = /(\\d+(\\.\\d+)?)px/;\nfunction cssValueToPixels(val) {\n if (val === '0' || Common.isUndefined(val)) {\n return 0;\n }\n var match = val.match(CSS_VALUE_PIXELS);\n if (!Common.isNull(match)) {\n return parseFloat(match[1]);\n }\n return 0;\n}\nvar dom = {\n makeSelectable: function makeSelectable(elem, selectable) {\n if (elem === undefined || elem.style === undefined) return;\n elem.onselectstart = selectable ? function () {\n return false;\n } : function () {};\n elem.style.MozUserSelect = selectable ? 'auto' : 'none';\n elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none';\n elem.unselectable = selectable ? 'on' : 'off';\n },\n makeFullscreen: function makeFullscreen(elem, hor, vert) {\n var vertical = vert;\n var horizontal = hor;\n if (Common.isUndefined(horizontal)) {\n horizontal = true;\n }\n if (Common.isUndefined(vertical)) {\n vertical = true;\n }\n elem.style.position = 'absolute';\n if (horizontal) {\n elem.style.left = 0;\n elem.style.right = 0;\n }\n if (vertical) {\n elem.style.top = 0;\n elem.style.bottom = 0;\n }\n },\n fakeEvent: function fakeEvent(elem, eventType, pars, aux) {\n var params = pars || {};\n var className = EVENT_MAP_INV[eventType];\n if (!className) {\n throw new Error('Event type ' + eventType + ' not supported.');\n }\n var evt = document.createEvent(className);\n switch (className) {\n case 'MouseEvents':\n {\n var clientX = params.x || params.clientX || 0;\n var clientY = params.y || params.clientY || 0;\n evt.initMouseEvent(eventType, params.bubbles || false, params.cancelable || true, window, params.clickCount || 1, 0,\n 0,\n clientX,\n clientY,\n false, false, false, false, 0, null);\n break;\n }\n case 'KeyboardEvents':\n {\n var init = evt.initKeyboardEvent || evt.initKeyEvent;\n Common.defaults(params, {\n cancelable: true,\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n keyCode: undefined,\n charCode: undefined\n });\n init(eventType, params.bubbles || false, params.cancelable, window, params.ctrlKey, params.altKey, params.shiftKey, params.metaKey, params.keyCode, params.charCode);\n break;\n }\n default:\n {\n evt.initEvent(eventType, params.bubbles || false, params.cancelable || true);\n break;\n }\n }\n Common.defaults(evt, aux);\n elem.dispatchEvent(evt);\n },\n bind: function bind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.addEventListener) {\n elem.addEventListener(event, func, bool);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + event, func);\n }\n return dom;\n },\n unbind: function unbind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.removeEventListener) {\n elem.removeEventListener(event, func, bool);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + event, func);\n }\n return dom;\n },\n addClass: function addClass(elem, className) {\n if (elem.className === undefined) {\n elem.className = className;\n } else if (elem.className !== className) {\n var classes = elem.className.split(/ +/);\n if (classes.indexOf(className) === -1) {\n classes.push(className);\n elem.className = classes.join(' ').replace(/^\\s+/, '').replace(/\\s+$/, '');\n }\n }\n return dom;\n },\n removeClass: function removeClass(elem, className) {\n if (className) {\n if (elem.className === className) {\n elem.removeAttribute('class');\n } else {\n var classes = elem.className.split(/ +/);\n var index = classes.indexOf(className);\n if (index !== -1) {\n classes.splice(index, 1);\n elem.className = classes.join(' ');\n }\n }\n } else {\n elem.className = undefined;\n }\n return dom;\n },\n hasClass: function hasClass(elem, className) {\n return new RegExp('(?:^|\\\\s+)' + className + '(?:\\\\s+|$)').test(elem.className) || false;\n },\n getWidth: function getWidth(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-left-width']) + cssValueToPixels(style['border-right-width']) + cssValueToPixels(style['padding-left']) + cssValueToPixels(style['padding-right']) + cssValueToPixels(style.width);\n },\n getHeight: function getHeight(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-top-width']) + cssValueToPixels(style['border-bottom-width']) + cssValueToPixels(style['padding-top']) + cssValueToPixels(style['padding-bottom']) + cssValueToPixels(style.height);\n },\n getOffset: function getOffset(el) {\n var elem = el;\n var offset = { left: 0, top: 0 };\n if (elem.offsetParent) {\n do {\n offset.left += elem.offsetLeft;\n offset.top += elem.offsetTop;\n elem = elem.offsetParent;\n } while (elem);\n }\n return offset;\n },\n isActive: function isActive(elem) {\n return elem === document.activeElement && (elem.type || elem.href);\n }\n};\n\nvar BooleanController = function (_Controller) {\n inherits(BooleanController, _Controller);\n function BooleanController(object, property) {\n classCallCheck(this, BooleanController);\n var _this2 = possibleConstructorReturn(this, (BooleanController.__proto__ || Object.getPrototypeOf(BooleanController)).call(this, object, property));\n var _this = _this2;\n _this2.__prev = _this2.getValue();\n _this2.__checkbox = document.createElement('input');\n _this2.__checkbox.setAttribute('type', 'checkbox');\n function onChange() {\n _this.setValue(!_this.__prev);\n }\n dom.bind(_this2.__checkbox, 'change', onChange, false);\n _this2.domElement.appendChild(_this2.__checkbox);\n _this2.updateDisplay();\n return _this2;\n }\n createClass(BooleanController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n this.__prev = this.getValue();\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (this.getValue() === true) {\n this.__checkbox.setAttribute('checked', 'checked');\n this.__checkbox.checked = true;\n this.__prev = true;\n } else {\n this.__checkbox.checked = false;\n this.__prev = false;\n }\n return get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return BooleanController;\n}(Controller);\n\nvar OptionController = function (_Controller) {\n inherits(OptionController, _Controller);\n function OptionController(object, property, opts) {\n classCallCheck(this, OptionController);\n var _this2 = possibleConstructorReturn(this, (OptionController.__proto__ || Object.getPrototypeOf(OptionController)).call(this, object, property));\n var options = opts;\n var _this = _this2;\n _this2.__select = document.createElement('select');\n if (Common.isArray(options)) {\n var map = {};\n Common.each(options, function (element) {\n map[element] = element;\n });\n options = map;\n }\n Common.each(options, function (value, key) {\n var opt = document.createElement('option');\n opt.innerHTML = key;\n opt.setAttribute('value', value);\n _this.__select.appendChild(opt);\n });\n _this2.updateDisplay();\n dom.bind(_this2.__select, 'change', function () {\n var desiredValue = this.options[this.selectedIndex].value;\n _this.setValue(desiredValue);\n });\n _this2.domElement.appendChild(_this2.__select);\n return _this2;\n }\n createClass(OptionController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (dom.isActive(this.__select)) return this;\n this.__select.value = this.getValue();\n return get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return OptionController;\n}(Controller);\n\nvar StringController = function (_Controller) {\n inherits(StringController, _Controller);\n function StringController(object, property) {\n classCallCheck(this, StringController);\n var _this2 = possibleConstructorReturn(this, (StringController.__proto__ || Object.getPrototypeOf(StringController)).call(this, object, property));\n var _this = _this2;\n function onChange() {\n _this.setValue(_this.__input.value);\n }\n function onBlur() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'keyup', onChange);\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n this.blur();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(StringController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (!dom.isActive(this.__input)) {\n this.__input.value = this.getValue();\n }\n return get(StringController.prototype.__proto__ || Object.getPrototypeOf(StringController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return StringController;\n}(Controller);\n\nfunction numDecimals(x) {\n var _x = x.toString();\n if (_x.indexOf('.') > -1) {\n return _x.length - _x.indexOf('.') - 1;\n }\n return 0;\n}\nvar NumberController = function (_Controller) {\n inherits(NumberController, _Controller);\n function NumberController(object, property, params) {\n classCallCheck(this, NumberController);\n var _this = possibleConstructorReturn(this, (NumberController.__proto__ || Object.getPrototypeOf(NumberController)).call(this, object, property));\n var _params = params || {};\n _this.__min = _params.min;\n _this.__max = _params.max;\n _this.__step = _params.step;\n if (Common.isUndefined(_this.__step)) {\n if (_this.initialValue === 0) {\n _this.__impliedStep = 1;\n } else {\n _this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(_this.initialValue)) / Math.LN10)) / 10;\n }\n } else {\n _this.__impliedStep = _this.__step;\n }\n _this.__precision = numDecimals(_this.__impliedStep);\n return _this;\n }\n createClass(NumberController, [{\n key: 'setValue',\n value: function setValue(v) {\n var _v = v;\n if (this.__min !== undefined && _v < this.__min) {\n _v = this.__min;\n } else if (this.__max !== undefined && _v > this.__max) {\n _v = this.__max;\n }\n if (this.__step !== undefined && _v % this.__step !== 0) {\n _v = Math.round(_v / this.__step) * this.__step;\n }\n return get(NumberController.prototype.__proto__ || Object.getPrototypeOf(NumberController.prototype), 'setValue', this).call(this, _v);\n }\n }, {\n key: 'min',\n value: function min(minValue) {\n this.__min = minValue;\n return this;\n }\n }, {\n key: 'max',\n value: function max(maxValue) {\n this.__max = maxValue;\n return this;\n }\n }, {\n key: 'step',\n value: function step(stepValue) {\n this.__step = stepValue;\n this.__impliedStep = stepValue;\n this.__precision = numDecimals(stepValue);\n return this;\n }\n }]);\n return NumberController;\n}(Controller);\n\nfunction roundToDecimal(value, decimals) {\n var tenTo = Math.pow(10, decimals);\n return Math.round(value * tenTo) / tenTo;\n}\nvar NumberControllerBox = function (_NumberController) {\n inherits(NumberControllerBox, _NumberController);\n function NumberControllerBox(object, property, params) {\n classCallCheck(this, NumberControllerBox);\n var _this2 = possibleConstructorReturn(this, (NumberControllerBox.__proto__ || Object.getPrototypeOf(NumberControllerBox)).call(this, object, property, params));\n _this2.__truncationSuspended = false;\n var _this = _this2;\n var prevY = void 0;\n function onChange() {\n var attempted = parseFloat(_this.__input.value);\n if (!Common.isNaN(attempted)) {\n _this.setValue(attempted);\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onBlur() {\n onFinish();\n }\n function onMouseDrag(e) {\n var diff = prevY - e.clientY;\n _this.setValue(_this.getValue() + diff * _this.__impliedStep);\n prevY = e.clientY;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n onFinish();\n }\n function onMouseDown(e) {\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n prevY = e.clientY;\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'mousedown', onMouseDown);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n _this.__truncationSuspended = true;\n this.blur();\n _this.__truncationSuspended = false;\n onFinish();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(NumberControllerBox, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision);\n return get(NumberControllerBox.prototype.__proto__ || Object.getPrototypeOf(NumberControllerBox.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerBox;\n}(NumberController);\n\nfunction map(v, i1, i2, o1, o2) {\n return o1 + (o2 - o1) * ((v - i1) / (i2 - i1));\n}\nvar NumberControllerSlider = function (_NumberController) {\n inherits(NumberControllerSlider, _NumberController);\n function NumberControllerSlider(object, property, min, max, step) {\n classCallCheck(this, NumberControllerSlider);\n var _this2 = possibleConstructorReturn(this, (NumberControllerSlider.__proto__ || Object.getPrototypeOf(NumberControllerSlider)).call(this, object, property, { min: min, max: max, step: step }));\n var _this = _this2;\n _this2.__background = document.createElement('div');\n _this2.__foreground = document.createElement('div');\n dom.bind(_this2.__background, 'mousedown', onMouseDown);\n dom.bind(_this2.__background, 'touchstart', onTouchStart);\n dom.addClass(_this2.__background, 'slider');\n dom.addClass(_this2.__foreground, 'slider-fg');\n function onMouseDown(e) {\n document.activeElement.blur();\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n onMouseDrag(e);\n }\n function onMouseDrag(e) {\n e.preventDefault();\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n return false;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onTouchStart(e) {\n if (e.touches.length !== 1) {\n return;\n }\n dom.bind(window, 'touchmove', onTouchMove);\n dom.bind(window, 'touchend', onTouchEnd);\n onTouchMove(e);\n }\n function onTouchMove(e) {\n var clientX = e.touches[0].clientX;\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n }\n function onTouchEnd() {\n dom.unbind(window, 'touchmove', onTouchMove);\n dom.unbind(window, 'touchend', onTouchEnd);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.updateDisplay();\n _this2.__background.appendChild(_this2.__foreground);\n _this2.domElement.appendChild(_this2.__background);\n return _this2;\n }\n createClass(NumberControllerSlider, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var pct = (this.getValue() - this.__min) / (this.__max - this.__min);\n this.__foreground.style.width = pct * 100 + '%';\n return get(NumberControllerSlider.prototype.__proto__ || Object.getPrototypeOf(NumberControllerSlider.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerSlider;\n}(NumberController);\n\nvar FunctionController = function (_Controller) {\n inherits(FunctionController, _Controller);\n function FunctionController(object, property, text) {\n classCallCheck(this, FunctionController);\n var _this2 = possibleConstructorReturn(this, (FunctionController.__proto__ || Object.getPrototypeOf(FunctionController)).call(this, object, property));\n var _this = _this2;\n _this2.__button = document.createElement('div');\n _this2.__button.innerHTML = text === undefined ? 'Fire' : text;\n dom.bind(_this2.__button, 'click', function (e) {\n e.preventDefault();\n _this.fire();\n return false;\n });\n dom.addClass(_this2.__button, 'button');\n _this2.domElement.appendChild(_this2.__button);\n return _this2;\n }\n createClass(FunctionController, [{\n key: 'fire',\n value: function fire() {\n if (this.__onChange) {\n this.__onChange.call(this);\n }\n this.getValue().call(this.object);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n }\n }]);\n return FunctionController;\n}(Controller);\n\nvar ColorController = function (_Controller) {\n inherits(ColorController, _Controller);\n function ColorController(object, property) {\n classCallCheck(this, ColorController);\n var _this2 = possibleConstructorReturn(this, (ColorController.__proto__ || Object.getPrototypeOf(ColorController)).call(this, object, property));\n _this2.__color = new Color(_this2.getValue());\n _this2.__temp = new Color(0);\n var _this = _this2;\n _this2.domElement = document.createElement('div');\n dom.makeSelectable(_this2.domElement, false);\n _this2.__selector = document.createElement('div');\n _this2.__selector.className = 'selector';\n _this2.__saturation_field = document.createElement('div');\n _this2.__saturation_field.className = 'saturation-field';\n _this2.__field_knob = document.createElement('div');\n _this2.__field_knob.className = 'field-knob';\n _this2.__field_knob_border = '2px solid ';\n _this2.__hue_knob = document.createElement('div');\n _this2.__hue_knob.className = 'hue-knob';\n _this2.__hue_field = document.createElement('div');\n _this2.__hue_field.className = 'hue-field';\n _this2.__input = document.createElement('input');\n _this2.__input.type = 'text';\n _this2.__input_textShadow = '0 1px 1px ';\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n onBlur.call(this);\n }\n });\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__selector, 'mousedown', function () {\n dom.addClass(this, 'drag').bind(window, 'mouseup', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n dom.bind(_this2.__selector, 'touchstart', function () {\n dom.addClass(this, 'drag').bind(window, 'touchend', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n var valueField = document.createElement('div');\n Common.extend(_this2.__selector.style, {\n width: '122px',\n height: '102px',\n padding: '3px',\n backgroundColor: '#222',\n boxShadow: '0px 1px 3px rgba(0,0,0,0.3)'\n });\n Common.extend(_this2.__field_knob.style, {\n position: 'absolute',\n width: '12px',\n height: '12px',\n border: _this2.__field_knob_border + (_this2.__color.v < 0.5 ? '#fff' : '#000'),\n boxShadow: '0px 1px 3px rgba(0,0,0,0.5)',\n borderRadius: '12px',\n zIndex: 1\n });\n Common.extend(_this2.__hue_knob.style, {\n position: 'absolute',\n width: '15px',\n height: '2px',\n borderRight: '4px solid #fff',\n zIndex: 1\n });\n Common.extend(_this2.__saturation_field.style, {\n width: '100px',\n height: '100px',\n border: '1px solid #555',\n marginRight: '3px',\n display: 'inline-block',\n cursor: 'pointer'\n });\n Common.extend(valueField.style, {\n width: '100%',\n height: '100%',\n background: 'none'\n });\n linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000');\n Common.extend(_this2.__hue_field.style, {\n width: '15px',\n height: '100px',\n border: '1px solid #555',\n cursor: 'ns-resize',\n position: 'absolute',\n top: '3px',\n right: '3px'\n });\n hueGradient(_this2.__hue_field);\n Common.extend(_this2.__input.style, {\n outline: 'none',\n textAlign: 'center',\n color: '#fff',\n border: 0,\n fontWeight: 'bold',\n textShadow: _this2.__input_textShadow + 'rgba(0,0,0,0.7)'\n });\n dom.bind(_this2.__saturation_field, 'mousedown', fieldDown);\n dom.bind(_this2.__saturation_field, 'touchstart', fieldDown);\n dom.bind(_this2.__field_knob, 'mousedown', fieldDown);\n dom.bind(_this2.__field_knob, 'touchstart', fieldDown);\n dom.bind(_this2.__hue_field, 'mousedown', fieldDownH);\n dom.bind(_this2.__hue_field, 'touchstart', fieldDownH);\n function fieldDown(e) {\n setSV(e);\n dom.bind(window, 'mousemove', setSV);\n dom.bind(window, 'touchmove', setSV);\n dom.bind(window, 'mouseup', fieldUpSV);\n dom.bind(window, 'touchend', fieldUpSV);\n }\n function fieldDownH(e) {\n setH(e);\n dom.bind(window, 'mousemove', setH);\n dom.bind(window, 'touchmove', setH);\n dom.bind(window, 'mouseup', fieldUpH);\n dom.bind(window, 'touchend', fieldUpH);\n }\n function fieldUpSV() {\n dom.unbind(window, 'mousemove', setSV);\n dom.unbind(window, 'touchmove', setSV);\n dom.unbind(window, 'mouseup', fieldUpSV);\n dom.unbind(window, 'touchend', fieldUpSV);\n onFinish();\n }\n function fieldUpH() {\n dom.unbind(window, 'mousemove', setH);\n dom.unbind(window, 'touchmove', setH);\n dom.unbind(window, 'mouseup', fieldUpH);\n dom.unbind(window, 'touchend', fieldUpH);\n onFinish();\n }\n function onBlur() {\n var i = interpret(this.value);\n if (i !== false) {\n _this.__color.__state = i;\n _this.setValue(_this.__color.toOriginal());\n } else {\n this.value = _this.__color.toString();\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.__color.toOriginal());\n }\n }\n _this2.__saturation_field.appendChild(valueField);\n _this2.__selector.appendChild(_this2.__field_knob);\n _this2.__selector.appendChild(_this2.__saturation_field);\n _this2.__selector.appendChild(_this2.__hue_field);\n _this2.__hue_field.appendChild(_this2.__hue_knob);\n _this2.domElement.appendChild(_this2.__input);\n _this2.domElement.appendChild(_this2.__selector);\n _this2.updateDisplay();\n function setSV(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__saturation_field.getBoundingClientRect();\n var _ref = e.touches && e.touches[0] || e,\n clientX = _ref.clientX,\n clientY = _ref.clientY;\n var s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left);\n var v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (v > 1) {\n v = 1;\n } else if (v < 0) {\n v = 0;\n }\n if (s > 1) {\n s = 1;\n } else if (s < 0) {\n s = 0;\n }\n _this.__color.v = v;\n _this.__color.s = s;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n function setH(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__hue_field.getBoundingClientRect();\n var _ref2 = e.touches && e.touches[0] || e,\n clientY = _ref2.clientY;\n var h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (h > 1) {\n h = 1;\n } else if (h < 0) {\n h = 0;\n }\n _this.__color.h = h * 360;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n return _this2;\n }\n createClass(ColorController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var i = interpret(this.getValue());\n if (i !== false) {\n var mismatch = false;\n Common.each(Color.COMPONENTS, function (component) {\n if (!Common.isUndefined(i[component]) && !Common.isUndefined(this.__color.__state[component]) && i[component] !== this.__color.__state[component]) {\n mismatch = true;\n return {};\n }\n }, this);\n if (mismatch) {\n Common.extend(this.__color.__state, i);\n }\n }\n Common.extend(this.__temp.__state, this.__color.__state);\n this.__temp.a = 1;\n var flip = this.__color.v < 0.5 || this.__color.s > 0.5 ? 255 : 0;\n var _flip = 255 - flip;\n Common.extend(this.__field_knob.style, {\n marginLeft: 100 * this.__color.s - 7 + 'px',\n marginTop: 100 * (1 - this.__color.v) - 7 + 'px',\n backgroundColor: this.__temp.toHexString(),\n border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')'\n });\n this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px';\n this.__temp.s = 1;\n this.__temp.v = 1;\n linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString());\n this.__input.value = this.__color.toString();\n Common.extend(this.__input.style, {\n backgroundColor: this.__color.toHexString(),\n color: 'rgb(' + flip + ',' + flip + ',' + flip + ')',\n textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)'\n });\n }\n }]);\n return ColorController;\n}(Controller);\nvar vendors = ['-moz-', '-o-', '-webkit-', '-ms-', ''];\nfunction linearGradient(elem, x, a, b) {\n elem.style.background = '';\n Common.each(vendors, function (vendor) {\n elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); ';\n });\n}\nfunction hueGradient(elem) {\n elem.style.background = '';\n elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);';\n elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n}\n\nvar css = {\n load: function load(url, indoc) {\n var doc = indoc || document;\n var link = doc.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.href = url;\n doc.getElementsByTagName('head')[0].appendChild(link);\n },\n inject: function inject(cssContent, indoc) {\n var doc = indoc || document;\n var injected = document.createElement('style');\n injected.type = 'text/css';\n injected.innerHTML = cssContent;\n var head = doc.getElementsByTagName('head')[0];\n try {\n head.appendChild(injected);\n } catch (e) {\n }\n }\n};\n\nvar saveDialogContents = \"
\\n\\n Here's the new load parameter for your GUI's constructor:\\n\\n \\n\\n
\\n\\n Automatically save\\n values to localStorage on exit.\\n\\n
The values saved to localStorage will\\n override those passed to dat.GUI's constructor. This makes it\\n easier to work incrementally, but localStorage is fragile,\\n and your friends may not see the same values you do.\\n\\n
\\n\\n
\\n\\n
\";\n\nvar ControllerFactory = function ControllerFactory(object, property) {\n var initialValue = object[property];\n if (Common.isArray(arguments[2]) || Common.isObject(arguments[2])) {\n return new OptionController(object, property, arguments[2]);\n }\n if (Common.isNumber(initialValue)) {\n if (Common.isNumber(arguments[2]) && Common.isNumber(arguments[3])) {\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerSlider(object, property, arguments[2], arguments[3], arguments[4]);\n }\n return new NumberControllerSlider(object, property, arguments[2], arguments[3]);\n }\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3], step: arguments[4] });\n }\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] });\n }\n if (Common.isString(initialValue)) {\n return new StringController(object, property);\n }\n if (Common.isFunction(initialValue)) {\n return new FunctionController(object, property, '');\n }\n if (Common.isBoolean(initialValue)) {\n return new BooleanController(object, property);\n }\n return null;\n};\n\nfunction requestAnimationFrame(callback) {\n setTimeout(callback, 1000 / 60);\n}\nvar requestAnimationFrame$1 = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || requestAnimationFrame;\n\nvar CenteredDiv = function () {\n function CenteredDiv() {\n classCallCheck(this, CenteredDiv);\n this.backgroundElement = document.createElement('div');\n Common.extend(this.backgroundElement.style, {\n backgroundColor: 'rgba(0,0,0,0.8)',\n top: 0,\n left: 0,\n display: 'none',\n zIndex: '1000',\n opacity: 0,\n WebkitTransition: 'opacity 0.2s linear',\n transition: 'opacity 0.2s linear'\n });\n dom.makeFullscreen(this.backgroundElement);\n this.backgroundElement.style.position = 'fixed';\n this.domElement = document.createElement('div');\n Common.extend(this.domElement.style, {\n position: 'fixed',\n display: 'none',\n zIndex: '1001',\n opacity: 0,\n WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear',\n transition: 'transform 0.2s ease-out, opacity 0.2s linear'\n });\n document.body.appendChild(this.backgroundElement);\n document.body.appendChild(this.domElement);\n var _this = this;\n dom.bind(this.backgroundElement, 'click', function () {\n _this.hide();\n });\n }\n createClass(CenteredDiv, [{\n key: 'show',\n value: function show() {\n var _this = this;\n this.backgroundElement.style.display = 'block';\n this.domElement.style.display = 'block';\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n this.layout();\n Common.defer(function () {\n _this.backgroundElement.style.opacity = 1;\n _this.domElement.style.opacity = 1;\n _this.domElement.style.webkitTransform = 'scale(1)';\n });\n }\n }, {\n key: 'hide',\n value: function hide() {\n var _this = this;\n var hide = function hide() {\n _this.domElement.style.display = 'none';\n _this.backgroundElement.style.display = 'none';\n dom.unbind(_this.domElement, 'webkitTransitionEnd', hide);\n dom.unbind(_this.domElement, 'transitionend', hide);\n dom.unbind(_this.domElement, 'oTransitionEnd', hide);\n };\n dom.bind(this.domElement, 'webkitTransitionEnd', hide);\n dom.bind(this.domElement, 'transitionend', hide);\n dom.bind(this.domElement, 'oTransitionEnd', hide);\n this.backgroundElement.style.opacity = 0;\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n }\n }, {\n key: 'layout',\n value: function layout() {\n this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px';\n this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px';\n }\n }]);\n return CenteredDiv;\n}();\n\nvar styleSheet = ___$insertStyle(\".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .cr.function .property-name{width:100%}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\\n\");\n\ncss.inject(styleSheet);\nvar CSS_NAMESPACE = 'dg';\nvar HIDE_KEY_CODE = 72;\nvar CLOSE_BUTTON_HEIGHT = 20;\nvar DEFAULT_DEFAULT_PRESET_NAME = 'Default';\nvar SUPPORTS_LOCAL_STORAGE = function () {\n try {\n return !!window.localStorage;\n } catch (e) {\n return false;\n }\n}();\nvar SAVE_DIALOGUE = void 0;\nvar autoPlaceVirgin = true;\nvar autoPlaceContainer = void 0;\nvar hide = false;\nvar hideableGuis = [];\nvar GUI = function GUI(pars) {\n var _this = this;\n var params = pars || {};\n this.domElement = document.createElement('div');\n this.__ul = document.createElement('ul');\n this.domElement.appendChild(this.__ul);\n dom.addClass(this.domElement, CSS_NAMESPACE);\n this.__folders = {};\n this.__controllers = [];\n this.__rememberedObjects = [];\n this.__rememberedObjectIndecesToControllers = [];\n this.__listening = [];\n params = Common.defaults(params, {\n closeOnTop: false,\n autoPlace: true,\n width: GUI.DEFAULT_WIDTH\n });\n params = Common.defaults(params, {\n resizable: params.autoPlace,\n hideable: params.autoPlace\n });\n if (!Common.isUndefined(params.load)) {\n if (params.preset) {\n params.load.preset = params.preset;\n }\n } else {\n params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME };\n }\n if (Common.isUndefined(params.parent) && params.hideable) {\n hideableGuis.push(this);\n }\n params.resizable = Common.isUndefined(params.parent) && params.resizable;\n if (params.autoPlace && Common.isUndefined(params.scrollable)) {\n params.scrollable = true;\n }\n var useLocalStorage = SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true';\n var saveToLocalStorage = void 0;\n var titleRow = void 0;\n Object.defineProperties(this,\n {\n parent: {\n get: function get$$1() {\n return params.parent;\n }\n },\n scrollable: {\n get: function get$$1() {\n return params.scrollable;\n }\n },\n autoPlace: {\n get: function get$$1() {\n return params.autoPlace;\n }\n },\n closeOnTop: {\n get: function get$$1() {\n return params.closeOnTop;\n }\n },\n preset: {\n get: function get$$1() {\n if (_this.parent) {\n return _this.getRoot().preset;\n }\n return params.load.preset;\n },\n set: function set$$1(v) {\n if (_this.parent) {\n _this.getRoot().preset = v;\n } else {\n params.load.preset = v;\n }\n setPresetSelectIndex(this);\n _this.revert();\n }\n },\n width: {\n get: function get$$1() {\n return params.width;\n },\n set: function set$$1(v) {\n params.width = v;\n setWidth(_this, v);\n }\n },\n name: {\n get: function get$$1() {\n return params.name;\n },\n set: function set$$1(v) {\n params.name = v;\n if (titleRow) {\n titleRow.innerHTML = params.name;\n }\n }\n },\n closed: {\n get: function get$$1() {\n return params.closed;\n },\n set: function set$$1(v) {\n params.closed = v;\n if (params.closed) {\n dom.addClass(_this.__ul, GUI.CLASS_CLOSED);\n } else {\n dom.removeClass(_this.__ul, GUI.CLASS_CLOSED);\n }\n this.onResize();\n if (_this.__closeButton) {\n _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED;\n }\n }\n },\n load: {\n get: function get$$1() {\n return params.load;\n }\n },\n useLocalStorage: {\n get: function get$$1() {\n return useLocalStorage;\n },\n set: function set$$1(bool) {\n if (SUPPORTS_LOCAL_STORAGE) {\n useLocalStorage = bool;\n if (bool) {\n dom.bind(window, 'unload', saveToLocalStorage);\n } else {\n dom.unbind(window, 'unload', saveToLocalStorage);\n }\n localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool);\n }\n }\n }\n });\n if (Common.isUndefined(params.parent)) {\n this.closed = params.closed || false;\n dom.addClass(this.domElement, GUI.CLASS_MAIN);\n dom.makeSelectable(this.domElement, false);\n if (SUPPORTS_LOCAL_STORAGE) {\n if (useLocalStorage) {\n _this.useLocalStorage = true;\n var savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui'));\n if (savedGui) {\n params.load = JSON.parse(savedGui);\n }\n }\n }\n this.__closeButton = document.createElement('div');\n this.__closeButton.innerHTML = GUI.TEXT_CLOSED;\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON);\n if (params.closeOnTop) {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP);\n this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]);\n } else {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM);\n this.domElement.appendChild(this.__closeButton);\n }\n dom.bind(this.__closeButton, 'click', function () {\n _this.closed = !_this.closed;\n });\n } else {\n if (params.closed === undefined) {\n params.closed = true;\n }\n var titleRowName = document.createTextNode(params.name);\n dom.addClass(titleRowName, 'controller-name');\n titleRow = addRow(_this, titleRowName);\n var onClickTitle = function onClickTitle(e) {\n e.preventDefault();\n _this.closed = !_this.closed;\n return false;\n };\n dom.addClass(this.__ul, GUI.CLASS_CLOSED);\n dom.addClass(titleRow, 'title');\n dom.bind(titleRow, 'click', onClickTitle);\n if (!params.closed) {\n this.closed = false;\n }\n }\n if (params.autoPlace) {\n if (Common.isUndefined(params.parent)) {\n if (autoPlaceVirgin) {\n autoPlaceContainer = document.createElement('div');\n dom.addClass(autoPlaceContainer, CSS_NAMESPACE);\n dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER);\n document.body.appendChild(autoPlaceContainer);\n autoPlaceVirgin = false;\n }\n autoPlaceContainer.appendChild(this.domElement);\n dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE);\n }\n if (!this.parent) {\n setWidth(_this, params.width);\n }\n }\n this.__resizeHandler = function () {\n _this.onResizeDebounced();\n };\n dom.bind(window, 'resize', this.__resizeHandler);\n dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler);\n dom.bind(this.__ul, 'transitionend', this.__resizeHandler);\n dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler);\n this.onResize();\n if (params.resizable) {\n addResizeHandle(this);\n }\n saveToLocalStorage = function saveToLocalStorage() {\n if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') {\n localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject()));\n }\n };\n this.saveToLocalStorageIfPossible = saveToLocalStorage;\n function resetWidth() {\n var root = _this.getRoot();\n root.width += 1;\n Common.defer(function () {\n root.width -= 1;\n });\n }\n if (!params.parent) {\n resetWidth();\n }\n};\nGUI.toggleHide = function () {\n hide = !hide;\n Common.each(hideableGuis, function (gui) {\n gui.domElement.style.display = hide ? 'none' : '';\n });\n};\nGUI.CLASS_AUTO_PLACE = 'a';\nGUI.CLASS_AUTO_PLACE_CONTAINER = 'ac';\nGUI.CLASS_MAIN = 'main';\nGUI.CLASS_CONTROLLER_ROW = 'cr';\nGUI.CLASS_TOO_TALL = 'taller-than-window';\nGUI.CLASS_CLOSED = 'closed';\nGUI.CLASS_CLOSE_BUTTON = 'close-button';\nGUI.CLASS_CLOSE_TOP = 'close-top';\nGUI.CLASS_CLOSE_BOTTOM = 'close-bottom';\nGUI.CLASS_DRAG = 'drag';\nGUI.DEFAULT_WIDTH = 245;\nGUI.TEXT_CLOSED = 'Close Controls';\nGUI.TEXT_OPEN = 'Open Controls';\nGUI._keydownHandler = function (e) {\n if (document.activeElement.type !== 'text' && (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) {\n GUI.toggleHide();\n }\n};\ndom.bind(window, 'keydown', GUI._keydownHandler, false);\nCommon.extend(GUI.prototype,\n{\n add: function add(object, property) {\n return _add(this, object, property, {\n factoryArgs: Array.prototype.slice.call(arguments, 2)\n });\n },\n addColor: function addColor(object, property) {\n return _add(this, object, property, {\n color: true\n });\n },\n remove: function remove(controller) {\n this.__ul.removeChild(controller.__li);\n this.__controllers.splice(this.__controllers.indexOf(controller), 1);\n var _this = this;\n Common.defer(function () {\n _this.onResize();\n });\n },\n destroy: function destroy() {\n if (this.parent) {\n throw new Error('Only the root GUI should be removed with .destroy(). ' + 'For subfolders, use gui.removeFolder(folder) instead.');\n }\n if (this.autoPlace) {\n autoPlaceContainer.removeChild(this.domElement);\n }\n var _this = this;\n Common.each(this.__folders, function (subfolder) {\n _this.removeFolder(subfolder);\n });\n dom.unbind(window, 'keydown', GUI._keydownHandler, false);\n removeListeners(this);\n },\n addFolder: function addFolder(name) {\n if (this.__folders[name] !== undefined) {\n throw new Error('You already have a folder in this GUI by the' + ' name \"' + name + '\"');\n }\n var newGuiParams = { name: name, parent: this };\n newGuiParams.autoPlace = this.autoPlace;\n if (this.load &&\n this.load.folders &&\n this.load.folders[name]) {\n newGuiParams.closed = this.load.folders[name].closed;\n newGuiParams.load = this.load.folders[name];\n }\n var gui = new GUI(newGuiParams);\n this.__folders[name] = gui;\n var li = addRow(this, gui.domElement);\n dom.addClass(li, 'folder');\n return gui;\n },\n removeFolder: function removeFolder(folder) {\n this.__ul.removeChild(folder.domElement.parentElement);\n delete this.__folders[folder.name];\n if (this.load &&\n this.load.folders &&\n this.load.folders[folder.name]) {\n delete this.load.folders[folder.name];\n }\n removeListeners(folder);\n var _this = this;\n Common.each(folder.__folders, function (subfolder) {\n folder.removeFolder(subfolder);\n });\n Common.defer(function () {\n _this.onResize();\n });\n },\n open: function open() {\n this.closed = false;\n },\n close: function close() {\n this.closed = true;\n },\n hide: function hide() {\n this.domElement.style.display = 'none';\n },\n show: function show() {\n this.domElement.style.display = '';\n },\n onResize: function onResize() {\n var root = this.getRoot();\n if (root.scrollable) {\n var top = dom.getOffset(root.__ul).top;\n var h = 0;\n Common.each(root.__ul.childNodes, function (node) {\n if (!(root.autoPlace && node === root.__save_row)) {\n h += dom.getHeight(node);\n }\n });\n if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) {\n dom.addClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px';\n } else {\n dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = 'auto';\n }\n }\n if (root.__resize_handle) {\n Common.defer(function () {\n root.__resize_handle.style.height = root.__ul.offsetHeight + 'px';\n });\n }\n if (root.__closeButton) {\n root.__closeButton.style.width = root.width + 'px';\n }\n },\n onResizeDebounced: Common.debounce(function () {\n this.onResize();\n }, 50),\n remember: function remember() {\n if (Common.isUndefined(SAVE_DIALOGUE)) {\n SAVE_DIALOGUE = new CenteredDiv();\n SAVE_DIALOGUE.domElement.innerHTML = saveDialogContents;\n }\n if (this.parent) {\n throw new Error('You can only call remember on a top level GUI.');\n }\n var _this = this;\n Common.each(Array.prototype.slice.call(arguments), function (object) {\n if (_this.__rememberedObjects.length === 0) {\n addSaveMenu(_this);\n }\n if (_this.__rememberedObjects.indexOf(object) === -1) {\n _this.__rememberedObjects.push(object);\n }\n });\n if (this.autoPlace) {\n setWidth(this, this.width);\n }\n },\n getRoot: function getRoot() {\n var gui = this;\n while (gui.parent) {\n gui = gui.parent;\n }\n return gui;\n },\n getSaveObject: function getSaveObject() {\n var toReturn = this.load;\n toReturn.closed = this.closed;\n if (this.__rememberedObjects.length > 0) {\n toReturn.preset = this.preset;\n if (!toReturn.remembered) {\n toReturn.remembered = {};\n }\n toReturn.remembered[this.preset] = getCurrentPreset(this);\n }\n toReturn.folders = {};\n Common.each(this.__folders, function (element, key) {\n toReturn.folders[key] = element.getSaveObject();\n });\n return toReturn;\n },\n save: function save() {\n if (!this.load.remembered) {\n this.load.remembered = {};\n }\n this.load.remembered[this.preset] = getCurrentPreset(this);\n markPresetModified(this, false);\n this.saveToLocalStorageIfPossible();\n },\n saveAs: function saveAs(presetName) {\n if (!this.load.remembered) {\n this.load.remembered = {};\n this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true);\n }\n this.load.remembered[presetName] = getCurrentPreset(this);\n this.preset = presetName;\n addPresetOption(this, presetName, true);\n this.saveToLocalStorageIfPossible();\n },\n revert: function revert(gui) {\n Common.each(this.__controllers, function (controller) {\n if (!this.getRoot().load.remembered) {\n controller.setValue(controller.initialValue);\n } else {\n recallSavedValue(gui || this.getRoot(), controller);\n }\n if (controller.__onFinishChange) {\n controller.__onFinishChange.call(controller, controller.getValue());\n }\n }, this);\n Common.each(this.__folders, function (folder) {\n folder.revert(folder);\n });\n if (!gui) {\n markPresetModified(this.getRoot(), false);\n }\n },\n listen: function listen(controller) {\n var init = this.__listening.length === 0;\n this.__listening.push(controller);\n if (init) {\n updateDisplays(this.__listening);\n }\n },\n updateDisplay: function updateDisplay() {\n Common.each(this.__controllers, function (controller) {\n controller.updateDisplay();\n });\n Common.each(this.__folders, function (folder) {\n folder.updateDisplay();\n });\n }\n});\nfunction addRow(gui, newDom, liBefore) {\n var li = document.createElement('li');\n if (newDom) {\n li.appendChild(newDom);\n }\n if (liBefore) {\n gui.__ul.insertBefore(li, liBefore);\n } else {\n gui.__ul.appendChild(li);\n }\n gui.onResize();\n return li;\n}\nfunction removeListeners(gui) {\n dom.unbind(window, 'resize', gui.__resizeHandler);\n if (gui.saveToLocalStorageIfPossible) {\n dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible);\n }\n}\nfunction markPresetModified(gui, modified) {\n var opt = gui.__preset_select[gui.__preset_select.selectedIndex];\n if (modified) {\n opt.innerHTML = opt.value + '*';\n } else {\n opt.innerHTML = opt.value;\n }\n}\nfunction augmentController(gui, li, controller) {\n controller.__li = li;\n controller.__gui = gui;\n Common.extend(controller, {\n options: function options(_options) {\n if (arguments.length > 1) {\n var nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: nextSibling,\n factoryArgs: [Common.toArray(arguments)]\n });\n }\n if (Common.isArray(_options) || Common.isObject(_options)) {\n var _nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: _nextSibling,\n factoryArgs: [_options]\n });\n }\n },\n name: function name(_name) {\n controller.__li.firstElementChild.firstElementChild.innerHTML = _name;\n return controller;\n },\n listen: function listen() {\n controller.__gui.listen(controller);\n return controller;\n },\n remove: function remove() {\n controller.__gui.remove(controller);\n return controller;\n }\n });\n if (controller instanceof NumberControllerSlider) {\n var box = new NumberControllerBox(controller.object, controller.property, { min: controller.__min, max: controller.__max, step: controller.__step });\n Common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function (method) {\n var pc = controller[method];\n var pb = box[method];\n controller[method] = box[method] = function () {\n var args = Array.prototype.slice.call(arguments);\n pb.apply(box, args);\n return pc.apply(controller, args);\n };\n });\n dom.addClass(li, 'has-slider');\n controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild);\n } else if (controller instanceof NumberControllerBox) {\n var r = function r(returned) {\n if (Common.isNumber(controller.__min) && Common.isNumber(controller.__max)) {\n var oldName = controller.__li.firstElementChild.firstElementChild.innerHTML;\n var wasListening = controller.__gui.__listening.indexOf(controller) > -1;\n controller.remove();\n var newController = _add(gui, controller.object, controller.property, {\n before: controller.__li.nextElementSibling,\n factoryArgs: [controller.__min, controller.__max, controller.__step]\n });\n newController.name(oldName);\n if (wasListening) newController.listen();\n return newController;\n }\n return returned;\n };\n controller.min = Common.compose(r, controller.min);\n controller.max = Common.compose(r, controller.max);\n } else if (controller instanceof BooleanController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__checkbox, 'click');\n });\n dom.bind(controller.__checkbox, 'click', function (e) {\n e.stopPropagation();\n });\n } else if (controller instanceof FunctionController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__button, 'click');\n });\n dom.bind(li, 'mouseover', function () {\n dom.addClass(controller.__button, 'hover');\n });\n dom.bind(li, 'mouseout', function () {\n dom.removeClass(controller.__button, 'hover');\n });\n } else if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n controller.updateDisplay = Common.compose(function (val) {\n li.style.borderLeftColor = controller.__color.toString();\n return val;\n }, controller.updateDisplay);\n controller.updateDisplay();\n }\n controller.setValue = Common.compose(function (val) {\n if (gui.getRoot().__preset_select && controller.isModified()) {\n markPresetModified(gui.getRoot(), true);\n }\n return val;\n }, controller.setValue);\n}\nfunction recallSavedValue(gui, controller) {\n var root = gui.getRoot();\n var matchedIndex = root.__rememberedObjects.indexOf(controller.object);\n if (matchedIndex !== -1) {\n var controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex];\n if (controllerMap === undefined) {\n controllerMap = {};\n root.__rememberedObjectIndecesToControllers[matchedIndex] = controllerMap;\n }\n controllerMap[controller.property] = controller;\n if (root.load && root.load.remembered) {\n var presetMap = root.load.remembered;\n var preset = void 0;\n if (presetMap[gui.preset]) {\n preset = presetMap[gui.preset];\n } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) {\n preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME];\n } else {\n return;\n }\n if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) {\n var value = preset[matchedIndex][controller.property];\n controller.initialValue = value;\n controller.setValue(value);\n }\n }\n }\n}\nfunction _add(gui, object, property, params) {\n if (object[property] === undefined) {\n throw new Error('Object \"' + object + '\" has no property \"' + property + '\"');\n }\n var controller = void 0;\n if (params.color) {\n controller = new ColorController(object, property);\n } else {\n var factoryArgs = [object, property].concat(params.factoryArgs);\n controller = ControllerFactory.apply(gui, factoryArgs);\n }\n if (params.before instanceof Controller) {\n params.before = params.before.__li;\n }\n recallSavedValue(gui, controller);\n dom.addClass(controller.domElement, 'c');\n var name = document.createElement('span');\n dom.addClass(name, 'property-name');\n name.innerHTML = controller.property;\n var container = document.createElement('div');\n container.appendChild(name);\n container.appendChild(controller.domElement);\n var li = addRow(gui, container, params.before);\n dom.addClass(li, GUI.CLASS_CONTROLLER_ROW);\n if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n } else {\n dom.addClass(li, _typeof(controller.getValue()));\n }\n augmentController(gui, li, controller);\n gui.__controllers.push(controller);\n return controller;\n}\nfunction getLocalStorageHash(gui, key) {\n return document.location.href + '.' + key;\n}\nfunction addPresetOption(gui, name, setSelected) {\n var opt = document.createElement('option');\n opt.innerHTML = name;\n opt.value = name;\n gui.__preset_select.appendChild(opt);\n if (setSelected) {\n gui.__preset_select.selectedIndex = gui.__preset_select.length - 1;\n }\n}\nfunction showHideExplain(gui, explain) {\n explain.style.display = gui.useLocalStorage ? 'block' : 'none';\n}\nfunction addSaveMenu(gui) {\n var div = gui.__save_row = document.createElement('li');\n dom.addClass(gui.domElement, 'has-save');\n gui.__ul.insertBefore(div, gui.__ul.firstChild);\n dom.addClass(div, 'save-row');\n var gears = document.createElement('span');\n gears.innerHTML = ' ';\n dom.addClass(gears, 'button gears');\n var button = document.createElement('span');\n button.innerHTML = 'Save';\n dom.addClass(button, 'button');\n dom.addClass(button, 'save');\n var button2 = document.createElement('span');\n button2.innerHTML = 'New';\n dom.addClass(button2, 'button');\n dom.addClass(button2, 'save-as');\n var button3 = document.createElement('span');\n button3.innerHTML = 'Revert';\n dom.addClass(button3, 'button');\n dom.addClass(button3, 'revert');\n var select = gui.__preset_select = document.createElement('select');\n if (gui.load && gui.load.remembered) {\n Common.each(gui.load.remembered, function (value, key) {\n addPresetOption(gui, key, key === gui.preset);\n });\n } else {\n addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false);\n }\n dom.bind(select, 'change', function () {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n gui.__preset_select[index].innerHTML = gui.__preset_select[index].value;\n }\n gui.preset = this.value;\n });\n div.appendChild(select);\n div.appendChild(gears);\n div.appendChild(button);\n div.appendChild(button2);\n div.appendChild(button3);\n if (SUPPORTS_LOCAL_STORAGE) {\n var explain = document.getElementById('dg-local-explain');\n var localStorageCheckBox = document.getElementById('dg-local-storage');\n var saveLocally = document.getElementById('dg-save-locally');\n saveLocally.style.display = 'block';\n if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') {\n localStorageCheckBox.setAttribute('checked', 'checked');\n }\n showHideExplain(gui, explain);\n dom.bind(localStorageCheckBox, 'change', function () {\n gui.useLocalStorage = !gui.useLocalStorage;\n showHideExplain(gui, explain);\n });\n }\n var newConstructorTextArea = document.getElementById('dg-new-constructor');\n dom.bind(newConstructorTextArea, 'keydown', function (e) {\n if (e.metaKey && (e.which === 67 || e.keyCode === 67)) {\n SAVE_DIALOGUE.hide();\n }\n });\n dom.bind(gears, 'click', function () {\n newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2);\n SAVE_DIALOGUE.show();\n newConstructorTextArea.focus();\n newConstructorTextArea.select();\n });\n dom.bind(button, 'click', function () {\n gui.save();\n });\n dom.bind(button2, 'click', function () {\n var presetName = prompt('Enter a new preset name.');\n if (presetName) {\n gui.saveAs(presetName);\n }\n });\n dom.bind(button3, 'click', function () {\n gui.revert();\n });\n}\nfunction addResizeHandle(gui) {\n var pmouseX = void 0;\n gui.__resize_handle = document.createElement('div');\n Common.extend(gui.__resize_handle.style, {\n width: '6px',\n marginLeft: '-3px',\n height: '200px',\n cursor: 'ew-resize',\n position: 'absolute'\n });\n function drag(e) {\n e.preventDefault();\n gui.width += pmouseX - e.clientX;\n gui.onResize();\n pmouseX = e.clientX;\n return false;\n }\n function dragStop() {\n dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.unbind(window, 'mousemove', drag);\n dom.unbind(window, 'mouseup', dragStop);\n }\n function dragStart(e) {\n e.preventDefault();\n pmouseX = e.clientX;\n dom.addClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.bind(window, 'mousemove', drag);\n dom.bind(window, 'mouseup', dragStop);\n return false;\n }\n dom.bind(gui.__resize_handle, 'mousedown', dragStart);\n dom.bind(gui.__closeButton, 'mousedown', dragStart);\n gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild);\n}\nfunction setWidth(gui, w) {\n gui.domElement.style.width = w + 'px';\n if (gui.__save_row && gui.autoPlace) {\n gui.__save_row.style.width = w + 'px';\n }\n if (gui.__closeButton) {\n gui.__closeButton.style.width = w + 'px';\n }\n}\nfunction getCurrentPreset(gui, useInitialValues) {\n var toReturn = {};\n Common.each(gui.__rememberedObjects, function (val, index) {\n var savedValues = {};\n var controllerMap = gui.__rememberedObjectIndecesToControllers[index];\n Common.each(controllerMap, function (controller, property) {\n savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue();\n });\n toReturn[index] = savedValues;\n });\n return toReturn;\n}\nfunction setPresetSelectIndex(gui) {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n if (gui.__preset_select[index].value === gui.preset) {\n gui.__preset_select.selectedIndex = index;\n }\n }\n}\nfunction updateDisplays(controllerArray) {\n if (controllerArray.length !== 0) {\n requestAnimationFrame$1.call(window, function () {\n updateDisplays(controllerArray);\n });\n }\n Common.each(controllerArray, function (c) {\n c.updateDisplay();\n });\n}\n\nvar color = {\n Color: Color,\n math: ColorMath,\n interpret: interpret\n};\nvar controllers = {\n Controller: Controller,\n BooleanController: BooleanController,\n OptionController: OptionController,\n StringController: StringController,\n NumberController: NumberController,\n NumberControllerBox: NumberControllerBox,\n NumberControllerSlider: NumberControllerSlider,\n FunctionController: FunctionController,\n ColorController: ColorController\n};\nvar dom$1 = { dom: dom };\nvar gui = { GUI: GUI };\nvar GUI$1 = GUI;\nvar index = {\n color: color,\n controllers: controllers,\n dom: dom$1,\n gui: gui,\n GUI: GUI$1\n};\n\nexport { color, controllers, dom$1 as dom, gui, GUI$1 as GUI };\nexport default index;\n//# sourceMappingURL=dat.gui.module.js.map\n","import { mat4, vec3 } from 'wgpu-matrix';\nimport { GUI } from 'dat.gui';\n\nimport particleWGSL from './particle.wgsl';\nimport probabilityMapWGSL from './probabilityMap.wgsl';\n\nconst numParticles = 50000;\nconst particlePositionOffset = 0;\nconst particleColorOffset = 4 * 4;\nconst particleInstanceByteSize =\n 3 * 4 + // position\n 1 * 4 + // lifetime\n 4 * 4 + // color\n 3 * 4 + // velocity\n 1 * 4 + // padding\n 0;\n\nconst canvas = document.querySelector('canvas') as HTMLCanvasElement;\nconst adapter = await navigator.gpu.requestAdapter();\nconst device = await adapter.requestDevice();\n\nconst context = canvas.getContext('webgpu') as GPUCanvasContext;\n\nconst devicePixelRatio = window.devicePixelRatio;\ncanvas.width = canvas.clientWidth * devicePixelRatio;\ncanvas.height = canvas.clientHeight * devicePixelRatio;\nconst presentationFormat = navigator.gpu.getPreferredCanvasFormat();\n\ncontext.configure({\n device,\n format: presentationFormat,\n alphaMode: 'premultiplied',\n});\n\nconst particlesBuffer = device.createBuffer({\n size: numParticles * particleInstanceByteSize,\n usage: GPUBufferUsage.VERTEX | GPUBufferUsage.STORAGE,\n});\n\nconst renderPipeline = device.createRenderPipeline({\n layout: 'auto',\n vertex: {\n module: device.createShaderModule({\n code: particleWGSL,\n }),\n buffers: [\n {\n // instanced particles buffer\n arrayStride: particleInstanceByteSize,\n stepMode: 'instance',\n attributes: [\n {\n // position\n shaderLocation: 0,\n offset: particlePositionOffset,\n format: 'float32x3',\n },\n {\n // color\n shaderLocation: 1,\n offset: particleColorOffset,\n format: 'float32x4',\n },\n ],\n },\n {\n // quad vertex buffer\n arrayStride: 2 * 4, // vec2\n stepMode: 'vertex',\n attributes: [\n {\n // vertex positions\n shaderLocation: 2,\n offset: 0,\n format: 'float32x2',\n },\n ],\n },\n ],\n },\n fragment: {\n module: device.createShaderModule({\n code: particleWGSL,\n }),\n targets: [\n {\n format: presentationFormat,\n blend: {\n color: {\n srcFactor: 'src-alpha',\n dstFactor: 'one',\n operation: 'add',\n },\n alpha: {\n srcFactor: 'zero',\n dstFactor: 'one',\n operation: 'add',\n },\n },\n },\n ],\n },\n primitive: {\n topology: 'triangle-list',\n },\n\n depthStencil: {\n depthWriteEnabled: false,\n depthCompare: 'less',\n format: 'depth24plus',\n },\n});\n\nconst depthTexture = device.createTexture({\n size: [canvas.width, canvas.height],\n format: 'depth24plus',\n usage: GPUTextureUsage.RENDER_ATTACHMENT,\n});\n\nconst uniformBufferSize =\n 4 * 4 * 4 + // modelViewProjectionMatrix : mat4x4\n 3 * 4 + // right : vec3\n 4 + // padding\n 3 * 4 + // up : vec3\n 4 + // padding\n 0;\nconst uniformBuffer = device.createBuffer({\n size: uniformBufferSize,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n});\n\nconst uniformBindGroup = device.createBindGroup({\n layout: renderPipeline.getBindGroupLayout(0),\n entries: [\n {\n binding: 0,\n resource: {\n buffer: uniformBuffer,\n },\n },\n ],\n});\n\nconst renderPassDescriptor: GPURenderPassDescriptor = {\n colorAttachments: [\n {\n view: undefined, // Assigned later\n clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 1.0 },\n loadOp: 'clear',\n storeOp: 'store',\n },\n ],\n depthStencilAttachment: {\n view: depthTexture.createView(),\n\n depthClearValue: 1.0,\n depthLoadOp: 'clear',\n depthStoreOp: 'store',\n },\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// Quad vertex buffer\n//////////////////////////////////////////////////////////////////////////////\nconst quadVertexBuffer = device.createBuffer({\n size: 6 * 2 * 4, // 6x vec2\n usage: GPUBufferUsage.VERTEX,\n mappedAtCreation: true,\n});\n// prettier-ignore\nconst vertexData = [\n -1.0, -1.0, +1.0, -1.0, -1.0, +1.0, -1.0, +1.0, +1.0, -1.0, +1.0, +1.0,\n];\nnew Float32Array(quadVertexBuffer.getMappedRange()).set(vertexData);\nquadVertexBuffer.unmap();\n\n//////////////////////////////////////////////////////////////////////////////\n// Texture\n//////////////////////////////////////////////////////////////////////////////\nlet texture: GPUTexture;\nlet textureWidth = 1;\nlet textureHeight = 1;\nlet numMipLevels = 1;\n{\n const response = await fetch('../../assets/img/webgpu.png');\n const imageBitmap = await createImageBitmap(await response.blob());\n\n // Calculate number of mip levels required to generate the probability map\n while (\n textureWidth < imageBitmap.width ||\n textureHeight < imageBitmap.height\n ) {\n textureWidth *= 2;\n textureHeight *= 2;\n numMipLevels++;\n }\n texture = device.createTexture({\n size: [imageBitmap.width, imageBitmap.height, 1],\n mipLevelCount: numMipLevels,\n format: 'rgba8unorm',\n usage:\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.STORAGE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.RENDER_ATTACHMENT,\n });\n device.queue.copyExternalImageToTexture(\n { source: imageBitmap },\n { texture: texture },\n [imageBitmap.width, imageBitmap.height]\n );\n}\n\n//////////////////////////////////////////////////////////////////////////////\n// Probability map generation\n// The 0'th mip level of texture holds the color data and spawn-probability in\n// the alpha channel. The mip levels 1..N are generated to hold spawn\n// probabilities up to the top 1x1 mip level.\n//////////////////////////////////////////////////////////////////////////////\n{\n const probabilityMapImportLevelPipeline = device.createComputePipeline({\n layout: 'auto',\n compute: {\n module: device.createShaderModule({ code: probabilityMapWGSL }),\n entryPoint: 'import_level',\n },\n });\n const probabilityMapExportLevelPipeline = device.createComputePipeline({\n layout: 'auto',\n compute: {\n module: device.createShaderModule({ code: probabilityMapWGSL }),\n entryPoint: 'export_level',\n },\n });\n\n const probabilityMapUBOBufferSize =\n 1 * 4 + // stride\n 3 * 4 + // padding\n 0;\n const probabilityMapUBOBuffer = device.createBuffer({\n size: probabilityMapUBOBufferSize,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n const buffer_a = device.createBuffer({\n size: textureWidth * textureHeight * 4,\n usage: GPUBufferUsage.STORAGE,\n });\n const buffer_b = device.createBuffer({\n size: textureWidth * textureHeight * 4,\n usage: GPUBufferUsage.STORAGE,\n });\n device.queue.writeBuffer(\n probabilityMapUBOBuffer,\n 0,\n new Int32Array([textureWidth])\n );\n const commandEncoder = device.createCommandEncoder();\n for (let level = 0; level < numMipLevels; level++) {\n const levelWidth = textureWidth >> level;\n const levelHeight = textureHeight >> level;\n const pipeline =\n level == 0\n ? probabilityMapImportLevelPipeline.getBindGroupLayout(0)\n : probabilityMapExportLevelPipeline.getBindGroupLayout(0);\n const probabilityMapBindGroup = device.createBindGroup({\n layout: pipeline,\n entries: [\n {\n // ubo\n binding: 0,\n resource: { buffer: probabilityMapUBOBuffer },\n },\n {\n // buf_in\n binding: 1,\n resource: { buffer: level & 1 ? buffer_a : buffer_b },\n },\n {\n // buf_out\n binding: 2,\n resource: { buffer: level & 1 ? buffer_b : buffer_a },\n },\n {\n // tex_in / tex_out\n binding: 3,\n resource: texture.createView({\n format: 'rgba8unorm',\n dimension: '2d',\n baseMipLevel: level,\n mipLevelCount: 1,\n }),\n },\n ],\n });\n if (level == 0) {\n const passEncoder = commandEncoder.beginComputePass();\n passEncoder.setPipeline(probabilityMapImportLevelPipeline);\n passEncoder.setBindGroup(0, probabilityMapBindGroup);\n passEncoder.dispatchWorkgroups(Math.ceil(levelWidth / 64), levelHeight);\n passEncoder.end();\n } else {\n const passEncoder = commandEncoder.beginComputePass();\n passEncoder.setPipeline(probabilityMapExportLevelPipeline);\n passEncoder.setBindGroup(0, probabilityMapBindGroup);\n passEncoder.dispatchWorkgroups(Math.ceil(levelWidth / 64), levelHeight);\n passEncoder.end();\n }\n }\n device.queue.submit([commandEncoder.finish()]);\n}\n\n//////////////////////////////////////////////////////////////////////////////\n// Simulation compute pipeline\n//////////////////////////////////////////////////////////////////////////////\nconst simulationParams = {\n simulate: true,\n deltaTime: 0.04,\n};\n\nconst simulationUBOBufferSize =\n 1 * 4 + // deltaTime\n 3 * 4 + // padding\n 4 * 4 + // seed\n 0;\nconst simulationUBOBuffer = device.createBuffer({\n size: simulationUBOBufferSize,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n});\n\nconst gui = new GUI();\ngui.add(simulationParams, 'simulate');\ngui.add(simulationParams, 'deltaTime');\n\nconst computePipeline = device.createComputePipeline({\n layout: 'auto',\n compute: {\n module: device.createShaderModule({\n code: particleWGSL,\n }),\n entryPoint: 'simulate',\n },\n});\nconst computeBindGroup = device.createBindGroup({\n layout: computePipeline.getBindGroupLayout(0),\n entries: [\n {\n binding: 0,\n resource: {\n buffer: simulationUBOBuffer,\n },\n },\n {\n binding: 1,\n resource: {\n buffer: particlesBuffer,\n offset: 0,\n size: numParticles * particleInstanceByteSize,\n },\n },\n {\n binding: 2,\n resource: texture.createView(),\n },\n ],\n});\n\nconst aspect = canvas.width / canvas.height;\nconst projection = mat4.perspective((2 * Math.PI) / 5, aspect, 1, 100.0);\nconst view = mat4.create();\nconst mvp = mat4.create();\n\nfunction frame() {\n device.queue.writeBuffer(\n simulationUBOBuffer,\n 0,\n new Float32Array([\n simulationParams.simulate ? simulationParams.deltaTime : 0.0,\n 0.0,\n 0.0,\n 0.0, // padding\n Math.random() * 100,\n Math.random() * 100, // seed.xy\n 1 + Math.random(),\n 1 + Math.random(), // seed.zw\n ])\n );\n\n mat4.identity(view);\n mat4.translate(view, vec3.fromValues(0, 0, -3), view);\n mat4.rotateX(view, Math.PI * -0.2, view);\n mat4.multiply(projection, view, mvp);\n\n // prettier-ignore\n device.queue.writeBuffer(\n uniformBuffer,\n 0,\n new Float32Array([\n // modelViewProjectionMatrix\n mvp[0], mvp[1], mvp[2], mvp[3],\n mvp[4], mvp[5], mvp[6], mvp[7],\n mvp[8], mvp[9], mvp[10], mvp[11],\n mvp[12], mvp[13], mvp[14], mvp[15],\n\n view[0], view[4], view[8], // right\n\n 0, // padding\n\n view[1], view[5], view[9], // up\n\n 0, // padding\n ])\n );\n const swapChainTexture = context.getCurrentTexture();\n // prettier-ignore\n renderPassDescriptor.colorAttachments[0].view = swapChainTexture.createView();\n\n const commandEncoder = device.createCommandEncoder();\n {\n const passEncoder = commandEncoder.beginComputePass();\n passEncoder.setPipeline(computePipeline);\n passEncoder.setBindGroup(0, computeBindGroup);\n passEncoder.dispatchWorkgroups(Math.ceil(numParticles / 64));\n passEncoder.end();\n }\n {\n const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);\n passEncoder.setPipeline(renderPipeline);\n passEncoder.setBindGroup(0, uniformBindGroup);\n passEncoder.setVertexBuffer(0, particlesBuffer);\n passEncoder.setVertexBuffer(1, quadVertexBuffer);\n passEncoder.draw(6, numParticles, 0, 0);\n passEncoder.end();\n }\n\n device.queue.submit([commandEncoder.finish()]);\n\n requestAnimationFrame(frame);\n}\nrequestAnimationFrame(frame);\n"],"names":["requestAnimationFrame","requestAnimationFrame$1","GUI","mat4","vec3"],"mappings":"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O;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC;AAC1C,CAAC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,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,OAAO,GAAG,CAAC;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE;AAC3B,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AACjC,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,C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C,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI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AAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5D,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5D,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5D,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5D,IAAI,GAAG,CAAC,EAAE,CAAC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GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,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","x_google_ignoreList":[0,1]} \ No newline at end of file +{"version":3,"file":"main.js","sources":["../../../node_modules/wgpu-matrix/dist/2.x/wgpu-matrix.module.js","../../../node_modules/dat.gui/build/dat.gui.module.js","../../../../../sample/particles/main.ts"],"sourcesContent":["/* wgpu-matrix@2.5.1, license MIT */\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nlet EPSILON = 0.000001;\n/**\n * Set the value for EPSILON for various checks\n * @param v - Value to use for EPSILON.\n * @returns previous value of EPSILON;\n */\nfunction setEpsilon(v) {\n const old = EPSILON;\n EPSILON = v;\n return old;\n}\n/**\n * Convert degrees to radians\n * @param degrees - Angle in degrees\n * @returns angle converted to radians\n */\nfunction degToRad(degrees) {\n return degrees * Math.PI / 180;\n}\n/**\n * Convert radians to degrees\n * @param radians - Angle in radians\n * @returns angle converted to degrees\n */\nfunction radToDeg(radians) {\n return radians * 180 / Math.PI;\n}\n/**\n * Lerps between a and b via t\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @returns a + (b - a) * t\n */\nfunction lerp$4(a, b, t) {\n return a + (b - a) * t;\n}\n/**\n * Compute the opposite of lerp. Given a and b and a value between\n * a and b returns a value between 0 and 1. 0 if a, 1 if b.\n * Note: no clamping is done.\n * @param a - start value\n * @param b - end value\n * @param v - value between a and b\n * @returns (v - a) / (b - a)\n */\nfunction inverseLerp(a, b, v) {\n const d = b - a;\n return (Math.abs(b - a) < EPSILON)\n ? a\n : (v - a) / d;\n}\n/**\n * Compute the euclidean modulo\n *\n * ```\n * // table for n / 3\n * -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 <- n\n * ------------------------------------\n * -2 -1 -0 -2 -1 0, 1, 2, 0, 1, 2 <- n % 3\n * 1 2 0 1 2 0, 1, 2, 0, 1, 2 <- euclideanModule(n, 3)\n * ```\n *\n * @param n - dividend\n * @param m - divisor\n * @returns the euclidean modulo of n / m\n */\nfunction euclideanModulo(n, m) {\n return ((n % m) + m) % m;\n}\n\nvar utils = /*#__PURE__*/Object.freeze({\n __proto__: null,\n get EPSILON () { return EPSILON; },\n setEpsilon: setEpsilon,\n degToRad: degToRad,\n radToDeg: radToDeg,\n lerp: lerp$4,\n inverseLerp: inverseLerp,\n euclideanModulo: euclideanModulo\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Vec2 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new Vec2. In other words you can do this\n *\n * const v = vec2.cross(v1, v2); // Creates a new Vec2 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec2.create();\n * vec2.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec2.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet VecType$2 = Float32Array;\n/**\n * Sets the type this library creates for a Vec2\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec2\n */\nfunction setDefaultType$6(ctor) {\n const oldType = VecType$2;\n VecType$2 = ctor;\n return oldType;\n}\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values.\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Vec2's specified type\n * it would be faster to use\n *\n * ```\n * const v = vec2.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Vec2Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `vec2.create` is usually used\n * to create a Vec2 to be filled out as in\n *\n * ```\n * const sum = vec2.create();\n * vec2.add(v1, v2, sum);\n * ```\n *\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nfunction create$5(x = 0, y = 0) {\n const dst = new VecType$2(2);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Vec3 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec3`. In other words you can do this\n *\n * const v = vec3.cross(v1, v2); // Creates a new Vec3 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec3.create();\n * vec3.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec3.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet VecType$1 = Float32Array;\n/**\n * Sets the type this library creates for a Vec3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec3\n */\nfunction setDefaultType$5(ctor) {\n const oldType = VecType$1;\n VecType$1 = ctor;\n return oldType;\n}\n/**\n * Creates a vec3; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nfunction create$4(x, y, z) {\n const dst = new VecType$1(3);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n }\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nconst fromValues$3 = create$5;\n/**\n * Sets the values of a Vec2\n * Also see {@link vec2.create} and {@link vec2.copy}\n *\n * @param x first value\n * @param y second value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set$5(x, y, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = x;\n dst[1] = y;\n return dst;\n}\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nfunction ceil$2(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n return dst;\n}\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nfunction floor$2(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n return dst;\n}\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nfunction round$2(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n return dst;\n}\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nfunction clamp$2(v, min = 0, max = 1, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n return dst;\n}\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nfunction add$3(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n return dst;\n}\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nfunction addScaled$2(a, b, scale, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n return dst;\n}\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nfunction angle$2(a, b) {\n const ax = a[0];\n const ay = a[1];\n const bx = a[0];\n const by = a[1];\n const mag1 = Math.sqrt(ax * ax + ay * ay);\n const mag2 = Math.sqrt(bx * bx + by * by);\n const mag = mag1 * mag2;\n const cosine = mag && dot$3(a, b) / mag;\n return Math.acos(cosine);\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nfunction subtract$3(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nconst sub$3 = subtract$3;\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nfunction equalsApproximately$5(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON;\n}\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nfunction equals$5(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp$3(a, b, t, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n return dst;\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nfunction lerpV$2(a, b, t, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n return dst;\n}\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nfunction max$2(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n return dst;\n}\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nfunction min$2(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n return dst;\n}\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction mulScalar$3(v, k, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n return dst;\n}\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nconst scale$5 = mulScalar$3;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction divScalar$3(v, k, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n return dst;\n}\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nfunction inverse$5(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n return dst;\n}\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nconst invert$4 = inverse$5;\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nfunction cross$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n const z = a[0] * b[1] - a[1] * b[0];\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = z;\n return dst;\n}\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nfunction dot$3(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nfunction length$3(v) {\n const v0 = v[0];\n const v1 = v[1];\n return Math.sqrt(v0 * v0 + v1 * v1);\n}\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nconst len$3 = length$3;\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nfunction lengthSq$3(v) {\n const v0 = v[0];\n const v1 = v[1];\n return v0 * v0 + v1 * v1;\n}\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nconst lenSq$3 = lengthSq$3;\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nfunction distance$2(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return Math.sqrt(dx * dx + dy * dy);\n}\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nconst dist$2 = distance$2;\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nfunction distanceSq$2(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return dx * dx + dy * dy;\n}\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nconst distSq$2 = distanceSq$2;\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nfunction normalize$3(v, dst) {\n dst = dst || new VecType$2(2);\n const v0 = v[0];\n const v1 = v[1];\n const len = Math.sqrt(v0 * v0 + v1 * v1);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n }\n return dst;\n}\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nfunction negate$4(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = -v[0];\n dst[1] = -v[1];\n return dst;\n}\n/**\n * Copies a vector. (same as {@link vec2.clone})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nfunction copy$5(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = v[0];\n dst[1] = v[1];\n return dst;\n}\n/**\n * Clones a vector. (same as {@link vec2.copy})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nconst clone$5 = copy$5;\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nfunction multiply$5(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n return dst;\n}\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nconst mul$5 = multiply$5;\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nfunction divide$2(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n return dst;\n}\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nconst div$2 = divide$2;\n/**\n * Creates a random unit vector * scale\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nfunction random$1(scale = 1, dst) {\n dst = dst || new VecType$2(2);\n const angle = Math.random() * 2 * Math.PI;\n dst[0] = Math.cos(angle) * scale;\n dst[1] = Math.sin(angle) * scale;\n return dst;\n}\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nfunction zero$2(dst) {\n dst = dst || new VecType$2(2);\n dst[0] = 0;\n dst[1] = 0;\n return dst;\n}\n/**\n * transform Vec2 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat4$2(v, m, dst) {\n dst = dst || new VecType$2(2);\n const x = v[0];\n const y = v[1];\n dst[0] = x * m[0] + y * m[4] + m[12];\n dst[1] = x * m[1] + y * m[5] + m[13];\n return dst;\n}\n/**\n * Transforms vec4 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat3$1(v, m, dst) {\n dst = dst || new VecType$2(2);\n const x = v[0];\n const y = v[1];\n dst[0] = m[0] * x + m[4] * y + m[8];\n dst[1] = m[1] * x + m[5] * y + m[9];\n return dst;\n}\n\nvar vec2Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create$5,\n setDefaultType: setDefaultType$6,\n fromValues: fromValues$3,\n set: set$5,\n ceil: ceil$2,\n floor: floor$2,\n round: round$2,\n clamp: clamp$2,\n add: add$3,\n addScaled: addScaled$2,\n angle: angle$2,\n subtract: subtract$3,\n sub: sub$3,\n equalsApproximately: equalsApproximately$5,\n equals: equals$5,\n lerp: lerp$3,\n lerpV: lerpV$2,\n max: max$2,\n min: min$2,\n mulScalar: mulScalar$3,\n scale: scale$5,\n divScalar: divScalar$3,\n inverse: inverse$5,\n invert: invert$4,\n cross: cross$1,\n dot: dot$3,\n length: length$3,\n len: len$3,\n lengthSq: lengthSq$3,\n lenSq: lenSq$3,\n distance: distance$2,\n dist: dist$2,\n distanceSq: distanceSq$2,\n distSq: distSq$2,\n normalize: normalize$3,\n negate: negate$4,\n copy: copy$5,\n clone: clone$5,\n multiply: multiply$5,\n mul: mul$5,\n divide: divide$2,\n div: div$2,\n random: random$1,\n zero: zero$2,\n transformMat4: transformMat4$2,\n transformMat3: transformMat3$1\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * 3x3 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat3.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat3.create();\n * mat3.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat3.identity();\n * const trans = mat3.translation([1, 2, 3]);\n * mat3.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType$1 = Float32Array;\n// This mess is because with Mat3 we have 3 unused elements.\n// For Float32Array and Float64Array that's not an issue\n// but for Array it's troublesome\nconst ctorMap = new Map([\n [Float32Array, () => new Float32Array(12)],\n [Float64Array, () => new Float64Array(12)],\n [Array, () => new Array(12).fill(0)],\n]);\nlet newMat3 = ctorMap.get(Float32Array);\n/**\n * Sets the type this library creates for a Mat3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat3\n */\nfunction setDefaultType$4(ctor) {\n const oldType = MatType$1;\n MatType$1 = ctor;\n newMat3 = ctorMap.get(ctor);\n return oldType;\n}\n/**\n * Create a Mat3 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat3's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat3.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat3Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat3.create` is usually used\n * to create a Mat3 to be filled out as in\n *\n * ```\n * const m = mat3.create();\n * mat3.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @returns matrix created from values.\n */\nfunction create$3(v0, v1, v2, v3, v4, v5, v6, v7, v8) {\n const dst = newMat3();\n // to make the array homogenous\n dst[3] = 0;\n dst[7] = 0;\n dst[11] = 0;\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[4] = v3;\n if (v4 !== undefined) {\n dst[5] = v4;\n if (v5 !== undefined) {\n dst[6] = v5;\n if (v6 !== undefined) {\n dst[8] = v6;\n if (v7 !== undefined) {\n dst[9] = v7;\n if (v8 !== undefined) {\n dst[10] = v8;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return dst;\n}\n/**\n * Sets the values of a Mat3\n * Also see {@link mat3.create} and {@link mat3.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 set from values.\n */\nfunction set$4(v0, v1, v2, v3, v4, v5, v6, v7, v8, dst) {\n dst = dst || newMat3();\n dst[0] = v0;\n dst[1] = v1;\n dst[2] = v2;\n dst[3] = 0;\n dst[4] = v3;\n dst[5] = v4;\n dst[6] = v5;\n dst[7] = 0;\n dst[8] = v6;\n dst[9] = v7;\n dst[10] = v8;\n dst[11] = 0;\n return dst;\n}\n/**\n * Creates a Mat3 from the upper left 3x3 part of a Mat4\n * @param m4 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from m4\n */\nfunction fromMat4(m4, dst) {\n dst = dst || newMat3();\n dst[0] = m4[0];\n dst[1] = m4[1];\n dst[2] = m4[2];\n dst[3] = 0;\n dst[4] = m4[4];\n dst[5] = m4[5];\n dst[6] = m4[6];\n dst[7] = 0;\n dst[8] = m4[8];\n dst[9] = m4[9];\n dst[10] = m4[10];\n dst[11] = 0;\n return dst;\n}\n/**\n * Creates a Mat3 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from q\n */\nfunction fromQuat$1(q, dst) {\n dst = dst || newMat3();\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n dst[0] = 1 - yy - zz;\n dst[1] = yx + wz;\n dst[2] = zx - wy;\n dst[3] = 0;\n dst[4] = yx - wz;\n dst[5] = 1 - xx - zz;\n dst[6] = zy + wx;\n dst[7] = 0;\n dst[8] = zx + wy;\n dst[9] = zy - wx;\n dst[10] = 1 - xx - yy;\n dst[11] = 0;\n return dst;\n}\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nfunction negate$3(m, dst) {\n dst = dst || newMat3();\n dst[0] = -m[0];\n dst[1] = -m[1];\n dst[2] = -m[2];\n dst[4] = -m[4];\n dst[5] = -m[5];\n dst[6] = -m[6];\n dst[8] = -m[8];\n dst[9] = -m[9];\n dst[10] = -m[10];\n return dst;\n}\n/**\n * Copies a matrix. (same as {@link mat3.clone})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nfunction copy$4(m, dst) {\n dst = dst || newMat3();\n dst[0] = m[0];\n dst[1] = m[1];\n dst[2] = m[2];\n dst[4] = m[4];\n dst[5] = m[5];\n dst[6] = m[6];\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n return dst;\n}\n/**\n * Copies a matrix (same as {@link mat3.copy})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nconst clone$4 = copy$4;\n/**\n * Check if 2 matrices are approximately equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are approximately equal\n */\nfunction equalsApproximately$4(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[4] - b[4]) < EPSILON &&\n Math.abs(a[5] - b[5]) < EPSILON &&\n Math.abs(a[6] - b[6]) < EPSILON &&\n Math.abs(a[8] - b[8]) < EPSILON &&\n Math.abs(a[9] - b[9]) < EPSILON &&\n Math.abs(a[10] - b[10]) < EPSILON;\n}\n/**\n * Check if 2 matrices are exactly equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are exactly equal\n */\nfunction equals$4(a, b) {\n return a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[4] === b[4] &&\n a[5] === b[5] &&\n a[6] === b[6] &&\n a[8] === b[8] &&\n a[9] === b[9] &&\n a[10] === b[10];\n}\n/**\n * Creates a 3-by-3 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 3-by-3 identity matrix.\n */\nfunction identity$2(dst) {\n dst = dst || newMat3();\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nfunction transpose$1(m, dst) {\n dst = dst || newMat3();\n if (dst === m) {\n let t;\n // 0 1 2\n // 4 5 6\n // 8 9 10\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n return dst;\n }\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n dst[0] = m00;\n dst[1] = m10;\n dst[2] = m20;\n dst[4] = m01;\n dst[5] = m11;\n dst[6] = m21;\n dst[8] = m02;\n dst[9] = m12;\n dst[10] = m22;\n return dst;\n}\n/**\n * Computes the inverse of a 3-by-3 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nfunction inverse$4(m, dst) {\n dst = dst || newMat3();\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const b01 = m22 * m11 - m12 * m21;\n const b11 = -m22 * m10 + m12 * m20;\n const b21 = m21 * m10 - m11 * m20;\n const invDet = 1 / (m00 * b01 + m01 * b11 + m02 * b21);\n dst[0] = b01 * invDet;\n dst[1] = (-m22 * m01 + m02 * m21) * invDet;\n dst[2] = (m12 * m01 - m02 * m11) * invDet;\n dst[4] = b11 * invDet;\n dst[5] = (m22 * m00 - m02 * m20) * invDet;\n dst[6] = (-m12 * m00 + m02 * m10) * invDet;\n dst[8] = b21 * invDet;\n dst[9] = (-m21 * m00 + m01 * m20) * invDet;\n dst[10] = (m11 * m00 - m01 * m10) * invDet;\n return dst;\n}\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nfunction determinant$1(m) {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n return m00 * (m11 * m22 - m21 * m12) -\n m10 * (m01 * m22 - m21 * m02) +\n m20 * (m01 * m12 - m11 * m02);\n}\n/**\n * Computes the inverse of a 3-by-3 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nconst invert$3 = inverse$4;\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nfunction multiply$4(a, b, dst) {\n dst = dst || newMat3();\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a10 = a[4 + 0];\n const a11 = a[4 + 1];\n const a12 = a[4 + 2];\n const a20 = a[8 + 0];\n const a21 = a[8 + 1];\n const a22 = a[8 + 2];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b10 = b[4 + 0];\n const b11 = b[4 + 1];\n const b12 = b[4 + 2];\n const b20 = b[8 + 0];\n const b21 = b[8 + 1];\n const b22 = b[8 + 2];\n dst[0] = a00 * b00 + a10 * b01 + a20 * b02;\n dst[1] = a01 * b00 + a11 * b01 + a21 * b02;\n dst[2] = a02 * b00 + a12 * b01 + a22 * b02;\n dst[4] = a00 * b10 + a10 * b11 + a20 * b12;\n dst[5] = a01 * b10 + a11 * b11 + a21 * b12;\n dst[6] = a02 * b10 + a12 * b11 + a22 * b12;\n dst[8] = a00 * b20 + a10 * b21 + a20 * b22;\n dst[9] = a01 * b20 + a11 * b21 + a21 * b22;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22;\n return dst;\n}\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nconst mul$4 = multiply$4;\n/**\n * Sets the translation component of a 3-by-3 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nfunction setTranslation$1(a, v, dst) {\n dst = dst || identity$2();\n if (a !== dst) {\n dst[0] = a[0];\n dst[1] = a[1];\n dst[2] = a[2];\n dst[4] = a[4];\n dst[5] = a[5];\n dst[6] = a[6];\n }\n dst[8] = v[0];\n dst[9] = v[1];\n dst[10] = 1;\n return dst;\n}\n/**\n * Returns the translation component of a 3-by-3 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nfunction getTranslation$2(m, dst) {\n dst = dst || create$5();\n dst[0] = m[8];\n dst[1] = m[9];\n return dst;\n}\n/**\n * Returns an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y,\n * @returns The axis component of m.\n */\nfunction getAxis$2(m, axis, dst) {\n dst = dst || create$5();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n return dst;\n}\n/**\n * Sets an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nfunction setAxis$1(m, v, axis, dst) {\n if (dst !== m) {\n dst = copy$4(m, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nfunction getScaling$2(m, dst) {\n dst = dst || create$5();\n const xx = m[0];\n const xy = m[1];\n const yx = m[4];\n const yy = m[5];\n dst[0] = Math.sqrt(xx * xx + xy * xy);\n dst[1] = Math.sqrt(yx * yx + yy * yy);\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which translates by the given vector v.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nfunction translation$1(v, dst) {\n dst = dst || newMat3();\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[8] = v[0];\n dst[9] = v[1];\n dst[10] = 1;\n return dst;\n}\n/**\n * Translates the given 3-by-3 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nfunction translate$1(m, v, dst) {\n dst = dst || newMat3();\n const v0 = v[0];\n const v1 = v[1];\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n if (m !== dst) {\n dst[0] = m00;\n dst[1] = m01;\n dst[2] = m02;\n dst[4] = m10;\n dst[5] = m11;\n dst[6] = m12;\n }\n dst[8] = m00 * v0 + m10 * v1 + m20;\n dst[9] = m01 * v0 + m11 * v1 + m21;\n dst[10] = m02 * v0 + m12 * v1 + m22;\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which rotates by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotation$1(angleInRadians, dst) {\n dst = dst || newMat3();\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c;\n dst[1] = s;\n dst[2] = 0;\n dst[4] = -s;\n dst[5] = c;\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Rotates the given 3-by-3 matrix by the given angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotate$1(m, angleInRadians, dst) {\n dst = dst || newMat3();\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c * m00 + s * m10;\n dst[1] = c * m01 + s * m11;\n dst[2] = c * m02 + s * m12;\n dst[4] = c * m10 - s * m00;\n dst[5] = c * m11 - s * m01;\n dst[6] = c * m12 - s * m02;\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n }\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * 2 entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction scaling$1(v, dst) {\n dst = dst || newMat3();\n dst[0] = v[0];\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = v[1];\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of 2 entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction scale$4(m, v, dst) {\n dst = dst || newMat3();\n const v0 = v[0];\n const v1 = v[1];\n dst[0] = v0 * m[0 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2];\n dst[4] = v1 * m[1 * 4 + 0];\n dst[5] = v1 * m[1 * 4 + 1];\n dst[6] = v1 * m[1 * 4 + 2];\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n }\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which scales uniformly in each dimension\n * @param s - Amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction uniformScaling$1(s, dst) {\n dst = dst || newMat3();\n dst[0] = s;\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = s;\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given.\n * @param m - The matrix to be modified.\n * @param s - Amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction uniformScale$1(m, s, dst) {\n dst = dst || newMat3();\n dst[0] = s * m[0 * 4 + 0];\n dst[1] = s * m[0 * 4 + 1];\n dst[2] = s * m[0 * 4 + 2];\n dst[4] = s * m[1 * 4 + 0];\n dst[5] = s * m[1 * 4 + 1];\n dst[6] = s * m[1 * 4 + 2];\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n }\n return dst;\n}\n\nvar mat3Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setDefaultType: setDefaultType$4,\n create: create$3,\n set: set$4,\n fromMat4: fromMat4,\n fromQuat: fromQuat$1,\n negate: negate$3,\n copy: copy$4,\n clone: clone$4,\n equalsApproximately: equalsApproximately$4,\n equals: equals$4,\n identity: identity$2,\n transpose: transpose$1,\n inverse: inverse$4,\n determinant: determinant$1,\n invert: invert$3,\n multiply: multiply$4,\n mul: mul$4,\n setTranslation: setTranslation$1,\n getTranslation: getTranslation$2,\n getAxis: getAxis$2,\n setAxis: setAxis$1,\n getScaling: getScaling$2,\n translation: translation$1,\n translate: translate$1,\n rotation: rotation$1,\n rotate: rotate$1,\n scaling: scaling$1,\n scale: scale$4,\n uniformScaling: uniformScaling$1,\n uniformScale: uniformScale$1\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a vec3; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nconst fromValues$2 = create$4;\n/**\n * Sets the values of a Vec3\n * Also see {@link vec3.create} and {@link vec3.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set$3(x, y, z, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n return dst;\n}\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nfunction ceil$1(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n return dst;\n}\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nfunction floor$1(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n return dst;\n}\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nfunction round$1(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n return dst;\n}\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nfunction clamp$1(v, min = 0, max = 1, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n return dst;\n}\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nfunction add$2(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n return dst;\n}\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nfunction addScaled$1(a, b, scale, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n return dst;\n}\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nfunction angle$1(a, b) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = a[0];\n const by = a[1];\n const bz = a[2];\n const mag1 = Math.sqrt(ax * ax + ay * ay + az * az);\n const mag2 = Math.sqrt(bx * bx + by * by + bz * bz);\n const mag = mag1 * mag2;\n const cosine = mag && dot$2(a, b) / mag;\n return Math.acos(cosine);\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nfunction subtract$2(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nconst sub$2 = subtract$2;\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nfunction equalsApproximately$3(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON;\n}\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nfunction equals$3(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp$2(a, b, t, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n return dst;\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nfunction lerpV$1(a, b, t, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n return dst;\n}\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nfunction max$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n return dst;\n}\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nfunction min$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n return dst;\n}\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction mulScalar$2(v, k, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n return dst;\n}\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nconst scale$3 = mulScalar$2;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction divScalar$2(v, k, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n return dst;\n}\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nfunction inverse$3(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n return dst;\n}\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nconst invert$2 = inverse$3;\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nfunction cross(a, b, dst) {\n dst = dst || new VecType$1(3);\n const t1 = a[2] * b[0] - a[0] * b[2];\n const t2 = a[0] * b[1] - a[1] * b[0];\n dst[0] = a[1] * b[2] - a[2] * b[1];\n dst[1] = t1;\n dst[2] = t2;\n return dst;\n}\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nfunction dot$2(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]);\n}\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nfunction length$2(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n}\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nconst len$2 = length$2;\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nfunction lengthSq$2(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return v0 * v0 + v1 * v1 + v2 * v2;\n}\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nconst lenSq$2 = lengthSq$2;\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nfunction distance$1(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n}\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nconst dist$1 = distance$1;\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nfunction distanceSq$1(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return dx * dx + dy * dy + dz * dz;\n}\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nconst distSq$1 = distanceSq$1;\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nfunction normalize$2(v, dst) {\n dst = dst || new VecType$1(3);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n }\n return dst;\n}\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nfunction negate$2(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n return dst;\n}\n/**\n * Copies a vector. (same as {@link vec3.clone})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nfunction copy$3(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n return dst;\n}\n/**\n * Clones a vector. (same as {@link vec3.copy})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nconst clone$3 = copy$3;\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nfunction multiply$3(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n return dst;\n}\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nconst mul$3 = multiply$3;\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nfunction divide$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n return dst;\n}\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nconst div$1 = divide$1;\n/**\n * Creates a random vector\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nfunction random(scale = 1, dst) {\n dst = dst || new VecType$1(3);\n const angle = Math.random() * 2 * Math.PI;\n const z = Math.random() * 2 - 1;\n const zScale = Math.sqrt(1 - z * z) * scale;\n dst[0] = Math.cos(angle) * zScale;\n dst[1] = Math.sin(angle) * zScale;\n dst[2] = z * scale;\n return dst;\n}\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nfunction zero$1(dst) {\n dst = dst || new VecType$1(3);\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n return dst;\n}\n/**\n * transform vec3 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat4$1(v, m, dst) {\n dst = dst || new VecType$1(3);\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = (m[3] * x + m[7] * y + m[11] * z + m[15]) || 1;\n dst[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n dst[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n dst[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return dst;\n}\n/**\n * Transform vec4 by upper 3x3 matrix inside 4x4 matrix.\n * @param v - The direction.\n * @param m - The matrix.\n * @param dst - optional Vec3 to store result. If not passed a new one is created.\n * @returns The transformed vector.\n */\nfunction transformMat4Upper3x3(v, m, dst) {\n dst = dst || new VecType$1(3);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n dst[0] = v0 * m[0 * 4 + 0] + v1 * m[1 * 4 + 0] + v2 * m[2 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1] + v1 * m[1 * 4 + 1] + v2 * m[2 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2] + v1 * m[1 * 4 + 2] + v2 * m[2 * 4 + 2];\n return dst;\n}\n/**\n * Transforms vec3 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat3(v, m, dst) {\n dst = dst || new VecType$1(3);\n const x = v[0];\n const y = v[1];\n const z = v[2];\n dst[0] = x * m[0] + y * m[4] + z * m[8];\n dst[1] = x * m[1] + y * m[5] + z * m[9];\n dst[2] = x * m[2] + y * m[6] + z * m[10];\n return dst;\n}\n/**\n * Transforms vec3 by Quaternion\n * @param v - the vector to transform\n * @param q - the quaternion to transform by\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed\n */\nfunction transformQuat(v, q, dst) {\n dst = dst || new VecType$1(3);\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const w2 = q[3] * 2;\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const uvX = qy * z - qz * y;\n const uvY = qz * x - qx * z;\n const uvZ = qx * y - qy * x;\n dst[0] = x + uvX * w2 + (qy * uvZ - qz * uvY) * 2;\n dst[1] = y + uvY * w2 + (qz * uvX - qx * uvZ) * 2;\n dst[2] = z + uvZ * w2 + (qx * uvY - qy * uvX) * 2;\n return dst;\n}\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nfunction getTranslation$1(m, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nfunction getAxis$1(m, axis, dst) {\n dst = dst || new VecType$1(3);\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nfunction getScaling$1(m, dst) {\n dst = dst || new VecType$1(3);\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return dst;\n}\n\nvar vec3Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create$4,\n setDefaultType: setDefaultType$5,\n fromValues: fromValues$2,\n set: set$3,\n ceil: ceil$1,\n floor: floor$1,\n round: round$1,\n clamp: clamp$1,\n add: add$2,\n addScaled: addScaled$1,\n angle: angle$1,\n subtract: subtract$2,\n sub: sub$2,\n equalsApproximately: equalsApproximately$3,\n equals: equals$3,\n lerp: lerp$2,\n lerpV: lerpV$1,\n max: max$1,\n min: min$1,\n mulScalar: mulScalar$2,\n scale: scale$3,\n divScalar: divScalar$2,\n inverse: inverse$3,\n invert: invert$2,\n cross: cross,\n dot: dot$2,\n length: length$2,\n len: len$2,\n lengthSq: lengthSq$2,\n lenSq: lenSq$2,\n distance: distance$1,\n dist: dist$1,\n distanceSq: distanceSq$1,\n distSq: distSq$1,\n normalize: normalize$2,\n negate: negate$2,\n copy: copy$3,\n clone: clone$3,\n multiply: multiply$3,\n mul: mul$3,\n divide: divide$1,\n div: div$1,\n random: random,\n zero: zero$1,\n transformMat4: transformMat4$1,\n transformMat4Upper3x3: transformMat4Upper3x3,\n transformMat3: transformMat3,\n transformQuat: transformQuat,\n getTranslation: getTranslation$1,\n getAxis: getAxis$1,\n getScaling: getScaling$1\n});\n\n/**\n * 4x4 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat4.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat4.create();\n * mat4.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat4.identity();\n * const trans = mat4.translation([1, 2, 3]);\n * mat4.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType = Float32Array;\n/**\n * Sets the type this library creates for a Mat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat4\n */\nfunction setDefaultType$3(ctor) {\n const oldType = MatType;\n MatType = ctor;\n return oldType;\n}\n/**\n * Create a Mat4 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat4's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat4.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat4Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat4.create` is usually used\n * to create a Mat4 to be filled out as in\n *\n * ```\n * const m = mat4.create();\n * mat4.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @returns created from values.\n */\nfunction create$2(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) {\n const dst = new MatType(16);\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[3] = v3;\n if (v4 !== undefined) {\n dst[4] = v4;\n if (v5 !== undefined) {\n dst[5] = v5;\n if (v6 !== undefined) {\n dst[6] = v6;\n if (v7 !== undefined) {\n dst[7] = v7;\n if (v8 !== undefined) {\n dst[8] = v8;\n if (v9 !== undefined) {\n dst[9] = v9;\n if (v10 !== undefined) {\n dst[10] = v10;\n if (v11 !== undefined) {\n dst[11] = v11;\n if (v12 !== undefined) {\n dst[12] = v12;\n if (v13 !== undefined) {\n dst[13] = v13;\n if (v14 !== undefined) {\n dst[14] = v14;\n if (v15 !== undefined) {\n dst[15] = v15;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return dst;\n}\n/**\n * Sets the values of a Mat4\n * Also see {@link mat4.create} and {@link mat4.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 created from values.\n */\nfunction set$2(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, dst) {\n dst = dst || new MatType(16);\n dst[0] = v0;\n dst[1] = v1;\n dst[2] = v2;\n dst[3] = v3;\n dst[4] = v4;\n dst[5] = v5;\n dst[6] = v6;\n dst[7] = v7;\n dst[8] = v8;\n dst[9] = v9;\n dst[10] = v10;\n dst[11] = v11;\n dst[12] = v12;\n dst[13] = v13;\n dst[14] = v14;\n dst[15] = v15;\n return dst;\n}\n/**\n * Creates a Mat4 from a Mat3\n * @param m3 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from m3\n */\nfunction fromMat3(m3, dst) {\n dst = dst || new MatType(16);\n dst[0] = m3[0];\n dst[1] = m3[1];\n dst[2] = m3[2];\n dst[3] = 0;\n dst[4] = m3[4];\n dst[5] = m3[5];\n dst[6] = m3[6];\n dst[7] = 0;\n dst[8] = m3[8];\n dst[9] = m3[9];\n dst[10] = m3[10];\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Creates a Mat4 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from q\n */\nfunction fromQuat(q, dst) {\n dst = dst || new MatType(16);\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n dst[0] = 1 - yy - zz;\n dst[1] = yx + wz;\n dst[2] = zx - wy;\n dst[3] = 0;\n dst[4] = yx - wz;\n dst[5] = 1 - xx - zz;\n dst[6] = zy + wx;\n dst[7] = 0;\n dst[8] = zx + wy;\n dst[9] = zy - wx;\n dst[10] = 1 - xx - yy;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nfunction negate$1(m, dst) {\n dst = dst || new MatType(16);\n dst[0] = -m[0];\n dst[1] = -m[1];\n dst[2] = -m[2];\n dst[3] = -m[3];\n dst[4] = -m[4];\n dst[5] = -m[5];\n dst[6] = -m[6];\n dst[7] = -m[7];\n dst[8] = -m[8];\n dst[9] = -m[9];\n dst[10] = -m[10];\n dst[11] = -m[11];\n dst[12] = -m[12];\n dst[13] = -m[13];\n dst[14] = -m[14];\n dst[15] = -m[15];\n return dst;\n}\n/**\n * Copies a matrix. (same as {@link mat4.clone})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nfunction copy$2(m, dst) {\n dst = dst || new MatType(16);\n dst[0] = m[0];\n dst[1] = m[1];\n dst[2] = m[2];\n dst[3] = m[3];\n dst[4] = m[4];\n dst[5] = m[5];\n dst[6] = m[6];\n dst[7] = m[7];\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n dst[11] = m[11];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n return dst;\n}\n/**\n * Copies a matrix (same as {@link mat4.copy})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nconst clone$2 = copy$2;\n/**\n * Check if 2 matrices are approximately equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are approximately equal\n */\nfunction equalsApproximately$2(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON &&\n Math.abs(a[4] - b[4]) < EPSILON &&\n Math.abs(a[5] - b[5]) < EPSILON &&\n Math.abs(a[6] - b[6]) < EPSILON &&\n Math.abs(a[7] - b[7]) < EPSILON &&\n Math.abs(a[8] - b[8]) < EPSILON &&\n Math.abs(a[9] - b[9]) < EPSILON &&\n Math.abs(a[10] - b[10]) < EPSILON &&\n Math.abs(a[11] - b[11]) < EPSILON &&\n Math.abs(a[12] - b[12]) < EPSILON &&\n Math.abs(a[13] - b[13]) < EPSILON &&\n Math.abs(a[14] - b[14]) < EPSILON &&\n Math.abs(a[15] - b[15]) < EPSILON;\n}\n/**\n * Check if 2 matrices are exactly equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are exactly equal\n */\nfunction equals$2(a, b) {\n return a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[3] === b[3] &&\n a[4] === b[4] &&\n a[5] === b[5] &&\n a[6] === b[6] &&\n a[7] === b[7] &&\n a[8] === b[8] &&\n a[9] === b[9] &&\n a[10] === b[10] &&\n a[11] === b[11] &&\n a[12] === b[12] &&\n a[13] === b[13] &&\n a[14] === b[14] &&\n a[15] === b[15];\n}\n/**\n * Creates a 4-by-4 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 4-by-4 identity matrix.\n */\nfunction identity$1(dst) {\n dst = dst || new MatType(16);\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nfunction transpose(m, dst) {\n dst = dst || new MatType(16);\n if (dst === m) {\n let t;\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n t = m[3];\n m[3] = m[12];\n m[12] = t;\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n t = m[7];\n m[7] = m[13];\n m[13] = t;\n t = m[11];\n m[11] = m[14];\n m[14] = t;\n return dst;\n }\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n dst[0] = m00;\n dst[1] = m10;\n dst[2] = m20;\n dst[3] = m30;\n dst[4] = m01;\n dst[5] = m11;\n dst[6] = m21;\n dst[7] = m31;\n dst[8] = m02;\n dst[9] = m12;\n dst[10] = m22;\n dst[11] = m32;\n dst[12] = m03;\n dst[13] = m13;\n dst[14] = m23;\n dst[15] = m33;\n return dst;\n}\n/**\n * Computes the inverse of a 4-by-4 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nfunction inverse$2(m, dst) {\n dst = dst || new MatType(16);\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n const tmp12 = m20 * m31;\n const tmp13 = m30 * m21;\n const tmp14 = m10 * m31;\n const tmp15 = m30 * m11;\n const tmp16 = m10 * m21;\n const tmp17 = m20 * m11;\n const tmp18 = m00 * m31;\n const tmp19 = m30 * m01;\n const tmp20 = m00 * m21;\n const tmp21 = m20 * m01;\n const tmp22 = m00 * m11;\n const tmp23 = m10 * m01;\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n const d = 1 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\n dst[0] = d * t0;\n dst[1] = d * t1;\n dst[2] = d * t2;\n dst[3] = d * t3;\n dst[4] = d * ((tmp1 * m10 + tmp2 * m20 + tmp5 * m30) -\n (tmp0 * m10 + tmp3 * m20 + tmp4 * m30));\n dst[5] = d * ((tmp0 * m00 + tmp7 * m20 + tmp8 * m30) -\n (tmp1 * m00 + tmp6 * m20 + tmp9 * m30));\n dst[6] = d * ((tmp3 * m00 + tmp6 * m10 + tmp11 * m30) -\n (tmp2 * m00 + tmp7 * m10 + tmp10 * m30));\n dst[7] = d * ((tmp4 * m00 + tmp9 * m10 + tmp10 * m20) -\n (tmp5 * m00 + tmp8 * m10 + tmp11 * m20));\n dst[8] = d * ((tmp12 * m13 + tmp15 * m23 + tmp16 * m33) -\n (tmp13 * m13 + tmp14 * m23 + tmp17 * m33));\n dst[9] = d * ((tmp13 * m03 + tmp18 * m23 + tmp21 * m33) -\n (tmp12 * m03 + tmp19 * m23 + tmp20 * m33));\n dst[10] = d * ((tmp14 * m03 + tmp19 * m13 + tmp22 * m33) -\n (tmp15 * m03 + tmp18 * m13 + tmp23 * m33));\n dst[11] = d * ((tmp17 * m03 + tmp20 * m13 + tmp23 * m23) -\n (tmp16 * m03 + tmp21 * m13 + tmp22 * m23));\n dst[12] = d * ((tmp14 * m22 + tmp17 * m32 + tmp13 * m12) -\n (tmp16 * m32 + tmp12 * m12 + tmp15 * m22));\n dst[13] = d * ((tmp20 * m32 + tmp12 * m02 + tmp19 * m22) -\n (tmp18 * m22 + tmp21 * m32 + tmp13 * m02));\n dst[14] = d * ((tmp18 * m12 + tmp23 * m32 + tmp15 * m02) -\n (tmp22 * m32 + tmp14 * m02 + tmp19 * m12));\n dst[15] = d * ((tmp22 * m22 + tmp16 * m02 + tmp21 * m12) -\n (tmp20 * m12 + tmp23 * m22 + tmp17 * m02));\n return dst;\n}\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nfunction determinant(m) {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n return m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3;\n}\n/**\n * Computes the inverse of a 4-by-4 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nconst invert$1 = inverse$2;\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nfunction multiply$2(a, b, dst) {\n dst = dst || new MatType(16);\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4 + 0];\n const a11 = a[4 + 1];\n const a12 = a[4 + 2];\n const a13 = a[4 + 3];\n const a20 = a[8 + 0];\n const a21 = a[8 + 1];\n const a22 = a[8 + 2];\n const a23 = a[8 + 3];\n const a30 = a[12 + 0];\n const a31 = a[12 + 1];\n const a32 = a[12 + 2];\n const a33 = a[12 + 3];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b03 = b[3];\n const b10 = b[4 + 0];\n const b11 = b[4 + 1];\n const b12 = b[4 + 2];\n const b13 = b[4 + 3];\n const b20 = b[8 + 0];\n const b21 = b[8 + 1];\n const b22 = b[8 + 2];\n const b23 = b[8 + 3];\n const b30 = b[12 + 0];\n const b31 = b[12 + 1];\n const b32 = b[12 + 2];\n const b33 = b[12 + 3];\n dst[0] = a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03;\n dst[1] = a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03;\n dst[2] = a02 * b00 + a12 * b01 + a22 * b02 + a32 * b03;\n dst[3] = a03 * b00 + a13 * b01 + a23 * b02 + a33 * b03;\n dst[4] = a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13;\n dst[5] = a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13;\n dst[6] = a02 * b10 + a12 * b11 + a22 * b12 + a32 * b13;\n dst[7] = a03 * b10 + a13 * b11 + a23 * b12 + a33 * b13;\n dst[8] = a00 * b20 + a10 * b21 + a20 * b22 + a30 * b23;\n dst[9] = a01 * b20 + a11 * b21 + a21 * b22 + a31 * b23;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22 + a32 * b23;\n dst[11] = a03 * b20 + a13 * b21 + a23 * b22 + a33 * b23;\n dst[12] = a00 * b30 + a10 * b31 + a20 * b32 + a30 * b33;\n dst[13] = a01 * b30 + a11 * b31 + a21 * b32 + a31 * b33;\n dst[14] = a02 * b30 + a12 * b31 + a22 * b32 + a32 * b33;\n dst[15] = a03 * b30 + a13 * b31 + a23 * b32 + a33 * b33;\n return dst;\n}\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nconst mul$2 = multiply$2;\n/**\n * Sets the translation component of a 4-by-4 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nfunction setTranslation(a, v, dst) {\n dst = dst || identity$1();\n if (a !== dst) {\n dst[0] = a[0];\n dst[1] = a[1];\n dst[2] = a[2];\n dst[3] = a[3];\n dst[4] = a[4];\n dst[5] = a[5];\n dst[6] = a[6];\n dst[7] = a[7];\n dst[8] = a[8];\n dst[9] = a[9];\n dst[10] = a[10];\n dst[11] = a[11];\n }\n dst[12] = v[0];\n dst[13] = v[1];\n dst[14] = v[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nfunction getTranslation(m, dst) {\n dst = dst || create$4();\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nfunction getAxis(m, axis, dst) {\n dst = dst || create$4();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n/**\n * Sets an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nfunction setAxis(a, v, axis, dst) {\n if (dst !== a) {\n dst = copy$2(a, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n dst[off + 2] = v[2];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nfunction getScaling(m, dst) {\n dst = dst || create$4();\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return dst;\n}\n/**\n * Computes a 4-by-4 perspective transformation matrix given the angular height\n * of the frustum, the aspect ratio, and the near and far clipping planes. The\n * arguments define a frustum extending in the negative z direction. The given\n * angle is the vertical angle of the frustum, and the horizontal angle is\n * determined to produce the given aspect ratio. The arguments near and far are\n * the distances to the near and far clipping planes. Note that near and far\n * are not z coordinates, but rather they are distances along the negative\n * z-axis. The matrix generated sends the viewing frustum to the unit box.\n * We assume a unit box extending from -1 to 1 in the x and y dimensions and\n * from 0 to 1 in the z dimension.\n *\n * Note: If you pass `Infinity` for zFar then it will produce a projection matrix\n * returns -Infinity for Z when transforming coordinates with Z <= 0 and +Infinity for Z\n * otherwise.\n *\n * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians).\n * @param aspect - The aspect ratio width / height.\n * @param zNear - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param zFar - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The perspective matrix.\n */\nfunction perspective(fieldOfViewYInRadians, aspect, zNear, zFar, dst) {\n dst = dst || new MatType(16);\n const f = Math.tan(Math.PI * 0.5 - 0.5 * fieldOfViewYInRadians);\n dst[0] = f / aspect;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = f;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[11] = -1;\n dst[12] = 0;\n dst[13] = 0;\n dst[15] = 0;\n if (zFar === Infinity) {\n dst[10] = -1;\n dst[14] = -zNear;\n }\n else {\n const rangeInv = 1 / (zNear - zFar);\n dst[10] = zFar * rangeInv;\n dst[14] = zFar * zNear * rangeInv;\n }\n return dst;\n}\n/**\n * Computes a 4-by-4 orthogonal transformation matrix that transforms from\n * the given the left, right, bottom, and top dimensions to -1 +1 in x, and y\n * and 0 to +1 in z.\n * @param left - Left side of the near clipping plane viewport.\n * @param right - Right side of the near clipping plane viewport.\n * @param bottom - Bottom of the near clipping plane viewport.\n * @param top - Top of the near clipping plane viewport.\n * @param near - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param far - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The orthographic projection matrix.\n */\nfunction ortho(left, right, bottom, top, near, far, dst) {\n dst = dst || new MatType(16);\n dst[0] = 2 / (right - left);\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 2 / (top - bottom);\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1 / (near - far);\n dst[11] = 0;\n dst[12] = (right + left) / (left - right);\n dst[13] = (top + bottom) / (bottom - top);\n dst[14] = near / (near - far);\n dst[15] = 1;\n return dst;\n}\n/**\n * Computes a 4-by-4 perspective transformation matrix given the left, right,\n * top, bottom, near and far clipping planes. The arguments define a frustum\n * extending in the negative z direction. The arguments near and far are the\n * distances to the near and far clipping planes. Note that near and far are not\n * z coordinates, but rather they are distances along the negative z-axis. The\n * matrix generated sends the viewing frustum to the unit box. We assume a unit\n * box extending from -1 to 1 in the x and y dimensions and from 0 to 1 in the z\n * dimension.\n * @param left - The x coordinate of the left plane of the box.\n * @param right - The x coordinate of the right plane of the box.\n * @param bottom - The y coordinate of the bottom plane of the box.\n * @param top - The y coordinate of the right plane of the box.\n * @param near - The negative z coordinate of the near plane of the box.\n * @param far - The negative z coordinate of the far plane of the box.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The perspective projection matrix.\n */\nfunction frustum(left, right, bottom, top, near, far, dst) {\n dst = dst || new MatType(16);\n const dx = (right - left);\n const dy = (top - bottom);\n const dz = (near - far);\n dst[0] = 2 * near / dx;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 2 * near / dy;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = (left + right) / dx;\n dst[9] = (top + bottom) / dy;\n dst[10] = far / dz;\n dst[11] = -1;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = near * far / dz;\n dst[15] = 0;\n return dst;\n}\nlet xAxis;\nlet yAxis;\nlet zAxis;\n/**\n * Computes a 4-by-4 aim transformation.\n *\n * This is a matrix which positions an object aiming down positive Z.\n * toward the target.\n *\n * Note: this is **NOT** the inverse of lookAt as lookAt looks at negative Z.\n *\n * @param position - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nfunction aim(position, target, up, dst) {\n dst = dst || new MatType(16);\n xAxis = xAxis || create$4();\n yAxis = yAxis || create$4();\n zAxis = zAxis || create$4();\n normalize$2(subtract$2(target, position, zAxis), zAxis);\n normalize$2(cross(up, zAxis, xAxis), xAxis);\n normalize$2(cross(zAxis, xAxis, yAxis), yAxis);\n dst[0] = xAxis[0];\n dst[1] = xAxis[1];\n dst[2] = xAxis[2];\n dst[3] = 0;\n dst[4] = yAxis[0];\n dst[5] = yAxis[1];\n dst[6] = yAxis[2];\n dst[7] = 0;\n dst[8] = zAxis[0];\n dst[9] = zAxis[1];\n dst[10] = zAxis[2];\n dst[11] = 0;\n dst[12] = position[0];\n dst[13] = position[1];\n dst[14] = position[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Computes a 4-by-4 camera aim transformation.\n *\n * This is a matrix which positions an object aiming down negative Z.\n * toward the target.\n *\n * Note: this is the inverse of `lookAt`\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nfunction cameraAim(eye, target, up, dst) {\n dst = dst || new MatType(16);\n xAxis = xAxis || create$4();\n yAxis = yAxis || create$4();\n zAxis = zAxis || create$4();\n normalize$2(subtract$2(eye, target, zAxis), zAxis);\n normalize$2(cross(up, zAxis, xAxis), xAxis);\n normalize$2(cross(zAxis, xAxis, yAxis), yAxis);\n dst[0] = xAxis[0];\n dst[1] = xAxis[1];\n dst[2] = xAxis[2];\n dst[3] = 0;\n dst[4] = yAxis[0];\n dst[5] = yAxis[1];\n dst[6] = yAxis[2];\n dst[7] = 0;\n dst[8] = zAxis[0];\n dst[9] = zAxis[1];\n dst[10] = zAxis[2];\n dst[11] = 0;\n dst[12] = eye[0];\n dst[13] = eye[1];\n dst[14] = eye[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Computes a 4-by-4 view transformation.\n *\n * This is a view matrix which transforms all other objects\n * to be in the space of the view defined by the parameters.\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The look-at matrix.\n */\nfunction lookAt(eye, target, up, dst) {\n dst = dst || new MatType(16);\n xAxis = xAxis || create$4();\n yAxis = yAxis || create$4();\n zAxis = zAxis || create$4();\n normalize$2(subtract$2(eye, target, zAxis), zAxis);\n normalize$2(cross(up, zAxis, xAxis), xAxis);\n normalize$2(cross(zAxis, xAxis, yAxis), yAxis);\n dst[0] = xAxis[0];\n dst[1] = yAxis[0];\n dst[2] = zAxis[0];\n dst[3] = 0;\n dst[4] = xAxis[1];\n dst[5] = yAxis[1];\n dst[6] = zAxis[1];\n dst[7] = 0;\n dst[8] = xAxis[2];\n dst[9] = yAxis[2];\n dst[10] = zAxis[2];\n dst[11] = 0;\n dst[12] = -(xAxis[0] * eye[0] + xAxis[1] * eye[1] + xAxis[2] * eye[2]);\n dst[13] = -(yAxis[0] * eye[0] + yAxis[1] * eye[1] + yAxis[2] * eye[2]);\n dst[14] = -(zAxis[0] * eye[0] + zAxis[1] * eye[1] + zAxis[2] * eye[2]);\n dst[15] = 1;\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which translates by the given vector v.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nfunction translation(v, dst) {\n dst = dst || new MatType(16);\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n dst[11] = 0;\n dst[12] = v[0];\n dst[13] = v[1];\n dst[14] = v[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Translates the given 4-by-4 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nfunction translate(m, v, dst) {\n dst = dst || new MatType(16);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n if (m !== dst) {\n dst[0] = m00;\n dst[1] = m01;\n dst[2] = m02;\n dst[3] = m03;\n dst[4] = m10;\n dst[5] = m11;\n dst[6] = m12;\n dst[7] = m13;\n dst[8] = m20;\n dst[9] = m21;\n dst[10] = m22;\n dst[11] = m23;\n }\n dst[12] = m00 * v0 + m10 * v1 + m20 * v2 + m30;\n dst[13] = m01 * v0 + m11 * v1 + m21 * v2 + m31;\n dst[14] = m02 * v0 + m12 * v1 + m22 * v2 + m32;\n dst[15] = m03 * v0 + m13 * v1 + m23 * v2 + m33;\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the x-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotationX(angleInRadians, dst) {\n dst = dst || new MatType(16);\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = c;\n dst[6] = s;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = -s;\n dst[10] = c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the x-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotateX$1(m, angleInRadians, dst) {\n dst = dst || new MatType(16);\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[4] = c * m10 + s * m20;\n dst[5] = c * m11 + s * m21;\n dst[6] = c * m12 + s * m22;\n dst[7] = c * m13 + s * m23;\n dst[8] = c * m20 - s * m10;\n dst[9] = c * m21 - s * m11;\n dst[10] = c * m22 - s * m12;\n dst[11] = c * m23 - s * m13;\n if (m !== dst) {\n dst[0] = m[0];\n dst[1] = m[1];\n dst[2] = m[2];\n dst[3] = m[3];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the y-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotationY(angleInRadians, dst) {\n dst = dst || new MatType(16);\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c;\n dst[1] = 0;\n dst[2] = -s;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = s;\n dst[9] = 0;\n dst[10] = c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the y-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotateY$1(m, angleInRadians, dst) {\n dst = dst || new MatType(16);\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c * m00 - s * m20;\n dst[1] = c * m01 - s * m21;\n dst[2] = c * m02 - s * m22;\n dst[3] = c * m03 - s * m23;\n dst[8] = c * m20 + s * m00;\n dst[9] = c * m21 + s * m01;\n dst[10] = c * m22 + s * m02;\n dst[11] = c * m23 + s * m03;\n if (m !== dst) {\n dst[4] = m[4];\n dst[5] = m[5];\n dst[6] = m[6];\n dst[7] = m[7];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the z-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotationZ(angleInRadians, dst) {\n dst = dst || new MatType(16);\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c;\n dst[1] = s;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = -s;\n dst[5] = c;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the z-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotateZ$1(m, angleInRadians, dst) {\n dst = dst || new MatType(16);\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c * m00 + s * m10;\n dst[1] = c * m01 + s * m11;\n dst[2] = c * m02 + s * m12;\n dst[3] = c * m03 + s * m13;\n dst[4] = c * m10 - s * m00;\n dst[5] = c * m11 - s * m01;\n dst[6] = c * m12 - s * m02;\n dst[7] = c * m13 - s * m03;\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n dst[11] = m[11];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nfunction axisRotation(axis, angleInRadians, dst) {\n dst = dst || new MatType(16);\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n dst[0] = xx + (1 - xx) * c;\n dst[1] = x * y * oneMinusCosine + z * s;\n dst[2] = x * z * oneMinusCosine - y * s;\n dst[3] = 0;\n dst[4] = x * y * oneMinusCosine - z * s;\n dst[5] = yy + (1 - yy) * c;\n dst[6] = y * z * oneMinusCosine + x * s;\n dst[7] = 0;\n dst[8] = x * z * oneMinusCosine + y * s;\n dst[9] = y * z * oneMinusCosine - x * s;\n dst[10] = zz + (1 - zz) * c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle. (same as axisRotation)\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nconst rotation = axisRotation;\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle.\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction axisRotate(m, axis, angleInRadians, dst) {\n dst = dst || new MatType(16);\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n const r00 = xx + (1 - xx) * c;\n const r01 = x * y * oneMinusCosine + z * s;\n const r02 = x * z * oneMinusCosine - y * s;\n const r10 = x * y * oneMinusCosine - z * s;\n const r11 = yy + (1 - yy) * c;\n const r12 = y * z * oneMinusCosine + x * s;\n const r20 = x * z * oneMinusCosine + y * s;\n const r21 = y * z * oneMinusCosine - x * s;\n const r22 = zz + (1 - zz) * c;\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n dst[0] = r00 * m00 + r01 * m10 + r02 * m20;\n dst[1] = r00 * m01 + r01 * m11 + r02 * m21;\n dst[2] = r00 * m02 + r01 * m12 + r02 * m22;\n dst[3] = r00 * m03 + r01 * m13 + r02 * m23;\n dst[4] = r10 * m00 + r11 * m10 + r12 * m20;\n dst[5] = r10 * m01 + r11 * m11 + r12 * m21;\n dst[6] = r10 * m02 + r11 * m12 + r12 * m22;\n dst[7] = r10 * m03 + r11 * m13 + r12 * m23;\n dst[8] = r20 * m00 + r21 * m10 + r22 * m20;\n dst[9] = r20 * m01 + r21 * m11 + r22 * m21;\n dst[10] = r20 * m02 + r21 * m12 + r22 * m22;\n dst[11] = r20 * m03 + r21 * m13 + r22 * m23;\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle. (same as rotate)\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nconst rotate = axisRotate;\n/**\n * Creates a 4-by-4 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * three entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction scaling(v, dst) {\n dst = dst || new MatType(16);\n dst[0] = v[0];\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = v[1];\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = v[2];\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Scales the given 4-by-4 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of three entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction scale$2(m, v, dst) {\n dst = dst || new MatType(16);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n dst[0] = v0 * m[0 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2];\n dst[3] = v0 * m[0 * 4 + 3];\n dst[4] = v1 * m[1 * 4 + 0];\n dst[5] = v1 * m[1 * 4 + 1];\n dst[6] = v1 * m[1 * 4 + 2];\n dst[7] = v1 * m[1 * 4 + 3];\n dst[8] = v2 * m[2 * 4 + 0];\n dst[9] = v2 * m[2 * 4 + 1];\n dst[10] = v2 * m[2 * 4 + 2];\n dst[11] = v2 * m[2 * 4 + 3];\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which scales a uniform amount in each dimension.\n * @param s - the amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction uniformScaling(s, dst) {\n dst = dst || new MatType(16);\n dst[0] = s;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = s;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = s;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Scales the given 4-by-4 matrix in each dimension by a uniform scale.\n * @param m - The matrix to be modified.\n * @param s - The amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction uniformScale(m, s, dst) {\n dst = dst || new MatType(16);\n dst[0] = s * m[0 * 4 + 0];\n dst[1] = s * m[0 * 4 + 1];\n dst[2] = s * m[0 * 4 + 2];\n dst[3] = s * m[0 * 4 + 3];\n dst[4] = s * m[1 * 4 + 0];\n dst[5] = s * m[1 * 4 + 1];\n dst[6] = s * m[1 * 4 + 2];\n dst[7] = s * m[1 * 4 + 3];\n dst[8] = s * m[2 * 4 + 0];\n dst[9] = s * m[2 * 4 + 1];\n dst[10] = s * m[2 * 4 + 2];\n dst[11] = s * m[2 * 4 + 3];\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n\nvar mat4Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setDefaultType: setDefaultType$3,\n create: create$2,\n set: set$2,\n fromMat3: fromMat3,\n fromQuat: fromQuat,\n negate: negate$1,\n copy: copy$2,\n clone: clone$2,\n equalsApproximately: equalsApproximately$2,\n equals: equals$2,\n identity: identity$1,\n transpose: transpose,\n inverse: inverse$2,\n determinant: determinant,\n invert: invert$1,\n multiply: multiply$2,\n mul: mul$2,\n setTranslation: setTranslation,\n getTranslation: getTranslation,\n getAxis: getAxis,\n setAxis: setAxis,\n getScaling: getScaling,\n perspective: perspective,\n ortho: ortho,\n frustum: frustum,\n aim: aim,\n cameraAim: cameraAim,\n lookAt: lookAt,\n translation: translation,\n translate: translate,\n rotationX: rotationX,\n rotateX: rotateX$1,\n rotationY: rotationY,\n rotateY: rotateY$1,\n rotationZ: rotationZ,\n rotateZ: rotateZ$1,\n axisRotation: axisRotation,\n rotation: rotation,\n axisRotate: axisRotate,\n rotate: rotate,\n scaling: scaling,\n scale: scale$2,\n uniformScaling: uniformScaling,\n uniformScale: uniformScale\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Quat4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Quat4`. In other words you can do this\n *\n * const v = quat4.cross(v1, v2); // Creates a new Quat4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = quat4.create();\n * quat4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * quat4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet QuatType = Float32Array;\n/**\n * Sets the type this library creates for a Quat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Quat4\n */\nfunction setDefaultType$2(ctor) {\n const oldType = QuatType;\n QuatType = ctor;\n return oldType;\n}\n/**\n * Creates a quat4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nfunction create$1(x, y, z, w) {\n const dst = new QuatType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a Quat; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nconst fromValues$1 = create$1;\n/**\n * Sets the values of a Quat\n * Also see {@link quat.create} and {@link quat.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set$1(x, y, z, w, dst) {\n dst = dst || new QuatType(4);\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n return dst;\n}\n/**\n * Sets a quaternion from the given angle and axis,\n * then returns it.\n *\n * @param axis - the axis to rotate around\n * @param angleInRadians - the angle\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The quaternion that represents the given axis and angle\n **/\nfunction fromAxisAngle(axis, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const s = Math.sin(halfAngle);\n dst[0] = s * axis[0];\n dst[1] = s * axis[1];\n dst[2] = s * axis[2];\n dst[3] = Math.cos(halfAngle);\n return dst;\n}\n/**\n * Gets the rotation axis and angle\n * @param q - quaternion to compute from\n * @param dst - Vec3 to hold result. If not passed in a new one is created.\n * @return angle and axis\n */\nfunction toAxisAngle(q, dst) {\n dst = dst || create$4(4);\n const angle = Math.acos(q[3]) * 2;\n const s = Math.sin(angle * 0.5);\n if (s > EPSILON) {\n dst[0] = q[0] / s;\n dst[1] = q[1] / s;\n dst[2] = q[2] / s;\n }\n else {\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n }\n return { angle, axis: dst };\n}\n/**\n * Returns the angle in degrees between two rotations a and b.\n * @param a - quaternion a\n * @param b - quaternion b\n * @return angle in radians between the two quaternions\n */\nfunction angle(a, b) {\n const d = dot$1(a, b);\n return Math.acos(2 * d * d - 1);\n}\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction multiply$1(a, b, dst) {\n dst = dst || new QuatType(4);\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const bw = b[3];\n dst[0] = ax * bw + aw * bx + ay * bz - az * by;\n dst[1] = ay * bw + aw * by + az * bx - ax * bz;\n dst[2] = az * bw + aw * bz + ax * by - ay * bx;\n dst[3] = aw * bw - ax * bx - ay * by - az * bz;\n return dst;\n}\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nconst mul$1 = multiply$1;\n/**\n * Rotates the given quaternion around the X axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction rotateX(q, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const bx = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n dst[0] = qx * bw + qw * bx;\n dst[1] = qy * bw + qz * bx;\n dst[2] = qz * bw - qy * bx;\n dst[3] = qw * bw - qx * bx;\n return dst;\n}\n/**\n * Rotates the given quaternion around the Y axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction rotateY(q, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const by = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n dst[0] = qx * bw - qz * by;\n dst[1] = qy * bw + qw * by;\n dst[2] = qz * bw + qx * by;\n dst[3] = qw * bw - qy * by;\n return dst;\n}\n/**\n * Rotates the given quaternion around the Z axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction rotateZ(q, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const bz = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n dst[0] = qx * bw + qy * bz;\n dst[1] = qy * bw - qx * bz;\n dst[2] = qz * bw + qw * bz;\n dst[3] = qw * bw - qz * bz;\n return dst;\n}\n/**\n * Spherically linear interpolate between two quaternions\n *\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction slerp(a, b, t, dst) {\n dst = dst || new QuatType(4);\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n let bx = b[0];\n let by = b[1];\n let bz = b[2];\n let bw = b[3];\n let cosOmega = ax * bx + ay * by + az * bz + aw * bw;\n if (cosOmega < 0) {\n cosOmega = -cosOmega;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n let scale0;\n let scale1;\n if (1.0 - cosOmega > EPSILON) {\n const omega = Math.acos(cosOmega);\n const sinOmega = Math.sin(omega);\n scale0 = Math.sin((1 - t) * omega) / sinOmega;\n scale1 = Math.sin(t * omega) / sinOmega;\n }\n else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n dst[0] = scale0 * ax + scale1 * bx;\n dst[1] = scale0 * ay + scale1 * by;\n dst[2] = scale0 * az + scale1 * bz;\n dst[3] = scale0 * aw + scale1 * bw;\n return dst;\n}\n/**\n * Compute the inverse of a quaternion\n *\n * @param q - quaternion to compute the inverse of\n * @returns A quaternion that is the result of a * b\n */\nfunction inverse$1(q, dst) {\n dst = dst || new QuatType(4);\n const a0 = q[0];\n const a1 = q[1];\n const a2 = q[2];\n const a3 = q[3];\n const dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n const invDot = dot ? 1 / dot : 0;\n dst[0] = -a0 * invDot;\n dst[1] = -a1 * invDot;\n dst[2] = -a2 * invDot;\n dst[3] = a3 * invDot;\n return dst;\n}\n/**\n * Compute the conjugate of a quaternion\n * For quaternions with a magnitude of 1 (a unit quaternion)\n * this returns the same as the inverse but is faster to calculate.\n *\n * @param q - quaternion to compute the conjugate of.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The conjugate of q\n */\nfunction conjugate(q, dst) {\n dst = dst || new QuatType(4);\n dst[0] = -q[0];\n dst[1] = -q[1];\n dst[2] = -q[2];\n dst[3] = q[3];\n return dst;\n}\n/**\n * Creates a quaternion from the given rotation matrix.\n *\n * The created quaternion is not normalized.\n *\n * @param m - rotation matrix\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nfunction fromMat(m, dst) {\n dst = dst || new QuatType(4);\n /*\n 0 1 2\n 3 4 5\n 6 7 8\n \n 0 1 2\n 4 5 6\n 8 9 10\n */\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n const trace = m[0] + m[5] + m[10];\n if (trace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n const root = Math.sqrt(trace + 1); // 2w\n dst[3] = 0.5 * root;\n const invRoot = 0.5 / root; // 1/(4w)\n dst[0] = (m[6] - m[9]) * invRoot;\n dst[1] = (m[8] - m[2]) * invRoot;\n dst[2] = (m[1] - m[4]) * invRoot;\n }\n else {\n // |w| <= 1/2\n let i = 0;\n if (m[5] > m[0]) {\n i = 1;\n }\n if (m[10] > m[i * 4 + i]) {\n i = 2;\n }\n const j = (i + 1) % 3;\n const k = (i + 2) % 3;\n const root = Math.sqrt(m[i * 4 + i] - m[j * 4 + j] - m[k * 4 + k] + 1.0);\n dst[i] = 0.5 * root;\n const invRoot = 0.5 / root;\n dst[3] = (m[j * 4 + k] - m[k * 4 + j]) * invRoot;\n dst[j] = (m[j * 4 + i] + m[i * 4 + j]) * invRoot;\n dst[k] = (m[k * 4 + i] + m[i * 4 + k]) * invRoot;\n }\n return dst;\n}\n/**\n * Creates a quaternion from the given euler angle x, y, z using the provided intrinsic order for the conversion.\n *\n * @param xAngleInRadians - angle to rotate around X axis in radians.\n * @param yAngleInRadians - angle to rotate around Y axis in radians.\n * @param zAngleInRadians - angle to rotate around Z axis in radians.\n * @param order - order to apply euler angles\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion representing the same rotation as the euler angles applied in the given order\n */\nfunction fromEuler(xAngleInRadians, yAngleInRadians, zAngleInRadians, order, dst) {\n dst = dst || new QuatType(4);\n const xHalfAngle = xAngleInRadians * 0.5;\n const yHalfAngle = yAngleInRadians * 0.5;\n const zHalfAngle = zAngleInRadians * 0.5;\n const sx = Math.sin(xHalfAngle);\n const cx = Math.cos(xHalfAngle);\n const sy = Math.sin(yHalfAngle);\n const cy = Math.cos(yHalfAngle);\n const sz = Math.sin(zHalfAngle);\n const cz = Math.cos(zHalfAngle);\n switch (order) {\n case 'xyz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'xzy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n case 'yxz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n case 'yzx':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'zxy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'zyx':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n default:\n throw new Error(`Unknown rotation order: ${order}`);\n }\n return dst;\n}\n/**\n * Copies a quaternion. (same as {@link quat.clone})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is a copy of q\n */\nfunction copy$1(q, dst) {\n dst = dst || new QuatType(4);\n dst[0] = q[0];\n dst[1] = q[1];\n dst[2] = q[2];\n dst[3] = q[3];\n return dst;\n}\n/**\n * Clones a quaternion. (same as {@link quat.copy})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A copy of q.\n */\nconst clone$1 = copy$1;\n/**\n * Adds two quaternions; assumes a and b have the same dimension.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the sum of a and b.\n */\nfunction add$1(a, b, dst) {\n dst = dst || new QuatType(4);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n return dst;\n}\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nfunction subtract$1(a, b, dst) {\n dst = dst || new QuatType(4);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n return dst;\n}\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nconst sub$1 = subtract$1;\n/**\n * Multiplies a quaternion by a scalar.\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nfunction mulScalar$1(v, k, dst) {\n dst = dst || new QuatType(4);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n return dst;\n}\n/**\n * Multiplies a quaternion by a scalar. (same as mulScalar)\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nconst scale$1 = mulScalar$1;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nfunction divScalar$1(v, k, dst) {\n dst = dst || new QuatType(4);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n return dst;\n}\n/**\n * Computes the dot product of two quaternions\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns dot product\n */\nfunction dot$1(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n/**\n * Performs linear interpolation on two quaternions.\n * Given quaternions a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param t - Interpolation coefficient.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp$1(a, b, t, dst) {\n dst = dst || new QuatType(4);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n return dst;\n}\n/**\n * Computes the length of quaternion\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nfunction length$1(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n/**\n * Computes the length of quaternion (same as length)\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nconst len$1 = length$1;\n/**\n * Computes the square of the length of quaternion\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nfunction lengthSq$1(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n/**\n * Computes the square of the length of quaternion (same as lengthSq)\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nconst lenSq$1 = lengthSq$1;\n/**\n * Divides a quaternion by its Euclidean length and returns the quotient.\n * @param v - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The normalized quaternion.\n */\nfunction normalize$1(v, dst) {\n dst = dst || new QuatType(4);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n return dst;\n}\n/**\n * Check if 2 quaternions are approximately equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are approximately equal\n */\nfunction equalsApproximately$1(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON;\n}\n/**\n * Check if 2 quaternions are exactly equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are exactly equal\n */\nfunction equals$1(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Creates an identity quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns an identity quaternion\n */\nfunction identity(dst) {\n dst = dst || new QuatType(4);\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n return dst;\n}\nlet tempVec3;\nlet xUnitVec3;\nlet yUnitVec3;\n/**\n * Computes a quaternion to represent the shortest rotation from one vector to another.\n *\n * @param aUnit - the start vector\n * @param bUnit - the end vector\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nfunction rotationTo(aUnit, bUnit, dst) {\n dst = dst || new QuatType(4);\n tempVec3 = tempVec3 || create$4();\n xUnitVec3 = xUnitVec3 || create$4(1, 0, 0);\n yUnitVec3 = yUnitVec3 || create$4(0, 1, 0);\n const dot = dot$2(aUnit, bUnit);\n if (dot < -0.999999) {\n cross(xUnitVec3, aUnit, tempVec3);\n if (len$2(tempVec3) < 0.000001) {\n cross(yUnitVec3, aUnit, tempVec3);\n }\n normalize$2(tempVec3, tempVec3);\n fromAxisAngle(tempVec3, Math.PI, dst);\n return dst;\n }\n else if (dot > 0.999999) {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n return dst;\n }\n else {\n cross(aUnit, bUnit, tempVec3);\n dst[0] = tempVec3[0];\n dst[1] = tempVec3[1];\n dst[2] = tempVec3[2];\n dst[3] = 1 + dot;\n return normalize$1(dst, dst);\n }\n}\nlet tempQuat1;\nlet tempQuat2;\n/**\n * Performs a spherical linear interpolation with two control points\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param c - the third quaternion\n * @param d - the fourth quaternion\n * @param t - Interpolation coefficient 0 to 1\n * @returns result\n */\nfunction sqlerp(a, b, c, d, t, dst) {\n dst = dst || new QuatType(4);\n tempQuat1 = tempQuat1 || new QuatType(4);\n tempQuat2 = tempQuat2 || new QuatType(4);\n slerp(a, d, t, tempQuat1);\n slerp(b, c, t, tempQuat2);\n slerp(tempQuat1, tempQuat2, 2 * t * (1 - t), dst);\n return dst;\n}\n\nvar quatImpl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create$1,\n setDefaultType: setDefaultType$2,\n fromValues: fromValues$1,\n set: set$1,\n fromAxisAngle: fromAxisAngle,\n toAxisAngle: toAxisAngle,\n angle: angle,\n multiply: multiply$1,\n mul: mul$1,\n rotateX: rotateX,\n rotateY: rotateY,\n rotateZ: rotateZ,\n slerp: slerp,\n inverse: inverse$1,\n conjugate: conjugate,\n fromMat: fromMat,\n fromEuler: fromEuler,\n copy: copy$1,\n clone: clone$1,\n add: add$1,\n subtract: subtract$1,\n sub: sub$1,\n mulScalar: mulScalar$1,\n scale: scale$1,\n divScalar: divScalar$1,\n dot: dot$1,\n lerp: lerp$1,\n length: length$1,\n len: len$1,\n lengthSq: lengthSq$1,\n lenSq: lenSq$1,\n normalize: normalize$1,\n equalsApproximately: equalsApproximately$1,\n equals: equals$1,\n identity: identity,\n rotationTo: rotationTo,\n sqlerp: sqlerp\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Vec4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec4`. In other words you can do this\n *\n * const v = vec4.cross(v1, v2); // Creates a new Vec4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec4.create();\n * vec4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet VecType = Float32Array;\n/**\n * Sets the type this library creates for a Vec4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec4\n */\nfunction setDefaultType$1(ctor) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n/**\n * Creates a vec4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nfunction create(x, y, z, w) {\n const dst = new VecType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a vec4; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nconst fromValues = create;\n/**\n * Sets the values of a Vec4\n * Also see {@link vec4.create} and {@link vec4.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set(x, y, z, w, dst) {\n dst = dst || new VecType(4);\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n return dst;\n}\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nfunction ceil(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n dst[3] = Math.ceil(v[3]);\n return dst;\n}\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nfunction floor(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n dst[3] = Math.floor(v[3]);\n return dst;\n}\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nfunction round(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n dst[3] = Math.round(v[3]);\n return dst;\n}\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nfunction clamp(v, min = 0, max = 1, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n dst[3] = Math.min(max, Math.max(min, v[3]));\n return dst;\n}\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nfunction add(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n return dst;\n}\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nfunction addScaled(a, b, scale, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n dst[3] = a[3] + b[3] * scale;\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nfunction subtract(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nconst sub = subtract;\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nfunction equalsApproximately(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON;\n}\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nfunction equals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp(a, b, t, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n return dst;\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nfunction lerpV(a, b, t, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n dst[3] = a[3] + t[3] * (b[3] - a[3]);\n return dst;\n}\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nfunction max(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n dst[3] = Math.max(a[3], b[3]);\n return dst;\n}\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nfunction min(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n dst[3] = Math.min(a[3], b[3]);\n return dst;\n}\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction mulScalar(v, k, dst) {\n dst = dst || new VecType(4);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n return dst;\n}\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nconst scale = mulScalar;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction divScalar(v, k, dst) {\n dst = dst || new VecType(4);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n return dst;\n}\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nfunction inverse(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n dst[3] = 1 / v[3];\n return dst;\n}\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nconst invert = inverse;\n/**\n * Computes the dot product of two vectors\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nfunction dot(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nfunction length(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nconst len = length;\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nfunction lengthSq(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nconst lenSq = lengthSq;\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nfunction distance(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return Math.sqrt(dx * dx + dy * dy + dz * dz + dw * dw);\n}\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nconst dist = distance;\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nfunction distanceSq(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return dx * dx + dy * dy + dz * dz + dw * dw;\n}\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nconst distSq = distanceSq;\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nfunction normalize(v, dst) {\n dst = dst || new VecType(4);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n return dst;\n}\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nfunction negate(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n dst[3] = -v[3];\n return dst;\n}\n/**\n * Copies a vector. (same as {@link vec4.clone})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nfunction copy(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n dst[3] = v[3];\n return dst;\n}\n/**\n * Clones a vector. (same as {@link vec4.copy})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nconst clone = copy;\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nfunction multiply(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n dst[3] = a[3] * b[3];\n return dst;\n}\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nconst mul = multiply;\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nfunction divide(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n dst[3] = a[3] / b[3];\n return dst;\n}\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nconst div = divide;\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nfunction zero(dst) {\n dst = dst || new VecType(4);\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n return dst;\n}\n/**\n * transform vec4 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec4 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat4(v, m, dst) {\n dst = dst || new VecType(4);\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = v[3];\n dst[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n dst[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n dst[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n dst[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return dst;\n}\n\nvar vec4Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create,\n setDefaultType: setDefaultType$1,\n fromValues: fromValues,\n set: set,\n ceil: ceil,\n floor: floor,\n round: round,\n clamp: clamp,\n add: add,\n addScaled: addScaled,\n subtract: subtract,\n sub: sub,\n equalsApproximately: equalsApproximately,\n equals: equals,\n lerp: lerp,\n lerpV: lerpV,\n max: max,\n min: min,\n mulScalar: mulScalar,\n scale: scale,\n divScalar: divScalar,\n inverse: inverse,\n invert: invert,\n dot: dot,\n length: length,\n len: len,\n lengthSq: lengthSq,\n lenSq: lenSq,\n distance: distance,\n dist: dist,\n distanceSq: distanceSq,\n distSq: distSq,\n normalize: normalize,\n negate: negate,\n copy: copy,\n clone: clone,\n multiply: multiply,\n mul: mul,\n divide: divide,\n div: div,\n zero: zero,\n transformMat4: transformMat4\n});\n\n/**\n * Sets the type this library creates for all types\n *\n * example:\n *\n * ```\n * setDefaultType(Float64Array);\n * ```\n *\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n */\nfunction setDefaultType(ctor) {\n setDefaultType$4(ctor);\n setDefaultType$3(ctor);\n setDefaultType$2(ctor);\n setDefaultType$6(ctor);\n setDefaultType$5(ctor);\n setDefaultType$1(ctor);\n}\n\nexport { mat3Impl as mat3, mat4Impl as mat4, quatImpl as quat, setDefaultType, utils, vec2Impl as vec2, vec3Impl as vec3, vec4Impl as vec4 };\n//# sourceMappingURL=wgpu-matrix.module.js.map\n","/**\n * dat-gui JavaScript Controller Library\n * https://github.com/dataarts/dat.gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction ___$insertStyle(css) {\n if (!css) {\n return;\n }\n if (typeof window === 'undefined') {\n return;\n }\n\n var style = document.createElement('style');\n\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n document.head.appendChild(style);\n\n return css;\n}\n\nfunction colorToString (color, forceCSSHex) {\n var colorFormat = color.__state.conversionName.toString();\n var r = Math.round(color.r);\n var g = Math.round(color.g);\n var b = Math.round(color.b);\n var a = color.a;\n var h = Math.round(color.h);\n var s = color.s.toFixed(1);\n var v = color.v.toFixed(1);\n if (forceCSSHex || colorFormat === 'THREE_CHAR_HEX' || colorFormat === 'SIX_CHAR_HEX') {\n var str = color.hex.toString(16);\n while (str.length < 6) {\n str = '0' + str;\n }\n return '#' + str;\n } else if (colorFormat === 'CSS_RGB') {\n return 'rgb(' + r + ',' + g + ',' + b + ')';\n } else if (colorFormat === 'CSS_RGBA') {\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n } else if (colorFormat === 'HEX') {\n return '0x' + color.hex.toString(16);\n } else if (colorFormat === 'RGB_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ']';\n } else if (colorFormat === 'RGBA_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ',' + a + ']';\n } else if (colorFormat === 'RGB_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + '}';\n } else if (colorFormat === 'RGBA_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}';\n } else if (colorFormat === 'HSV_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + '}';\n } else if (colorFormat === 'HSVA_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}';\n }\n return 'unknown format';\n}\n\nvar ARR_EACH = Array.prototype.forEach;\nvar ARR_SLICE = Array.prototype.slice;\nvar Common = {\n BREAK: {},\n extend: function extend(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (!this.isUndefined(obj[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n defaults: function defaults(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (this.isUndefined(target[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n compose: function compose() {\n var toCall = ARR_SLICE.call(arguments);\n return function () {\n var args = ARR_SLICE.call(arguments);\n for (var i = toCall.length - 1; i >= 0; i--) {\n args = [toCall[i].apply(this, args)];\n }\n return args[0];\n };\n },\n each: function each(obj, itr, scope) {\n if (!obj) {\n return;\n }\n if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) {\n obj.forEach(itr, scope);\n } else if (obj.length === obj.length + 0) {\n var key = void 0;\n var l = void 0;\n for (key = 0, l = obj.length; key < l; key++) {\n if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) {\n return;\n }\n }\n } else {\n for (var _key in obj) {\n if (itr.call(scope, obj[_key], _key) === this.BREAK) {\n return;\n }\n }\n }\n },\n defer: function defer(fnc) {\n setTimeout(fnc, 0);\n },\n debounce: function debounce(func, threshold, callImmediately) {\n var timeout = void 0;\n return function () {\n var obj = this;\n var args = arguments;\n function delayed() {\n timeout = null;\n if (!callImmediately) func.apply(obj, args);\n }\n var callNow = callImmediately || !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(delayed, threshold);\n if (callNow) {\n func.apply(obj, args);\n }\n };\n },\n toArray: function toArray(obj) {\n if (obj.toArray) return obj.toArray();\n return ARR_SLICE.call(obj);\n },\n isUndefined: function isUndefined(obj) {\n return obj === undefined;\n },\n isNull: function isNull(obj) {\n return obj === null;\n },\n isNaN: function (_isNaN) {\n function isNaN(_x) {\n return _isNaN.apply(this, arguments);\n }\n isNaN.toString = function () {\n return _isNaN.toString();\n };\n return isNaN;\n }(function (obj) {\n return isNaN(obj);\n }),\n isArray: Array.isArray || function (obj) {\n return obj.constructor === Array;\n },\n isObject: function isObject(obj) {\n return obj === Object(obj);\n },\n isNumber: function isNumber(obj) {\n return obj === obj + 0;\n },\n isString: function isString(obj) {\n return obj === obj + '';\n },\n isBoolean: function isBoolean(obj) {\n return obj === false || obj === true;\n },\n isFunction: function isFunction(obj) {\n return obj instanceof Function;\n }\n};\n\nvar INTERPRETATIONS = [\n{\n litmus: Common.isString,\n conversions: {\n THREE_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString() + test[1].toString() + test[2].toString() + test[2].toString() + test[3].toString() + test[3].toString(), 0)\n };\n },\n write: colorToString\n },\n SIX_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9]{6})$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString(), 0)\n };\n },\n write: colorToString\n },\n CSS_RGB: {\n read: function read(original) {\n var test = original.match(/^rgb\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3])\n };\n },\n write: colorToString\n },\n CSS_RGBA: {\n read: function read(original) {\n var test = original.match(/^rgba\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3]),\n a: parseFloat(test[4])\n };\n },\n write: colorToString\n }\n }\n},\n{\n litmus: Common.isNumber,\n conversions: {\n HEX: {\n read: function read(original) {\n return {\n space: 'HEX',\n hex: original,\n conversionName: 'HEX'\n };\n },\n write: function write(color) {\n return color.hex;\n }\n }\n }\n},\n{\n litmus: Common.isArray,\n conversions: {\n RGB_ARRAY: {\n read: function read(original) {\n if (original.length !== 3) {\n return false;\n }\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b];\n }\n },\n RGBA_ARRAY: {\n read: function read(original) {\n if (original.length !== 4) return false;\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2],\n a: original[3]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b, color.a];\n }\n }\n }\n},\n{\n litmus: Common.isObject,\n conversions: {\n RGBA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b) && Common.isNumber(original.a)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b,\n a: color.a\n };\n }\n },\n RGB_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b\n };\n }\n },\n HSVA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v) && Common.isNumber(original.a)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v,\n a: color.a\n };\n }\n },\n HSV_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v\n };\n }\n }\n }\n}];\nvar result = void 0;\nvar toReturn = void 0;\nvar interpret = function interpret() {\n toReturn = false;\n var original = arguments.length > 1 ? Common.toArray(arguments) : arguments[0];\n Common.each(INTERPRETATIONS, function (family) {\n if (family.litmus(original)) {\n Common.each(family.conversions, function (conversion, conversionName) {\n result = conversion.read(original);\n if (toReturn === false && result !== false) {\n toReturn = result;\n result.conversionName = conversionName;\n result.conversion = conversion;\n return Common.BREAK;\n }\n });\n return Common.BREAK;\n }\n });\n return toReturn;\n};\n\nvar tmpComponent = void 0;\nvar ColorMath = {\n hsv_to_rgb: function hsv_to_rgb(h, s, v) {\n var hi = Math.floor(h / 60) % 6;\n var f = h / 60 - Math.floor(h / 60);\n var p = v * (1.0 - s);\n var q = v * (1.0 - f * s);\n var t = v * (1.0 - (1.0 - f) * s);\n var c = [[v, t, p], [q, v, p], [p, v, t], [p, q, v], [t, p, v], [v, p, q]][hi];\n return {\n r: c[0] * 255,\n g: c[1] * 255,\n b: c[2] * 255\n };\n },\n rgb_to_hsv: function rgb_to_hsv(r, g, b) {\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var h = void 0;\n var s = void 0;\n if (max !== 0) {\n s = delta / max;\n } else {\n return {\n h: NaN,\n s: 0,\n v: 0\n };\n }\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h /= 6;\n if (h < 0) {\n h += 1;\n }\n return {\n h: h * 360,\n s: s,\n v: max / 255\n };\n },\n rgb_to_hex: function rgb_to_hex(r, g, b) {\n var hex = this.hex_with_component(0, 2, r);\n hex = this.hex_with_component(hex, 1, g);\n hex = this.hex_with_component(hex, 0, b);\n return hex;\n },\n component_from_hex: function component_from_hex(hex, componentIndex) {\n return hex >> componentIndex * 8 & 0xFF;\n },\n hex_with_component: function hex_with_component(hex, componentIndex, value) {\n return value << (tmpComponent = componentIndex * 8) | hex & ~(0xFF << tmpComponent);\n }\n};\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar Color = function () {\n function Color() {\n classCallCheck(this, Color);\n this.__state = interpret.apply(this, arguments);\n if (this.__state === false) {\n throw new Error('Failed to interpret color arguments');\n }\n this.__state.a = this.__state.a || 1;\n }\n createClass(Color, [{\n key: 'toString',\n value: function toString() {\n return colorToString(this);\n }\n }, {\n key: 'toHexString',\n value: function toHexString() {\n return colorToString(this, true);\n }\n }, {\n key: 'toOriginal',\n value: function toOriginal() {\n return this.__state.conversion.write(this);\n }\n }]);\n return Color;\n}();\nfunction defineRGBComponent(target, component, componentHexIndex) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'RGB') {\n return this.__state[component];\n }\n Color.recalculateRGB(this, component, componentHexIndex);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'RGB') {\n Color.recalculateRGB(this, component, componentHexIndex);\n this.__state.space = 'RGB';\n }\n this.__state[component] = v;\n }\n });\n}\nfunction defineHSVComponent(target, component) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'HSV') {\n return this.__state[component];\n }\n Color.recalculateHSV(this);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'HSV') {\n Color.recalculateHSV(this);\n this.__state.space = 'HSV';\n }\n this.__state[component] = v;\n }\n });\n}\nColor.recalculateRGB = function (color, component, componentHexIndex) {\n if (color.__state.space === 'HEX') {\n color.__state[component] = ColorMath.component_from_hex(color.__state.hex, componentHexIndex);\n } else if (color.__state.space === 'HSV') {\n Common.extend(color.__state, ColorMath.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v));\n } else {\n throw new Error('Corrupted color state');\n }\n};\nColor.recalculateHSV = function (color) {\n var result = ColorMath.rgb_to_hsv(color.r, color.g, color.b);\n Common.extend(color.__state, {\n s: result.s,\n v: result.v\n });\n if (!Common.isNaN(result.h)) {\n color.__state.h = result.h;\n } else if (Common.isUndefined(color.__state.h)) {\n color.__state.h = 0;\n }\n};\nColor.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a'];\ndefineRGBComponent(Color.prototype, 'r', 2);\ndefineRGBComponent(Color.prototype, 'g', 1);\ndefineRGBComponent(Color.prototype, 'b', 0);\ndefineHSVComponent(Color.prototype, 'h');\ndefineHSVComponent(Color.prototype, 's');\ndefineHSVComponent(Color.prototype, 'v');\nObject.defineProperty(Color.prototype, 'a', {\n get: function get$$1() {\n return this.__state.a;\n },\n set: function set$$1(v) {\n this.__state.a = v;\n }\n});\nObject.defineProperty(Color.prototype, 'hex', {\n get: function get$$1() {\n if (this.__state.space !== 'HEX') {\n this.__state.hex = ColorMath.rgb_to_hex(this.r, this.g, this.b);\n this.__state.space = 'HEX';\n }\n return this.__state.hex;\n },\n set: function set$$1(v) {\n this.__state.space = 'HEX';\n this.__state.hex = v;\n }\n});\n\nvar Controller = function () {\n function Controller(object, property) {\n classCallCheck(this, Controller);\n this.initialValue = object[property];\n this.domElement = document.createElement('div');\n this.object = object;\n this.property = property;\n this.__onChange = undefined;\n this.__onFinishChange = undefined;\n }\n createClass(Controller, [{\n key: 'onChange',\n value: function onChange(fnc) {\n this.__onChange = fnc;\n return this;\n }\n }, {\n key: 'onFinishChange',\n value: function onFinishChange(fnc) {\n this.__onFinishChange = fnc;\n return this;\n }\n }, {\n key: 'setValue',\n value: function setValue(newValue) {\n this.object[this.property] = newValue;\n if (this.__onChange) {\n this.__onChange.call(this, newValue);\n }\n this.updateDisplay();\n return this;\n }\n }, {\n key: 'getValue',\n value: function getValue() {\n return this.object[this.property];\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n return this;\n }\n }, {\n key: 'isModified',\n value: function isModified() {\n return this.initialValue !== this.getValue();\n }\n }]);\n return Controller;\n}();\n\nvar EVENT_MAP = {\n HTMLEvents: ['change'],\n MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'],\n KeyboardEvents: ['keydown']\n};\nvar EVENT_MAP_INV = {};\nCommon.each(EVENT_MAP, function (v, k) {\n Common.each(v, function (e) {\n EVENT_MAP_INV[e] = k;\n });\n});\nvar CSS_VALUE_PIXELS = /(\\d+(\\.\\d+)?)px/;\nfunction cssValueToPixels(val) {\n if (val === '0' || Common.isUndefined(val)) {\n return 0;\n }\n var match = val.match(CSS_VALUE_PIXELS);\n if (!Common.isNull(match)) {\n return parseFloat(match[1]);\n }\n return 0;\n}\nvar dom = {\n makeSelectable: function makeSelectable(elem, selectable) {\n if (elem === undefined || elem.style === undefined) return;\n elem.onselectstart = selectable ? function () {\n return false;\n } : function () {};\n elem.style.MozUserSelect = selectable ? 'auto' : 'none';\n elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none';\n elem.unselectable = selectable ? 'on' : 'off';\n },\n makeFullscreen: function makeFullscreen(elem, hor, vert) {\n var vertical = vert;\n var horizontal = hor;\n if (Common.isUndefined(horizontal)) {\n horizontal = true;\n }\n if (Common.isUndefined(vertical)) {\n vertical = true;\n }\n elem.style.position = 'absolute';\n if (horizontal) {\n elem.style.left = 0;\n elem.style.right = 0;\n }\n if (vertical) {\n elem.style.top = 0;\n elem.style.bottom = 0;\n }\n },\n fakeEvent: function fakeEvent(elem, eventType, pars, aux) {\n var params = pars || {};\n var className = EVENT_MAP_INV[eventType];\n if (!className) {\n throw new Error('Event type ' + eventType + ' not supported.');\n }\n var evt = document.createEvent(className);\n switch (className) {\n case 'MouseEvents':\n {\n var clientX = params.x || params.clientX || 0;\n var clientY = params.y || params.clientY || 0;\n evt.initMouseEvent(eventType, params.bubbles || false, params.cancelable || true, window, params.clickCount || 1, 0,\n 0,\n clientX,\n clientY,\n false, false, false, false, 0, null);\n break;\n }\n case 'KeyboardEvents':\n {\n var init = evt.initKeyboardEvent || evt.initKeyEvent;\n Common.defaults(params, {\n cancelable: true,\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n keyCode: undefined,\n charCode: undefined\n });\n init(eventType, params.bubbles || false, params.cancelable, window, params.ctrlKey, params.altKey, params.shiftKey, params.metaKey, params.keyCode, params.charCode);\n break;\n }\n default:\n {\n evt.initEvent(eventType, params.bubbles || false, params.cancelable || true);\n break;\n }\n }\n Common.defaults(evt, aux);\n elem.dispatchEvent(evt);\n },\n bind: function bind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.addEventListener) {\n elem.addEventListener(event, func, bool);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + event, func);\n }\n return dom;\n },\n unbind: function unbind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.removeEventListener) {\n elem.removeEventListener(event, func, bool);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + event, func);\n }\n return dom;\n },\n addClass: function addClass(elem, className) {\n if (elem.className === undefined) {\n elem.className = className;\n } else if (elem.className !== className) {\n var classes = elem.className.split(/ +/);\n if (classes.indexOf(className) === -1) {\n classes.push(className);\n elem.className = classes.join(' ').replace(/^\\s+/, '').replace(/\\s+$/, '');\n }\n }\n return dom;\n },\n removeClass: function removeClass(elem, className) {\n if (className) {\n if (elem.className === className) {\n elem.removeAttribute('class');\n } else {\n var classes = elem.className.split(/ +/);\n var index = classes.indexOf(className);\n if (index !== -1) {\n classes.splice(index, 1);\n elem.className = classes.join(' ');\n }\n }\n } else {\n elem.className = undefined;\n }\n return dom;\n },\n hasClass: function hasClass(elem, className) {\n return new RegExp('(?:^|\\\\s+)' + className + '(?:\\\\s+|$)').test(elem.className) || false;\n },\n getWidth: function getWidth(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-left-width']) + cssValueToPixels(style['border-right-width']) + cssValueToPixels(style['padding-left']) + cssValueToPixels(style['padding-right']) + cssValueToPixels(style.width);\n },\n getHeight: function getHeight(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-top-width']) + cssValueToPixels(style['border-bottom-width']) + cssValueToPixels(style['padding-top']) + cssValueToPixels(style['padding-bottom']) + cssValueToPixels(style.height);\n },\n getOffset: function getOffset(el) {\n var elem = el;\n var offset = { left: 0, top: 0 };\n if (elem.offsetParent) {\n do {\n offset.left += elem.offsetLeft;\n offset.top += elem.offsetTop;\n elem = elem.offsetParent;\n } while (elem);\n }\n return offset;\n },\n isActive: function isActive(elem) {\n return elem === document.activeElement && (elem.type || elem.href);\n }\n};\n\nvar BooleanController = function (_Controller) {\n inherits(BooleanController, _Controller);\n function BooleanController(object, property) {\n classCallCheck(this, BooleanController);\n var _this2 = possibleConstructorReturn(this, (BooleanController.__proto__ || Object.getPrototypeOf(BooleanController)).call(this, object, property));\n var _this = _this2;\n _this2.__prev = _this2.getValue();\n _this2.__checkbox = document.createElement('input');\n _this2.__checkbox.setAttribute('type', 'checkbox');\n function onChange() {\n _this.setValue(!_this.__prev);\n }\n dom.bind(_this2.__checkbox, 'change', onChange, false);\n _this2.domElement.appendChild(_this2.__checkbox);\n _this2.updateDisplay();\n return _this2;\n }\n createClass(BooleanController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n this.__prev = this.getValue();\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (this.getValue() === true) {\n this.__checkbox.setAttribute('checked', 'checked');\n this.__checkbox.checked = true;\n this.__prev = true;\n } else {\n this.__checkbox.checked = false;\n this.__prev = false;\n }\n return get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return BooleanController;\n}(Controller);\n\nvar OptionController = function (_Controller) {\n inherits(OptionController, _Controller);\n function OptionController(object, property, opts) {\n classCallCheck(this, OptionController);\n var _this2 = possibleConstructorReturn(this, (OptionController.__proto__ || Object.getPrototypeOf(OptionController)).call(this, object, property));\n var options = opts;\n var _this = _this2;\n _this2.__select = document.createElement('select');\n if (Common.isArray(options)) {\n var map = {};\n Common.each(options, function (element) {\n map[element] = element;\n });\n options = map;\n }\n Common.each(options, function (value, key) {\n var opt = document.createElement('option');\n opt.innerHTML = key;\n opt.setAttribute('value', value);\n _this.__select.appendChild(opt);\n });\n _this2.updateDisplay();\n dom.bind(_this2.__select, 'change', function () {\n var desiredValue = this.options[this.selectedIndex].value;\n _this.setValue(desiredValue);\n });\n _this2.domElement.appendChild(_this2.__select);\n return _this2;\n }\n createClass(OptionController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (dom.isActive(this.__select)) return this;\n this.__select.value = this.getValue();\n return get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return OptionController;\n}(Controller);\n\nvar StringController = function (_Controller) {\n inherits(StringController, _Controller);\n function StringController(object, property) {\n classCallCheck(this, StringController);\n var _this2 = possibleConstructorReturn(this, (StringController.__proto__ || Object.getPrototypeOf(StringController)).call(this, object, property));\n var _this = _this2;\n function onChange() {\n _this.setValue(_this.__input.value);\n }\n function onBlur() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'keyup', onChange);\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n this.blur();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(StringController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (!dom.isActive(this.__input)) {\n this.__input.value = this.getValue();\n }\n return get(StringController.prototype.__proto__ || Object.getPrototypeOf(StringController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return StringController;\n}(Controller);\n\nfunction numDecimals(x) {\n var _x = x.toString();\n if (_x.indexOf('.') > -1) {\n return _x.length - _x.indexOf('.') - 1;\n }\n return 0;\n}\nvar NumberController = function (_Controller) {\n inherits(NumberController, _Controller);\n function NumberController(object, property, params) {\n classCallCheck(this, NumberController);\n var _this = possibleConstructorReturn(this, (NumberController.__proto__ || Object.getPrototypeOf(NumberController)).call(this, object, property));\n var _params = params || {};\n _this.__min = _params.min;\n _this.__max = _params.max;\n _this.__step = _params.step;\n if (Common.isUndefined(_this.__step)) {\n if (_this.initialValue === 0) {\n _this.__impliedStep = 1;\n } else {\n _this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(_this.initialValue)) / Math.LN10)) / 10;\n }\n } else {\n _this.__impliedStep = _this.__step;\n }\n _this.__precision = numDecimals(_this.__impliedStep);\n return _this;\n }\n createClass(NumberController, [{\n key: 'setValue',\n value: function setValue(v) {\n var _v = v;\n if (this.__min !== undefined && _v < this.__min) {\n _v = this.__min;\n } else if (this.__max !== undefined && _v > this.__max) {\n _v = this.__max;\n }\n if (this.__step !== undefined && _v % this.__step !== 0) {\n _v = Math.round(_v / this.__step) * this.__step;\n }\n return get(NumberController.prototype.__proto__ || Object.getPrototypeOf(NumberController.prototype), 'setValue', this).call(this, _v);\n }\n }, {\n key: 'min',\n value: function min(minValue) {\n this.__min = minValue;\n return this;\n }\n }, {\n key: 'max',\n value: function max(maxValue) {\n this.__max = maxValue;\n return this;\n }\n }, {\n key: 'step',\n value: function step(stepValue) {\n this.__step = stepValue;\n this.__impliedStep = stepValue;\n this.__precision = numDecimals(stepValue);\n return this;\n }\n }]);\n return NumberController;\n}(Controller);\n\nfunction roundToDecimal(value, decimals) {\n var tenTo = Math.pow(10, decimals);\n return Math.round(value * tenTo) / tenTo;\n}\nvar NumberControllerBox = function (_NumberController) {\n inherits(NumberControllerBox, _NumberController);\n function NumberControllerBox(object, property, params) {\n classCallCheck(this, NumberControllerBox);\n var _this2 = possibleConstructorReturn(this, (NumberControllerBox.__proto__ || Object.getPrototypeOf(NumberControllerBox)).call(this, object, property, params));\n _this2.__truncationSuspended = false;\n var _this = _this2;\n var prevY = void 0;\n function onChange() {\n var attempted = parseFloat(_this.__input.value);\n if (!Common.isNaN(attempted)) {\n _this.setValue(attempted);\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onBlur() {\n onFinish();\n }\n function onMouseDrag(e) {\n var diff = prevY - e.clientY;\n _this.setValue(_this.getValue() + diff * _this.__impliedStep);\n prevY = e.clientY;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n onFinish();\n }\n function onMouseDown(e) {\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n prevY = e.clientY;\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'mousedown', onMouseDown);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n _this.__truncationSuspended = true;\n this.blur();\n _this.__truncationSuspended = false;\n onFinish();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(NumberControllerBox, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision);\n return get(NumberControllerBox.prototype.__proto__ || Object.getPrototypeOf(NumberControllerBox.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerBox;\n}(NumberController);\n\nfunction map(v, i1, i2, o1, o2) {\n return o1 + (o2 - o1) * ((v - i1) / (i2 - i1));\n}\nvar NumberControllerSlider = function (_NumberController) {\n inherits(NumberControllerSlider, _NumberController);\n function NumberControllerSlider(object, property, min, max, step) {\n classCallCheck(this, NumberControllerSlider);\n var _this2 = possibleConstructorReturn(this, (NumberControllerSlider.__proto__ || Object.getPrototypeOf(NumberControllerSlider)).call(this, object, property, { min: min, max: max, step: step }));\n var _this = _this2;\n _this2.__background = document.createElement('div');\n _this2.__foreground = document.createElement('div');\n dom.bind(_this2.__background, 'mousedown', onMouseDown);\n dom.bind(_this2.__background, 'touchstart', onTouchStart);\n dom.addClass(_this2.__background, 'slider');\n dom.addClass(_this2.__foreground, 'slider-fg');\n function onMouseDown(e) {\n document.activeElement.blur();\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n onMouseDrag(e);\n }\n function onMouseDrag(e) {\n e.preventDefault();\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n return false;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onTouchStart(e) {\n if (e.touches.length !== 1) {\n return;\n }\n dom.bind(window, 'touchmove', onTouchMove);\n dom.bind(window, 'touchend', onTouchEnd);\n onTouchMove(e);\n }\n function onTouchMove(e) {\n var clientX = e.touches[0].clientX;\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n }\n function onTouchEnd() {\n dom.unbind(window, 'touchmove', onTouchMove);\n dom.unbind(window, 'touchend', onTouchEnd);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.updateDisplay();\n _this2.__background.appendChild(_this2.__foreground);\n _this2.domElement.appendChild(_this2.__background);\n return _this2;\n }\n createClass(NumberControllerSlider, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var pct = (this.getValue() - this.__min) / (this.__max - this.__min);\n this.__foreground.style.width = pct * 100 + '%';\n return get(NumberControllerSlider.prototype.__proto__ || Object.getPrototypeOf(NumberControllerSlider.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerSlider;\n}(NumberController);\n\nvar FunctionController = function (_Controller) {\n inherits(FunctionController, _Controller);\n function FunctionController(object, property, text) {\n classCallCheck(this, FunctionController);\n var _this2 = possibleConstructorReturn(this, (FunctionController.__proto__ || Object.getPrototypeOf(FunctionController)).call(this, object, property));\n var _this = _this2;\n _this2.__button = document.createElement('div');\n _this2.__button.innerHTML = text === undefined ? 'Fire' : text;\n dom.bind(_this2.__button, 'click', function (e) {\n e.preventDefault();\n _this.fire();\n return false;\n });\n dom.addClass(_this2.__button, 'button');\n _this2.domElement.appendChild(_this2.__button);\n return _this2;\n }\n createClass(FunctionController, [{\n key: 'fire',\n value: function fire() {\n if (this.__onChange) {\n this.__onChange.call(this);\n }\n this.getValue().call(this.object);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n }\n }]);\n return FunctionController;\n}(Controller);\n\nvar ColorController = function (_Controller) {\n inherits(ColorController, _Controller);\n function ColorController(object, property) {\n classCallCheck(this, ColorController);\n var _this2 = possibleConstructorReturn(this, (ColorController.__proto__ || Object.getPrototypeOf(ColorController)).call(this, object, property));\n _this2.__color = new Color(_this2.getValue());\n _this2.__temp = new Color(0);\n var _this = _this2;\n _this2.domElement = document.createElement('div');\n dom.makeSelectable(_this2.domElement, false);\n _this2.__selector = document.createElement('div');\n _this2.__selector.className = 'selector';\n _this2.__saturation_field = document.createElement('div');\n _this2.__saturation_field.className = 'saturation-field';\n _this2.__field_knob = document.createElement('div');\n _this2.__field_knob.className = 'field-knob';\n _this2.__field_knob_border = '2px solid ';\n _this2.__hue_knob = document.createElement('div');\n _this2.__hue_knob.className = 'hue-knob';\n _this2.__hue_field = document.createElement('div');\n _this2.__hue_field.className = 'hue-field';\n _this2.__input = document.createElement('input');\n _this2.__input.type = 'text';\n _this2.__input_textShadow = '0 1px 1px ';\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n onBlur.call(this);\n }\n });\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__selector, 'mousedown', function () {\n dom.addClass(this, 'drag').bind(window, 'mouseup', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n dom.bind(_this2.__selector, 'touchstart', function () {\n dom.addClass(this, 'drag').bind(window, 'touchend', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n var valueField = document.createElement('div');\n Common.extend(_this2.__selector.style, {\n width: '122px',\n height: '102px',\n padding: '3px',\n backgroundColor: '#222',\n boxShadow: '0px 1px 3px rgba(0,0,0,0.3)'\n });\n Common.extend(_this2.__field_knob.style, {\n position: 'absolute',\n width: '12px',\n height: '12px',\n border: _this2.__field_knob_border + (_this2.__color.v < 0.5 ? '#fff' : '#000'),\n boxShadow: '0px 1px 3px rgba(0,0,0,0.5)',\n borderRadius: '12px',\n zIndex: 1\n });\n Common.extend(_this2.__hue_knob.style, {\n position: 'absolute',\n width: '15px',\n height: '2px',\n borderRight: '4px solid #fff',\n zIndex: 1\n });\n Common.extend(_this2.__saturation_field.style, {\n width: '100px',\n height: '100px',\n border: '1px solid #555',\n marginRight: '3px',\n display: 'inline-block',\n cursor: 'pointer'\n });\n Common.extend(valueField.style, {\n width: '100%',\n height: '100%',\n background: 'none'\n });\n linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000');\n Common.extend(_this2.__hue_field.style, {\n width: '15px',\n height: '100px',\n border: '1px solid #555',\n cursor: 'ns-resize',\n position: 'absolute',\n top: '3px',\n right: '3px'\n });\n hueGradient(_this2.__hue_field);\n Common.extend(_this2.__input.style, {\n outline: 'none',\n textAlign: 'center',\n color: '#fff',\n border: 0,\n fontWeight: 'bold',\n textShadow: _this2.__input_textShadow + 'rgba(0,0,0,0.7)'\n });\n dom.bind(_this2.__saturation_field, 'mousedown', fieldDown);\n dom.bind(_this2.__saturation_field, 'touchstart', fieldDown);\n dom.bind(_this2.__field_knob, 'mousedown', fieldDown);\n dom.bind(_this2.__field_knob, 'touchstart', fieldDown);\n dom.bind(_this2.__hue_field, 'mousedown', fieldDownH);\n dom.bind(_this2.__hue_field, 'touchstart', fieldDownH);\n function fieldDown(e) {\n setSV(e);\n dom.bind(window, 'mousemove', setSV);\n dom.bind(window, 'touchmove', setSV);\n dom.bind(window, 'mouseup', fieldUpSV);\n dom.bind(window, 'touchend', fieldUpSV);\n }\n function fieldDownH(e) {\n setH(e);\n dom.bind(window, 'mousemove', setH);\n dom.bind(window, 'touchmove', setH);\n dom.bind(window, 'mouseup', fieldUpH);\n dom.bind(window, 'touchend', fieldUpH);\n }\n function fieldUpSV() {\n dom.unbind(window, 'mousemove', setSV);\n dom.unbind(window, 'touchmove', setSV);\n dom.unbind(window, 'mouseup', fieldUpSV);\n dom.unbind(window, 'touchend', fieldUpSV);\n onFinish();\n }\n function fieldUpH() {\n dom.unbind(window, 'mousemove', setH);\n dom.unbind(window, 'touchmove', setH);\n dom.unbind(window, 'mouseup', fieldUpH);\n dom.unbind(window, 'touchend', fieldUpH);\n onFinish();\n }\n function onBlur() {\n var i = interpret(this.value);\n if (i !== false) {\n _this.__color.__state = i;\n _this.setValue(_this.__color.toOriginal());\n } else {\n this.value = _this.__color.toString();\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.__color.toOriginal());\n }\n }\n _this2.__saturation_field.appendChild(valueField);\n _this2.__selector.appendChild(_this2.__field_knob);\n _this2.__selector.appendChild(_this2.__saturation_field);\n _this2.__selector.appendChild(_this2.__hue_field);\n _this2.__hue_field.appendChild(_this2.__hue_knob);\n _this2.domElement.appendChild(_this2.__input);\n _this2.domElement.appendChild(_this2.__selector);\n _this2.updateDisplay();\n function setSV(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__saturation_field.getBoundingClientRect();\n var _ref = e.touches && e.touches[0] || e,\n clientX = _ref.clientX,\n clientY = _ref.clientY;\n var s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left);\n var v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (v > 1) {\n v = 1;\n } else if (v < 0) {\n v = 0;\n }\n if (s > 1) {\n s = 1;\n } else if (s < 0) {\n s = 0;\n }\n _this.__color.v = v;\n _this.__color.s = s;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n function setH(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__hue_field.getBoundingClientRect();\n var _ref2 = e.touches && e.touches[0] || e,\n clientY = _ref2.clientY;\n var h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (h > 1) {\n h = 1;\n } else if (h < 0) {\n h = 0;\n }\n _this.__color.h = h * 360;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n return _this2;\n }\n createClass(ColorController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var i = interpret(this.getValue());\n if (i !== false) {\n var mismatch = false;\n Common.each(Color.COMPONENTS, function (component) {\n if (!Common.isUndefined(i[component]) && !Common.isUndefined(this.__color.__state[component]) && i[component] !== this.__color.__state[component]) {\n mismatch = true;\n return {};\n }\n }, this);\n if (mismatch) {\n Common.extend(this.__color.__state, i);\n }\n }\n Common.extend(this.__temp.__state, this.__color.__state);\n this.__temp.a = 1;\n var flip = this.__color.v < 0.5 || this.__color.s > 0.5 ? 255 : 0;\n var _flip = 255 - flip;\n Common.extend(this.__field_knob.style, {\n marginLeft: 100 * this.__color.s - 7 + 'px',\n marginTop: 100 * (1 - this.__color.v) - 7 + 'px',\n backgroundColor: this.__temp.toHexString(),\n border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')'\n });\n this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px';\n this.__temp.s = 1;\n this.__temp.v = 1;\n linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString());\n this.__input.value = this.__color.toString();\n Common.extend(this.__input.style, {\n backgroundColor: this.__color.toHexString(),\n color: 'rgb(' + flip + ',' + flip + ',' + flip + ')',\n textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)'\n });\n }\n }]);\n return ColorController;\n}(Controller);\nvar vendors = ['-moz-', '-o-', '-webkit-', '-ms-', ''];\nfunction linearGradient(elem, x, a, b) {\n elem.style.background = '';\n Common.each(vendors, function (vendor) {\n elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); ';\n });\n}\nfunction hueGradient(elem) {\n elem.style.background = '';\n elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);';\n elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n}\n\nvar css = {\n load: function load(url, indoc) {\n var doc = indoc || document;\n var link = doc.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.href = url;\n doc.getElementsByTagName('head')[0].appendChild(link);\n },\n inject: function inject(cssContent, indoc) {\n var doc = indoc || document;\n var injected = document.createElement('style');\n injected.type = 'text/css';\n injected.innerHTML = cssContent;\n var head = doc.getElementsByTagName('head')[0];\n try {\n head.appendChild(injected);\n } catch (e) {\n }\n }\n};\n\nvar saveDialogContents = \"
\\n\\n Here's the new load parameter for your GUI's constructor:\\n\\n \\n\\n
\\n\\n Automatically save\\n values to localStorage on exit.\\n\\n
The values saved to localStorage will\\n override those passed to dat.GUI's constructor. This makes it\\n easier to work incrementally, but localStorage is fragile,\\n and your friends may not see the same values you do.\\n\\n
\\n\\n
\\n\\n
\";\n\nvar ControllerFactory = function ControllerFactory(object, property) {\n var initialValue = object[property];\n if (Common.isArray(arguments[2]) || Common.isObject(arguments[2])) {\n return new OptionController(object, property, arguments[2]);\n }\n if (Common.isNumber(initialValue)) {\n if (Common.isNumber(arguments[2]) && Common.isNumber(arguments[3])) {\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerSlider(object, property, arguments[2], arguments[3], arguments[4]);\n }\n return new NumberControllerSlider(object, property, arguments[2], arguments[3]);\n }\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3], step: arguments[4] });\n }\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] });\n }\n if (Common.isString(initialValue)) {\n return new StringController(object, property);\n }\n if (Common.isFunction(initialValue)) {\n return new FunctionController(object, property, '');\n }\n if (Common.isBoolean(initialValue)) {\n return new BooleanController(object, property);\n }\n return null;\n};\n\nfunction requestAnimationFrame(callback) {\n setTimeout(callback, 1000 / 60);\n}\nvar requestAnimationFrame$1 = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || requestAnimationFrame;\n\nvar CenteredDiv = function () {\n function CenteredDiv() {\n classCallCheck(this, CenteredDiv);\n this.backgroundElement = document.createElement('div');\n Common.extend(this.backgroundElement.style, {\n backgroundColor: 'rgba(0,0,0,0.8)',\n top: 0,\n left: 0,\n display: 'none',\n zIndex: '1000',\n opacity: 0,\n WebkitTransition: 'opacity 0.2s linear',\n transition: 'opacity 0.2s linear'\n });\n dom.makeFullscreen(this.backgroundElement);\n this.backgroundElement.style.position = 'fixed';\n this.domElement = document.createElement('div');\n Common.extend(this.domElement.style, {\n position: 'fixed',\n display: 'none',\n zIndex: '1001',\n opacity: 0,\n WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear',\n transition: 'transform 0.2s ease-out, opacity 0.2s linear'\n });\n document.body.appendChild(this.backgroundElement);\n document.body.appendChild(this.domElement);\n var _this = this;\n dom.bind(this.backgroundElement, 'click', function () {\n _this.hide();\n });\n }\n createClass(CenteredDiv, [{\n key: 'show',\n value: function show() {\n var _this = this;\n this.backgroundElement.style.display = 'block';\n this.domElement.style.display = 'block';\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n this.layout();\n Common.defer(function () {\n _this.backgroundElement.style.opacity = 1;\n _this.domElement.style.opacity = 1;\n _this.domElement.style.webkitTransform = 'scale(1)';\n });\n }\n }, {\n key: 'hide',\n value: function hide() {\n var _this = this;\n var hide = function hide() {\n _this.domElement.style.display = 'none';\n _this.backgroundElement.style.display = 'none';\n dom.unbind(_this.domElement, 'webkitTransitionEnd', hide);\n dom.unbind(_this.domElement, 'transitionend', hide);\n dom.unbind(_this.domElement, 'oTransitionEnd', hide);\n };\n dom.bind(this.domElement, 'webkitTransitionEnd', hide);\n dom.bind(this.domElement, 'transitionend', hide);\n dom.bind(this.domElement, 'oTransitionEnd', hide);\n this.backgroundElement.style.opacity = 0;\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n }\n }, {\n key: 'layout',\n value: function layout() {\n this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px';\n this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px';\n }\n }]);\n return CenteredDiv;\n}();\n\nvar styleSheet = ___$insertStyle(\".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .cr.function .property-name{width:100%}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\\n\");\n\ncss.inject(styleSheet);\nvar CSS_NAMESPACE = 'dg';\nvar HIDE_KEY_CODE = 72;\nvar CLOSE_BUTTON_HEIGHT = 20;\nvar DEFAULT_DEFAULT_PRESET_NAME = 'Default';\nvar SUPPORTS_LOCAL_STORAGE = function () {\n try {\n return !!window.localStorage;\n } catch (e) {\n return false;\n }\n}();\nvar SAVE_DIALOGUE = void 0;\nvar autoPlaceVirgin = true;\nvar autoPlaceContainer = void 0;\nvar hide = false;\nvar hideableGuis = [];\nvar GUI = function GUI(pars) {\n var _this = this;\n var params = pars || {};\n this.domElement = document.createElement('div');\n this.__ul = document.createElement('ul');\n this.domElement.appendChild(this.__ul);\n dom.addClass(this.domElement, CSS_NAMESPACE);\n this.__folders = {};\n this.__controllers = [];\n this.__rememberedObjects = [];\n this.__rememberedObjectIndecesToControllers = [];\n this.__listening = [];\n params = Common.defaults(params, {\n closeOnTop: false,\n autoPlace: true,\n width: GUI.DEFAULT_WIDTH\n });\n params = Common.defaults(params, {\n resizable: params.autoPlace,\n hideable: params.autoPlace\n });\n if (!Common.isUndefined(params.load)) {\n if (params.preset) {\n params.load.preset = params.preset;\n }\n } else {\n params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME };\n }\n if (Common.isUndefined(params.parent) && params.hideable) {\n hideableGuis.push(this);\n }\n params.resizable = Common.isUndefined(params.parent) && params.resizable;\n if (params.autoPlace && Common.isUndefined(params.scrollable)) {\n params.scrollable = true;\n }\n var useLocalStorage = SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true';\n var saveToLocalStorage = void 0;\n var titleRow = void 0;\n Object.defineProperties(this,\n {\n parent: {\n get: function get$$1() {\n return params.parent;\n }\n },\n scrollable: {\n get: function get$$1() {\n return params.scrollable;\n }\n },\n autoPlace: {\n get: function get$$1() {\n return params.autoPlace;\n }\n },\n closeOnTop: {\n get: function get$$1() {\n return params.closeOnTop;\n }\n },\n preset: {\n get: function get$$1() {\n if (_this.parent) {\n return _this.getRoot().preset;\n }\n return params.load.preset;\n },\n set: function set$$1(v) {\n if (_this.parent) {\n _this.getRoot().preset = v;\n } else {\n params.load.preset = v;\n }\n setPresetSelectIndex(this);\n _this.revert();\n }\n },\n width: {\n get: function get$$1() {\n return params.width;\n },\n set: function set$$1(v) {\n params.width = v;\n setWidth(_this, v);\n }\n },\n name: {\n get: function get$$1() {\n return params.name;\n },\n set: function set$$1(v) {\n params.name = v;\n if (titleRow) {\n titleRow.innerHTML = params.name;\n }\n }\n },\n closed: {\n get: function get$$1() {\n return params.closed;\n },\n set: function set$$1(v) {\n params.closed = v;\n if (params.closed) {\n dom.addClass(_this.__ul, GUI.CLASS_CLOSED);\n } else {\n dom.removeClass(_this.__ul, GUI.CLASS_CLOSED);\n }\n this.onResize();\n if (_this.__closeButton) {\n _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED;\n }\n }\n },\n load: {\n get: function get$$1() {\n return params.load;\n }\n },\n useLocalStorage: {\n get: function get$$1() {\n return useLocalStorage;\n },\n set: function set$$1(bool) {\n if (SUPPORTS_LOCAL_STORAGE) {\n useLocalStorage = bool;\n if (bool) {\n dom.bind(window, 'unload', saveToLocalStorage);\n } else {\n dom.unbind(window, 'unload', saveToLocalStorage);\n }\n localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool);\n }\n }\n }\n });\n if (Common.isUndefined(params.parent)) {\n this.closed = params.closed || false;\n dom.addClass(this.domElement, GUI.CLASS_MAIN);\n dom.makeSelectable(this.domElement, false);\n if (SUPPORTS_LOCAL_STORAGE) {\n if (useLocalStorage) {\n _this.useLocalStorage = true;\n var savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui'));\n if (savedGui) {\n params.load = JSON.parse(savedGui);\n }\n }\n }\n this.__closeButton = document.createElement('div');\n this.__closeButton.innerHTML = GUI.TEXT_CLOSED;\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON);\n if (params.closeOnTop) {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP);\n this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]);\n } else {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM);\n this.domElement.appendChild(this.__closeButton);\n }\n dom.bind(this.__closeButton, 'click', function () {\n _this.closed = !_this.closed;\n });\n } else {\n if (params.closed === undefined) {\n params.closed = true;\n }\n var titleRowName = document.createTextNode(params.name);\n dom.addClass(titleRowName, 'controller-name');\n titleRow = addRow(_this, titleRowName);\n var onClickTitle = function onClickTitle(e) {\n e.preventDefault();\n _this.closed = !_this.closed;\n return false;\n };\n dom.addClass(this.__ul, GUI.CLASS_CLOSED);\n dom.addClass(titleRow, 'title');\n dom.bind(titleRow, 'click', onClickTitle);\n if (!params.closed) {\n this.closed = false;\n }\n }\n if (params.autoPlace) {\n if (Common.isUndefined(params.parent)) {\n if (autoPlaceVirgin) {\n autoPlaceContainer = document.createElement('div');\n dom.addClass(autoPlaceContainer, CSS_NAMESPACE);\n dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER);\n document.body.appendChild(autoPlaceContainer);\n autoPlaceVirgin = false;\n }\n autoPlaceContainer.appendChild(this.domElement);\n dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE);\n }\n if (!this.parent) {\n setWidth(_this, params.width);\n }\n }\n this.__resizeHandler = function () {\n _this.onResizeDebounced();\n };\n dom.bind(window, 'resize', this.__resizeHandler);\n dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler);\n dom.bind(this.__ul, 'transitionend', this.__resizeHandler);\n dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler);\n this.onResize();\n if (params.resizable) {\n addResizeHandle(this);\n }\n saveToLocalStorage = function saveToLocalStorage() {\n if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') {\n localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject()));\n }\n };\n this.saveToLocalStorageIfPossible = saveToLocalStorage;\n function resetWidth() {\n var root = _this.getRoot();\n root.width += 1;\n Common.defer(function () {\n root.width -= 1;\n });\n }\n if (!params.parent) {\n resetWidth();\n }\n};\nGUI.toggleHide = function () {\n hide = !hide;\n Common.each(hideableGuis, function (gui) {\n gui.domElement.style.display = hide ? 'none' : '';\n });\n};\nGUI.CLASS_AUTO_PLACE = 'a';\nGUI.CLASS_AUTO_PLACE_CONTAINER = 'ac';\nGUI.CLASS_MAIN = 'main';\nGUI.CLASS_CONTROLLER_ROW = 'cr';\nGUI.CLASS_TOO_TALL = 'taller-than-window';\nGUI.CLASS_CLOSED = 'closed';\nGUI.CLASS_CLOSE_BUTTON = 'close-button';\nGUI.CLASS_CLOSE_TOP = 'close-top';\nGUI.CLASS_CLOSE_BOTTOM = 'close-bottom';\nGUI.CLASS_DRAG = 'drag';\nGUI.DEFAULT_WIDTH = 245;\nGUI.TEXT_CLOSED = 'Close Controls';\nGUI.TEXT_OPEN = 'Open Controls';\nGUI._keydownHandler = function (e) {\n if (document.activeElement.type !== 'text' && (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) {\n GUI.toggleHide();\n }\n};\ndom.bind(window, 'keydown', GUI._keydownHandler, false);\nCommon.extend(GUI.prototype,\n{\n add: function add(object, property) {\n return _add(this, object, property, {\n factoryArgs: Array.prototype.slice.call(arguments, 2)\n });\n },\n addColor: function addColor(object, property) {\n return _add(this, object, property, {\n color: true\n });\n },\n remove: function remove(controller) {\n this.__ul.removeChild(controller.__li);\n this.__controllers.splice(this.__controllers.indexOf(controller), 1);\n var _this = this;\n Common.defer(function () {\n _this.onResize();\n });\n },\n destroy: function destroy() {\n if (this.parent) {\n throw new Error('Only the root GUI should be removed with .destroy(). ' + 'For subfolders, use gui.removeFolder(folder) instead.');\n }\n if (this.autoPlace) {\n autoPlaceContainer.removeChild(this.domElement);\n }\n var _this = this;\n Common.each(this.__folders, function (subfolder) {\n _this.removeFolder(subfolder);\n });\n dom.unbind(window, 'keydown', GUI._keydownHandler, false);\n removeListeners(this);\n },\n addFolder: function addFolder(name) {\n if (this.__folders[name] !== undefined) {\n throw new Error('You already have a folder in this GUI by the' + ' name \"' + name + '\"');\n }\n var newGuiParams = { name: name, parent: this };\n newGuiParams.autoPlace = this.autoPlace;\n if (this.load &&\n this.load.folders &&\n this.load.folders[name]) {\n newGuiParams.closed = this.load.folders[name].closed;\n newGuiParams.load = this.load.folders[name];\n }\n var gui = new GUI(newGuiParams);\n this.__folders[name] = gui;\n var li = addRow(this, gui.domElement);\n dom.addClass(li, 'folder');\n return gui;\n },\n removeFolder: function removeFolder(folder) {\n this.__ul.removeChild(folder.domElement.parentElement);\n delete this.__folders[folder.name];\n if (this.load &&\n this.load.folders &&\n this.load.folders[folder.name]) {\n delete this.load.folders[folder.name];\n }\n removeListeners(folder);\n var _this = this;\n Common.each(folder.__folders, function (subfolder) {\n folder.removeFolder(subfolder);\n });\n Common.defer(function () {\n _this.onResize();\n });\n },\n open: function open() {\n this.closed = false;\n },\n close: function close() {\n this.closed = true;\n },\n hide: function hide() {\n this.domElement.style.display = 'none';\n },\n show: function show() {\n this.domElement.style.display = '';\n },\n onResize: function onResize() {\n var root = this.getRoot();\n if (root.scrollable) {\n var top = dom.getOffset(root.__ul).top;\n var h = 0;\n Common.each(root.__ul.childNodes, function (node) {\n if (!(root.autoPlace && node === root.__save_row)) {\n h += dom.getHeight(node);\n }\n });\n if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) {\n dom.addClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px';\n } else {\n dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = 'auto';\n }\n }\n if (root.__resize_handle) {\n Common.defer(function () {\n root.__resize_handle.style.height = root.__ul.offsetHeight + 'px';\n });\n }\n if (root.__closeButton) {\n root.__closeButton.style.width = root.width + 'px';\n }\n },\n onResizeDebounced: Common.debounce(function () {\n this.onResize();\n }, 50),\n remember: function remember() {\n if (Common.isUndefined(SAVE_DIALOGUE)) {\n SAVE_DIALOGUE = new CenteredDiv();\n SAVE_DIALOGUE.domElement.innerHTML = saveDialogContents;\n }\n if (this.parent) {\n throw new Error('You can only call remember on a top level GUI.');\n }\n var _this = this;\n Common.each(Array.prototype.slice.call(arguments), function (object) {\n if (_this.__rememberedObjects.length === 0) {\n addSaveMenu(_this);\n }\n if (_this.__rememberedObjects.indexOf(object) === -1) {\n _this.__rememberedObjects.push(object);\n }\n });\n if (this.autoPlace) {\n setWidth(this, this.width);\n }\n },\n getRoot: function getRoot() {\n var gui = this;\n while (gui.parent) {\n gui = gui.parent;\n }\n return gui;\n },\n getSaveObject: function getSaveObject() {\n var toReturn = this.load;\n toReturn.closed = this.closed;\n if (this.__rememberedObjects.length > 0) {\n toReturn.preset = this.preset;\n if (!toReturn.remembered) {\n toReturn.remembered = {};\n }\n toReturn.remembered[this.preset] = getCurrentPreset(this);\n }\n toReturn.folders = {};\n Common.each(this.__folders, function (element, key) {\n toReturn.folders[key] = element.getSaveObject();\n });\n return toReturn;\n },\n save: function save() {\n if (!this.load.remembered) {\n this.load.remembered = {};\n }\n this.load.remembered[this.preset] = getCurrentPreset(this);\n markPresetModified(this, false);\n this.saveToLocalStorageIfPossible();\n },\n saveAs: function saveAs(presetName) {\n if (!this.load.remembered) {\n this.load.remembered = {};\n this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true);\n }\n this.load.remembered[presetName] = getCurrentPreset(this);\n this.preset = presetName;\n addPresetOption(this, presetName, true);\n this.saveToLocalStorageIfPossible();\n },\n revert: function revert(gui) {\n Common.each(this.__controllers, function (controller) {\n if (!this.getRoot().load.remembered) {\n controller.setValue(controller.initialValue);\n } else {\n recallSavedValue(gui || this.getRoot(), controller);\n }\n if (controller.__onFinishChange) {\n controller.__onFinishChange.call(controller, controller.getValue());\n }\n }, this);\n Common.each(this.__folders, function (folder) {\n folder.revert(folder);\n });\n if (!gui) {\n markPresetModified(this.getRoot(), false);\n }\n },\n listen: function listen(controller) {\n var init = this.__listening.length === 0;\n this.__listening.push(controller);\n if (init) {\n updateDisplays(this.__listening);\n }\n },\n updateDisplay: function updateDisplay() {\n Common.each(this.__controllers, function (controller) {\n controller.updateDisplay();\n });\n Common.each(this.__folders, function (folder) {\n folder.updateDisplay();\n });\n }\n});\nfunction addRow(gui, newDom, liBefore) {\n var li = document.createElement('li');\n if (newDom) {\n li.appendChild(newDom);\n }\n if (liBefore) {\n gui.__ul.insertBefore(li, liBefore);\n } else {\n gui.__ul.appendChild(li);\n }\n gui.onResize();\n return li;\n}\nfunction removeListeners(gui) {\n dom.unbind(window, 'resize', gui.__resizeHandler);\n if (gui.saveToLocalStorageIfPossible) {\n dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible);\n }\n}\nfunction markPresetModified(gui, modified) {\n var opt = gui.__preset_select[gui.__preset_select.selectedIndex];\n if (modified) {\n opt.innerHTML = opt.value + '*';\n } else {\n opt.innerHTML = opt.value;\n }\n}\nfunction augmentController(gui, li, controller) {\n controller.__li = li;\n controller.__gui = gui;\n Common.extend(controller, {\n options: function options(_options) {\n if (arguments.length > 1) {\n var nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: nextSibling,\n factoryArgs: [Common.toArray(arguments)]\n });\n }\n if (Common.isArray(_options) || Common.isObject(_options)) {\n var _nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: _nextSibling,\n factoryArgs: [_options]\n });\n }\n },\n name: function name(_name) {\n controller.__li.firstElementChild.firstElementChild.innerHTML = _name;\n return controller;\n },\n listen: function listen() {\n controller.__gui.listen(controller);\n return controller;\n },\n remove: function remove() {\n controller.__gui.remove(controller);\n return controller;\n }\n });\n if (controller instanceof NumberControllerSlider) {\n var box = new NumberControllerBox(controller.object, controller.property, { min: controller.__min, max: controller.__max, step: controller.__step });\n Common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function (method) {\n var pc = controller[method];\n var pb = box[method];\n controller[method] = box[method] = function () {\n var args = Array.prototype.slice.call(arguments);\n pb.apply(box, args);\n return pc.apply(controller, args);\n };\n });\n dom.addClass(li, 'has-slider');\n controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild);\n } else if (controller instanceof NumberControllerBox) {\n var r = function r(returned) {\n if (Common.isNumber(controller.__min) && Common.isNumber(controller.__max)) {\n var oldName = controller.__li.firstElementChild.firstElementChild.innerHTML;\n var wasListening = controller.__gui.__listening.indexOf(controller) > -1;\n controller.remove();\n var newController = _add(gui, controller.object, controller.property, {\n before: controller.__li.nextElementSibling,\n factoryArgs: [controller.__min, controller.__max, controller.__step]\n });\n newController.name(oldName);\n if (wasListening) newController.listen();\n return newController;\n }\n return returned;\n };\n controller.min = Common.compose(r, controller.min);\n controller.max = Common.compose(r, controller.max);\n } else if (controller instanceof BooleanController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__checkbox, 'click');\n });\n dom.bind(controller.__checkbox, 'click', function (e) {\n e.stopPropagation();\n });\n } else if (controller instanceof FunctionController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__button, 'click');\n });\n dom.bind(li, 'mouseover', function () {\n dom.addClass(controller.__button, 'hover');\n });\n dom.bind(li, 'mouseout', function () {\n dom.removeClass(controller.__button, 'hover');\n });\n } else if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n controller.updateDisplay = Common.compose(function (val) {\n li.style.borderLeftColor = controller.__color.toString();\n return val;\n }, controller.updateDisplay);\n controller.updateDisplay();\n }\n controller.setValue = Common.compose(function (val) {\n if (gui.getRoot().__preset_select && controller.isModified()) {\n markPresetModified(gui.getRoot(), true);\n }\n return val;\n }, controller.setValue);\n}\nfunction recallSavedValue(gui, controller) {\n var root = gui.getRoot();\n var matchedIndex = root.__rememberedObjects.indexOf(controller.object);\n if (matchedIndex !== -1) {\n var controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex];\n if (controllerMap === undefined) {\n controllerMap = {};\n root.__rememberedObjectIndecesToControllers[matchedIndex] = controllerMap;\n }\n controllerMap[controller.property] = controller;\n if (root.load && root.load.remembered) {\n var presetMap = root.load.remembered;\n var preset = void 0;\n if (presetMap[gui.preset]) {\n preset = presetMap[gui.preset];\n } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) {\n preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME];\n } else {\n return;\n }\n if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) {\n var value = preset[matchedIndex][controller.property];\n controller.initialValue = value;\n controller.setValue(value);\n }\n }\n }\n}\nfunction _add(gui, object, property, params) {\n if (object[property] === undefined) {\n throw new Error('Object \"' + object + '\" has no property \"' + property + '\"');\n }\n var controller = void 0;\n if (params.color) {\n controller = new ColorController(object, property);\n } else {\n var factoryArgs = [object, property].concat(params.factoryArgs);\n controller = ControllerFactory.apply(gui, factoryArgs);\n }\n if (params.before instanceof Controller) {\n params.before = params.before.__li;\n }\n recallSavedValue(gui, controller);\n dom.addClass(controller.domElement, 'c');\n var name = document.createElement('span');\n dom.addClass(name, 'property-name');\n name.innerHTML = controller.property;\n var container = document.createElement('div');\n container.appendChild(name);\n container.appendChild(controller.domElement);\n var li = addRow(gui, container, params.before);\n dom.addClass(li, GUI.CLASS_CONTROLLER_ROW);\n if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n } else {\n dom.addClass(li, _typeof(controller.getValue()));\n }\n augmentController(gui, li, controller);\n gui.__controllers.push(controller);\n return controller;\n}\nfunction getLocalStorageHash(gui, key) {\n return document.location.href + '.' + key;\n}\nfunction addPresetOption(gui, name, setSelected) {\n var opt = document.createElement('option');\n opt.innerHTML = name;\n opt.value = name;\n gui.__preset_select.appendChild(opt);\n if (setSelected) {\n gui.__preset_select.selectedIndex = gui.__preset_select.length - 1;\n }\n}\nfunction showHideExplain(gui, explain) {\n explain.style.display = gui.useLocalStorage ? 'block' : 'none';\n}\nfunction addSaveMenu(gui) {\n var div = gui.__save_row = document.createElement('li');\n dom.addClass(gui.domElement, 'has-save');\n gui.__ul.insertBefore(div, gui.__ul.firstChild);\n dom.addClass(div, 'save-row');\n var gears = document.createElement('span');\n gears.innerHTML = ' ';\n dom.addClass(gears, 'button gears');\n var button = document.createElement('span');\n button.innerHTML = 'Save';\n dom.addClass(button, 'button');\n dom.addClass(button, 'save');\n var button2 = document.createElement('span');\n button2.innerHTML = 'New';\n dom.addClass(button2, 'button');\n dom.addClass(button2, 'save-as');\n var button3 = document.createElement('span');\n button3.innerHTML = 'Revert';\n dom.addClass(button3, 'button');\n dom.addClass(button3, 'revert');\n var select = gui.__preset_select = document.createElement('select');\n if (gui.load && gui.load.remembered) {\n Common.each(gui.load.remembered, function (value, key) {\n addPresetOption(gui, key, key === gui.preset);\n });\n } else {\n addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false);\n }\n dom.bind(select, 'change', function () {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n gui.__preset_select[index].innerHTML = gui.__preset_select[index].value;\n }\n gui.preset = this.value;\n });\n div.appendChild(select);\n div.appendChild(gears);\n div.appendChild(button);\n div.appendChild(button2);\n div.appendChild(button3);\n if (SUPPORTS_LOCAL_STORAGE) {\n var explain = document.getElementById('dg-local-explain');\n var localStorageCheckBox = document.getElementById('dg-local-storage');\n var saveLocally = document.getElementById('dg-save-locally');\n saveLocally.style.display = 'block';\n if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') {\n localStorageCheckBox.setAttribute('checked', 'checked');\n }\n showHideExplain(gui, explain);\n dom.bind(localStorageCheckBox, 'change', function () {\n gui.useLocalStorage = !gui.useLocalStorage;\n showHideExplain(gui, explain);\n });\n }\n var newConstructorTextArea = document.getElementById('dg-new-constructor');\n dom.bind(newConstructorTextArea, 'keydown', function (e) {\n if (e.metaKey && (e.which === 67 || e.keyCode === 67)) {\n SAVE_DIALOGUE.hide();\n }\n });\n dom.bind(gears, 'click', function () {\n newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2);\n SAVE_DIALOGUE.show();\n newConstructorTextArea.focus();\n newConstructorTextArea.select();\n });\n dom.bind(button, 'click', function () {\n gui.save();\n });\n dom.bind(button2, 'click', function () {\n var presetName = prompt('Enter a new preset name.');\n if (presetName) {\n gui.saveAs(presetName);\n }\n });\n dom.bind(button3, 'click', function () {\n gui.revert();\n });\n}\nfunction addResizeHandle(gui) {\n var pmouseX = void 0;\n gui.__resize_handle = document.createElement('div');\n Common.extend(gui.__resize_handle.style, {\n width: '6px',\n marginLeft: '-3px',\n height: '200px',\n cursor: 'ew-resize',\n position: 'absolute'\n });\n function drag(e) {\n e.preventDefault();\n gui.width += pmouseX - e.clientX;\n gui.onResize();\n pmouseX = e.clientX;\n return false;\n }\n function dragStop() {\n dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.unbind(window, 'mousemove', drag);\n dom.unbind(window, 'mouseup', dragStop);\n }\n function dragStart(e) {\n e.preventDefault();\n pmouseX = e.clientX;\n dom.addClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.bind(window, 'mousemove', drag);\n dom.bind(window, 'mouseup', dragStop);\n return false;\n }\n dom.bind(gui.__resize_handle, 'mousedown', dragStart);\n dom.bind(gui.__closeButton, 'mousedown', dragStart);\n gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild);\n}\nfunction setWidth(gui, w) {\n gui.domElement.style.width = w + 'px';\n if (gui.__save_row && gui.autoPlace) {\n gui.__save_row.style.width = w + 'px';\n }\n if (gui.__closeButton) {\n gui.__closeButton.style.width = w + 'px';\n }\n}\nfunction getCurrentPreset(gui, useInitialValues) {\n var toReturn = {};\n Common.each(gui.__rememberedObjects, function (val, index) {\n var savedValues = {};\n var controllerMap = gui.__rememberedObjectIndecesToControllers[index];\n Common.each(controllerMap, function (controller, property) {\n savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue();\n });\n toReturn[index] = savedValues;\n });\n return toReturn;\n}\nfunction setPresetSelectIndex(gui) {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n if (gui.__preset_select[index].value === gui.preset) {\n gui.__preset_select.selectedIndex = index;\n }\n }\n}\nfunction updateDisplays(controllerArray) {\n if (controllerArray.length !== 0) {\n requestAnimationFrame$1.call(window, function () {\n updateDisplays(controllerArray);\n });\n }\n Common.each(controllerArray, function (c) {\n c.updateDisplay();\n });\n}\n\nvar color = {\n Color: Color,\n math: ColorMath,\n interpret: interpret\n};\nvar controllers = {\n Controller: Controller,\n BooleanController: BooleanController,\n OptionController: OptionController,\n StringController: StringController,\n NumberController: NumberController,\n NumberControllerBox: NumberControllerBox,\n NumberControllerSlider: NumberControllerSlider,\n FunctionController: FunctionController,\n ColorController: ColorController\n};\nvar dom$1 = { dom: dom };\nvar gui = { GUI: GUI };\nvar GUI$1 = GUI;\nvar index = {\n color: color,\n controllers: controllers,\n dom: dom$1,\n gui: gui,\n GUI: GUI$1\n};\n\nexport { color, controllers, dom$1 as dom, gui, GUI$1 as GUI };\nexport default index;\n//# sourceMappingURL=dat.gui.module.js.map\n","import { mat4, vec3 } from 'wgpu-matrix';\nimport { GUI } from 'dat.gui';\n\nimport particleWGSL from './particle.wgsl';\nimport probabilityMapWGSL from './probabilityMap.wgsl';\n\nconst numParticles = 50000;\nconst particlePositionOffset = 0;\nconst particleColorOffset = 4 * 4;\nconst particleInstanceByteSize =\n 3 * 4 + // position\n 1 * 4 + // lifetime\n 4 * 4 + // color\n 3 * 4 + // velocity\n 1 * 4 + // padding\n 0;\n\nconst canvas = document.querySelector('canvas') as HTMLCanvasElement;\nconst adapter = await navigator.gpu.requestAdapter();\nconst device = await adapter.requestDevice();\n\nconst context = canvas.getContext('webgpu') as GPUCanvasContext;\n\nconst devicePixelRatio = window.devicePixelRatio;\ncanvas.width = canvas.clientWidth * devicePixelRatio;\ncanvas.height = canvas.clientHeight * devicePixelRatio;\nconst presentationFormat = navigator.gpu.getPreferredCanvasFormat();\n\ncontext.configure({\n device,\n format: presentationFormat,\n alphaMode: 'premultiplied',\n});\n\nconst particlesBuffer = device.createBuffer({\n size: numParticles * particleInstanceByteSize,\n usage: GPUBufferUsage.VERTEX | GPUBufferUsage.STORAGE,\n});\n\nconst renderPipeline = device.createRenderPipeline({\n layout: 'auto',\n vertex: {\n module: device.createShaderModule({\n code: particleWGSL,\n }),\n buffers: [\n {\n // instanced particles buffer\n arrayStride: particleInstanceByteSize,\n stepMode: 'instance',\n attributes: [\n {\n // position\n shaderLocation: 0,\n offset: particlePositionOffset,\n format: 'float32x3',\n },\n {\n // color\n shaderLocation: 1,\n offset: particleColorOffset,\n format: 'float32x4',\n },\n ],\n },\n {\n // quad vertex buffer\n arrayStride: 2 * 4, // vec2f\n stepMode: 'vertex',\n attributes: [\n {\n // vertex positions\n shaderLocation: 2,\n offset: 0,\n format: 'float32x2',\n },\n ],\n },\n ],\n },\n fragment: {\n module: device.createShaderModule({\n code: particleWGSL,\n }),\n targets: [\n {\n format: presentationFormat,\n blend: {\n color: {\n srcFactor: 'src-alpha',\n dstFactor: 'one',\n operation: 'add',\n },\n alpha: {\n srcFactor: 'zero',\n dstFactor: 'one',\n operation: 'add',\n },\n },\n },\n ],\n },\n primitive: {\n topology: 'triangle-list',\n },\n\n depthStencil: {\n depthWriteEnabled: false,\n depthCompare: 'less',\n format: 'depth24plus',\n },\n});\n\nconst depthTexture = device.createTexture({\n size: [canvas.width, canvas.height],\n format: 'depth24plus',\n usage: GPUTextureUsage.RENDER_ATTACHMENT,\n});\n\nconst uniformBufferSize =\n 4 * 4 * 4 + // modelViewProjectionMatrix : mat4x4f\n 3 * 4 + // right : vec3f\n 4 + // padding\n 3 * 4 + // up : vec3f\n 4 + // padding\n 0;\nconst uniformBuffer = device.createBuffer({\n size: uniformBufferSize,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n});\n\nconst uniformBindGroup = device.createBindGroup({\n layout: renderPipeline.getBindGroupLayout(0),\n entries: [\n {\n binding: 0,\n resource: {\n buffer: uniformBuffer,\n },\n },\n ],\n});\n\nconst renderPassDescriptor: GPURenderPassDescriptor = {\n colorAttachments: [\n {\n view: undefined, // Assigned later\n clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 1.0 },\n loadOp: 'clear',\n storeOp: 'store',\n },\n ],\n depthStencilAttachment: {\n view: depthTexture.createView(),\n\n depthClearValue: 1.0,\n depthLoadOp: 'clear',\n depthStoreOp: 'store',\n },\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// Quad vertex buffer\n//////////////////////////////////////////////////////////////////////////////\nconst quadVertexBuffer = device.createBuffer({\n size: 6 * 2 * 4, // 6x vec2f\n usage: GPUBufferUsage.VERTEX,\n mappedAtCreation: true,\n});\n// prettier-ignore\nconst vertexData = [\n -1.0, -1.0, +1.0, -1.0, -1.0, +1.0, -1.0, +1.0, +1.0, -1.0, +1.0, +1.0,\n];\nnew Float32Array(quadVertexBuffer.getMappedRange()).set(vertexData);\nquadVertexBuffer.unmap();\n\n//////////////////////////////////////////////////////////////////////////////\n// Texture\n//////////////////////////////////////////////////////////////////////////////\nlet texture: GPUTexture;\nlet textureWidth = 1;\nlet textureHeight = 1;\nlet numMipLevels = 1;\n{\n const response = await fetch('../../assets/img/webgpu.png');\n const imageBitmap = await createImageBitmap(await response.blob());\n\n // Calculate number of mip levels required to generate the probability map\n while (\n textureWidth < imageBitmap.width ||\n textureHeight < imageBitmap.height\n ) {\n textureWidth *= 2;\n textureHeight *= 2;\n numMipLevels++;\n }\n texture = device.createTexture({\n size: [imageBitmap.width, imageBitmap.height, 1],\n mipLevelCount: numMipLevels,\n format: 'rgba8unorm',\n usage:\n GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.STORAGE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.RENDER_ATTACHMENT,\n });\n device.queue.copyExternalImageToTexture(\n { source: imageBitmap },\n { texture: texture },\n [imageBitmap.width, imageBitmap.height]\n );\n}\n\n//////////////////////////////////////////////////////////////////////////////\n// Probability map generation\n// The 0'th mip level of texture holds the color data and spawn-probability in\n// the alpha channel. The mip levels 1..N are generated to hold spawn\n// probabilities up to the top 1x1 mip level.\n//////////////////////////////////////////////////////////////////////////////\n{\n const probabilityMapImportLevelPipeline = device.createComputePipeline({\n layout: 'auto',\n compute: {\n module: device.createShaderModule({ code: probabilityMapWGSL }),\n entryPoint: 'import_level',\n },\n });\n const probabilityMapExportLevelPipeline = device.createComputePipeline({\n layout: 'auto',\n compute: {\n module: device.createShaderModule({ code: probabilityMapWGSL }),\n entryPoint: 'export_level',\n },\n });\n\n const probabilityMapUBOBufferSize =\n 1 * 4 + // stride\n 3 * 4 + // padding\n 0;\n const probabilityMapUBOBuffer = device.createBuffer({\n size: probabilityMapUBOBufferSize,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n const buffer_a = device.createBuffer({\n size: textureWidth * textureHeight * 4,\n usage: GPUBufferUsage.STORAGE,\n });\n const buffer_b = device.createBuffer({\n size: textureWidth * textureHeight * 4,\n usage: GPUBufferUsage.STORAGE,\n });\n device.queue.writeBuffer(\n probabilityMapUBOBuffer,\n 0,\n new Int32Array([textureWidth])\n );\n const commandEncoder = device.createCommandEncoder();\n for (let level = 0; level < numMipLevels; level++) {\n const levelWidth = textureWidth >> level;\n const levelHeight = textureHeight >> level;\n const pipeline =\n level == 0\n ? probabilityMapImportLevelPipeline.getBindGroupLayout(0)\n : probabilityMapExportLevelPipeline.getBindGroupLayout(0);\n const probabilityMapBindGroup = device.createBindGroup({\n layout: pipeline,\n entries: [\n {\n // ubo\n binding: 0,\n resource: { buffer: probabilityMapUBOBuffer },\n },\n {\n // buf_in\n binding: 1,\n resource: { buffer: level & 1 ? buffer_a : buffer_b },\n },\n {\n // buf_out\n binding: 2,\n resource: { buffer: level & 1 ? buffer_b : buffer_a },\n },\n {\n // tex_in / tex_out\n binding: 3,\n resource: texture.createView({\n format: 'rgba8unorm',\n dimension: '2d',\n baseMipLevel: level,\n mipLevelCount: 1,\n }),\n },\n ],\n });\n if (level == 0) {\n const passEncoder = commandEncoder.beginComputePass();\n passEncoder.setPipeline(probabilityMapImportLevelPipeline);\n passEncoder.setBindGroup(0, probabilityMapBindGroup);\n passEncoder.dispatchWorkgroups(Math.ceil(levelWidth / 64), levelHeight);\n passEncoder.end();\n } else {\n const passEncoder = commandEncoder.beginComputePass();\n passEncoder.setPipeline(probabilityMapExportLevelPipeline);\n passEncoder.setBindGroup(0, probabilityMapBindGroup);\n passEncoder.dispatchWorkgroups(Math.ceil(levelWidth / 64), levelHeight);\n passEncoder.end();\n }\n }\n device.queue.submit([commandEncoder.finish()]);\n}\n\n//////////////////////////////////////////////////////////////////////////////\n// Simulation compute pipeline\n//////////////////////////////////////////////////////////////////////////////\nconst simulationParams = {\n simulate: true,\n deltaTime: 0.04,\n};\n\nconst simulationUBOBufferSize =\n 1 * 4 + // deltaTime\n 3 * 4 + // padding\n 4 * 4 + // seed\n 0;\nconst simulationUBOBuffer = device.createBuffer({\n size: simulationUBOBufferSize,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n});\n\nconst gui = new GUI();\ngui.add(simulationParams, 'simulate');\ngui.add(simulationParams, 'deltaTime');\n\nconst computePipeline = device.createComputePipeline({\n layout: 'auto',\n compute: {\n module: device.createShaderModule({\n code: particleWGSL,\n }),\n entryPoint: 'simulate',\n },\n});\nconst computeBindGroup = device.createBindGroup({\n layout: computePipeline.getBindGroupLayout(0),\n entries: [\n {\n binding: 0,\n resource: {\n buffer: simulationUBOBuffer,\n },\n },\n {\n binding: 1,\n resource: {\n buffer: particlesBuffer,\n offset: 0,\n size: numParticles * particleInstanceByteSize,\n },\n },\n {\n binding: 2,\n resource: texture.createView(),\n },\n ],\n});\n\nconst aspect = canvas.width / canvas.height;\nconst projection = mat4.perspective((2 * Math.PI) / 5, aspect, 1, 100.0);\nconst view = mat4.create();\nconst mvp = mat4.create();\n\nfunction frame() {\n device.queue.writeBuffer(\n simulationUBOBuffer,\n 0,\n new Float32Array([\n simulationParams.simulate ? simulationParams.deltaTime : 0.0,\n 0.0,\n 0.0,\n 0.0, // padding\n Math.random() * 100,\n Math.random() * 100, // seed.xy\n 1 + Math.random(),\n 1 + Math.random(), // seed.zw\n ])\n );\n\n mat4.identity(view);\n mat4.translate(view, vec3.fromValues(0, 0, -3), view);\n mat4.rotateX(view, Math.PI * -0.2, view);\n mat4.multiply(projection, view, mvp);\n\n // prettier-ignore\n device.queue.writeBuffer(\n uniformBuffer,\n 0,\n new Float32Array([\n // modelViewProjectionMatrix\n mvp[0], mvp[1], mvp[2], mvp[3],\n mvp[4], mvp[5], mvp[6], mvp[7],\n mvp[8], mvp[9], mvp[10], mvp[11],\n mvp[12], mvp[13], mvp[14], mvp[15],\n\n view[0], view[4], view[8], // right\n\n 0, // padding\n\n view[1], view[5], view[9], // up\n\n 0, // padding\n ])\n );\n const swapChainTexture = context.getCurrentTexture();\n // prettier-ignore\n renderPassDescriptor.colorAttachments[0].view = swapChainTexture.createView();\n\n const commandEncoder = device.createCommandEncoder();\n {\n const passEncoder = commandEncoder.beginComputePass();\n passEncoder.setPipeline(computePipeline);\n passEncoder.setBindGroup(0, computeBindGroup);\n passEncoder.dispatchWorkgroups(Math.ceil(numParticles / 64));\n passEncoder.end();\n }\n {\n const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);\n passEncoder.setPipeline(renderPipeline);\n passEncoder.setBindGroup(0, uniformBindGroup);\n passEncoder.setVertexBuffer(0, particlesBuffer);\n passEncoder.setVertexBuffer(1, quadVertexBuffer);\n passEncoder.draw(6, numParticles, 0, 0);\n passEncoder.end();\n }\n\n device.queue.submit([commandEncoder.finish()]);\n\n requestAnimationFrame(frame);\n}\nrequestAnimationFrame(frame);\n"],"names":["requestAnimationFrame","requestAnimationFrame$1","GUI","mat4","vec3"],"mappings":"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O;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACvC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO;AACzC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC;AAC1C,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE;AACxB,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACxB,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrB,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrB,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrB,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrB,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrB,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrB,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrB,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrB,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrB,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACvB,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACvB,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACvB,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACvB,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACvB,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,GAAG,EAAE;AACzB,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AACjC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,OAAO,GAAG,CAAC;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE;AAC3B,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AACjC,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE;AACnB,QAAQ,IAAI,CAAC,CAAC;AACd,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACjB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACjB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACrB,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAClB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACjB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACrB,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAClB,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAClB,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAClB,QAAQ,OAAO,GAAG,CAAC;AACnB,KAAK;AACL,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACjB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAClB,IAAI,OAAO,GAAG,CAAC;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE;AAC3B,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AACjC,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,C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C,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI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AAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5D,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5D,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5D,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5D,IAAI,GAAG,CAAC,EAAE,CAAC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GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,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","x_google_ignoreList":[0,1]} \ No newline at end of file diff --git a/sample/particles/main.ts b/sample/particles/main.ts index 66e3da7f..c4353b2a 100644 --- a/sample/particles/main.ts +++ b/sample/particles/main.ts @@ -65,7 +65,7 @@ const renderPipeline = device.createRenderPipeline({ }, { // quad vertex buffer - arrayStride: 2 * 4, // vec2 + arrayStride: 2 * 4, // vec2f stepMode: 'vertex', attributes: [ { @@ -118,10 +118,10 @@ const depthTexture = device.createTexture({ }); const uniformBufferSize = - 4 * 4 * 4 + // modelViewProjectionMatrix : mat4x4 - 3 * 4 + // right : vec3 + 4 * 4 * 4 + // modelViewProjectionMatrix : mat4x4f + 3 * 4 + // right : vec3f 4 + // padding - 3 * 4 + // up : vec3 + 3 * 4 + // up : vec3f 4 + // padding 0; const uniformBuffer = device.createBuffer({ @@ -163,7 +163,7 @@ const renderPassDescriptor: GPURenderPassDescriptor = { // Quad vertex buffer ////////////////////////////////////////////////////////////////////////////// const quadVertexBuffer = device.createBuffer({ - size: 6 * 2 * 4, // 6x vec2 + size: 6 * 2 * 4, // 6x vec2f usage: GPUBufferUsage.VERTEX, mappedAtCreation: true, }); diff --git a/sample/particles/particle.wgsl b/sample/particles/particle.wgsl index 40987a4d..15c3f604 100644 --- a/sample/particles/particle.wgsl +++ b/sample/particles/particle.wgsl @@ -1,17 +1,17 @@ //////////////////////////////////////////////////////////////////////////////// // Utilities //////////////////////////////////////////////////////////////////////////////// -var rand_seed : vec2; +var rand_seed : vec2f; -fn init_rand(invocation_id : u32, seed : vec4) { +fn init_rand(invocation_id : u32, seed : vec4f) { rand_seed = seed.xz; rand_seed = fract(rand_seed * cos(35.456+f32(invocation_id) * seed.yw)); rand_seed = fract(rand_seed * cos(41.235+f32(invocation_id) * seed.xw)); } fn rand() -> f32 { - rand_seed.x = fract(cos(dot(rand_seed, vec2(23.14077926, 232.61690225))) * 136.8168); - rand_seed.y = fract(cos(dot(rand_seed, vec2(54.47856553, 345.84153136))) * 534.7645); + rand_seed.x = fract(cos(dot(rand_seed, vec2f(23.14077926, 232.61690225))) * 136.8168); + rand_seed.y = fract(cos(dot(rand_seed, vec2f(54.47856553, 345.84153136))) * 534.7645); return rand_seed.y; } @@ -19,30 +19,30 @@ fn rand() -> f32 { // Vertex shader //////////////////////////////////////////////////////////////////////////////// struct RenderParams { - modelViewProjectionMatrix : mat4x4, - right : vec3, - up : vec3 + modelViewProjectionMatrix : mat4x4f, + right : vec3f, + up : vec3f } @binding(0) @group(0) var render_params : RenderParams; struct VertexInput { - @location(0) position : vec3, - @location(1) color : vec4, - @location(2) quad_pos : vec2, // -1..+1 + @location(0) position : vec3f, + @location(1) color : vec4f, + @location(2) quad_pos : vec2f, // -1..+1 } struct VertexOutput { - @builtin(position) position : vec4, - @location(0) color : vec4, - @location(1) quad_pos : vec2, // -1..+1 + @builtin(position) position : vec4f, + @location(0) color : vec4f, + @location(1) quad_pos : vec2f, // -1..+1 } @vertex fn vs_main(in : VertexInput) -> VertexOutput { - var quad_pos = mat2x3(render_params.right, render_params.up) * in.quad_pos; + var quad_pos = mat2x3f(render_params.right, render_params.up) * in.quad_pos; var position = in.position + quad_pos * 0.01; var out : VertexOutput; - out.position = render_params.modelViewProjectionMatrix * vec4(position, 1.0); + out.position = render_params.modelViewProjectionMatrix * vec4f(position, 1.0); out.color = in.color; out.quad_pos = in.quad_pos; return out; @@ -52,7 +52,7 @@ fn vs_main(in : VertexInput) -> VertexOutput { // Fragment shader //////////////////////////////////////////////////////////////////////////////// @fragment -fn fs_main(in : VertexOutput) -> @location(0) vec4 { +fn fs_main(in : VertexOutput) -> @location(0) vec4f { var color = in.color; // Apply a circular particle alpha mask color.a = color.a * max(1.0 - length(in.quad_pos), 0.0); @@ -64,14 +64,14 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4 { //////////////////////////////////////////////////////////////////////////////// struct SimulationParams { deltaTime : f32, - seed : vec4, + seed : vec4f, } struct Particle { - position : vec3, + position : vec3f, lifetime : f32, - color : vec4, - velocity : vec3, + color : vec4f, + velocity : vec3f, } struct Particles { @@ -83,7 +83,7 @@ struct Particles { @binding(2) @group(0) var texture : texture_2d; @compute @workgroup_size(64) -fn simulate(@builtin(global_invocation_id) global_invocation_id : vec3) { +fn simulate(@builtin(global_invocation_id) global_invocation_id : vec3u) { let idx = global_invocation_id.x; init_rand(idx, sim_params.seed); @@ -105,7 +105,7 @@ fn simulate(@builtin(global_invocation_id) global_invocation_id : vec3) { if (particle.lifetime < 0.0) { // Use the probability map to find where the particle should be spawned. // Starting with the 1x1 mip level. - var coord : vec2; + var coord : vec2i; for (var level = u32(textureNumLevels(texture) - 1); level > 0; level--) { // Load the probability value from the mip-level // Generate a random number and using the probabilty values, pick the @@ -116,14 +116,14 @@ fn simulate(@builtin(global_invocation_id) global_invocation_id : vec3) { // | TOP-LEFT | TOP-RIGHT | BOTTOM-LEFT | BOTTOM_RIGHT | // let probabilites = textureLoad(texture, coord, level); - let value = vec4(rand()); - let mask = (value >= vec4(0.0, probabilites.xyz)) & (value < probabilites); + let value = vec4f(rand()); + let mask = (value >= vec4f(0.0, probabilites.xyz)) & (value < probabilites); coord = coord * 2; coord.x = coord.x + select(0, 1, any(mask.yw)); // x y coord.y = coord.y + select(0, 1, any(mask.zw)); // z w } - let uv = vec2(coord) / vec2(textureDimensions(texture)); - particle.position = vec3((uv - 0.5) * 3.0 * vec2(1.0, -1.0), 0.0); + let uv = vec2f(coord) / vec2f(textureDimensions(texture)); + particle.position = vec3f((uv - 0.5) * 3.0 * vec2f(1.0, -1.0), 0.0); particle.color = textureLoad(texture, coord, 0); particle.velocity.x = (rand() - 0.5) * 0.1; particle.velocity.y = (rand() - 0.5) * 0.1; diff --git a/sample/particles/probabilityMap.wgsl b/sample/particles/probabilityMap.wgsl index aa51c0e8..62d8b7d5 100644 --- a/sample/particles/probabilityMap.wgsl +++ b/sample/particles/probabilityMap.wgsl @@ -20,10 +20,10 @@ struct Buffer { // the buf_out.weights. //////////////////////////////////////////////////////////////////////////////// @compute @workgroup_size(64) -fn import_level(@builtin(global_invocation_id) coord : vec3) { +fn import_level(@builtin(global_invocation_id) coord : vec3u) { _ = &buf_in; let offset = coord.x + coord.y * ubo.width; - buf_out.weights[offset] = textureLoad(tex_in, vec2(coord.xy), 0).w; + buf_out.weights[offset] = textureLoad(tex_in, vec2i(coord.xy), 0).w; } //////////////////////////////////////////////////////////////////////////////// @@ -35,8 +35,8 @@ fn import_level(@builtin(global_invocation_id) coord : vec3) { // probability logic. //////////////////////////////////////////////////////////////////////////////// @compute @workgroup_size(64) -fn export_level(@builtin(global_invocation_id) coord : vec3) { - if (all(coord.xy < vec2(textureDimensions(tex_out)))) { +fn export_level(@builtin(global_invocation_id) coord : vec3u) { + if (all(coord.xy < vec2u(textureDimensions(tex_out)))) { let dst_offset = coord.x + coord.y * ubo.width; let src_offset = coord.x*2u + coord.y*2u * ubo.width; @@ -44,11 +44,11 @@ fn export_level(@builtin(global_invocation_id) coord : vec3) { let b = buf_in.weights[src_offset + 1u]; let c = buf_in.weights[src_offset + 0u + ubo.width]; let d = buf_in.weights[src_offset + 1u + ubo.width]; - let sum = dot(vec4(a, b, c, d), vec4(1.0)); + let sum = dot(vec4f(a, b, c, d), vec4f(1.0)); buf_out.weights[dst_offset] = sum / 4.0; - let probabilities = vec4(a, a+b, a+b+c, sum) / max(sum, 0.0001); - textureStore(tex_out, vec2(coord.xy), probabilities); + let probabilities = vec4f(a, a+b, a+b+c, sum) / max(sum, 0.0001); + textureStore(tex_out, vec2i(coord.xy), probabilities); } } diff --git a/sample/resizeCanvas/main.js b/sample/resizeCanvas/main.js index b428a2a0..2f14651d 100644 --- a/sample/resizeCanvas/main.js +++ b/sample/resizeCanvas/main.js @@ -1,19 +1,19 @@ var triangleVertWGSL = `@vertex fn main( @builtin(vertex_index) VertexIndex : u32 -) -> @builtin(position) vec4 { - var pos = array, 3>( +) -> @builtin(position) vec4f { + var pos = array( vec2(0.0, 0.5), vec2(-0.5, -0.5), vec2(0.5, -0.5) ); - return vec4(pos[VertexIndex], 0.0, 1.0); + return vec4f(pos[VertexIndex], 0.0, 1.0); } `; var redFragWGSL = `@fragment -fn main() -> @location(0) vec4 { +fn main() -> @location(0) vec4f { return vec4(1.0, 0.0, 0.0, 1.0); }`; diff --git a/sample/reversedZ/fragment.wgsl b/sample/reversedZ/fragment.wgsl index daf3803f..2746f0c2 100644 --- a/sample/reversedZ/fragment.wgsl +++ b/sample/reversedZ/fragment.wgsl @@ -1,6 +1,6 @@ @fragment fn main( - @location(0) fragColor: vec4 -) -> @location(0) vec4 { + @location(0) fragColor: vec4f +) -> @location(0) vec4f { return fragColor; } diff --git a/sample/reversedZ/fragmentPrecisionErrorPass.wgsl b/sample/reversedZ/fragmentPrecisionErrorPass.wgsl index 98a039f1..158130da 100644 --- a/sample/reversedZ/fragmentPrecisionErrorPass.wgsl +++ b/sample/reversedZ/fragmentPrecisionErrorPass.wgsl @@ -2,10 +2,10 @@ @fragment fn main( - @builtin(position) coord: vec4, - @location(0) clipPos: vec4 -) -> @location(0) vec4 { - let depthValue = textureLoad(depthTexture, vec2(floor(coord.xy)), 0); + @builtin(position) coord: vec4f, + @location(0) clipPos: vec4f +) -> @location(0) vec4f { + let depthValue = textureLoad(depthTexture, vec2i(floor(coord.xy)), 0); let v : f32 = abs(clipPos.z / clipPos.w - depthValue) * 2000000.0; - return vec4(v, v, v, 1.0); + return vec4f(v, v, v, 1.0); } diff --git a/sample/reversedZ/fragmentTextureQuad.wgsl b/sample/reversedZ/fragmentTextureQuad.wgsl index e3eb20bd..37f5f4dc 100644 --- a/sample/reversedZ/fragmentTextureQuad.wgsl +++ b/sample/reversedZ/fragmentTextureQuad.wgsl @@ -2,8 +2,8 @@ @fragment fn main( - @builtin(position) coord : vec4 -) -> @location(0) vec4 { - let depthValue = textureLoad(depthTexture, vec2(floor(coord.xy)), 0); - return vec4(depthValue, depthValue, depthValue, 1.0); + @builtin(position) coord : vec4f +) -> @location(0) vec4f { + let depthValue = textureLoad(depthTexture, vec2i(floor(coord.xy)), 0); + return vec4f(depthValue, depthValue, depthValue, 1.0); } diff --git a/sample/reversedZ/main.js b/sample/reversedZ/main.js index 1b055883..16971046 100644 --- a/sample/reversedZ/main.js +++ b/sample/reversedZ/main.js @@ -4898,25 +4898,25 @@ function updateDisplays(controllerArray) { var GUI$1 = GUI; var vertexWGSL = `struct Uniforms { - modelMatrix : array, 5>, + modelMatrix : array, } struct Camera { - viewProjectionMatrix : mat4x4, + viewProjectionMatrix : mat4x4f, } @binding(0) @group(0) var uniforms : Uniforms; @binding(1) @group(0) var camera : Camera; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) fragColor : vec4, + @builtin(position) Position : vec4f, + @location(0) fragColor : vec4f, } @vertex fn main( @builtin(instance_index) instanceIdx : u32, - @location(0) position : vec4, - @location(1) color : vec4 + @location(0) position : vec4f, + @location(1) color : vec4f ) -> VertexOutput { var output : VertexOutput; output.Position = camera.viewProjectionMatrix * uniforms.modelMatrix[instanceIdx] * position; @@ -4926,17 +4926,17 @@ fn main( var fragmentWGSL = `@fragment fn main( - @location(0) fragColor: vec4 -) -> @location(0) vec4 { + @location(0) fragColor: vec4f +) -> @location(0) vec4f { return fragColor; } `; var vertexDepthPrePassWGSL = `struct Uniforms { - modelMatrix : array, 5>, + modelMatrix : array, } struct Camera { - viewProjectionMatrix : mat4x4, + viewProjectionMatrix : mat4x4f, } @binding(0) @group(0) var uniforms : Uniforms; @@ -4945,8 +4945,8 @@ struct Camera { @vertex fn main( @builtin(instance_index) instanceIdx : u32, - @location(0) position : vec4 -) -> @builtin(position) vec4 { + @location(0) position : vec4f +) -> @builtin(position) vec4f { return camera.viewProjectionMatrix * uniforms.modelMatrix[instanceIdx] * position; } `; @@ -4954,7 +4954,7 @@ fn main( var vertexTextureQuadWGSL = `@vertex fn main( @builtin(vertex_index) VertexIndex : u32 -) -> @builtin(position) vec4 { +) -> @builtin(position) vec4f { const pos = array( vec2(-1.0, -1.0), vec2(1.0, -1.0), vec2(-1.0, 1.0), vec2(-1.0, 1.0), vec2(1.0, -1.0), vec2(1.0, 1.0), @@ -4968,32 +4968,32 @@ var fragmentTextureQuadWGSL = `@group(0) @binding(0) var depthTexture: texture_d @fragment fn main( - @builtin(position) coord : vec4 -) -> @location(0) vec4 { - let depthValue = textureLoad(depthTexture, vec2(floor(coord.xy)), 0); - return vec4(depthValue, depthValue, depthValue, 1.0); + @builtin(position) coord : vec4f +) -> @location(0) vec4f { + let depthValue = textureLoad(depthTexture, vec2i(floor(coord.xy)), 0); + return vec4f(depthValue, depthValue, depthValue, 1.0); } `; var vertexPrecisionErrorPassWGSL = `struct Uniforms { - modelMatrix : array, 5>, + modelMatrix : array, } struct Camera { - viewProjectionMatrix : mat4x4, + viewProjectionMatrix : mat4x4f, } @binding(0) @group(0) var uniforms : Uniforms; @binding(1) @group(0) var camera : Camera; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) clipPos : vec4, + @builtin(position) Position : vec4f, + @location(0) clipPos : vec4f, } @vertex fn main( @builtin(instance_index) instanceIdx : u32, - @location(0) position : vec4 + @location(0) position : vec4f ) -> VertexOutput { var output : VertexOutput; output.Position = camera.viewProjectionMatrix * uniforms.modelMatrix[instanceIdx] * position; @@ -5006,12 +5006,12 @@ var fragmentPrecisionErrorPassWGSL = `@group(1) @binding(0) var depthTexture: te @fragment fn main( - @builtin(position) coord: vec4, - @location(0) clipPos: vec4 -) -> @location(0) vec4 { - let depthValue = textureLoad(depthTexture, vec2(floor(coord.xy)), 0); + @builtin(position) coord: vec4f, + @location(0) clipPos: vec4f +) -> @location(0) vec4f { + let depthValue = textureLoad(depthTexture, vec2i(floor(coord.xy)), 0); let v : f32 = abs(clipPos.z / clipPos.w - depthValue) * 2000000.0; - return vec4(v, v, v, 1.0); + return vec4f(v, v, v, 1.0); } `; diff --git a/sample/reversedZ/vertex.wgsl b/sample/reversedZ/vertex.wgsl index aac8afc4..9613a5a5 100644 --- a/sample/reversedZ/vertex.wgsl +++ b/sample/reversedZ/vertex.wgsl @@ -1,23 +1,23 @@ struct Uniforms { - modelMatrix : array, 5>, + modelMatrix : array, } struct Camera { - viewProjectionMatrix : mat4x4, + viewProjectionMatrix : mat4x4f, } @binding(0) @group(0) var uniforms : Uniforms; @binding(1) @group(0) var camera : Camera; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) fragColor : vec4, + @builtin(position) Position : vec4f, + @location(0) fragColor : vec4f, } @vertex fn main( @builtin(instance_index) instanceIdx : u32, - @location(0) position : vec4, - @location(1) color : vec4 + @location(0) position : vec4f, + @location(1) color : vec4f ) -> VertexOutput { var output : VertexOutput; output.Position = camera.viewProjectionMatrix * uniforms.modelMatrix[instanceIdx] * position; diff --git a/sample/reversedZ/vertexDepthPrePass.wgsl b/sample/reversedZ/vertexDepthPrePass.wgsl index 3ee7913b..dc40cbc2 100644 --- a/sample/reversedZ/vertexDepthPrePass.wgsl +++ b/sample/reversedZ/vertexDepthPrePass.wgsl @@ -1,8 +1,8 @@ struct Uniforms { - modelMatrix : array, 5>, + modelMatrix : array, } struct Camera { - viewProjectionMatrix : mat4x4, + viewProjectionMatrix : mat4x4f, } @binding(0) @group(0) var uniforms : Uniforms; @@ -11,7 +11,7 @@ struct Camera { @vertex fn main( @builtin(instance_index) instanceIdx : u32, - @location(0) position : vec4 -) -> @builtin(position) vec4 { + @location(0) position : vec4f +) -> @builtin(position) vec4f { return camera.viewProjectionMatrix * uniforms.modelMatrix[instanceIdx] * position; } diff --git a/sample/reversedZ/vertexPrecisionErrorPass.wgsl b/sample/reversedZ/vertexPrecisionErrorPass.wgsl index 30921b2d..19cad8bd 100644 --- a/sample/reversedZ/vertexPrecisionErrorPass.wgsl +++ b/sample/reversedZ/vertexPrecisionErrorPass.wgsl @@ -1,22 +1,22 @@ struct Uniforms { - modelMatrix : array, 5>, + modelMatrix : array, } struct Camera { - viewProjectionMatrix : mat4x4, + viewProjectionMatrix : mat4x4f, } @binding(0) @group(0) var uniforms : Uniforms; @binding(1) @group(0) var camera : Camera; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) clipPos : vec4, + @builtin(position) Position : vec4f, + @location(0) clipPos : vec4f, } @vertex fn main( @builtin(instance_index) instanceIdx : u32, - @location(0) position : vec4 + @location(0) position : vec4f ) -> VertexOutput { var output : VertexOutput; output.Position = camera.viewProjectionMatrix * uniforms.modelMatrix[instanceIdx] * position; diff --git a/sample/reversedZ/vertexTextureQuad.wgsl b/sample/reversedZ/vertexTextureQuad.wgsl index 8e601ef9..a8f03007 100644 --- a/sample/reversedZ/vertexTextureQuad.wgsl +++ b/sample/reversedZ/vertexTextureQuad.wgsl @@ -1,7 +1,7 @@ @vertex fn main( @builtin(vertex_index) VertexIndex : u32 -) -> @builtin(position) vec4 { +) -> @builtin(position) vec4f { const pos = array( vec2(-1.0, -1.0), vec2(1.0, -1.0), vec2(-1.0, 1.0), vec2(-1.0, 1.0), vec2(1.0, -1.0), vec2(1.0, 1.0), diff --git a/sample/rotatingCube/main.js b/sample/rotatingCube/main.js index c1df072a..aefefa04 100644 --- a/sample/rotatingCube/main.js +++ b/sample/rotatingCube/main.js @@ -2448,20 +2448,20 @@ const cubeVertexArray = new Float32Array([ ]); var basicVertWGSL = `struct Uniforms { - modelViewProjectionMatrix : mat4x4, + modelViewProjectionMatrix : mat4x4f, } @binding(0) @group(0) var uniforms : Uniforms; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) fragUV : vec2, - @location(1) fragPosition: vec4, + @builtin(position) Position : vec4f, + @location(0) fragUV : vec2f, + @location(1) fragPosition: vec4f, } @vertex fn main( - @location(0) position : vec4, - @location(1) uv : vec2 + @location(0) position : vec4f, + @location(1) uv : vec2f ) -> VertexOutput { var output : VertexOutput; output.Position = uniforms.modelViewProjectionMatrix * position; @@ -2473,9 +2473,9 @@ fn main( var vertexPositionColorWGSL = `@fragment fn main( - @location(0) fragUV: vec2, - @location(1) fragPosition: vec4 -) -> @location(0) vec4 { + @location(0) fragUV: vec2f, + @location(1) fragPosition: vec4f +) -> @location(0) vec4f { return fragPosition; } `; diff --git a/sample/shadowMapping/fragment.wgsl b/sample/shadowMapping/fragment.wgsl index 6a45e347..11e46a0d 100644 --- a/sample/shadowMapping/fragment.wgsl +++ b/sample/shadowMapping/fragment.wgsl @@ -1,9 +1,9 @@ override shadowDepthTextureSize: f32 = 1024.0; struct Scene { - lightViewProjMatrix : mat4x4, - cameraViewProjMatrix : mat4x4, - lightPos : vec3, + lightViewProjMatrix : mat4x4f, + cameraViewProjMatrix : mat4x4f, + lightPos : vec3f, } @group(0) @binding(0) var scene : Scene; @@ -11,23 +11,23 @@ struct Scene { @group(0) @binding(2) var shadowSampler: sampler_comparison; struct FragmentInput { - @location(0) shadowPos : vec3, - @location(1) fragPos : vec3, - @location(2) fragNorm : vec3, + @location(0) shadowPos : vec3f, + @location(1) fragPos : vec3f, + @location(2) fragNorm : vec3f, } -const albedo = vec3(0.9); +const albedo = vec3f(0.9); const ambientFactor = 0.2; @fragment -fn main(input : FragmentInput) -> @location(0) vec4 { +fn main(input : FragmentInput) -> @location(0) vec4f { // Percentage-closer filtering. Sample texels in the region // to smooth the result. var visibility = 0.0; let oneOverShadowDepthTextureSize = 1.0 / shadowDepthTextureSize; for (var y = -1; y <= 1; y++) { for (var x = -1; x <= 1; x++) { - let offset = vec2(vec2(x, y)) * oneOverShadowDepthTextureSize; + let offset = vec2f(vec2(x, y)) * oneOverShadowDepthTextureSize; visibility += textureSampleCompare( shadowMap, shadowSampler, diff --git a/sample/shadowMapping/main.js b/sample/shadowMapping/main.js index 7e47c55f..3cb077cc 100644 --- a/sample/shadowMapping/main.js +++ b/sample/shadowMapping/main.js @@ -2490,13 +2490,13 @@ mesh.uvs.push([0, 0], // [1, 0]); var vertexShadowWGSL = `struct Scene { - lightViewProjMatrix: mat4x4, - cameraViewProjMatrix: mat4x4, - lightPos: vec3, + lightViewProjMatrix: mat4x4f, + cameraViewProjMatrix: mat4x4f, + lightPos: vec3f, } struct Model { - modelMatrix: mat4x4, + modelMatrix: mat4x4f, } @group(0) @binding(0) var scene : Scene; @@ -2504,37 +2504,37 @@ struct Model { @vertex fn main( - @location(0) position: vec3 -) -> @builtin(position) vec4 { + @location(0) position: vec3f +) -> @builtin(position) vec4f { return scene.lightViewProjMatrix * model.modelMatrix * vec4(position, 1.0); } `; var vertexWGSL = `struct Scene { - lightViewProjMatrix: mat4x4, - cameraViewProjMatrix: mat4x4, - lightPos: vec3, + lightViewProjMatrix: mat4x4f, + cameraViewProjMatrix: mat4x4f, + lightPos: vec3f, } struct Model { - modelMatrix: mat4x4, + modelMatrix: mat4x4f, } @group(0) @binding(0) var scene : Scene; @group(1) @binding(0) var model : Model; struct VertexOutput { - @location(0) shadowPos: vec3, - @location(1) fragPos: vec3, - @location(2) fragNorm: vec3, + @location(0) shadowPos: vec3f, + @location(1) fragPos: vec3f, + @location(2) fragNorm: vec3f, - @builtin(position) Position: vec4, + @builtin(position) Position: vec4f, } @vertex fn main( - @location(0) position: vec3, - @location(1) normal: vec3 + @location(0) position: vec3f, + @location(1) normal: vec3f ) -> VertexOutput { var output : VertexOutput; @@ -2558,9 +2558,9 @@ fn main( var fragmentWGSL = `override shadowDepthTextureSize: f32 = 1024.0; struct Scene { - lightViewProjMatrix : mat4x4, - cameraViewProjMatrix : mat4x4, - lightPos : vec3, + lightViewProjMatrix : mat4x4f, + cameraViewProjMatrix : mat4x4f, + lightPos : vec3f, } @group(0) @binding(0) var scene : Scene; @@ -2568,23 +2568,23 @@ struct Scene { @group(0) @binding(2) var shadowSampler: sampler_comparison; struct FragmentInput { - @location(0) shadowPos : vec3, - @location(1) fragPos : vec3, - @location(2) fragNorm : vec3, + @location(0) shadowPos : vec3f, + @location(1) fragPos : vec3f, + @location(2) fragNorm : vec3f, } -const albedo = vec3(0.9); +const albedo = vec3f(0.9); const ambientFactor = 0.2; @fragment -fn main(input : FragmentInput) -> @location(0) vec4 { +fn main(input : FragmentInput) -> @location(0) vec4f { // Percentage-closer filtering. Sample texels in the region // to smooth the result. var visibility = 0.0; let oneOverShadowDepthTextureSize = 1.0 / shadowDepthTextureSize; for (var y = -1; y <= 1; y++) { for (var x = -1; x <= 1; x++) { - let offset = vec2(vec2(x, y)) * oneOverShadowDepthTextureSize; + let offset = vec2f(vec2(x, y)) * oneOverShadowDepthTextureSize; visibility += textureSampleCompare( shadowMap, shadowSampler, diff --git a/sample/shadowMapping/vertex.wgsl b/sample/shadowMapping/vertex.wgsl index b344d786..797daf89 100644 --- a/sample/shadowMapping/vertex.wgsl +++ b/sample/shadowMapping/vertex.wgsl @@ -1,28 +1,28 @@ struct Scene { - lightViewProjMatrix: mat4x4, - cameraViewProjMatrix: mat4x4, - lightPos: vec3, + lightViewProjMatrix: mat4x4f, + cameraViewProjMatrix: mat4x4f, + lightPos: vec3f, } struct Model { - modelMatrix: mat4x4, + modelMatrix: mat4x4f, } @group(0) @binding(0) var scene : Scene; @group(1) @binding(0) var model : Model; struct VertexOutput { - @location(0) shadowPos: vec3, - @location(1) fragPos: vec3, - @location(2) fragNorm: vec3, + @location(0) shadowPos: vec3f, + @location(1) fragPos: vec3f, + @location(2) fragNorm: vec3f, - @builtin(position) Position: vec4, + @builtin(position) Position: vec4f, } @vertex fn main( - @location(0) position: vec3, - @location(1) normal: vec3 + @location(0) position: vec3f, + @location(1) normal: vec3f ) -> VertexOutput { var output : VertexOutput; diff --git a/sample/shadowMapping/vertexShadow.wgsl b/sample/shadowMapping/vertexShadow.wgsl index 30722dda..97295ec9 100644 --- a/sample/shadowMapping/vertexShadow.wgsl +++ b/sample/shadowMapping/vertexShadow.wgsl @@ -1,11 +1,11 @@ struct Scene { - lightViewProjMatrix: mat4x4, - cameraViewProjMatrix: mat4x4, - lightPos: vec3, + lightViewProjMatrix: mat4x4f, + cameraViewProjMatrix: mat4x4f, + lightPos: vec3f, } struct Model { - modelMatrix: mat4x4, + modelMatrix: mat4x4f, } @group(0) @binding(0) var scene : Scene; @@ -13,7 +13,7 @@ struct Model { @vertex fn main( - @location(0) position: vec3 -) -> @builtin(position) vec4 { + @location(0) position: vec3f +) -> @builtin(position) vec4f { return scene.lightViewProjMatrix * model.modelMatrix * vec4(position, 1.0); } diff --git a/sample/skinnedMesh/glbUtils.ts b/sample/skinnedMesh/glbUtils.ts index 0bd69931..63198a2b 100644 --- a/sample/skinnedMesh/glbUtils.ts +++ b/sample/skinnedMesh/glbUtils.ts @@ -176,37 +176,37 @@ const convertGPUVertexFormatToWGSLFormat = (vertexFormat: GPUVertexFormat) => { return 'f32'; } case 'float32x2': { - return 'vec2'; + return 'vec2f'; } case 'float32x3': { - return 'vec3'; + return 'vec3f'; } case 'float32x4': { - return 'vec4'; + return 'vec4f'; } case 'uint32': { return 'u32'; } case 'uint32x2': { - return 'vec2'; + return 'vec2u'; } case 'uint32x3': { - return 'vec3'; + return 'vec3u'; } case 'uint32x4': { - return 'vec4'; + return 'vec4u'; } case 'uint8x2': { - return 'vec2'; + return 'vec2u'; } case 'uint8x4': { - return 'vec4'; + return 'vec4u'; } case 'uint16x4': { - return 'vec4'; + return 'vec4u'; } case 'uint16x2': { - return 'vec2'; + return 'vec2u'; } default: { return 'f32'; @@ -739,7 +739,7 @@ export class GLTFSkin { inverseBindMatricesAccessor.byteStride !== 64 ) { throw Error( - `This skin's provided accessor does not access a mat4x4 matrix, or does not access the provided mat4x4 data correctly` + `This skin's provided accessor does not access a mat4x4f matrix, or does not access the provided mat4x4f data correctly` ); } // NOTE: Come back to this uint8array to float32array conversion in case it is incorrect diff --git a/sample/skinnedMesh/gltf.wgsl b/sample/skinnedMesh/gltf.wgsl index 0310a2a3..7b107721 100644 --- a/sample/skinnedMesh/gltf.wgsl +++ b/sample/skinnedMesh/gltf.wgsl @@ -2,10 +2,10 @@ // Read in VertexInput from attributes // f32x3 f32x3 f32x2 u8x4 f32x4 struct VertexOutput { - @builtin(position) Position: vec4, - @location(0) normal: vec3, - @location(1) joints: vec4, - @location(2) weights: vec4, + @builtin(position) Position: vec4f, + @location(0) normal: vec3f, + @location(1) joints: vec4f, + @location(2) weights: vec4f, } struct CameraUniforms { @@ -26,8 +26,8 @@ struct NodeUniforms { @group(0) @binding(0) var camera_uniforms: CameraUniforms; @group(1) @binding(0) var general_uniforms: GeneralUniforms; @group(2) @binding(0) var node_uniforms: NodeUniforms; -@group(3) @binding(0) var joint_matrices: array>; -@group(3) @binding(1) var inverse_bind_matrices: array>; +@group(3) @binding(0) var joint_matrices: array; +@group(3) @binding(1) var inverse_bind_matrices: array; @vertex fn vertexMain(input: VertexInput) -> VertexOutput { @@ -44,7 +44,7 @@ fn vertexMain(input: VertexInput) -> VertexOutput { joint2 * input.weights[2] + joint3 * input.weights[3]; // Position of the vertex relative to our world - let world_position = vec4(input.position.x, input.position.y, input.position.z, 1.0); + let world_position = vec4f(input.position.x, input.position.y, input.position.z, 1.0); // Vertex position with model rotation, skinning, and the mesh's node transformation applied. let skinned_position = camera_uniforms.model_matrix * skin_matrix * node_uniforms.world_matrix * world_position; // Vertex position with only the model rotation applied. @@ -59,13 +59,13 @@ fn vertexMain(input: VertexInput) -> VertexOutput { output.Position = camera_uniforms.proj_matrix * camera_uniforms.view_matrix * transformed_position; output.normal = input.normal; // Convert u32 joint data to f32s to prevent flat interpolation error. - output.joints = vec4(f32(input.joints[0]), f32(input.joints[1]), f32(input.joints[2]), f32(input.joints[3])); + output.joints = vec4f(f32(input.joints[0]), f32(input.joints[1]), f32(input.joints[2]), f32(input.joints[3])); output.weights = input.weights; return output; } @fragment -fn fragmentMain(input: VertexOutput) -> @location(0) vec4 { +fn fragmentMain(input: VertexOutput) -> @location(0) vec4f { switch general_uniforms.render_mode { case 1: { return input.joints; @@ -74,7 +74,7 @@ fn fragmentMain(input: VertexOutput) -> @location(0) vec4 { return input.weights; } default: { - return vec4(input.normal, 1.0); + return vec4f(input.normal, 1.0); } } } \ No newline at end of file diff --git a/sample/skinnedMesh/grid.wgsl b/sample/skinnedMesh/grid.wgsl index cdfc9cac..ee484117 100644 --- a/sample/skinnedMesh/grid.wgsl +++ b/sample/skinnedMesh/grid.wgsl @@ -1,14 +1,14 @@ struct VertexInput { - @location(0) vert_pos: vec2, - @location(1) joints: vec4, - @location(2) weights: vec4 + @location(0) vert_pos: vec2f, + @location(1) joints: vec4u, + @location(2) weights: vec4f } struct VertexOutput { - @builtin(position) Position: vec4, - @location(0) world_pos: vec3, - @location(1) joints: vec4, - @location(2) weights: vec4, + @builtin(position) Position: vec4f, + @location(0) world_pos: vec3f, + @location(1) joints: vec4f, + @location(2) weights: vec4f, } struct CameraUniforms { @@ -24,14 +24,14 @@ struct GeneralUniforms { @group(0) @binding(0) var camera_uniforms: CameraUniforms; @group(1) @binding(0) var general_uniforms: GeneralUniforms; -@group(2) @binding(0) var joint_matrices: array>; -@group(2) @binding(1) var inverse_bind_matrices: array>; +@group(2) @binding(0) var joint_matrices: array; +@group(2) @binding(1) var inverse_bind_matrices: array; @vertex fn vertexMain(input: VertexInput) -> VertexOutput { var output: VertexOutput; - var bones = vec4(0.0, 0.0, 0.0, 0.0); - let position = vec4(input.vert_pos.x, input.vert_pos.y, 0.0, 1.0); + var bones = vec4f(0.0, 0.0, 0.0, 0.0); + let position = vec4f(input.vert_pos.x, input.vert_pos.y, 0.0, 1.0); // Get relevant 4 bone matrices let joint0 = joint_matrices[input.joints[0]] * inverse_bind_matrices[input.joints[0]]; let joint1 = joint_matrices[input.joints[1]] * inverse_bind_matrices[input.joints[1]]; @@ -52,14 +52,14 @@ fn vertexMain(input: VertexInput) -> VertexOutput { //Get unadjusted world coordinates output.world_pos = position.xyz; - output.joints = vec4(f32(input.joints.x), f32(input.joints.y), f32(input.joints.z), f32(input.joints.w)); + output.joints = vec4f(f32(input.joints.x), f32(input.joints.y), f32(input.joints.z), f32(input.joints.w)); output.weights = input.weights; return output; } @fragment -fn fragmentMain(input: VertexOutput) -> @location(0) vec4 { +fn fragmentMain(input: VertexOutput) -> @location(0) vec4f { switch general_uniforms.render_mode { case 1: { return input.joints; @@ -68,7 +68,7 @@ fn fragmentMain(input: VertexOutput) -> @location(0) vec4 { return input.weights; } default: { - return vec4(255.0, 0.0, 1.0, 1.0); + return vec4f(255.0, 0.0, 1.0, 1.0); } } } \ No newline at end of file diff --git a/sample/skinnedMesh/main.js b/sample/skinnedMesh/main.js index a6cc2343..7e2754be 100644 --- a/sample/skinnedMesh/main.js +++ b/sample/skinnedMesh/main.js @@ -5058,37 +5058,37 @@ const convertGPUVertexFormatToWGSLFormat = (vertexFormat) => { return 'f32'; } case 'float32x2': { - return 'vec2'; + return 'vec2f'; } case 'float32x3': { - return 'vec3'; + return 'vec3f'; } case 'float32x4': { - return 'vec4'; + return 'vec4f'; } case 'uint32': { return 'u32'; } case 'uint32x2': { - return 'vec2'; + return 'vec2u'; } case 'uint32x3': { - return 'vec3'; + return 'vec3u'; } case 'uint32x4': { - return 'vec4'; + return 'vec4u'; } case 'uint8x2': { - return 'vec2'; + return 'vec2u'; } case 'uint8x4': { - return 'vec4'; + return 'vec4u'; } case 'uint16x4': { - return 'vec4'; + return 'vec4u'; } case 'uint16x2': { - return 'vec2'; + return 'vec2u'; } default: { return 'f32'; @@ -5494,7 +5494,7 @@ class GLTFSkin { if (inverseBindMatricesAccessor.componentType !== GLTFDataComponentType.FLOAT || inverseBindMatricesAccessor.byteStride !== 64) { - throw Error(`This skin's provided accessor does not access a mat4x4 matrix, or does not access the provided mat4x4 data correctly`); + throw Error(`This skin's provided accessor does not access a mat4x4f matrix, or does not access the provided mat4x4f data correctly`); } // NOTE: Come back to this uint8array to float32array conversion in case it is incorrect this.inverseBindMatrices = new Float32Array(inverseBindMatricesAccessor.view.view.buffer, inverseBindMatricesAccessor.view.view.byteOffset, inverseBindMatricesAccessor.view.view.byteLength / 4); @@ -5703,10 +5703,10 @@ var gltfWGSL = `// Whale.glb Vertex attributes // Read in VertexInput from attributes // f32x3 f32x3 f32x2 u8x4 f32x4 struct VertexOutput { - @builtin(position) Position: vec4, - @location(0) normal: vec3, - @location(1) joints: vec4, - @location(2) weights: vec4, + @builtin(position) Position: vec4f, + @location(0) normal: vec3f, + @location(1) joints: vec4f, + @location(2) weights: vec4f, } struct CameraUniforms { @@ -5727,8 +5727,8 @@ struct NodeUniforms { @group(0) @binding(0) var camera_uniforms: CameraUniforms; @group(1) @binding(0) var general_uniforms: GeneralUniforms; @group(2) @binding(0) var node_uniforms: NodeUniforms; -@group(3) @binding(0) var joint_matrices: array>; -@group(3) @binding(1) var inverse_bind_matrices: array>; +@group(3) @binding(0) var joint_matrices: array; +@group(3) @binding(1) var inverse_bind_matrices: array; @vertex fn vertexMain(input: VertexInput) -> VertexOutput { @@ -5745,7 +5745,7 @@ fn vertexMain(input: VertexInput) -> VertexOutput { joint2 * input.weights[2] + joint3 * input.weights[3]; // Position of the vertex relative to our world - let world_position = vec4(input.position.x, input.position.y, input.position.z, 1.0); + let world_position = vec4f(input.position.x, input.position.y, input.position.z, 1.0); // Vertex position with model rotation, skinning, and the mesh's node transformation applied. let skinned_position = camera_uniforms.model_matrix * skin_matrix * node_uniforms.world_matrix * world_position; // Vertex position with only the model rotation applied. @@ -5760,13 +5760,13 @@ fn vertexMain(input: VertexInput) -> VertexOutput { output.Position = camera_uniforms.proj_matrix * camera_uniforms.view_matrix * transformed_position; output.normal = input.normal; // Convert u32 joint data to f32s to prevent flat interpolation error. - output.joints = vec4(f32(input.joints[0]), f32(input.joints[1]), f32(input.joints[2]), f32(input.joints[3])); + output.joints = vec4f(f32(input.joints[0]), f32(input.joints[1]), f32(input.joints[2]), f32(input.joints[3])); output.weights = input.weights; return output; } @fragment -fn fragmentMain(input: VertexOutput) -> @location(0) vec4 { +fn fragmentMain(input: VertexOutput) -> @location(0) vec4f { switch general_uniforms.render_mode { case 1: { return input.joints; @@ -5775,22 +5775,22 @@ fn fragmentMain(input: VertexOutput) -> @location(0) vec4 { return input.weights; } default: { - return vec4(input.normal, 1.0); + return vec4f(input.normal, 1.0); } } }`; var gridWGSL = `struct VertexInput { - @location(0) vert_pos: vec2, - @location(1) joints: vec4, - @location(2) weights: vec4 + @location(0) vert_pos: vec2f, + @location(1) joints: vec4u, + @location(2) weights: vec4f } struct VertexOutput { - @builtin(position) Position: vec4, - @location(0) world_pos: vec3, - @location(1) joints: vec4, - @location(2) weights: vec4, + @builtin(position) Position: vec4f, + @location(0) world_pos: vec3f, + @location(1) joints: vec4f, + @location(2) weights: vec4f, } struct CameraUniforms { @@ -5806,14 +5806,14 @@ struct GeneralUniforms { @group(0) @binding(0) var camera_uniforms: CameraUniforms; @group(1) @binding(0) var general_uniforms: GeneralUniforms; -@group(2) @binding(0) var joint_matrices: array>; -@group(2) @binding(1) var inverse_bind_matrices: array>; +@group(2) @binding(0) var joint_matrices: array; +@group(2) @binding(1) var inverse_bind_matrices: array; @vertex fn vertexMain(input: VertexInput) -> VertexOutput { var output: VertexOutput; - var bones = vec4(0.0, 0.0, 0.0, 0.0); - let position = vec4(input.vert_pos.x, input.vert_pos.y, 0.0, 1.0); + var bones = vec4f(0.0, 0.0, 0.0, 0.0); + let position = vec4f(input.vert_pos.x, input.vert_pos.y, 0.0, 1.0); // Get relevant 4 bone matrices let joint0 = joint_matrices[input.joints[0]] * inverse_bind_matrices[input.joints[0]]; let joint1 = joint_matrices[input.joints[1]] * inverse_bind_matrices[input.joints[1]]; @@ -5834,14 +5834,14 @@ fn vertexMain(input: VertexInput) -> VertexOutput { //Get unadjusted world coordinates output.world_pos = position.xyz; - output.joints = vec4(f32(input.joints.x), f32(input.joints.y), f32(input.joints.z), f32(input.joints.w)); + output.joints = vec4f(f32(input.joints.x), f32(input.joints.y), f32(input.joints.z), f32(input.joints.w)); output.weights = input.weights; return output; } @fragment -fn fragmentMain(input: VertexOutput) -> @location(0) vec4 { +fn fragmentMain(input: VertexOutput) -> @location(0) vec4f { switch general_uniforms.render_mode { case 1: { return input.joints; @@ -5850,7 +5850,7 @@ fn fragmentMain(input: VertexOutput) -> @location(0) vec4 { return input.weights; } default: { - return vec4(255.0, 0.0, 1.0, 1.0); + return vec4f(255.0, 0.0, 1.0, 1.0); } } }`; diff --git a/sample/skinnedMesh/main.js.map b/sample/skinnedMesh/main.js.map index 1a888646..a764324d 100644 --- a/sample/skinnedMesh/main.js.map +++ b/sample/skinnedMesh/main.js.map @@ -1 +1 @@ -{"version":3,"file":"main.js","sources":["../../../node_modules/dat.gui/build/dat.gui.module.js","../../../node_modules/wgpu-matrix/dist/2.x/wgpu-matrix.module.js","../../../../../sample/skinnedMesh/glbUtils.ts","../../../../../sample/bitonicSort/utils.ts","../../../../../sample/skinnedMesh/gridData.ts","../../../../../sample/skinnedMesh/gridUtils.ts","../../../../../sample/skinnedMesh/main.ts"],"sourcesContent":["/**\n * dat-gui JavaScript Controller Library\n * https://github.com/dataarts/dat.gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction ___$insertStyle(css) {\n if (!css) {\n return;\n }\n if (typeof window === 'undefined') {\n return;\n }\n\n var style = document.createElement('style');\n\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n document.head.appendChild(style);\n\n return css;\n}\n\nfunction colorToString (color, forceCSSHex) {\n var colorFormat = color.__state.conversionName.toString();\n var r = Math.round(color.r);\n var g = Math.round(color.g);\n var b = Math.round(color.b);\n var a = color.a;\n var h = Math.round(color.h);\n var s = color.s.toFixed(1);\n var v = color.v.toFixed(1);\n if (forceCSSHex || colorFormat === 'THREE_CHAR_HEX' || colorFormat === 'SIX_CHAR_HEX') {\n var str = color.hex.toString(16);\n while (str.length < 6) {\n str = '0' + str;\n }\n return '#' + str;\n } else if (colorFormat === 'CSS_RGB') {\n return 'rgb(' + r + ',' + g + ',' + b + ')';\n } else if (colorFormat === 'CSS_RGBA') {\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n } else if (colorFormat === 'HEX') {\n return '0x' + color.hex.toString(16);\n } else if (colorFormat === 'RGB_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ']';\n } else if (colorFormat === 'RGBA_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ',' + a + ']';\n } else if (colorFormat === 'RGB_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + '}';\n } else if (colorFormat === 'RGBA_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}';\n } else if (colorFormat === 'HSV_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + '}';\n } else if (colorFormat === 'HSVA_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}';\n }\n return 'unknown format';\n}\n\nvar ARR_EACH = Array.prototype.forEach;\nvar ARR_SLICE = Array.prototype.slice;\nvar Common = {\n BREAK: {},\n extend: function extend(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (!this.isUndefined(obj[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n defaults: function defaults(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (this.isUndefined(target[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n compose: function compose() {\n var toCall = ARR_SLICE.call(arguments);\n return function () {\n var args = ARR_SLICE.call(arguments);\n for (var i = toCall.length - 1; i >= 0; i--) {\n args = [toCall[i].apply(this, args)];\n }\n return args[0];\n };\n },\n each: function each(obj, itr, scope) {\n if (!obj) {\n return;\n }\n if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) {\n obj.forEach(itr, scope);\n } else if (obj.length === obj.length + 0) {\n var key = void 0;\n var l = void 0;\n for (key = 0, l = obj.length; key < l; key++) {\n if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) {\n return;\n }\n }\n } else {\n for (var _key in obj) {\n if (itr.call(scope, obj[_key], _key) === this.BREAK) {\n return;\n }\n }\n }\n },\n defer: function defer(fnc) {\n setTimeout(fnc, 0);\n },\n debounce: function debounce(func, threshold, callImmediately) {\n var timeout = void 0;\n return function () {\n var obj = this;\n var args = arguments;\n function delayed() {\n timeout = null;\n if (!callImmediately) func.apply(obj, args);\n }\n var callNow = callImmediately || !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(delayed, threshold);\n if (callNow) {\n func.apply(obj, args);\n }\n };\n },\n toArray: function toArray(obj) {\n if (obj.toArray) return obj.toArray();\n return ARR_SLICE.call(obj);\n },\n isUndefined: function isUndefined(obj) {\n return obj === undefined;\n },\n isNull: function isNull(obj) {\n return obj === null;\n },\n isNaN: function (_isNaN) {\n function isNaN(_x) {\n return _isNaN.apply(this, arguments);\n }\n isNaN.toString = function () {\n return _isNaN.toString();\n };\n return isNaN;\n }(function (obj) {\n return isNaN(obj);\n }),\n isArray: Array.isArray || function (obj) {\n return obj.constructor === Array;\n },\n isObject: function isObject(obj) {\n return obj === Object(obj);\n },\n isNumber: function isNumber(obj) {\n return obj === obj + 0;\n },\n isString: function isString(obj) {\n return obj === obj + '';\n },\n isBoolean: function isBoolean(obj) {\n return obj === false || obj === true;\n },\n isFunction: function isFunction(obj) {\n return obj instanceof Function;\n }\n};\n\nvar INTERPRETATIONS = [\n{\n litmus: Common.isString,\n conversions: {\n THREE_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString() + test[1].toString() + test[2].toString() + test[2].toString() + test[3].toString() + test[3].toString(), 0)\n };\n },\n write: colorToString\n },\n SIX_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9]{6})$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString(), 0)\n };\n },\n write: colorToString\n },\n CSS_RGB: {\n read: function read(original) {\n var test = original.match(/^rgb\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3])\n };\n },\n write: colorToString\n },\n CSS_RGBA: {\n read: function read(original) {\n var test = original.match(/^rgba\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3]),\n a: parseFloat(test[4])\n };\n },\n write: colorToString\n }\n }\n},\n{\n litmus: Common.isNumber,\n conversions: {\n HEX: {\n read: function read(original) {\n return {\n space: 'HEX',\n hex: original,\n conversionName: 'HEX'\n };\n },\n write: function write(color) {\n return color.hex;\n }\n }\n }\n},\n{\n litmus: Common.isArray,\n conversions: {\n RGB_ARRAY: {\n read: function read(original) {\n if (original.length !== 3) {\n return false;\n }\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b];\n }\n },\n RGBA_ARRAY: {\n read: function read(original) {\n if (original.length !== 4) return false;\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2],\n a: original[3]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b, color.a];\n }\n }\n }\n},\n{\n litmus: Common.isObject,\n conversions: {\n RGBA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b) && Common.isNumber(original.a)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b,\n a: color.a\n };\n }\n },\n RGB_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b\n };\n }\n },\n HSVA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v) && Common.isNumber(original.a)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v,\n a: color.a\n };\n }\n },\n HSV_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v\n };\n }\n }\n }\n}];\nvar result = void 0;\nvar toReturn = void 0;\nvar interpret = function interpret() {\n toReturn = false;\n var original = arguments.length > 1 ? Common.toArray(arguments) : arguments[0];\n Common.each(INTERPRETATIONS, function (family) {\n if (family.litmus(original)) {\n Common.each(family.conversions, function (conversion, conversionName) {\n result = conversion.read(original);\n if (toReturn === false && result !== false) {\n toReturn = result;\n result.conversionName = conversionName;\n result.conversion = conversion;\n return Common.BREAK;\n }\n });\n return Common.BREAK;\n }\n });\n return toReturn;\n};\n\nvar tmpComponent = void 0;\nvar ColorMath = {\n hsv_to_rgb: function hsv_to_rgb(h, s, v) {\n var hi = Math.floor(h / 60) % 6;\n var f = h / 60 - Math.floor(h / 60);\n var p = v * (1.0 - s);\n var q = v * (1.0 - f * s);\n var t = v * (1.0 - (1.0 - f) * s);\n var c = [[v, t, p], [q, v, p], [p, v, t], [p, q, v], [t, p, v], [v, p, q]][hi];\n return {\n r: c[0] * 255,\n g: c[1] * 255,\n b: c[2] * 255\n };\n },\n rgb_to_hsv: function rgb_to_hsv(r, g, b) {\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var h = void 0;\n var s = void 0;\n if (max !== 0) {\n s = delta / max;\n } else {\n return {\n h: NaN,\n s: 0,\n v: 0\n };\n }\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h /= 6;\n if (h < 0) {\n h += 1;\n }\n return {\n h: h * 360,\n s: s,\n v: max / 255\n };\n },\n rgb_to_hex: function rgb_to_hex(r, g, b) {\n var hex = this.hex_with_component(0, 2, r);\n hex = this.hex_with_component(hex, 1, g);\n hex = this.hex_with_component(hex, 0, b);\n return hex;\n },\n component_from_hex: function component_from_hex(hex, componentIndex) {\n return hex >> componentIndex * 8 & 0xFF;\n },\n hex_with_component: function hex_with_component(hex, componentIndex, value) {\n return value << (tmpComponent = componentIndex * 8) | hex & ~(0xFF << tmpComponent);\n }\n};\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar Color = function () {\n function Color() {\n classCallCheck(this, Color);\n this.__state = interpret.apply(this, arguments);\n if (this.__state === false) {\n throw new Error('Failed to interpret color arguments');\n }\n this.__state.a = this.__state.a || 1;\n }\n createClass(Color, [{\n key: 'toString',\n value: function toString() {\n return colorToString(this);\n }\n }, {\n key: 'toHexString',\n value: function toHexString() {\n return colorToString(this, true);\n }\n }, {\n key: 'toOriginal',\n value: function toOriginal() {\n return this.__state.conversion.write(this);\n }\n }]);\n return Color;\n}();\nfunction defineRGBComponent(target, component, componentHexIndex) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'RGB') {\n return this.__state[component];\n }\n Color.recalculateRGB(this, component, componentHexIndex);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'RGB') {\n Color.recalculateRGB(this, component, componentHexIndex);\n this.__state.space = 'RGB';\n }\n this.__state[component] = v;\n }\n });\n}\nfunction defineHSVComponent(target, component) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'HSV') {\n return this.__state[component];\n }\n Color.recalculateHSV(this);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'HSV') {\n Color.recalculateHSV(this);\n this.__state.space = 'HSV';\n }\n this.__state[component] = v;\n }\n });\n}\nColor.recalculateRGB = function (color, component, componentHexIndex) {\n if (color.__state.space === 'HEX') {\n color.__state[component] = ColorMath.component_from_hex(color.__state.hex, componentHexIndex);\n } else if (color.__state.space === 'HSV') {\n Common.extend(color.__state, ColorMath.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v));\n } else {\n throw new Error('Corrupted color state');\n }\n};\nColor.recalculateHSV = function (color) {\n var result = ColorMath.rgb_to_hsv(color.r, color.g, color.b);\n Common.extend(color.__state, {\n s: result.s,\n v: result.v\n });\n if (!Common.isNaN(result.h)) {\n color.__state.h = result.h;\n } else if (Common.isUndefined(color.__state.h)) {\n color.__state.h = 0;\n }\n};\nColor.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a'];\ndefineRGBComponent(Color.prototype, 'r', 2);\ndefineRGBComponent(Color.prototype, 'g', 1);\ndefineRGBComponent(Color.prototype, 'b', 0);\ndefineHSVComponent(Color.prototype, 'h');\ndefineHSVComponent(Color.prototype, 's');\ndefineHSVComponent(Color.prototype, 'v');\nObject.defineProperty(Color.prototype, 'a', {\n get: function get$$1() {\n return this.__state.a;\n },\n set: function set$$1(v) {\n this.__state.a = v;\n }\n});\nObject.defineProperty(Color.prototype, 'hex', {\n get: function get$$1() {\n if (this.__state.space !== 'HEX') {\n this.__state.hex = ColorMath.rgb_to_hex(this.r, this.g, this.b);\n this.__state.space = 'HEX';\n }\n return this.__state.hex;\n },\n set: function set$$1(v) {\n this.__state.space = 'HEX';\n this.__state.hex = v;\n }\n});\n\nvar Controller = function () {\n function Controller(object, property) {\n classCallCheck(this, Controller);\n this.initialValue = object[property];\n this.domElement = document.createElement('div');\n this.object = object;\n this.property = property;\n this.__onChange = undefined;\n this.__onFinishChange = undefined;\n }\n createClass(Controller, [{\n key: 'onChange',\n value: function onChange(fnc) {\n this.__onChange = fnc;\n return this;\n }\n }, {\n key: 'onFinishChange',\n value: function onFinishChange(fnc) {\n this.__onFinishChange = fnc;\n return this;\n }\n }, {\n key: 'setValue',\n value: function setValue(newValue) {\n this.object[this.property] = newValue;\n if (this.__onChange) {\n this.__onChange.call(this, newValue);\n }\n this.updateDisplay();\n return this;\n }\n }, {\n key: 'getValue',\n value: function getValue() {\n return this.object[this.property];\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n return this;\n }\n }, {\n key: 'isModified',\n value: function isModified() {\n return this.initialValue !== this.getValue();\n }\n }]);\n return Controller;\n}();\n\nvar EVENT_MAP = {\n HTMLEvents: ['change'],\n MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'],\n KeyboardEvents: ['keydown']\n};\nvar EVENT_MAP_INV = {};\nCommon.each(EVENT_MAP, function (v, k) {\n Common.each(v, function (e) {\n EVENT_MAP_INV[e] = k;\n });\n});\nvar CSS_VALUE_PIXELS = /(\\d+(\\.\\d+)?)px/;\nfunction cssValueToPixels(val) {\n if (val === '0' || Common.isUndefined(val)) {\n return 0;\n }\n var match = val.match(CSS_VALUE_PIXELS);\n if (!Common.isNull(match)) {\n return parseFloat(match[1]);\n }\n return 0;\n}\nvar dom = {\n makeSelectable: function makeSelectable(elem, selectable) {\n if (elem === undefined || elem.style === undefined) return;\n elem.onselectstart = selectable ? function () {\n return false;\n } : function () {};\n elem.style.MozUserSelect = selectable ? 'auto' : 'none';\n elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none';\n elem.unselectable = selectable ? 'on' : 'off';\n },\n makeFullscreen: function makeFullscreen(elem, hor, vert) {\n var vertical = vert;\n var horizontal = hor;\n if (Common.isUndefined(horizontal)) {\n horizontal = true;\n }\n if (Common.isUndefined(vertical)) {\n vertical = true;\n }\n elem.style.position = 'absolute';\n if (horizontal) {\n elem.style.left = 0;\n elem.style.right = 0;\n }\n if (vertical) {\n elem.style.top = 0;\n elem.style.bottom = 0;\n }\n },\n fakeEvent: function fakeEvent(elem, eventType, pars, aux) {\n var params = pars || {};\n var className = EVENT_MAP_INV[eventType];\n if (!className) {\n throw new Error('Event type ' + eventType + ' not supported.');\n }\n var evt = document.createEvent(className);\n switch (className) {\n case 'MouseEvents':\n {\n var clientX = params.x || params.clientX || 0;\n var clientY = params.y || params.clientY || 0;\n evt.initMouseEvent(eventType, params.bubbles || false, params.cancelable || true, window, params.clickCount || 1, 0,\n 0,\n clientX,\n clientY,\n false, false, false, false, 0, null);\n break;\n }\n case 'KeyboardEvents':\n {\n var init = evt.initKeyboardEvent || evt.initKeyEvent;\n Common.defaults(params, {\n cancelable: true,\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n keyCode: undefined,\n charCode: undefined\n });\n init(eventType, params.bubbles || false, params.cancelable, window, params.ctrlKey, params.altKey, params.shiftKey, params.metaKey, params.keyCode, params.charCode);\n break;\n }\n default:\n {\n evt.initEvent(eventType, params.bubbles || false, params.cancelable || true);\n break;\n }\n }\n Common.defaults(evt, aux);\n elem.dispatchEvent(evt);\n },\n bind: function bind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.addEventListener) {\n elem.addEventListener(event, func, bool);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + event, func);\n }\n return dom;\n },\n unbind: function unbind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.removeEventListener) {\n elem.removeEventListener(event, func, bool);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + event, func);\n }\n return dom;\n },\n addClass: function addClass(elem, className) {\n if (elem.className === undefined) {\n elem.className = className;\n } else if (elem.className !== className) {\n var classes = elem.className.split(/ +/);\n if (classes.indexOf(className) === -1) {\n classes.push(className);\n elem.className = classes.join(' ').replace(/^\\s+/, '').replace(/\\s+$/, '');\n }\n }\n return dom;\n },\n removeClass: function removeClass(elem, className) {\n if (className) {\n if (elem.className === className) {\n elem.removeAttribute('class');\n } else {\n var classes = elem.className.split(/ +/);\n var index = classes.indexOf(className);\n if (index !== -1) {\n classes.splice(index, 1);\n elem.className = classes.join(' ');\n }\n }\n } else {\n elem.className = undefined;\n }\n return dom;\n },\n hasClass: function hasClass(elem, className) {\n return new RegExp('(?:^|\\\\s+)' + className + '(?:\\\\s+|$)').test(elem.className) || false;\n },\n getWidth: function getWidth(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-left-width']) + cssValueToPixels(style['border-right-width']) + cssValueToPixels(style['padding-left']) + cssValueToPixels(style['padding-right']) + cssValueToPixels(style.width);\n },\n getHeight: function getHeight(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-top-width']) + cssValueToPixels(style['border-bottom-width']) + cssValueToPixels(style['padding-top']) + cssValueToPixels(style['padding-bottom']) + cssValueToPixels(style.height);\n },\n getOffset: function getOffset(el) {\n var elem = el;\n var offset = { left: 0, top: 0 };\n if (elem.offsetParent) {\n do {\n offset.left += elem.offsetLeft;\n offset.top += elem.offsetTop;\n elem = elem.offsetParent;\n } while (elem);\n }\n return offset;\n },\n isActive: function isActive(elem) {\n return elem === document.activeElement && (elem.type || elem.href);\n }\n};\n\nvar BooleanController = function (_Controller) {\n inherits(BooleanController, _Controller);\n function BooleanController(object, property) {\n classCallCheck(this, BooleanController);\n var _this2 = possibleConstructorReturn(this, (BooleanController.__proto__ || Object.getPrototypeOf(BooleanController)).call(this, object, property));\n var _this = _this2;\n _this2.__prev = _this2.getValue();\n _this2.__checkbox = document.createElement('input');\n _this2.__checkbox.setAttribute('type', 'checkbox');\n function onChange() {\n _this.setValue(!_this.__prev);\n }\n dom.bind(_this2.__checkbox, 'change', onChange, false);\n _this2.domElement.appendChild(_this2.__checkbox);\n _this2.updateDisplay();\n return _this2;\n }\n createClass(BooleanController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n this.__prev = this.getValue();\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (this.getValue() === true) {\n this.__checkbox.setAttribute('checked', 'checked');\n this.__checkbox.checked = true;\n this.__prev = true;\n } else {\n this.__checkbox.checked = false;\n this.__prev = false;\n }\n return get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return BooleanController;\n}(Controller);\n\nvar OptionController = function (_Controller) {\n inherits(OptionController, _Controller);\n function OptionController(object, property, opts) {\n classCallCheck(this, OptionController);\n var _this2 = possibleConstructorReturn(this, (OptionController.__proto__ || Object.getPrototypeOf(OptionController)).call(this, object, property));\n var options = opts;\n var _this = _this2;\n _this2.__select = document.createElement('select');\n if (Common.isArray(options)) {\n var map = {};\n Common.each(options, function (element) {\n map[element] = element;\n });\n options = map;\n }\n Common.each(options, function (value, key) {\n var opt = document.createElement('option');\n opt.innerHTML = key;\n opt.setAttribute('value', value);\n _this.__select.appendChild(opt);\n });\n _this2.updateDisplay();\n dom.bind(_this2.__select, 'change', function () {\n var desiredValue = this.options[this.selectedIndex].value;\n _this.setValue(desiredValue);\n });\n _this2.domElement.appendChild(_this2.__select);\n return _this2;\n }\n createClass(OptionController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (dom.isActive(this.__select)) return this;\n this.__select.value = this.getValue();\n return get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return OptionController;\n}(Controller);\n\nvar StringController = function (_Controller) {\n inherits(StringController, _Controller);\n function StringController(object, property) {\n classCallCheck(this, StringController);\n var _this2 = possibleConstructorReturn(this, (StringController.__proto__ || Object.getPrototypeOf(StringController)).call(this, object, property));\n var _this = _this2;\n function onChange() {\n _this.setValue(_this.__input.value);\n }\n function onBlur() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'keyup', onChange);\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n this.blur();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(StringController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (!dom.isActive(this.__input)) {\n this.__input.value = this.getValue();\n }\n return get(StringController.prototype.__proto__ || Object.getPrototypeOf(StringController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return StringController;\n}(Controller);\n\nfunction numDecimals(x) {\n var _x = x.toString();\n if (_x.indexOf('.') > -1) {\n return _x.length - _x.indexOf('.') - 1;\n }\n return 0;\n}\nvar NumberController = function (_Controller) {\n inherits(NumberController, _Controller);\n function NumberController(object, property, params) {\n classCallCheck(this, NumberController);\n var _this = possibleConstructorReturn(this, (NumberController.__proto__ || Object.getPrototypeOf(NumberController)).call(this, object, property));\n var _params = params || {};\n _this.__min = _params.min;\n _this.__max = _params.max;\n _this.__step = _params.step;\n if (Common.isUndefined(_this.__step)) {\n if (_this.initialValue === 0) {\n _this.__impliedStep = 1;\n } else {\n _this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(_this.initialValue)) / Math.LN10)) / 10;\n }\n } else {\n _this.__impliedStep = _this.__step;\n }\n _this.__precision = numDecimals(_this.__impliedStep);\n return _this;\n }\n createClass(NumberController, [{\n key: 'setValue',\n value: function setValue(v) {\n var _v = v;\n if (this.__min !== undefined && _v < this.__min) {\n _v = this.__min;\n } else if (this.__max !== undefined && _v > this.__max) {\n _v = this.__max;\n }\n if (this.__step !== undefined && _v % this.__step !== 0) {\n _v = Math.round(_v / this.__step) * this.__step;\n }\n return get(NumberController.prototype.__proto__ || Object.getPrototypeOf(NumberController.prototype), 'setValue', this).call(this, _v);\n }\n }, {\n key: 'min',\n value: function min(minValue) {\n this.__min = minValue;\n return this;\n }\n }, {\n key: 'max',\n value: function max(maxValue) {\n this.__max = maxValue;\n return this;\n }\n }, {\n key: 'step',\n value: function step(stepValue) {\n this.__step = stepValue;\n this.__impliedStep = stepValue;\n this.__precision = numDecimals(stepValue);\n return this;\n }\n }]);\n return NumberController;\n}(Controller);\n\nfunction roundToDecimal(value, decimals) {\n var tenTo = Math.pow(10, decimals);\n return Math.round(value * tenTo) / tenTo;\n}\nvar NumberControllerBox = function (_NumberController) {\n inherits(NumberControllerBox, _NumberController);\n function NumberControllerBox(object, property, params) {\n classCallCheck(this, NumberControllerBox);\n var _this2 = possibleConstructorReturn(this, (NumberControllerBox.__proto__ || Object.getPrototypeOf(NumberControllerBox)).call(this, object, property, params));\n _this2.__truncationSuspended = false;\n var _this = _this2;\n var prevY = void 0;\n function onChange() {\n var attempted = parseFloat(_this.__input.value);\n if (!Common.isNaN(attempted)) {\n _this.setValue(attempted);\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onBlur() {\n onFinish();\n }\n function onMouseDrag(e) {\n var diff = prevY - e.clientY;\n _this.setValue(_this.getValue() + diff * _this.__impliedStep);\n prevY = e.clientY;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n onFinish();\n }\n function onMouseDown(e) {\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n prevY = e.clientY;\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'mousedown', onMouseDown);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n _this.__truncationSuspended = true;\n this.blur();\n _this.__truncationSuspended = false;\n onFinish();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(NumberControllerBox, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision);\n return get(NumberControllerBox.prototype.__proto__ || Object.getPrototypeOf(NumberControllerBox.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerBox;\n}(NumberController);\n\nfunction map(v, i1, i2, o1, o2) {\n return o1 + (o2 - o1) * ((v - i1) / (i2 - i1));\n}\nvar NumberControllerSlider = function (_NumberController) {\n inherits(NumberControllerSlider, _NumberController);\n function NumberControllerSlider(object, property, min, max, step) {\n classCallCheck(this, NumberControllerSlider);\n var _this2 = possibleConstructorReturn(this, (NumberControllerSlider.__proto__ || Object.getPrototypeOf(NumberControllerSlider)).call(this, object, property, { min: min, max: max, step: step }));\n var _this = _this2;\n _this2.__background = document.createElement('div');\n _this2.__foreground = document.createElement('div');\n dom.bind(_this2.__background, 'mousedown', onMouseDown);\n dom.bind(_this2.__background, 'touchstart', onTouchStart);\n dom.addClass(_this2.__background, 'slider');\n dom.addClass(_this2.__foreground, 'slider-fg');\n function onMouseDown(e) {\n document.activeElement.blur();\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n onMouseDrag(e);\n }\n function onMouseDrag(e) {\n e.preventDefault();\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n return false;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onTouchStart(e) {\n if (e.touches.length !== 1) {\n return;\n }\n dom.bind(window, 'touchmove', onTouchMove);\n dom.bind(window, 'touchend', onTouchEnd);\n onTouchMove(e);\n }\n function onTouchMove(e) {\n var clientX = e.touches[0].clientX;\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n }\n function onTouchEnd() {\n dom.unbind(window, 'touchmove', onTouchMove);\n dom.unbind(window, 'touchend', onTouchEnd);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.updateDisplay();\n _this2.__background.appendChild(_this2.__foreground);\n _this2.domElement.appendChild(_this2.__background);\n return _this2;\n }\n createClass(NumberControllerSlider, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var pct = (this.getValue() - this.__min) / (this.__max - this.__min);\n this.__foreground.style.width = pct * 100 + '%';\n return get(NumberControllerSlider.prototype.__proto__ || Object.getPrototypeOf(NumberControllerSlider.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerSlider;\n}(NumberController);\n\nvar FunctionController = function (_Controller) {\n inherits(FunctionController, _Controller);\n function FunctionController(object, property, text) {\n classCallCheck(this, FunctionController);\n var _this2 = possibleConstructorReturn(this, (FunctionController.__proto__ || Object.getPrototypeOf(FunctionController)).call(this, object, property));\n var _this = _this2;\n _this2.__button = document.createElement('div');\n _this2.__button.innerHTML = text === undefined ? 'Fire' : text;\n dom.bind(_this2.__button, 'click', function (e) {\n e.preventDefault();\n _this.fire();\n return false;\n });\n dom.addClass(_this2.__button, 'button');\n _this2.domElement.appendChild(_this2.__button);\n return _this2;\n }\n createClass(FunctionController, [{\n key: 'fire',\n value: function fire() {\n if (this.__onChange) {\n this.__onChange.call(this);\n }\n this.getValue().call(this.object);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n }\n }]);\n return FunctionController;\n}(Controller);\n\nvar ColorController = function (_Controller) {\n inherits(ColorController, _Controller);\n function ColorController(object, property) {\n classCallCheck(this, ColorController);\n var _this2 = possibleConstructorReturn(this, (ColorController.__proto__ || Object.getPrototypeOf(ColorController)).call(this, object, property));\n _this2.__color = new Color(_this2.getValue());\n _this2.__temp = new Color(0);\n var _this = _this2;\n _this2.domElement = document.createElement('div');\n dom.makeSelectable(_this2.domElement, false);\n _this2.__selector = document.createElement('div');\n _this2.__selector.className = 'selector';\n _this2.__saturation_field = document.createElement('div');\n _this2.__saturation_field.className = 'saturation-field';\n _this2.__field_knob = document.createElement('div');\n _this2.__field_knob.className = 'field-knob';\n _this2.__field_knob_border = '2px solid ';\n _this2.__hue_knob = document.createElement('div');\n _this2.__hue_knob.className = 'hue-knob';\n _this2.__hue_field = document.createElement('div');\n _this2.__hue_field.className = 'hue-field';\n _this2.__input = document.createElement('input');\n _this2.__input.type = 'text';\n _this2.__input_textShadow = '0 1px 1px ';\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n onBlur.call(this);\n }\n });\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__selector, 'mousedown', function () {\n dom.addClass(this, 'drag').bind(window, 'mouseup', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n dom.bind(_this2.__selector, 'touchstart', function () {\n dom.addClass(this, 'drag').bind(window, 'touchend', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n var valueField = document.createElement('div');\n Common.extend(_this2.__selector.style, {\n width: '122px',\n height: '102px',\n padding: '3px',\n backgroundColor: '#222',\n boxShadow: '0px 1px 3px rgba(0,0,0,0.3)'\n });\n Common.extend(_this2.__field_knob.style, {\n position: 'absolute',\n width: '12px',\n height: '12px',\n border: _this2.__field_knob_border + (_this2.__color.v < 0.5 ? '#fff' : '#000'),\n boxShadow: '0px 1px 3px rgba(0,0,0,0.5)',\n borderRadius: '12px',\n zIndex: 1\n });\n Common.extend(_this2.__hue_knob.style, {\n position: 'absolute',\n width: '15px',\n height: '2px',\n borderRight: '4px solid #fff',\n zIndex: 1\n });\n Common.extend(_this2.__saturation_field.style, {\n width: '100px',\n height: '100px',\n border: '1px solid #555',\n marginRight: '3px',\n display: 'inline-block',\n cursor: 'pointer'\n });\n Common.extend(valueField.style, {\n width: '100%',\n height: '100%',\n background: 'none'\n });\n linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000');\n Common.extend(_this2.__hue_field.style, {\n width: '15px',\n height: '100px',\n border: '1px solid #555',\n cursor: 'ns-resize',\n position: 'absolute',\n top: '3px',\n right: '3px'\n });\n hueGradient(_this2.__hue_field);\n Common.extend(_this2.__input.style, {\n outline: 'none',\n textAlign: 'center',\n color: '#fff',\n border: 0,\n fontWeight: 'bold',\n textShadow: _this2.__input_textShadow + 'rgba(0,0,0,0.7)'\n });\n dom.bind(_this2.__saturation_field, 'mousedown', fieldDown);\n dom.bind(_this2.__saturation_field, 'touchstart', fieldDown);\n dom.bind(_this2.__field_knob, 'mousedown', fieldDown);\n dom.bind(_this2.__field_knob, 'touchstart', fieldDown);\n dom.bind(_this2.__hue_field, 'mousedown', fieldDownH);\n dom.bind(_this2.__hue_field, 'touchstart', fieldDownH);\n function fieldDown(e) {\n setSV(e);\n dom.bind(window, 'mousemove', setSV);\n dom.bind(window, 'touchmove', setSV);\n dom.bind(window, 'mouseup', fieldUpSV);\n dom.bind(window, 'touchend', fieldUpSV);\n }\n function fieldDownH(e) {\n setH(e);\n dom.bind(window, 'mousemove', setH);\n dom.bind(window, 'touchmove', setH);\n dom.bind(window, 'mouseup', fieldUpH);\n dom.bind(window, 'touchend', fieldUpH);\n }\n function fieldUpSV() {\n dom.unbind(window, 'mousemove', setSV);\n dom.unbind(window, 'touchmove', setSV);\n dom.unbind(window, 'mouseup', fieldUpSV);\n dom.unbind(window, 'touchend', fieldUpSV);\n onFinish();\n }\n function fieldUpH() {\n dom.unbind(window, 'mousemove', setH);\n dom.unbind(window, 'touchmove', setH);\n dom.unbind(window, 'mouseup', fieldUpH);\n dom.unbind(window, 'touchend', fieldUpH);\n onFinish();\n }\n function onBlur() {\n var i = interpret(this.value);\n if (i !== false) {\n _this.__color.__state = i;\n _this.setValue(_this.__color.toOriginal());\n } else {\n this.value = _this.__color.toString();\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.__color.toOriginal());\n }\n }\n _this2.__saturation_field.appendChild(valueField);\n _this2.__selector.appendChild(_this2.__field_knob);\n _this2.__selector.appendChild(_this2.__saturation_field);\n _this2.__selector.appendChild(_this2.__hue_field);\n _this2.__hue_field.appendChild(_this2.__hue_knob);\n _this2.domElement.appendChild(_this2.__input);\n _this2.domElement.appendChild(_this2.__selector);\n _this2.updateDisplay();\n function setSV(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__saturation_field.getBoundingClientRect();\n var _ref = e.touches && e.touches[0] || e,\n clientX = _ref.clientX,\n clientY = _ref.clientY;\n var s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left);\n var v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (v > 1) {\n v = 1;\n } else if (v < 0) {\n v = 0;\n }\n if (s > 1) {\n s = 1;\n } else if (s < 0) {\n s = 0;\n }\n _this.__color.v = v;\n _this.__color.s = s;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n function setH(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__hue_field.getBoundingClientRect();\n var _ref2 = e.touches && e.touches[0] || e,\n clientY = _ref2.clientY;\n var h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (h > 1) {\n h = 1;\n } else if (h < 0) {\n h = 0;\n }\n _this.__color.h = h * 360;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n return _this2;\n }\n createClass(ColorController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var i = interpret(this.getValue());\n if (i !== false) {\n var mismatch = false;\n Common.each(Color.COMPONENTS, function (component) {\n if (!Common.isUndefined(i[component]) && !Common.isUndefined(this.__color.__state[component]) && i[component] !== this.__color.__state[component]) {\n mismatch = true;\n return {};\n }\n }, this);\n if (mismatch) {\n Common.extend(this.__color.__state, i);\n }\n }\n Common.extend(this.__temp.__state, this.__color.__state);\n this.__temp.a = 1;\n var flip = this.__color.v < 0.5 || this.__color.s > 0.5 ? 255 : 0;\n var _flip = 255 - flip;\n Common.extend(this.__field_knob.style, {\n marginLeft: 100 * this.__color.s - 7 + 'px',\n marginTop: 100 * (1 - this.__color.v) - 7 + 'px',\n backgroundColor: this.__temp.toHexString(),\n border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')'\n });\n this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px';\n this.__temp.s = 1;\n this.__temp.v = 1;\n linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString());\n this.__input.value = this.__color.toString();\n Common.extend(this.__input.style, {\n backgroundColor: this.__color.toHexString(),\n color: 'rgb(' + flip + ',' + flip + ',' + flip + ')',\n textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)'\n });\n }\n }]);\n return ColorController;\n}(Controller);\nvar vendors = ['-moz-', '-o-', '-webkit-', '-ms-', ''];\nfunction linearGradient(elem, x, a, b) {\n elem.style.background = '';\n Common.each(vendors, function (vendor) {\n elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); ';\n });\n}\nfunction hueGradient(elem) {\n elem.style.background = '';\n elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);';\n elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n}\n\nvar css = {\n load: function load(url, indoc) {\n var doc = indoc || document;\n var link = doc.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.href = url;\n doc.getElementsByTagName('head')[0].appendChild(link);\n },\n inject: function inject(cssContent, indoc) {\n var doc = indoc || document;\n var injected = document.createElement('style');\n injected.type = 'text/css';\n injected.innerHTML = cssContent;\n var head = doc.getElementsByTagName('head')[0];\n try {\n head.appendChild(injected);\n } catch (e) {\n }\n }\n};\n\nvar saveDialogContents = \"
\\n\\n Here's the new load parameter for your GUI's constructor:\\n\\n \\n\\n
\\n\\n Automatically save\\n values to localStorage on exit.\\n\\n
The values saved to localStorage will\\n override those passed to dat.GUI's constructor. This makes it\\n easier to work incrementally, but localStorage is fragile,\\n and your friends may not see the same values you do.\\n\\n
\\n\\n
\\n\\n
\";\n\nvar ControllerFactory = function ControllerFactory(object, property) {\n var initialValue = object[property];\n if (Common.isArray(arguments[2]) || Common.isObject(arguments[2])) {\n return new OptionController(object, property, arguments[2]);\n }\n if (Common.isNumber(initialValue)) {\n if (Common.isNumber(arguments[2]) && Common.isNumber(arguments[3])) {\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerSlider(object, property, arguments[2], arguments[3], arguments[4]);\n }\n return new NumberControllerSlider(object, property, arguments[2], arguments[3]);\n }\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3], step: arguments[4] });\n }\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] });\n }\n if (Common.isString(initialValue)) {\n return new StringController(object, property);\n }\n if (Common.isFunction(initialValue)) {\n return new FunctionController(object, property, '');\n }\n if (Common.isBoolean(initialValue)) {\n return new BooleanController(object, property);\n }\n return null;\n};\n\nfunction requestAnimationFrame(callback) {\n setTimeout(callback, 1000 / 60);\n}\nvar requestAnimationFrame$1 = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || requestAnimationFrame;\n\nvar CenteredDiv = function () {\n function CenteredDiv() {\n classCallCheck(this, CenteredDiv);\n this.backgroundElement = document.createElement('div');\n Common.extend(this.backgroundElement.style, {\n backgroundColor: 'rgba(0,0,0,0.8)',\n top: 0,\n left: 0,\n display: 'none',\n zIndex: '1000',\n opacity: 0,\n WebkitTransition: 'opacity 0.2s linear',\n transition: 'opacity 0.2s linear'\n });\n dom.makeFullscreen(this.backgroundElement);\n this.backgroundElement.style.position = 'fixed';\n this.domElement = document.createElement('div');\n Common.extend(this.domElement.style, {\n position: 'fixed',\n display: 'none',\n zIndex: '1001',\n opacity: 0,\n WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear',\n transition: 'transform 0.2s ease-out, opacity 0.2s linear'\n });\n document.body.appendChild(this.backgroundElement);\n document.body.appendChild(this.domElement);\n var _this = this;\n dom.bind(this.backgroundElement, 'click', function () {\n _this.hide();\n });\n }\n createClass(CenteredDiv, [{\n key: 'show',\n value: function show() {\n var _this = this;\n this.backgroundElement.style.display = 'block';\n this.domElement.style.display = 'block';\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n this.layout();\n Common.defer(function () {\n _this.backgroundElement.style.opacity = 1;\n _this.domElement.style.opacity = 1;\n _this.domElement.style.webkitTransform = 'scale(1)';\n });\n }\n }, {\n key: 'hide',\n value: function hide() {\n var _this = this;\n var hide = function hide() {\n _this.domElement.style.display = 'none';\n _this.backgroundElement.style.display = 'none';\n dom.unbind(_this.domElement, 'webkitTransitionEnd', hide);\n dom.unbind(_this.domElement, 'transitionend', hide);\n dom.unbind(_this.domElement, 'oTransitionEnd', hide);\n };\n dom.bind(this.domElement, 'webkitTransitionEnd', hide);\n dom.bind(this.domElement, 'transitionend', hide);\n dom.bind(this.domElement, 'oTransitionEnd', hide);\n this.backgroundElement.style.opacity = 0;\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n }\n }, {\n key: 'layout',\n value: function layout() {\n this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px';\n this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px';\n }\n }]);\n return CenteredDiv;\n}();\n\nvar styleSheet = ___$insertStyle(\".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .cr.function .property-name{width:100%}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\\n\");\n\ncss.inject(styleSheet);\nvar CSS_NAMESPACE = 'dg';\nvar HIDE_KEY_CODE = 72;\nvar CLOSE_BUTTON_HEIGHT = 20;\nvar DEFAULT_DEFAULT_PRESET_NAME = 'Default';\nvar SUPPORTS_LOCAL_STORAGE = function () {\n try {\n return !!window.localStorage;\n } catch (e) {\n return false;\n }\n}();\nvar SAVE_DIALOGUE = void 0;\nvar autoPlaceVirgin = true;\nvar autoPlaceContainer = void 0;\nvar hide = false;\nvar hideableGuis = [];\nvar GUI = function GUI(pars) {\n var _this = this;\n var params = pars || {};\n this.domElement = document.createElement('div');\n this.__ul = document.createElement('ul');\n this.domElement.appendChild(this.__ul);\n dom.addClass(this.domElement, CSS_NAMESPACE);\n this.__folders = {};\n this.__controllers = [];\n this.__rememberedObjects = [];\n this.__rememberedObjectIndecesToControllers = [];\n this.__listening = [];\n params = Common.defaults(params, {\n closeOnTop: false,\n autoPlace: true,\n width: GUI.DEFAULT_WIDTH\n });\n params = Common.defaults(params, {\n resizable: params.autoPlace,\n hideable: params.autoPlace\n });\n if (!Common.isUndefined(params.load)) {\n if (params.preset) {\n params.load.preset = params.preset;\n }\n } else {\n params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME };\n }\n if (Common.isUndefined(params.parent) && params.hideable) {\n hideableGuis.push(this);\n }\n params.resizable = Common.isUndefined(params.parent) && params.resizable;\n if (params.autoPlace && Common.isUndefined(params.scrollable)) {\n params.scrollable = true;\n }\n var useLocalStorage = SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true';\n var saveToLocalStorage = void 0;\n var titleRow = void 0;\n Object.defineProperties(this,\n {\n parent: {\n get: function get$$1() {\n return params.parent;\n }\n },\n scrollable: {\n get: function get$$1() {\n return params.scrollable;\n }\n },\n autoPlace: {\n get: function get$$1() {\n return params.autoPlace;\n }\n },\n closeOnTop: {\n get: function get$$1() {\n return params.closeOnTop;\n }\n },\n preset: {\n get: function get$$1() {\n if (_this.parent) {\n return _this.getRoot().preset;\n }\n return params.load.preset;\n },\n set: function set$$1(v) {\n if (_this.parent) {\n _this.getRoot().preset = v;\n } else {\n params.load.preset = v;\n }\n setPresetSelectIndex(this);\n _this.revert();\n }\n },\n width: {\n get: function get$$1() {\n return params.width;\n },\n set: function set$$1(v) {\n params.width = v;\n setWidth(_this, v);\n }\n },\n name: {\n get: function get$$1() {\n return params.name;\n },\n set: function set$$1(v) {\n params.name = v;\n if (titleRow) {\n titleRow.innerHTML = params.name;\n }\n }\n },\n closed: {\n get: function get$$1() {\n return params.closed;\n },\n set: function set$$1(v) {\n params.closed = v;\n if (params.closed) {\n dom.addClass(_this.__ul, GUI.CLASS_CLOSED);\n } else {\n dom.removeClass(_this.__ul, GUI.CLASS_CLOSED);\n }\n this.onResize();\n if (_this.__closeButton) {\n _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED;\n }\n }\n },\n load: {\n get: function get$$1() {\n return params.load;\n }\n },\n useLocalStorage: {\n get: function get$$1() {\n return useLocalStorage;\n },\n set: function set$$1(bool) {\n if (SUPPORTS_LOCAL_STORAGE) {\n useLocalStorage = bool;\n if (bool) {\n dom.bind(window, 'unload', saveToLocalStorage);\n } else {\n dom.unbind(window, 'unload', saveToLocalStorage);\n }\n localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool);\n }\n }\n }\n });\n if (Common.isUndefined(params.parent)) {\n this.closed = params.closed || false;\n dom.addClass(this.domElement, GUI.CLASS_MAIN);\n dom.makeSelectable(this.domElement, false);\n if (SUPPORTS_LOCAL_STORAGE) {\n if (useLocalStorage) {\n _this.useLocalStorage = true;\n var savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui'));\n if (savedGui) {\n params.load = JSON.parse(savedGui);\n }\n }\n }\n this.__closeButton = document.createElement('div');\n this.__closeButton.innerHTML = GUI.TEXT_CLOSED;\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON);\n if (params.closeOnTop) {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP);\n this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]);\n } else {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM);\n this.domElement.appendChild(this.__closeButton);\n }\n dom.bind(this.__closeButton, 'click', function () {\n _this.closed = !_this.closed;\n });\n } else {\n if (params.closed === undefined) {\n params.closed = true;\n }\n var titleRowName = document.createTextNode(params.name);\n dom.addClass(titleRowName, 'controller-name');\n titleRow = addRow(_this, titleRowName);\n var onClickTitle = function onClickTitle(e) {\n e.preventDefault();\n _this.closed = !_this.closed;\n return false;\n };\n dom.addClass(this.__ul, GUI.CLASS_CLOSED);\n dom.addClass(titleRow, 'title');\n dom.bind(titleRow, 'click', onClickTitle);\n if (!params.closed) {\n this.closed = false;\n }\n }\n if (params.autoPlace) {\n if (Common.isUndefined(params.parent)) {\n if (autoPlaceVirgin) {\n autoPlaceContainer = document.createElement('div');\n dom.addClass(autoPlaceContainer, CSS_NAMESPACE);\n dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER);\n document.body.appendChild(autoPlaceContainer);\n autoPlaceVirgin = false;\n }\n autoPlaceContainer.appendChild(this.domElement);\n dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE);\n }\n if (!this.parent) {\n setWidth(_this, params.width);\n }\n }\n this.__resizeHandler = function () {\n _this.onResizeDebounced();\n };\n dom.bind(window, 'resize', this.__resizeHandler);\n dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler);\n dom.bind(this.__ul, 'transitionend', this.__resizeHandler);\n dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler);\n this.onResize();\n if (params.resizable) {\n addResizeHandle(this);\n }\n saveToLocalStorage = function saveToLocalStorage() {\n if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') {\n localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject()));\n }\n };\n this.saveToLocalStorageIfPossible = saveToLocalStorage;\n function resetWidth() {\n var root = _this.getRoot();\n root.width += 1;\n Common.defer(function () {\n root.width -= 1;\n });\n }\n if (!params.parent) {\n resetWidth();\n }\n};\nGUI.toggleHide = function () {\n hide = !hide;\n Common.each(hideableGuis, function (gui) {\n gui.domElement.style.display = hide ? 'none' : '';\n });\n};\nGUI.CLASS_AUTO_PLACE = 'a';\nGUI.CLASS_AUTO_PLACE_CONTAINER = 'ac';\nGUI.CLASS_MAIN = 'main';\nGUI.CLASS_CONTROLLER_ROW = 'cr';\nGUI.CLASS_TOO_TALL = 'taller-than-window';\nGUI.CLASS_CLOSED = 'closed';\nGUI.CLASS_CLOSE_BUTTON = 'close-button';\nGUI.CLASS_CLOSE_TOP = 'close-top';\nGUI.CLASS_CLOSE_BOTTOM = 'close-bottom';\nGUI.CLASS_DRAG = 'drag';\nGUI.DEFAULT_WIDTH = 245;\nGUI.TEXT_CLOSED = 'Close Controls';\nGUI.TEXT_OPEN = 'Open Controls';\nGUI._keydownHandler = function (e) {\n if (document.activeElement.type !== 'text' && (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) {\n GUI.toggleHide();\n }\n};\ndom.bind(window, 'keydown', GUI._keydownHandler, false);\nCommon.extend(GUI.prototype,\n{\n add: function add(object, property) {\n return _add(this, object, property, {\n factoryArgs: Array.prototype.slice.call(arguments, 2)\n });\n },\n addColor: function addColor(object, property) {\n return _add(this, object, property, {\n color: true\n });\n },\n remove: function remove(controller) {\n this.__ul.removeChild(controller.__li);\n this.__controllers.splice(this.__controllers.indexOf(controller), 1);\n var _this = this;\n Common.defer(function () {\n _this.onResize();\n });\n },\n destroy: function destroy() {\n if (this.parent) {\n throw new Error('Only the root GUI should be removed with .destroy(). ' + 'For subfolders, use gui.removeFolder(folder) instead.');\n }\n if (this.autoPlace) {\n autoPlaceContainer.removeChild(this.domElement);\n }\n var _this = this;\n Common.each(this.__folders, function (subfolder) {\n _this.removeFolder(subfolder);\n });\n dom.unbind(window, 'keydown', GUI._keydownHandler, false);\n removeListeners(this);\n },\n addFolder: function addFolder(name) {\n if (this.__folders[name] !== undefined) {\n throw new Error('You already have a folder in this GUI by the' + ' name \"' + name + '\"');\n }\n var newGuiParams = { name: name, parent: this };\n newGuiParams.autoPlace = this.autoPlace;\n if (this.load &&\n this.load.folders &&\n this.load.folders[name]) {\n newGuiParams.closed = this.load.folders[name].closed;\n newGuiParams.load = this.load.folders[name];\n }\n var gui = new GUI(newGuiParams);\n this.__folders[name] = gui;\n var li = addRow(this, gui.domElement);\n dom.addClass(li, 'folder');\n return gui;\n },\n removeFolder: function removeFolder(folder) {\n this.__ul.removeChild(folder.domElement.parentElement);\n delete this.__folders[folder.name];\n if (this.load &&\n this.load.folders &&\n this.load.folders[folder.name]) {\n delete this.load.folders[folder.name];\n }\n removeListeners(folder);\n var _this = this;\n Common.each(folder.__folders, function (subfolder) {\n folder.removeFolder(subfolder);\n });\n Common.defer(function () {\n _this.onResize();\n });\n },\n open: function open() {\n this.closed = false;\n },\n close: function close() {\n this.closed = true;\n },\n hide: function hide() {\n this.domElement.style.display = 'none';\n },\n show: function show() {\n this.domElement.style.display = '';\n },\n onResize: function onResize() {\n var root = this.getRoot();\n if (root.scrollable) {\n var top = dom.getOffset(root.__ul).top;\n var h = 0;\n Common.each(root.__ul.childNodes, function (node) {\n if (!(root.autoPlace && node === root.__save_row)) {\n h += dom.getHeight(node);\n }\n });\n if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) {\n dom.addClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px';\n } else {\n dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = 'auto';\n }\n }\n if (root.__resize_handle) {\n Common.defer(function () {\n root.__resize_handle.style.height = root.__ul.offsetHeight + 'px';\n });\n }\n if (root.__closeButton) {\n root.__closeButton.style.width = root.width + 'px';\n }\n },\n onResizeDebounced: Common.debounce(function () {\n this.onResize();\n }, 50),\n remember: function remember() {\n if (Common.isUndefined(SAVE_DIALOGUE)) {\n SAVE_DIALOGUE = new CenteredDiv();\n SAVE_DIALOGUE.domElement.innerHTML = saveDialogContents;\n }\n if (this.parent) {\n throw new Error('You can only call remember on a top level GUI.');\n }\n var _this = this;\n Common.each(Array.prototype.slice.call(arguments), function (object) {\n if (_this.__rememberedObjects.length === 0) {\n addSaveMenu(_this);\n }\n if (_this.__rememberedObjects.indexOf(object) === -1) {\n _this.__rememberedObjects.push(object);\n }\n });\n if (this.autoPlace) {\n setWidth(this, this.width);\n }\n },\n getRoot: function getRoot() {\n var gui = this;\n while (gui.parent) {\n gui = gui.parent;\n }\n return gui;\n },\n getSaveObject: function getSaveObject() {\n var toReturn = this.load;\n toReturn.closed = this.closed;\n if (this.__rememberedObjects.length > 0) {\n toReturn.preset = this.preset;\n if (!toReturn.remembered) {\n toReturn.remembered = {};\n }\n toReturn.remembered[this.preset] = getCurrentPreset(this);\n }\n toReturn.folders = {};\n Common.each(this.__folders, function (element, key) {\n toReturn.folders[key] = element.getSaveObject();\n });\n return toReturn;\n },\n save: function save() {\n if (!this.load.remembered) {\n this.load.remembered = {};\n }\n this.load.remembered[this.preset] = getCurrentPreset(this);\n markPresetModified(this, false);\n this.saveToLocalStorageIfPossible();\n },\n saveAs: function saveAs(presetName) {\n if (!this.load.remembered) {\n this.load.remembered = {};\n this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true);\n }\n this.load.remembered[presetName] = getCurrentPreset(this);\n this.preset = presetName;\n addPresetOption(this, presetName, true);\n this.saveToLocalStorageIfPossible();\n },\n revert: function revert(gui) {\n Common.each(this.__controllers, function (controller) {\n if (!this.getRoot().load.remembered) {\n controller.setValue(controller.initialValue);\n } else {\n recallSavedValue(gui || this.getRoot(), controller);\n }\n if (controller.__onFinishChange) {\n controller.__onFinishChange.call(controller, controller.getValue());\n }\n }, this);\n Common.each(this.__folders, function (folder) {\n folder.revert(folder);\n });\n if (!gui) {\n markPresetModified(this.getRoot(), false);\n }\n },\n listen: function listen(controller) {\n var init = this.__listening.length === 0;\n this.__listening.push(controller);\n if (init) {\n updateDisplays(this.__listening);\n }\n },\n updateDisplay: function updateDisplay() {\n Common.each(this.__controllers, function (controller) {\n controller.updateDisplay();\n });\n Common.each(this.__folders, function (folder) {\n folder.updateDisplay();\n });\n }\n});\nfunction addRow(gui, newDom, liBefore) {\n var li = document.createElement('li');\n if (newDom) {\n li.appendChild(newDom);\n }\n if (liBefore) {\n gui.__ul.insertBefore(li, liBefore);\n } else {\n gui.__ul.appendChild(li);\n }\n gui.onResize();\n return li;\n}\nfunction removeListeners(gui) {\n dom.unbind(window, 'resize', gui.__resizeHandler);\n if (gui.saveToLocalStorageIfPossible) {\n dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible);\n }\n}\nfunction markPresetModified(gui, modified) {\n var opt = gui.__preset_select[gui.__preset_select.selectedIndex];\n if (modified) {\n opt.innerHTML = opt.value + '*';\n } else {\n opt.innerHTML = opt.value;\n }\n}\nfunction augmentController(gui, li, controller) {\n controller.__li = li;\n controller.__gui = gui;\n Common.extend(controller, {\n options: function options(_options) {\n if (arguments.length > 1) {\n var nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: nextSibling,\n factoryArgs: [Common.toArray(arguments)]\n });\n }\n if (Common.isArray(_options) || Common.isObject(_options)) {\n var _nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: _nextSibling,\n factoryArgs: [_options]\n });\n }\n },\n name: function name(_name) {\n controller.__li.firstElementChild.firstElementChild.innerHTML = _name;\n return controller;\n },\n listen: function listen() {\n controller.__gui.listen(controller);\n return controller;\n },\n remove: function remove() {\n controller.__gui.remove(controller);\n return controller;\n }\n });\n if (controller instanceof NumberControllerSlider) {\n var box = new NumberControllerBox(controller.object, controller.property, { min: controller.__min, max: controller.__max, step: controller.__step });\n Common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function (method) {\n var pc = controller[method];\n var pb = box[method];\n controller[method] = box[method] = function () {\n var args = Array.prototype.slice.call(arguments);\n pb.apply(box, args);\n return pc.apply(controller, args);\n };\n });\n dom.addClass(li, 'has-slider');\n controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild);\n } else if (controller instanceof NumberControllerBox) {\n var r = function r(returned) {\n if (Common.isNumber(controller.__min) && Common.isNumber(controller.__max)) {\n var oldName = controller.__li.firstElementChild.firstElementChild.innerHTML;\n var wasListening = controller.__gui.__listening.indexOf(controller) > -1;\n controller.remove();\n var newController = _add(gui, controller.object, controller.property, {\n before: controller.__li.nextElementSibling,\n factoryArgs: [controller.__min, controller.__max, controller.__step]\n });\n newController.name(oldName);\n if (wasListening) newController.listen();\n return newController;\n }\n return returned;\n };\n controller.min = Common.compose(r, controller.min);\n controller.max = Common.compose(r, controller.max);\n } else if (controller instanceof BooleanController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__checkbox, 'click');\n });\n dom.bind(controller.__checkbox, 'click', function (e) {\n e.stopPropagation();\n });\n } else if (controller instanceof FunctionController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__button, 'click');\n });\n dom.bind(li, 'mouseover', function () {\n dom.addClass(controller.__button, 'hover');\n });\n dom.bind(li, 'mouseout', function () {\n dom.removeClass(controller.__button, 'hover');\n });\n } else if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n controller.updateDisplay = Common.compose(function (val) {\n li.style.borderLeftColor = controller.__color.toString();\n return val;\n }, controller.updateDisplay);\n controller.updateDisplay();\n }\n controller.setValue = Common.compose(function (val) {\n if (gui.getRoot().__preset_select && controller.isModified()) {\n markPresetModified(gui.getRoot(), true);\n }\n return val;\n }, controller.setValue);\n}\nfunction recallSavedValue(gui, controller) {\n var root = gui.getRoot();\n var matchedIndex = root.__rememberedObjects.indexOf(controller.object);\n if (matchedIndex !== -1) {\n var controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex];\n if (controllerMap === undefined) {\n controllerMap = {};\n root.__rememberedObjectIndecesToControllers[matchedIndex] = controllerMap;\n }\n controllerMap[controller.property] = controller;\n if (root.load && root.load.remembered) {\n var presetMap = root.load.remembered;\n var preset = void 0;\n if (presetMap[gui.preset]) {\n preset = presetMap[gui.preset];\n } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) {\n preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME];\n } else {\n return;\n }\n if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) {\n var value = preset[matchedIndex][controller.property];\n controller.initialValue = value;\n controller.setValue(value);\n }\n }\n }\n}\nfunction _add(gui, object, property, params) {\n if (object[property] === undefined) {\n throw new Error('Object \"' + object + '\" has no property \"' + property + '\"');\n }\n var controller = void 0;\n if (params.color) {\n controller = new ColorController(object, property);\n } else {\n var factoryArgs = [object, property].concat(params.factoryArgs);\n controller = ControllerFactory.apply(gui, factoryArgs);\n }\n if (params.before instanceof Controller) {\n params.before = params.before.__li;\n }\n recallSavedValue(gui, controller);\n dom.addClass(controller.domElement, 'c');\n var name = document.createElement('span');\n dom.addClass(name, 'property-name');\n name.innerHTML = controller.property;\n var container = document.createElement('div');\n container.appendChild(name);\n container.appendChild(controller.domElement);\n var li = addRow(gui, container, params.before);\n dom.addClass(li, GUI.CLASS_CONTROLLER_ROW);\n if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n } else {\n dom.addClass(li, _typeof(controller.getValue()));\n }\n augmentController(gui, li, controller);\n gui.__controllers.push(controller);\n return controller;\n}\nfunction getLocalStorageHash(gui, key) {\n return document.location.href + '.' + key;\n}\nfunction addPresetOption(gui, name, setSelected) {\n var opt = document.createElement('option');\n opt.innerHTML = name;\n opt.value = name;\n gui.__preset_select.appendChild(opt);\n if (setSelected) {\n gui.__preset_select.selectedIndex = gui.__preset_select.length - 1;\n }\n}\nfunction showHideExplain(gui, explain) {\n explain.style.display = gui.useLocalStorage ? 'block' : 'none';\n}\nfunction addSaveMenu(gui) {\n var div = gui.__save_row = document.createElement('li');\n dom.addClass(gui.domElement, 'has-save');\n gui.__ul.insertBefore(div, gui.__ul.firstChild);\n dom.addClass(div, 'save-row');\n var gears = document.createElement('span');\n gears.innerHTML = ' ';\n dom.addClass(gears, 'button gears');\n var button = document.createElement('span');\n button.innerHTML = 'Save';\n dom.addClass(button, 'button');\n dom.addClass(button, 'save');\n var button2 = document.createElement('span');\n button2.innerHTML = 'New';\n dom.addClass(button2, 'button');\n dom.addClass(button2, 'save-as');\n var button3 = document.createElement('span');\n button3.innerHTML = 'Revert';\n dom.addClass(button3, 'button');\n dom.addClass(button3, 'revert');\n var select = gui.__preset_select = document.createElement('select');\n if (gui.load && gui.load.remembered) {\n Common.each(gui.load.remembered, function (value, key) {\n addPresetOption(gui, key, key === gui.preset);\n });\n } else {\n addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false);\n }\n dom.bind(select, 'change', function () {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n gui.__preset_select[index].innerHTML = gui.__preset_select[index].value;\n }\n gui.preset = this.value;\n });\n div.appendChild(select);\n div.appendChild(gears);\n div.appendChild(button);\n div.appendChild(button2);\n div.appendChild(button3);\n if (SUPPORTS_LOCAL_STORAGE) {\n var explain = document.getElementById('dg-local-explain');\n var localStorageCheckBox = document.getElementById('dg-local-storage');\n var saveLocally = document.getElementById('dg-save-locally');\n saveLocally.style.display = 'block';\n if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') {\n localStorageCheckBox.setAttribute('checked', 'checked');\n }\n showHideExplain(gui, explain);\n dom.bind(localStorageCheckBox, 'change', function () {\n gui.useLocalStorage = !gui.useLocalStorage;\n showHideExplain(gui, explain);\n });\n }\n var newConstructorTextArea = document.getElementById('dg-new-constructor');\n dom.bind(newConstructorTextArea, 'keydown', function (e) {\n if (e.metaKey && (e.which === 67 || e.keyCode === 67)) {\n SAVE_DIALOGUE.hide();\n }\n });\n dom.bind(gears, 'click', function () {\n newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2);\n SAVE_DIALOGUE.show();\n newConstructorTextArea.focus();\n newConstructorTextArea.select();\n });\n dom.bind(button, 'click', function () {\n gui.save();\n });\n dom.bind(button2, 'click', function () {\n var presetName = prompt('Enter a new preset name.');\n if (presetName) {\n gui.saveAs(presetName);\n }\n });\n dom.bind(button3, 'click', function () {\n gui.revert();\n });\n}\nfunction addResizeHandle(gui) {\n var pmouseX = void 0;\n gui.__resize_handle = document.createElement('div');\n Common.extend(gui.__resize_handle.style, {\n width: '6px',\n marginLeft: '-3px',\n height: '200px',\n cursor: 'ew-resize',\n position: 'absolute'\n });\n function drag(e) {\n e.preventDefault();\n gui.width += pmouseX - e.clientX;\n gui.onResize();\n pmouseX = e.clientX;\n return false;\n }\n function dragStop() {\n dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.unbind(window, 'mousemove', drag);\n dom.unbind(window, 'mouseup', dragStop);\n }\n function dragStart(e) {\n e.preventDefault();\n pmouseX = e.clientX;\n dom.addClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.bind(window, 'mousemove', drag);\n dom.bind(window, 'mouseup', dragStop);\n return false;\n }\n dom.bind(gui.__resize_handle, 'mousedown', dragStart);\n dom.bind(gui.__closeButton, 'mousedown', dragStart);\n gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild);\n}\nfunction setWidth(gui, w) {\n gui.domElement.style.width = w + 'px';\n if (gui.__save_row && gui.autoPlace) {\n gui.__save_row.style.width = w + 'px';\n }\n if (gui.__closeButton) {\n gui.__closeButton.style.width = w + 'px';\n }\n}\nfunction getCurrentPreset(gui, useInitialValues) {\n var toReturn = {};\n Common.each(gui.__rememberedObjects, function (val, index) {\n var savedValues = {};\n var controllerMap = gui.__rememberedObjectIndecesToControllers[index];\n Common.each(controllerMap, function (controller, property) {\n savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue();\n });\n toReturn[index] = savedValues;\n });\n return toReturn;\n}\nfunction setPresetSelectIndex(gui) {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n if (gui.__preset_select[index].value === gui.preset) {\n gui.__preset_select.selectedIndex = index;\n }\n }\n}\nfunction updateDisplays(controllerArray) {\n if (controllerArray.length !== 0) {\n requestAnimationFrame$1.call(window, function () {\n updateDisplays(controllerArray);\n });\n }\n Common.each(controllerArray, function (c) {\n c.updateDisplay();\n });\n}\n\nvar color = {\n Color: Color,\n math: ColorMath,\n interpret: interpret\n};\nvar controllers = {\n Controller: Controller,\n BooleanController: BooleanController,\n OptionController: OptionController,\n StringController: StringController,\n NumberController: NumberController,\n NumberControllerBox: NumberControllerBox,\n NumberControllerSlider: NumberControllerSlider,\n FunctionController: FunctionController,\n ColorController: ColorController\n};\nvar dom$1 = { dom: dom };\nvar gui = { GUI: GUI };\nvar GUI$1 = GUI;\nvar index = {\n color: color,\n controllers: controllers,\n dom: dom$1,\n gui: gui,\n GUI: GUI$1\n};\n\nexport { color, controllers, dom$1 as dom, gui, GUI$1 as GUI };\nexport default index;\n//# sourceMappingURL=dat.gui.module.js.map\n","/* wgpu-matrix@2.5.1, license MIT */\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nlet EPSILON = 0.000001;\n/**\n * Set the value for EPSILON for various checks\n * @param v - Value to use for EPSILON.\n * @returns previous value of EPSILON;\n */\nfunction setEpsilon(v) {\n const old = EPSILON;\n EPSILON = v;\n return old;\n}\n/**\n * Convert degrees to radians\n * @param degrees - Angle in degrees\n * @returns angle converted to radians\n */\nfunction degToRad(degrees) {\n return degrees * Math.PI / 180;\n}\n/**\n * Convert radians to degrees\n * @param radians - Angle in radians\n * @returns angle converted to degrees\n */\nfunction radToDeg(radians) {\n return radians * 180 / Math.PI;\n}\n/**\n * Lerps between a and b via t\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @returns a + (b - a) * t\n */\nfunction lerp$4(a, b, t) {\n return a + (b - a) * t;\n}\n/**\n * Compute the opposite of lerp. Given a and b and a value between\n * a and b returns a value between 0 and 1. 0 if a, 1 if b.\n * Note: no clamping is done.\n * @param a - start value\n * @param b - end value\n * @param v - value between a and b\n * @returns (v - a) / (b - a)\n */\nfunction inverseLerp(a, b, v) {\n const d = b - a;\n return (Math.abs(b - a) < EPSILON)\n ? a\n : (v - a) / d;\n}\n/**\n * Compute the euclidean modulo\n *\n * ```\n * // table for n / 3\n * -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 <- n\n * ------------------------------------\n * -2 -1 -0 -2 -1 0, 1, 2, 0, 1, 2 <- n % 3\n * 1 2 0 1 2 0, 1, 2, 0, 1, 2 <- euclideanModule(n, 3)\n * ```\n *\n * @param n - dividend\n * @param m - divisor\n * @returns the euclidean modulo of n / m\n */\nfunction euclideanModulo(n, m) {\n return ((n % m) + m) % m;\n}\n\nvar utils = /*#__PURE__*/Object.freeze({\n __proto__: null,\n get EPSILON () { return EPSILON; },\n setEpsilon: setEpsilon,\n degToRad: degToRad,\n radToDeg: radToDeg,\n lerp: lerp$4,\n inverseLerp: inverseLerp,\n euclideanModulo: euclideanModulo\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Vec2 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new Vec2. In other words you can do this\n *\n * const v = vec2.cross(v1, v2); // Creates a new Vec2 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec2.create();\n * vec2.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec2.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet VecType$2 = Float32Array;\n/**\n * Sets the type this library creates for a Vec2\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec2\n */\nfunction setDefaultType$6(ctor) {\n const oldType = VecType$2;\n VecType$2 = ctor;\n return oldType;\n}\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values.\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Vec2's specified type\n * it would be faster to use\n *\n * ```\n * const v = vec2.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Vec2Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `vec2.create` is usually used\n * to create a Vec2 to be filled out as in\n *\n * ```\n * const sum = vec2.create();\n * vec2.add(v1, v2, sum);\n * ```\n *\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nfunction create$5(x = 0, y = 0) {\n const dst = new VecType$2(2);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Vec3 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec3`. In other words you can do this\n *\n * const v = vec3.cross(v1, v2); // Creates a new Vec3 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec3.create();\n * vec3.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec3.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet VecType$1 = Float32Array;\n/**\n * Sets the type this library creates for a Vec3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec3\n */\nfunction setDefaultType$5(ctor) {\n const oldType = VecType$1;\n VecType$1 = ctor;\n return oldType;\n}\n/**\n * Creates a vec3; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nfunction create$4(x, y, z) {\n const dst = new VecType$1(3);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n }\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nconst fromValues$3 = create$5;\n/**\n * Sets the values of a Vec2\n * Also see {@link vec2.create} and {@link vec2.copy}\n *\n * @param x first value\n * @param y second value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set$5(x, y, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = x;\n dst[1] = y;\n return dst;\n}\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nfunction ceil$2(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n return dst;\n}\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nfunction floor$2(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n return dst;\n}\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nfunction round$2(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n return dst;\n}\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nfunction clamp$2(v, min = 0, max = 1, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n return dst;\n}\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nfunction add$3(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n return dst;\n}\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nfunction addScaled$2(a, b, scale, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n return dst;\n}\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nfunction angle$2(a, b) {\n const ax = a[0];\n const ay = a[1];\n const bx = a[0];\n const by = a[1];\n const mag1 = Math.sqrt(ax * ax + ay * ay);\n const mag2 = Math.sqrt(bx * bx + by * by);\n const mag = mag1 * mag2;\n const cosine = mag && dot$3(a, b) / mag;\n return Math.acos(cosine);\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nfunction subtract$3(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nconst sub$3 = subtract$3;\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nfunction equalsApproximately$5(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON;\n}\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nfunction equals$5(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp$3(a, b, t, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n return dst;\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nfunction lerpV$2(a, b, t, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n return dst;\n}\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nfunction max$2(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n return dst;\n}\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nfunction min$2(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n return dst;\n}\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction mulScalar$3(v, k, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n return dst;\n}\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nconst scale$5 = mulScalar$3;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction divScalar$3(v, k, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n return dst;\n}\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nfunction inverse$5(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n return dst;\n}\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nconst invert$4 = inverse$5;\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nfunction cross$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n const z = a[0] * b[1] - a[1] * b[0];\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = z;\n return dst;\n}\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nfunction dot$3(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nfunction length$3(v) {\n const v0 = v[0];\n const v1 = v[1];\n return Math.sqrt(v0 * v0 + v1 * v1);\n}\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nconst len$3 = length$3;\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nfunction lengthSq$3(v) {\n const v0 = v[0];\n const v1 = v[1];\n return v0 * v0 + v1 * v1;\n}\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nconst lenSq$3 = lengthSq$3;\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nfunction distance$2(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return Math.sqrt(dx * dx + dy * dy);\n}\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nconst dist$2 = distance$2;\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nfunction distanceSq$2(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return dx * dx + dy * dy;\n}\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nconst distSq$2 = distanceSq$2;\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nfunction normalize$3(v, dst) {\n dst = dst || new VecType$2(2);\n const v0 = v[0];\n const v1 = v[1];\n const len = Math.sqrt(v0 * v0 + v1 * v1);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n }\n return dst;\n}\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nfunction negate$4(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = -v[0];\n dst[1] = -v[1];\n return dst;\n}\n/**\n * Copies a vector. (same as {@link vec2.clone})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nfunction copy$5(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = v[0];\n dst[1] = v[1];\n return dst;\n}\n/**\n * Clones a vector. (same as {@link vec2.copy})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nconst clone$5 = copy$5;\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nfunction multiply$5(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n return dst;\n}\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nconst mul$5 = multiply$5;\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nfunction divide$2(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n return dst;\n}\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nconst div$2 = divide$2;\n/**\n * Creates a random unit vector * scale\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nfunction random$1(scale = 1, dst) {\n dst = dst || new VecType$2(2);\n const angle = Math.random() * 2 * Math.PI;\n dst[0] = Math.cos(angle) * scale;\n dst[1] = Math.sin(angle) * scale;\n return dst;\n}\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nfunction zero$2(dst) {\n dst = dst || new VecType$2(2);\n dst[0] = 0;\n dst[1] = 0;\n return dst;\n}\n/**\n * transform Vec2 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat4$2(v, m, dst) {\n dst = dst || new VecType$2(2);\n const x = v[0];\n const y = v[1];\n dst[0] = x * m[0] + y * m[4] + m[12];\n dst[1] = x * m[1] + y * m[5] + m[13];\n return dst;\n}\n/**\n * Transforms vec4 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat3$1(v, m, dst) {\n dst = dst || new VecType$2(2);\n const x = v[0];\n const y = v[1];\n dst[0] = m[0] * x + m[4] * y + m[8];\n dst[1] = m[1] * x + m[5] * y + m[9];\n return dst;\n}\n\nvar vec2Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create$5,\n setDefaultType: setDefaultType$6,\n fromValues: fromValues$3,\n set: set$5,\n ceil: ceil$2,\n floor: floor$2,\n round: round$2,\n clamp: clamp$2,\n add: add$3,\n addScaled: addScaled$2,\n angle: angle$2,\n subtract: subtract$3,\n sub: sub$3,\n equalsApproximately: equalsApproximately$5,\n equals: equals$5,\n lerp: lerp$3,\n lerpV: lerpV$2,\n max: max$2,\n min: min$2,\n mulScalar: mulScalar$3,\n scale: scale$5,\n divScalar: divScalar$3,\n inverse: inverse$5,\n invert: invert$4,\n cross: cross$1,\n dot: dot$3,\n length: length$3,\n len: len$3,\n lengthSq: lengthSq$3,\n lenSq: lenSq$3,\n distance: distance$2,\n dist: dist$2,\n distanceSq: distanceSq$2,\n distSq: distSq$2,\n normalize: normalize$3,\n negate: negate$4,\n copy: copy$5,\n clone: clone$5,\n multiply: multiply$5,\n mul: mul$5,\n divide: divide$2,\n div: div$2,\n random: random$1,\n zero: zero$2,\n transformMat4: transformMat4$2,\n transformMat3: transformMat3$1\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * 3x3 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat3.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat3.create();\n * mat3.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat3.identity();\n * const trans = mat3.translation([1, 2, 3]);\n * mat3.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType$1 = Float32Array;\n// This mess is because with Mat3 we have 3 unused elements.\n// For Float32Array and Float64Array that's not an issue\n// but for Array it's troublesome\nconst ctorMap = new Map([\n [Float32Array, () => new Float32Array(12)],\n [Float64Array, () => new Float64Array(12)],\n [Array, () => new Array(12).fill(0)],\n]);\nlet newMat3 = ctorMap.get(Float32Array);\n/**\n * Sets the type this library creates for a Mat3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat3\n */\nfunction setDefaultType$4(ctor) {\n const oldType = MatType$1;\n MatType$1 = ctor;\n newMat3 = ctorMap.get(ctor);\n return oldType;\n}\n/**\n * Create a Mat3 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat3's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat3.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat3Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat3.create` is usually used\n * to create a Mat3 to be filled out as in\n *\n * ```\n * const m = mat3.create();\n * mat3.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @returns matrix created from values.\n */\nfunction create$3(v0, v1, v2, v3, v4, v5, v6, v7, v8) {\n const dst = newMat3();\n // to make the array homogenous\n dst[3] = 0;\n dst[7] = 0;\n dst[11] = 0;\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[4] = v3;\n if (v4 !== undefined) {\n dst[5] = v4;\n if (v5 !== undefined) {\n dst[6] = v5;\n if (v6 !== undefined) {\n dst[8] = v6;\n if (v7 !== undefined) {\n dst[9] = v7;\n if (v8 !== undefined) {\n dst[10] = v8;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return dst;\n}\n/**\n * Sets the values of a Mat3\n * Also see {@link mat3.create} and {@link mat3.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 set from values.\n */\nfunction set$4(v0, v1, v2, v3, v4, v5, v6, v7, v8, dst) {\n dst = dst || newMat3();\n dst[0] = v0;\n dst[1] = v1;\n dst[2] = v2;\n dst[3] = 0;\n dst[4] = v3;\n dst[5] = v4;\n dst[6] = v5;\n dst[7] = 0;\n dst[8] = v6;\n dst[9] = v7;\n dst[10] = v8;\n dst[11] = 0;\n return dst;\n}\n/**\n * Creates a Mat3 from the upper left 3x3 part of a Mat4\n * @param m4 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from m4\n */\nfunction fromMat4(m4, dst) {\n dst = dst || newMat3();\n dst[0] = m4[0];\n dst[1] = m4[1];\n dst[2] = m4[2];\n dst[3] = 0;\n dst[4] = m4[4];\n dst[5] = m4[5];\n dst[6] = m4[6];\n dst[7] = 0;\n dst[8] = m4[8];\n dst[9] = m4[9];\n dst[10] = m4[10];\n dst[11] = 0;\n return dst;\n}\n/**\n * Creates a Mat3 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from q\n */\nfunction fromQuat$1(q, dst) {\n dst = dst || newMat3();\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n dst[0] = 1 - yy - zz;\n dst[1] = yx + wz;\n dst[2] = zx - wy;\n dst[3] = 0;\n dst[4] = yx - wz;\n dst[5] = 1 - xx - zz;\n dst[6] = zy + wx;\n dst[7] = 0;\n dst[8] = zx + wy;\n dst[9] = zy - wx;\n dst[10] = 1 - xx - yy;\n dst[11] = 0;\n return dst;\n}\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nfunction negate$3(m, dst) {\n dst = dst || newMat3();\n dst[0] = -m[0];\n dst[1] = -m[1];\n dst[2] = -m[2];\n dst[4] = -m[4];\n dst[5] = -m[5];\n dst[6] = -m[6];\n dst[8] = -m[8];\n dst[9] = -m[9];\n dst[10] = -m[10];\n return dst;\n}\n/**\n * Copies a matrix. (same as {@link mat3.clone})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nfunction copy$4(m, dst) {\n dst = dst || newMat3();\n dst[0] = m[0];\n dst[1] = m[1];\n dst[2] = m[2];\n dst[4] = m[4];\n dst[5] = m[5];\n dst[6] = m[6];\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n return dst;\n}\n/**\n * Copies a matrix (same as {@link mat3.copy})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nconst clone$4 = copy$4;\n/**\n * Check if 2 matrices are approximately equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are approximately equal\n */\nfunction equalsApproximately$4(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[4] - b[4]) < EPSILON &&\n Math.abs(a[5] - b[5]) < EPSILON &&\n Math.abs(a[6] - b[6]) < EPSILON &&\n Math.abs(a[8] - b[8]) < EPSILON &&\n Math.abs(a[9] - b[9]) < EPSILON &&\n Math.abs(a[10] - b[10]) < EPSILON;\n}\n/**\n * Check if 2 matrices are exactly equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are exactly equal\n */\nfunction equals$4(a, b) {\n return a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[4] === b[4] &&\n a[5] === b[5] &&\n a[6] === b[6] &&\n a[8] === b[8] &&\n a[9] === b[9] &&\n a[10] === b[10];\n}\n/**\n * Creates a 3-by-3 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 3-by-3 identity matrix.\n */\nfunction identity$2(dst) {\n dst = dst || newMat3();\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nfunction transpose$1(m, dst) {\n dst = dst || newMat3();\n if (dst === m) {\n let t;\n // 0 1 2\n // 4 5 6\n // 8 9 10\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n return dst;\n }\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n dst[0] = m00;\n dst[1] = m10;\n dst[2] = m20;\n dst[4] = m01;\n dst[5] = m11;\n dst[6] = m21;\n dst[8] = m02;\n dst[9] = m12;\n dst[10] = m22;\n return dst;\n}\n/**\n * Computes the inverse of a 3-by-3 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nfunction inverse$4(m, dst) {\n dst = dst || newMat3();\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const b01 = m22 * m11 - m12 * m21;\n const b11 = -m22 * m10 + m12 * m20;\n const b21 = m21 * m10 - m11 * m20;\n const invDet = 1 / (m00 * b01 + m01 * b11 + m02 * b21);\n dst[0] = b01 * invDet;\n dst[1] = (-m22 * m01 + m02 * m21) * invDet;\n dst[2] = (m12 * m01 - m02 * m11) * invDet;\n dst[4] = b11 * invDet;\n dst[5] = (m22 * m00 - m02 * m20) * invDet;\n dst[6] = (-m12 * m00 + m02 * m10) * invDet;\n dst[8] = b21 * invDet;\n dst[9] = (-m21 * m00 + m01 * m20) * invDet;\n dst[10] = (m11 * m00 - m01 * m10) * invDet;\n return dst;\n}\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nfunction determinant$1(m) {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n return m00 * (m11 * m22 - m21 * m12) -\n m10 * (m01 * m22 - m21 * m02) +\n m20 * (m01 * m12 - m11 * m02);\n}\n/**\n * Computes the inverse of a 3-by-3 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nconst invert$3 = inverse$4;\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nfunction multiply$4(a, b, dst) {\n dst = dst || newMat3();\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a10 = a[4 + 0];\n const a11 = a[4 + 1];\n const a12 = a[4 + 2];\n const a20 = a[8 + 0];\n const a21 = a[8 + 1];\n const a22 = a[8 + 2];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b10 = b[4 + 0];\n const b11 = b[4 + 1];\n const b12 = b[4 + 2];\n const b20 = b[8 + 0];\n const b21 = b[8 + 1];\n const b22 = b[8 + 2];\n dst[0] = a00 * b00 + a10 * b01 + a20 * b02;\n dst[1] = a01 * b00 + a11 * b01 + a21 * b02;\n dst[2] = a02 * b00 + a12 * b01 + a22 * b02;\n dst[4] = a00 * b10 + a10 * b11 + a20 * b12;\n dst[5] = a01 * b10 + a11 * b11 + a21 * b12;\n dst[6] = a02 * b10 + a12 * b11 + a22 * b12;\n dst[8] = a00 * b20 + a10 * b21 + a20 * b22;\n dst[9] = a01 * b20 + a11 * b21 + a21 * b22;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22;\n return dst;\n}\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nconst mul$4 = multiply$4;\n/**\n * Sets the translation component of a 3-by-3 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nfunction setTranslation$1(a, v, dst) {\n dst = dst || identity$2();\n if (a !== dst) {\n dst[0] = a[0];\n dst[1] = a[1];\n dst[2] = a[2];\n dst[4] = a[4];\n dst[5] = a[5];\n dst[6] = a[6];\n }\n dst[8] = v[0];\n dst[9] = v[1];\n dst[10] = 1;\n return dst;\n}\n/**\n * Returns the translation component of a 3-by-3 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nfunction getTranslation$2(m, dst) {\n dst = dst || create$5();\n dst[0] = m[8];\n dst[1] = m[9];\n return dst;\n}\n/**\n * Returns an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y,\n * @returns The axis component of m.\n */\nfunction getAxis$2(m, axis, dst) {\n dst = dst || create$5();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n return dst;\n}\n/**\n * Sets an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nfunction setAxis$1(m, v, axis, dst) {\n if (dst !== m) {\n dst = copy$4(m, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nfunction getScaling$2(m, dst) {\n dst = dst || create$5();\n const xx = m[0];\n const xy = m[1];\n const yx = m[4];\n const yy = m[5];\n dst[0] = Math.sqrt(xx * xx + xy * xy);\n dst[1] = Math.sqrt(yx * yx + yy * yy);\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which translates by the given vector v.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nfunction translation$1(v, dst) {\n dst = dst || newMat3();\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[8] = v[0];\n dst[9] = v[1];\n dst[10] = 1;\n return dst;\n}\n/**\n * Translates the given 3-by-3 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nfunction translate$1(m, v, dst) {\n dst = dst || newMat3();\n const v0 = v[0];\n const v1 = v[1];\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n if (m !== dst) {\n dst[0] = m00;\n dst[1] = m01;\n dst[2] = m02;\n dst[4] = m10;\n dst[5] = m11;\n dst[6] = m12;\n }\n dst[8] = m00 * v0 + m10 * v1 + m20;\n dst[9] = m01 * v0 + m11 * v1 + m21;\n dst[10] = m02 * v0 + m12 * v1 + m22;\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which rotates by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotation$1(angleInRadians, dst) {\n dst = dst || newMat3();\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c;\n dst[1] = s;\n dst[2] = 0;\n dst[4] = -s;\n dst[5] = c;\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Rotates the given 3-by-3 matrix by the given angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotate$1(m, angleInRadians, dst) {\n dst = dst || newMat3();\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c * m00 + s * m10;\n dst[1] = c * m01 + s * m11;\n dst[2] = c * m02 + s * m12;\n dst[4] = c * m10 - s * m00;\n dst[5] = c * m11 - s * m01;\n dst[6] = c * m12 - s * m02;\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n }\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * 2 entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction scaling$1(v, dst) {\n dst = dst || newMat3();\n dst[0] = v[0];\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = v[1];\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of 2 entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction scale$4(m, v, dst) {\n dst = dst || newMat3();\n const v0 = v[0];\n const v1 = v[1];\n dst[0] = v0 * m[0 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2];\n dst[4] = v1 * m[1 * 4 + 0];\n dst[5] = v1 * m[1 * 4 + 1];\n dst[6] = v1 * m[1 * 4 + 2];\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n }\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which scales uniformly in each dimension\n * @param s - Amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction uniformScaling$1(s, dst) {\n dst = dst || newMat3();\n dst[0] = s;\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = s;\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given.\n * @param m - The matrix to be modified.\n * @param s - Amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction uniformScale$1(m, s, dst) {\n dst = dst || newMat3();\n dst[0] = s * m[0 * 4 + 0];\n dst[1] = s * m[0 * 4 + 1];\n dst[2] = s * m[0 * 4 + 2];\n dst[4] = s * m[1 * 4 + 0];\n dst[5] = s * m[1 * 4 + 1];\n dst[6] = s * m[1 * 4 + 2];\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n }\n return dst;\n}\n\nvar mat3Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setDefaultType: setDefaultType$4,\n create: create$3,\n set: set$4,\n fromMat4: fromMat4,\n fromQuat: fromQuat$1,\n negate: negate$3,\n copy: copy$4,\n clone: clone$4,\n equalsApproximately: equalsApproximately$4,\n equals: equals$4,\n identity: identity$2,\n transpose: transpose$1,\n inverse: inverse$4,\n determinant: determinant$1,\n invert: invert$3,\n multiply: multiply$4,\n mul: mul$4,\n setTranslation: setTranslation$1,\n getTranslation: getTranslation$2,\n getAxis: getAxis$2,\n setAxis: setAxis$1,\n getScaling: getScaling$2,\n translation: translation$1,\n translate: translate$1,\n rotation: rotation$1,\n rotate: rotate$1,\n scaling: scaling$1,\n scale: scale$4,\n uniformScaling: uniformScaling$1,\n uniformScale: uniformScale$1\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a vec3; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nconst fromValues$2 = create$4;\n/**\n * Sets the values of a Vec3\n * Also see {@link vec3.create} and {@link vec3.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set$3(x, y, z, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n return dst;\n}\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nfunction ceil$1(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n return dst;\n}\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nfunction floor$1(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n return dst;\n}\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nfunction round$1(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n return dst;\n}\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nfunction clamp$1(v, min = 0, max = 1, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n return dst;\n}\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nfunction add$2(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n return dst;\n}\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nfunction addScaled$1(a, b, scale, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n return dst;\n}\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nfunction angle$1(a, b) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = a[0];\n const by = a[1];\n const bz = a[2];\n const mag1 = Math.sqrt(ax * ax + ay * ay + az * az);\n const mag2 = Math.sqrt(bx * bx + by * by + bz * bz);\n const mag = mag1 * mag2;\n const cosine = mag && dot$2(a, b) / mag;\n return Math.acos(cosine);\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nfunction subtract$2(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nconst sub$2 = subtract$2;\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nfunction equalsApproximately$3(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON;\n}\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nfunction equals$3(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp$2(a, b, t, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n return dst;\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nfunction lerpV$1(a, b, t, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n return dst;\n}\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nfunction max$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n return dst;\n}\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nfunction min$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n return dst;\n}\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction mulScalar$2(v, k, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n return dst;\n}\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nconst scale$3 = mulScalar$2;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction divScalar$2(v, k, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n return dst;\n}\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nfunction inverse$3(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n return dst;\n}\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nconst invert$2 = inverse$3;\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nfunction cross(a, b, dst) {\n dst = dst || new VecType$1(3);\n const t1 = a[2] * b[0] - a[0] * b[2];\n const t2 = a[0] * b[1] - a[1] * b[0];\n dst[0] = a[1] * b[2] - a[2] * b[1];\n dst[1] = t1;\n dst[2] = t2;\n return dst;\n}\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nfunction dot$2(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]);\n}\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nfunction length$2(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n}\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nconst len$2 = length$2;\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nfunction lengthSq$2(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return v0 * v0 + v1 * v1 + v2 * v2;\n}\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nconst lenSq$2 = lengthSq$2;\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nfunction distance$1(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n}\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nconst dist$1 = distance$1;\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nfunction distanceSq$1(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return dx * dx + dy * dy + dz * dz;\n}\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nconst distSq$1 = distanceSq$1;\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nfunction normalize$2(v, dst) {\n dst = dst || new VecType$1(3);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n }\n return dst;\n}\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nfunction negate$2(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n return dst;\n}\n/**\n * Copies a vector. (same as {@link vec3.clone})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nfunction copy$3(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n return dst;\n}\n/**\n * Clones a vector. (same as {@link vec3.copy})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nconst clone$3 = copy$3;\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nfunction multiply$3(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n return dst;\n}\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nconst mul$3 = multiply$3;\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nfunction divide$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n return dst;\n}\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nconst div$1 = divide$1;\n/**\n * Creates a random vector\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nfunction random(scale = 1, dst) {\n dst = dst || new VecType$1(3);\n const angle = Math.random() * 2 * Math.PI;\n const z = Math.random() * 2 - 1;\n const zScale = Math.sqrt(1 - z * z) * scale;\n dst[0] = Math.cos(angle) * zScale;\n dst[1] = Math.sin(angle) * zScale;\n dst[2] = z * scale;\n return dst;\n}\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nfunction zero$1(dst) {\n dst = dst || new VecType$1(3);\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n return dst;\n}\n/**\n * transform vec3 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat4$1(v, m, dst) {\n dst = dst || new VecType$1(3);\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = (m[3] * x + m[7] * y + m[11] * z + m[15]) || 1;\n dst[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n dst[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n dst[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return dst;\n}\n/**\n * Transform vec4 by upper 3x3 matrix inside 4x4 matrix.\n * @param v - The direction.\n * @param m - The matrix.\n * @param dst - optional Vec3 to store result. If not passed a new one is created.\n * @returns The transformed vector.\n */\nfunction transformMat4Upper3x3(v, m, dst) {\n dst = dst || new VecType$1(3);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n dst[0] = v0 * m[0 * 4 + 0] + v1 * m[1 * 4 + 0] + v2 * m[2 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1] + v1 * m[1 * 4 + 1] + v2 * m[2 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2] + v1 * m[1 * 4 + 2] + v2 * m[2 * 4 + 2];\n return dst;\n}\n/**\n * Transforms vec3 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat3(v, m, dst) {\n dst = dst || new VecType$1(3);\n const x = v[0];\n const y = v[1];\n const z = v[2];\n dst[0] = x * m[0] + y * m[4] + z * m[8];\n dst[1] = x * m[1] + y * m[5] + z * m[9];\n dst[2] = x * m[2] + y * m[6] + z * m[10];\n return dst;\n}\n/**\n * Transforms vec3 by Quaternion\n * @param v - the vector to transform\n * @param q - the quaternion to transform by\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed\n */\nfunction transformQuat(v, q, dst) {\n dst = dst || new VecType$1(3);\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const w2 = q[3] * 2;\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const uvX = qy * z - qz * y;\n const uvY = qz * x - qx * z;\n const uvZ = qx * y - qy * x;\n dst[0] = x + uvX * w2 + (qy * uvZ - qz * uvY) * 2;\n dst[1] = y + uvY * w2 + (qz * uvX - qx * uvZ) * 2;\n dst[2] = z + uvZ * w2 + (qx * uvY - qy * uvX) * 2;\n return dst;\n}\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nfunction getTranslation$1(m, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nfunction getAxis$1(m, axis, dst) {\n dst = dst || new VecType$1(3);\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nfunction getScaling$1(m, dst) {\n dst = dst || new VecType$1(3);\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return dst;\n}\n\nvar vec3Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create$4,\n setDefaultType: setDefaultType$5,\n fromValues: fromValues$2,\n set: set$3,\n ceil: ceil$1,\n floor: floor$1,\n round: round$1,\n clamp: clamp$1,\n add: add$2,\n addScaled: addScaled$1,\n angle: angle$1,\n subtract: subtract$2,\n sub: sub$2,\n equalsApproximately: equalsApproximately$3,\n equals: equals$3,\n lerp: lerp$2,\n lerpV: lerpV$1,\n max: max$1,\n min: min$1,\n mulScalar: mulScalar$2,\n scale: scale$3,\n divScalar: divScalar$2,\n inverse: inverse$3,\n invert: invert$2,\n cross: cross,\n dot: dot$2,\n length: length$2,\n len: len$2,\n lengthSq: lengthSq$2,\n lenSq: lenSq$2,\n distance: distance$1,\n dist: dist$1,\n distanceSq: distanceSq$1,\n distSq: distSq$1,\n normalize: normalize$2,\n negate: negate$2,\n copy: copy$3,\n clone: clone$3,\n multiply: multiply$3,\n mul: mul$3,\n divide: divide$1,\n div: div$1,\n random: random,\n zero: zero$1,\n transformMat4: transformMat4$1,\n transformMat4Upper3x3: transformMat4Upper3x3,\n transformMat3: transformMat3,\n transformQuat: transformQuat,\n getTranslation: getTranslation$1,\n getAxis: getAxis$1,\n getScaling: getScaling$1\n});\n\n/**\n * 4x4 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat4.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat4.create();\n * mat4.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat4.identity();\n * const trans = mat4.translation([1, 2, 3]);\n * mat4.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType = Float32Array;\n/**\n * Sets the type this library creates for a Mat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat4\n */\nfunction setDefaultType$3(ctor) {\n const oldType = MatType;\n MatType = ctor;\n return oldType;\n}\n/**\n * Create a Mat4 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat4's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat4.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat4Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat4.create` is usually used\n * to create a Mat4 to be filled out as in\n *\n * ```\n * const m = mat4.create();\n * mat4.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @returns created from values.\n */\nfunction create$2(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) {\n const dst = new MatType(16);\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[3] = v3;\n if (v4 !== undefined) {\n dst[4] = v4;\n if (v5 !== undefined) {\n dst[5] = v5;\n if (v6 !== undefined) {\n dst[6] = v6;\n if (v7 !== undefined) {\n dst[7] = v7;\n if (v8 !== undefined) {\n dst[8] = v8;\n if (v9 !== undefined) {\n dst[9] = v9;\n if (v10 !== undefined) {\n dst[10] = v10;\n if (v11 !== undefined) {\n dst[11] = v11;\n if (v12 !== undefined) {\n dst[12] = v12;\n if (v13 !== undefined) {\n dst[13] = v13;\n if (v14 !== undefined) {\n dst[14] = v14;\n if (v15 !== undefined) {\n dst[15] = v15;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return dst;\n}\n/**\n * Sets the values of a Mat4\n * Also see {@link mat4.create} and {@link mat4.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 created from values.\n */\nfunction set$2(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, dst) {\n dst = dst || new MatType(16);\n dst[0] = v0;\n dst[1] = v1;\n dst[2] = v2;\n dst[3] = v3;\n dst[4] = v4;\n dst[5] = v5;\n dst[6] = v6;\n dst[7] = v7;\n dst[8] = v8;\n dst[9] = v9;\n dst[10] = v10;\n dst[11] = v11;\n dst[12] = v12;\n dst[13] = v13;\n dst[14] = v14;\n dst[15] = v15;\n return dst;\n}\n/**\n * Creates a Mat4 from a Mat3\n * @param m3 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from m3\n */\nfunction fromMat3(m3, dst) {\n dst = dst || new MatType(16);\n dst[0] = m3[0];\n dst[1] = m3[1];\n dst[2] = m3[2];\n dst[3] = 0;\n dst[4] = m3[4];\n dst[5] = m3[5];\n dst[6] = m3[6];\n dst[7] = 0;\n dst[8] = m3[8];\n dst[9] = m3[9];\n dst[10] = m3[10];\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Creates a Mat4 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from q\n */\nfunction fromQuat(q, dst) {\n dst = dst || new MatType(16);\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n dst[0] = 1 - yy - zz;\n dst[1] = yx + wz;\n dst[2] = zx - wy;\n dst[3] = 0;\n dst[4] = yx - wz;\n dst[5] = 1 - xx - zz;\n dst[6] = zy + wx;\n dst[7] = 0;\n dst[8] = zx + wy;\n dst[9] = zy - wx;\n dst[10] = 1 - xx - yy;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nfunction negate$1(m, dst) {\n dst = dst || new MatType(16);\n dst[0] = -m[0];\n dst[1] = -m[1];\n dst[2] = -m[2];\n dst[3] = -m[3];\n dst[4] = -m[4];\n dst[5] = -m[5];\n dst[6] = -m[6];\n dst[7] = -m[7];\n dst[8] = -m[8];\n dst[9] = -m[9];\n dst[10] = -m[10];\n dst[11] = -m[11];\n dst[12] = -m[12];\n dst[13] = -m[13];\n dst[14] = -m[14];\n dst[15] = -m[15];\n return dst;\n}\n/**\n * Copies a matrix. (same as {@link mat4.clone})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nfunction copy$2(m, dst) {\n dst = dst || new MatType(16);\n dst[0] = m[0];\n dst[1] = m[1];\n dst[2] = m[2];\n dst[3] = m[3];\n dst[4] = m[4];\n dst[5] = m[5];\n dst[6] = m[6];\n dst[7] = m[7];\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n dst[11] = m[11];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n return dst;\n}\n/**\n * Copies a matrix (same as {@link mat4.copy})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nconst clone$2 = copy$2;\n/**\n * Check if 2 matrices are approximately equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are approximately equal\n */\nfunction equalsApproximately$2(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON &&\n Math.abs(a[4] - b[4]) < EPSILON &&\n Math.abs(a[5] - b[5]) < EPSILON &&\n Math.abs(a[6] - b[6]) < EPSILON &&\n Math.abs(a[7] - b[7]) < EPSILON &&\n Math.abs(a[8] - b[8]) < EPSILON &&\n Math.abs(a[9] - b[9]) < EPSILON &&\n Math.abs(a[10] - b[10]) < EPSILON &&\n Math.abs(a[11] - b[11]) < EPSILON &&\n Math.abs(a[12] - b[12]) < EPSILON &&\n Math.abs(a[13] - b[13]) < EPSILON &&\n Math.abs(a[14] - b[14]) < EPSILON &&\n Math.abs(a[15] - b[15]) < EPSILON;\n}\n/**\n * Check if 2 matrices are exactly equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are exactly equal\n */\nfunction equals$2(a, b) {\n return a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[3] === b[3] &&\n a[4] === b[4] &&\n a[5] === b[5] &&\n a[6] === b[6] &&\n a[7] === b[7] &&\n a[8] === b[8] &&\n a[9] === b[9] &&\n a[10] === b[10] &&\n a[11] === b[11] &&\n a[12] === b[12] &&\n a[13] === b[13] &&\n a[14] === b[14] &&\n a[15] === b[15];\n}\n/**\n * Creates a 4-by-4 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 4-by-4 identity matrix.\n */\nfunction identity$1(dst) {\n dst = dst || new MatType(16);\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nfunction transpose(m, dst) {\n dst = dst || new MatType(16);\n if (dst === m) {\n let t;\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n t = m[3];\n m[3] = m[12];\n m[12] = t;\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n t = m[7];\n m[7] = m[13];\n m[13] = t;\n t = m[11];\n m[11] = m[14];\n m[14] = t;\n return dst;\n }\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n dst[0] = m00;\n dst[1] = m10;\n dst[2] = m20;\n dst[3] = m30;\n dst[4] = m01;\n dst[5] = m11;\n dst[6] = m21;\n dst[7] = m31;\n dst[8] = m02;\n dst[9] = m12;\n dst[10] = m22;\n dst[11] = m32;\n dst[12] = m03;\n dst[13] = m13;\n dst[14] = m23;\n dst[15] = m33;\n return dst;\n}\n/**\n * Computes the inverse of a 4-by-4 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nfunction inverse$2(m, dst) {\n dst = dst || new MatType(16);\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n const tmp12 = m20 * m31;\n const tmp13 = m30 * m21;\n const tmp14 = m10 * m31;\n const tmp15 = m30 * m11;\n const tmp16 = m10 * m21;\n const tmp17 = m20 * m11;\n const tmp18 = m00 * m31;\n const tmp19 = m30 * m01;\n const tmp20 = m00 * m21;\n const tmp21 = m20 * m01;\n const tmp22 = m00 * m11;\n const tmp23 = m10 * m01;\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n const d = 1 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\n dst[0] = d * t0;\n dst[1] = d * t1;\n dst[2] = d * t2;\n dst[3] = d * t3;\n dst[4] = d * ((tmp1 * m10 + tmp2 * m20 + tmp5 * m30) -\n (tmp0 * m10 + tmp3 * m20 + tmp4 * m30));\n dst[5] = d * ((tmp0 * m00 + tmp7 * m20 + tmp8 * m30) -\n (tmp1 * m00 + tmp6 * m20 + tmp9 * m30));\n dst[6] = d * ((tmp3 * m00 + tmp6 * m10 + tmp11 * m30) -\n (tmp2 * m00 + tmp7 * m10 + tmp10 * m30));\n dst[7] = d * ((tmp4 * m00 + tmp9 * m10 + tmp10 * m20) -\n (tmp5 * m00 + tmp8 * m10 + tmp11 * m20));\n dst[8] = d * ((tmp12 * m13 + tmp15 * m23 + tmp16 * m33) -\n (tmp13 * m13 + tmp14 * m23 + tmp17 * m33));\n dst[9] = d * ((tmp13 * m03 + tmp18 * m23 + tmp21 * m33) -\n (tmp12 * m03 + tmp19 * m23 + tmp20 * m33));\n dst[10] = d * ((tmp14 * m03 + tmp19 * m13 + tmp22 * m33) -\n (tmp15 * m03 + tmp18 * m13 + tmp23 * m33));\n dst[11] = d * ((tmp17 * m03 + tmp20 * m13 + tmp23 * m23) -\n (tmp16 * m03 + tmp21 * m13 + tmp22 * m23));\n dst[12] = d * ((tmp14 * m22 + tmp17 * m32 + tmp13 * m12) -\n (tmp16 * m32 + tmp12 * m12 + tmp15 * m22));\n dst[13] = d * ((tmp20 * m32 + tmp12 * m02 + tmp19 * m22) -\n (tmp18 * m22 + tmp21 * m32 + tmp13 * m02));\n dst[14] = d * ((tmp18 * m12 + tmp23 * m32 + tmp15 * m02) -\n (tmp22 * m32 + tmp14 * m02 + tmp19 * m12));\n dst[15] = d * ((tmp22 * m22 + tmp16 * m02 + tmp21 * m12) -\n (tmp20 * m12 + tmp23 * m22 + tmp17 * m02));\n return dst;\n}\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nfunction determinant(m) {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n return m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3;\n}\n/**\n * Computes the inverse of a 4-by-4 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nconst invert$1 = inverse$2;\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nfunction multiply$2(a, b, dst) {\n dst = dst || new MatType(16);\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4 + 0];\n const a11 = a[4 + 1];\n const a12 = a[4 + 2];\n const a13 = a[4 + 3];\n const a20 = a[8 + 0];\n const a21 = a[8 + 1];\n const a22 = a[8 + 2];\n const a23 = a[8 + 3];\n const a30 = a[12 + 0];\n const a31 = a[12 + 1];\n const a32 = a[12 + 2];\n const a33 = a[12 + 3];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b03 = b[3];\n const b10 = b[4 + 0];\n const b11 = b[4 + 1];\n const b12 = b[4 + 2];\n const b13 = b[4 + 3];\n const b20 = b[8 + 0];\n const b21 = b[8 + 1];\n const b22 = b[8 + 2];\n const b23 = b[8 + 3];\n const b30 = b[12 + 0];\n const b31 = b[12 + 1];\n const b32 = b[12 + 2];\n const b33 = b[12 + 3];\n dst[0] = a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03;\n dst[1] = a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03;\n dst[2] = a02 * b00 + a12 * b01 + a22 * b02 + a32 * b03;\n dst[3] = a03 * b00 + a13 * b01 + a23 * b02 + a33 * b03;\n dst[4] = a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13;\n dst[5] = a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13;\n dst[6] = a02 * b10 + a12 * b11 + a22 * b12 + a32 * b13;\n dst[7] = a03 * b10 + a13 * b11 + a23 * b12 + a33 * b13;\n dst[8] = a00 * b20 + a10 * b21 + a20 * b22 + a30 * b23;\n dst[9] = a01 * b20 + a11 * b21 + a21 * b22 + a31 * b23;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22 + a32 * b23;\n dst[11] = a03 * b20 + a13 * b21 + a23 * b22 + a33 * b23;\n dst[12] = a00 * b30 + a10 * b31 + a20 * b32 + a30 * b33;\n dst[13] = a01 * b30 + a11 * b31 + a21 * b32 + a31 * b33;\n dst[14] = a02 * b30 + a12 * b31 + a22 * b32 + a32 * b33;\n dst[15] = a03 * b30 + a13 * b31 + a23 * b32 + a33 * b33;\n return dst;\n}\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nconst mul$2 = multiply$2;\n/**\n * Sets the translation component of a 4-by-4 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nfunction setTranslation(a, v, dst) {\n dst = dst || identity$1();\n if (a !== dst) {\n dst[0] = a[0];\n dst[1] = a[1];\n dst[2] = a[2];\n dst[3] = a[3];\n dst[4] = a[4];\n dst[5] = a[5];\n dst[6] = a[6];\n dst[7] = a[7];\n dst[8] = a[8];\n dst[9] = a[9];\n dst[10] = a[10];\n dst[11] = a[11];\n }\n dst[12] = v[0];\n dst[13] = v[1];\n dst[14] = v[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nfunction getTranslation(m, dst) {\n dst = dst || create$4();\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nfunction getAxis(m, axis, dst) {\n dst = dst || create$4();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n/**\n * Sets an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nfunction setAxis(a, v, axis, dst) {\n if (dst !== a) {\n dst = copy$2(a, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n dst[off + 2] = v[2];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nfunction getScaling(m, dst) {\n dst = dst || create$4();\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return dst;\n}\n/**\n * Computes a 4-by-4 perspective transformation matrix given the angular height\n * of the frustum, the aspect ratio, and the near and far clipping planes. The\n * arguments define a frustum extending in the negative z direction. The given\n * angle is the vertical angle of the frustum, and the horizontal angle is\n * determined to produce the given aspect ratio. The arguments near and far are\n * the distances to the near and far clipping planes. Note that near and far\n * are not z coordinates, but rather they are distances along the negative\n * z-axis. The matrix generated sends the viewing frustum to the unit box.\n * We assume a unit box extending from -1 to 1 in the x and y dimensions and\n * from 0 to 1 in the z dimension.\n *\n * Note: If you pass `Infinity` for zFar then it will produce a projection matrix\n * returns -Infinity for Z when transforming coordinates with Z <= 0 and +Infinity for Z\n * otherwise.\n *\n * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians).\n * @param aspect - The aspect ratio width / height.\n * @param zNear - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param zFar - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The perspective matrix.\n */\nfunction perspective(fieldOfViewYInRadians, aspect, zNear, zFar, dst) {\n dst = dst || new MatType(16);\n const f = Math.tan(Math.PI * 0.5 - 0.5 * fieldOfViewYInRadians);\n dst[0] = f / aspect;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = f;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[11] = -1;\n dst[12] = 0;\n dst[13] = 0;\n dst[15] = 0;\n if (zFar === Infinity) {\n dst[10] = -1;\n dst[14] = -zNear;\n }\n else {\n const rangeInv = 1 / (zNear - zFar);\n dst[10] = zFar * rangeInv;\n dst[14] = zFar * zNear * rangeInv;\n }\n return dst;\n}\n/**\n * Computes a 4-by-4 orthogonal transformation matrix that transforms from\n * the given the left, right, bottom, and top dimensions to -1 +1 in x, and y\n * and 0 to +1 in z.\n * @param left - Left side of the near clipping plane viewport.\n * @param right - Right side of the near clipping plane viewport.\n * @param bottom - Bottom of the near clipping plane viewport.\n * @param top - Top of the near clipping plane viewport.\n * @param near - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param far - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The orthographic projection matrix.\n */\nfunction ortho(left, right, bottom, top, near, far, dst) {\n dst = dst || new MatType(16);\n dst[0] = 2 / (right - left);\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 2 / (top - bottom);\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1 / (near - far);\n dst[11] = 0;\n dst[12] = (right + left) / (left - right);\n dst[13] = (top + bottom) / (bottom - top);\n dst[14] = near / (near - far);\n dst[15] = 1;\n return dst;\n}\n/**\n * Computes a 4-by-4 perspective transformation matrix given the left, right,\n * top, bottom, near and far clipping planes. The arguments define a frustum\n * extending in the negative z direction. The arguments near and far are the\n * distances to the near and far clipping planes. Note that near and far are not\n * z coordinates, but rather they are distances along the negative z-axis. The\n * matrix generated sends the viewing frustum to the unit box. We assume a unit\n * box extending from -1 to 1 in the x and y dimensions and from 0 to 1 in the z\n * dimension.\n * @param left - The x coordinate of the left plane of the box.\n * @param right - The x coordinate of the right plane of the box.\n * @param bottom - The y coordinate of the bottom plane of the box.\n * @param top - The y coordinate of the right plane of the box.\n * @param near - The negative z coordinate of the near plane of the box.\n * @param far - The negative z coordinate of the far plane of the box.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The perspective projection matrix.\n */\nfunction frustum(left, right, bottom, top, near, far, dst) {\n dst = dst || new MatType(16);\n const dx = (right - left);\n const dy = (top - bottom);\n const dz = (near - far);\n dst[0] = 2 * near / dx;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 2 * near / dy;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = (left + right) / dx;\n dst[9] = (top + bottom) / dy;\n dst[10] = far / dz;\n dst[11] = -1;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = near * far / dz;\n dst[15] = 0;\n return dst;\n}\nlet xAxis;\nlet yAxis;\nlet zAxis;\n/**\n * Computes a 4-by-4 aim transformation.\n *\n * This is a matrix which positions an object aiming down positive Z.\n * toward the target.\n *\n * Note: this is **NOT** the inverse of lookAt as lookAt looks at negative Z.\n *\n * @param position - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nfunction aim(position, target, up, dst) {\n dst = dst || new MatType(16);\n xAxis = xAxis || create$4();\n yAxis = yAxis || create$4();\n zAxis = zAxis || create$4();\n normalize$2(subtract$2(target, position, zAxis), zAxis);\n normalize$2(cross(up, zAxis, xAxis), xAxis);\n normalize$2(cross(zAxis, xAxis, yAxis), yAxis);\n dst[0] = xAxis[0];\n dst[1] = xAxis[1];\n dst[2] = xAxis[2];\n dst[3] = 0;\n dst[4] = yAxis[0];\n dst[5] = yAxis[1];\n dst[6] = yAxis[2];\n dst[7] = 0;\n dst[8] = zAxis[0];\n dst[9] = zAxis[1];\n dst[10] = zAxis[2];\n dst[11] = 0;\n dst[12] = position[0];\n dst[13] = position[1];\n dst[14] = position[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Computes a 4-by-4 camera aim transformation.\n *\n * This is a matrix which positions an object aiming down negative Z.\n * toward the target.\n *\n * Note: this is the inverse of `lookAt`\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nfunction cameraAim(eye, target, up, dst) {\n dst = dst || new MatType(16);\n xAxis = xAxis || create$4();\n yAxis = yAxis || create$4();\n zAxis = zAxis || create$4();\n normalize$2(subtract$2(eye, target, zAxis), zAxis);\n normalize$2(cross(up, zAxis, xAxis), xAxis);\n normalize$2(cross(zAxis, xAxis, yAxis), yAxis);\n dst[0] = xAxis[0];\n dst[1] = xAxis[1];\n dst[2] = xAxis[2];\n dst[3] = 0;\n dst[4] = yAxis[0];\n dst[5] = yAxis[1];\n dst[6] = yAxis[2];\n dst[7] = 0;\n dst[8] = zAxis[0];\n dst[9] = zAxis[1];\n dst[10] = zAxis[2];\n dst[11] = 0;\n dst[12] = eye[0];\n dst[13] = eye[1];\n dst[14] = eye[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Computes a 4-by-4 view transformation.\n *\n * This is a view matrix which transforms all other objects\n * to be in the space of the view defined by the parameters.\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The look-at matrix.\n */\nfunction lookAt(eye, target, up, dst) {\n dst = dst || new MatType(16);\n xAxis = xAxis || create$4();\n yAxis = yAxis || create$4();\n zAxis = zAxis || create$4();\n normalize$2(subtract$2(eye, target, zAxis), zAxis);\n normalize$2(cross(up, zAxis, xAxis), xAxis);\n normalize$2(cross(zAxis, xAxis, yAxis), yAxis);\n dst[0] = xAxis[0];\n dst[1] = yAxis[0];\n dst[2] = zAxis[0];\n dst[3] = 0;\n dst[4] = xAxis[1];\n dst[5] = yAxis[1];\n dst[6] = zAxis[1];\n dst[7] = 0;\n dst[8] = xAxis[2];\n dst[9] = yAxis[2];\n dst[10] = zAxis[2];\n dst[11] = 0;\n dst[12] = -(xAxis[0] * eye[0] + xAxis[1] * eye[1] + xAxis[2] * eye[2]);\n dst[13] = -(yAxis[0] * eye[0] + yAxis[1] * eye[1] + yAxis[2] * eye[2]);\n dst[14] = -(zAxis[0] * eye[0] + zAxis[1] * eye[1] + zAxis[2] * eye[2]);\n dst[15] = 1;\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which translates by the given vector v.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nfunction translation(v, dst) {\n dst = dst || new MatType(16);\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n dst[11] = 0;\n dst[12] = v[0];\n dst[13] = v[1];\n dst[14] = v[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Translates the given 4-by-4 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nfunction translate(m, v, dst) {\n dst = dst || new MatType(16);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n if (m !== dst) {\n dst[0] = m00;\n dst[1] = m01;\n dst[2] = m02;\n dst[3] = m03;\n dst[4] = m10;\n dst[5] = m11;\n dst[6] = m12;\n dst[7] = m13;\n dst[8] = m20;\n dst[9] = m21;\n dst[10] = m22;\n dst[11] = m23;\n }\n dst[12] = m00 * v0 + m10 * v1 + m20 * v2 + m30;\n dst[13] = m01 * v0 + m11 * v1 + m21 * v2 + m31;\n dst[14] = m02 * v0 + m12 * v1 + m22 * v2 + m32;\n dst[15] = m03 * v0 + m13 * v1 + m23 * v2 + m33;\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the x-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotationX(angleInRadians, dst) {\n dst = dst || new MatType(16);\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = c;\n dst[6] = s;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = -s;\n dst[10] = c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the x-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotateX$1(m, angleInRadians, dst) {\n dst = dst || new MatType(16);\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[4] = c * m10 + s * m20;\n dst[5] = c * m11 + s * m21;\n dst[6] = c * m12 + s * m22;\n dst[7] = c * m13 + s * m23;\n dst[8] = c * m20 - s * m10;\n dst[9] = c * m21 - s * m11;\n dst[10] = c * m22 - s * m12;\n dst[11] = c * m23 - s * m13;\n if (m !== dst) {\n dst[0] = m[0];\n dst[1] = m[1];\n dst[2] = m[2];\n dst[3] = m[3];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the y-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotationY(angleInRadians, dst) {\n dst = dst || new MatType(16);\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c;\n dst[1] = 0;\n dst[2] = -s;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = s;\n dst[9] = 0;\n dst[10] = c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the y-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotateY$1(m, angleInRadians, dst) {\n dst = dst || new MatType(16);\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c * m00 - s * m20;\n dst[1] = c * m01 - s * m21;\n dst[2] = c * m02 - s * m22;\n dst[3] = c * m03 - s * m23;\n dst[8] = c * m20 + s * m00;\n dst[9] = c * m21 + s * m01;\n dst[10] = c * m22 + s * m02;\n dst[11] = c * m23 + s * m03;\n if (m !== dst) {\n dst[4] = m[4];\n dst[5] = m[5];\n dst[6] = m[6];\n dst[7] = m[7];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the z-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotationZ(angleInRadians, dst) {\n dst = dst || new MatType(16);\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c;\n dst[1] = s;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = -s;\n dst[5] = c;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the z-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotateZ$1(m, angleInRadians, dst) {\n dst = dst || new MatType(16);\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c * m00 + s * m10;\n dst[1] = c * m01 + s * m11;\n dst[2] = c * m02 + s * m12;\n dst[3] = c * m03 + s * m13;\n dst[4] = c * m10 - s * m00;\n dst[5] = c * m11 - s * m01;\n dst[6] = c * m12 - s * m02;\n dst[7] = c * m13 - s * m03;\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n dst[11] = m[11];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nfunction axisRotation(axis, angleInRadians, dst) {\n dst = dst || new MatType(16);\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n dst[0] = xx + (1 - xx) * c;\n dst[1] = x * y * oneMinusCosine + z * s;\n dst[2] = x * z * oneMinusCosine - y * s;\n dst[3] = 0;\n dst[4] = x * y * oneMinusCosine - z * s;\n dst[5] = yy + (1 - yy) * c;\n dst[6] = y * z * oneMinusCosine + x * s;\n dst[7] = 0;\n dst[8] = x * z * oneMinusCosine + y * s;\n dst[9] = y * z * oneMinusCosine - x * s;\n dst[10] = zz + (1 - zz) * c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle. (same as axisRotation)\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nconst rotation = axisRotation;\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle.\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction axisRotate(m, axis, angleInRadians, dst) {\n dst = dst || new MatType(16);\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n const r00 = xx + (1 - xx) * c;\n const r01 = x * y * oneMinusCosine + z * s;\n const r02 = x * z * oneMinusCosine - y * s;\n const r10 = x * y * oneMinusCosine - z * s;\n const r11 = yy + (1 - yy) * c;\n const r12 = y * z * oneMinusCosine + x * s;\n const r20 = x * z * oneMinusCosine + y * s;\n const r21 = y * z * oneMinusCosine - x * s;\n const r22 = zz + (1 - zz) * c;\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n dst[0] = r00 * m00 + r01 * m10 + r02 * m20;\n dst[1] = r00 * m01 + r01 * m11 + r02 * m21;\n dst[2] = r00 * m02 + r01 * m12 + r02 * m22;\n dst[3] = r00 * m03 + r01 * m13 + r02 * m23;\n dst[4] = r10 * m00 + r11 * m10 + r12 * m20;\n dst[5] = r10 * m01 + r11 * m11 + r12 * m21;\n dst[6] = r10 * m02 + r11 * m12 + r12 * m22;\n dst[7] = r10 * m03 + r11 * m13 + r12 * m23;\n dst[8] = r20 * m00 + r21 * m10 + r22 * m20;\n dst[9] = r20 * m01 + r21 * m11 + r22 * m21;\n dst[10] = r20 * m02 + r21 * m12 + r22 * m22;\n dst[11] = r20 * m03 + r21 * m13 + r22 * m23;\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle. (same as rotate)\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nconst rotate = axisRotate;\n/**\n * Creates a 4-by-4 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * three entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction scaling(v, dst) {\n dst = dst || new MatType(16);\n dst[0] = v[0];\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = v[1];\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = v[2];\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Scales the given 4-by-4 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of three entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction scale$2(m, v, dst) {\n dst = dst || new MatType(16);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n dst[0] = v0 * m[0 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2];\n dst[3] = v0 * m[0 * 4 + 3];\n dst[4] = v1 * m[1 * 4 + 0];\n dst[5] = v1 * m[1 * 4 + 1];\n dst[6] = v1 * m[1 * 4 + 2];\n dst[7] = v1 * m[1 * 4 + 3];\n dst[8] = v2 * m[2 * 4 + 0];\n dst[9] = v2 * m[2 * 4 + 1];\n dst[10] = v2 * m[2 * 4 + 2];\n dst[11] = v2 * m[2 * 4 + 3];\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which scales a uniform amount in each dimension.\n * @param s - the amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction uniformScaling(s, dst) {\n dst = dst || new MatType(16);\n dst[0] = s;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = s;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = s;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Scales the given 4-by-4 matrix in each dimension by a uniform scale.\n * @param m - The matrix to be modified.\n * @param s - The amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction uniformScale(m, s, dst) {\n dst = dst || new MatType(16);\n dst[0] = s * m[0 * 4 + 0];\n dst[1] = s * m[0 * 4 + 1];\n dst[2] = s * m[0 * 4 + 2];\n dst[3] = s * m[0 * 4 + 3];\n dst[4] = s * m[1 * 4 + 0];\n dst[5] = s * m[1 * 4 + 1];\n dst[6] = s * m[1 * 4 + 2];\n dst[7] = s * m[1 * 4 + 3];\n dst[8] = s * m[2 * 4 + 0];\n dst[9] = s * m[2 * 4 + 1];\n dst[10] = s * m[2 * 4 + 2];\n dst[11] = s * m[2 * 4 + 3];\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n\nvar mat4Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setDefaultType: setDefaultType$3,\n create: create$2,\n set: set$2,\n fromMat3: fromMat3,\n fromQuat: fromQuat,\n negate: negate$1,\n copy: copy$2,\n clone: clone$2,\n equalsApproximately: equalsApproximately$2,\n equals: equals$2,\n identity: identity$1,\n transpose: transpose,\n inverse: inverse$2,\n determinant: determinant,\n invert: invert$1,\n multiply: multiply$2,\n mul: mul$2,\n setTranslation: setTranslation,\n getTranslation: getTranslation,\n getAxis: getAxis,\n setAxis: setAxis,\n getScaling: getScaling,\n perspective: perspective,\n ortho: ortho,\n frustum: frustum,\n aim: aim,\n cameraAim: cameraAim,\n lookAt: lookAt,\n translation: translation,\n translate: translate,\n rotationX: rotationX,\n rotateX: rotateX$1,\n rotationY: rotationY,\n rotateY: rotateY$1,\n rotationZ: rotationZ,\n rotateZ: rotateZ$1,\n axisRotation: axisRotation,\n rotation: rotation,\n axisRotate: axisRotate,\n rotate: rotate,\n scaling: scaling,\n scale: scale$2,\n uniformScaling: uniformScaling,\n uniformScale: uniformScale\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Quat4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Quat4`. In other words you can do this\n *\n * const v = quat4.cross(v1, v2); // Creates a new Quat4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = quat4.create();\n * quat4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * quat4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet QuatType = Float32Array;\n/**\n * Sets the type this library creates for a Quat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Quat4\n */\nfunction setDefaultType$2(ctor) {\n const oldType = QuatType;\n QuatType = ctor;\n return oldType;\n}\n/**\n * Creates a quat4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nfunction create$1(x, y, z, w) {\n const dst = new QuatType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a Quat; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nconst fromValues$1 = create$1;\n/**\n * Sets the values of a Quat\n * Also see {@link quat.create} and {@link quat.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set$1(x, y, z, w, dst) {\n dst = dst || new QuatType(4);\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n return dst;\n}\n/**\n * Sets a quaternion from the given angle and axis,\n * then returns it.\n *\n * @param axis - the axis to rotate around\n * @param angleInRadians - the angle\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The quaternion that represents the given axis and angle\n **/\nfunction fromAxisAngle(axis, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const s = Math.sin(halfAngle);\n dst[0] = s * axis[0];\n dst[1] = s * axis[1];\n dst[2] = s * axis[2];\n dst[3] = Math.cos(halfAngle);\n return dst;\n}\n/**\n * Gets the rotation axis and angle\n * @param q - quaternion to compute from\n * @param dst - Vec3 to hold result. If not passed in a new one is created.\n * @return angle and axis\n */\nfunction toAxisAngle(q, dst) {\n dst = dst || create$4(4);\n const angle = Math.acos(q[3]) * 2;\n const s = Math.sin(angle * 0.5);\n if (s > EPSILON) {\n dst[0] = q[0] / s;\n dst[1] = q[1] / s;\n dst[2] = q[2] / s;\n }\n else {\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n }\n return { angle, axis: dst };\n}\n/**\n * Returns the angle in degrees between two rotations a and b.\n * @param a - quaternion a\n * @param b - quaternion b\n * @return angle in radians between the two quaternions\n */\nfunction angle(a, b) {\n const d = dot$1(a, b);\n return Math.acos(2 * d * d - 1);\n}\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction multiply$1(a, b, dst) {\n dst = dst || new QuatType(4);\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const bw = b[3];\n dst[0] = ax * bw + aw * bx + ay * bz - az * by;\n dst[1] = ay * bw + aw * by + az * bx - ax * bz;\n dst[2] = az * bw + aw * bz + ax * by - ay * bx;\n dst[3] = aw * bw - ax * bx - ay * by - az * bz;\n return dst;\n}\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nconst mul$1 = multiply$1;\n/**\n * Rotates the given quaternion around the X axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction rotateX(q, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const bx = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n dst[0] = qx * bw + qw * bx;\n dst[1] = qy * bw + qz * bx;\n dst[2] = qz * bw - qy * bx;\n dst[3] = qw * bw - qx * bx;\n return dst;\n}\n/**\n * Rotates the given quaternion around the Y axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction rotateY(q, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const by = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n dst[0] = qx * bw - qz * by;\n dst[1] = qy * bw + qw * by;\n dst[2] = qz * bw + qx * by;\n dst[3] = qw * bw - qy * by;\n return dst;\n}\n/**\n * Rotates the given quaternion around the Z axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction rotateZ(q, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const bz = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n dst[0] = qx * bw + qy * bz;\n dst[1] = qy * bw - qx * bz;\n dst[2] = qz * bw + qw * bz;\n dst[3] = qw * bw - qz * bz;\n return dst;\n}\n/**\n * Spherically linear interpolate between two quaternions\n *\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction slerp(a, b, t, dst) {\n dst = dst || new QuatType(4);\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n let bx = b[0];\n let by = b[1];\n let bz = b[2];\n let bw = b[3];\n let cosOmega = ax * bx + ay * by + az * bz + aw * bw;\n if (cosOmega < 0) {\n cosOmega = -cosOmega;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n let scale0;\n let scale1;\n if (1.0 - cosOmega > EPSILON) {\n const omega = Math.acos(cosOmega);\n const sinOmega = Math.sin(omega);\n scale0 = Math.sin((1 - t) * omega) / sinOmega;\n scale1 = Math.sin(t * omega) / sinOmega;\n }\n else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n dst[0] = scale0 * ax + scale1 * bx;\n dst[1] = scale0 * ay + scale1 * by;\n dst[2] = scale0 * az + scale1 * bz;\n dst[3] = scale0 * aw + scale1 * bw;\n return dst;\n}\n/**\n * Compute the inverse of a quaternion\n *\n * @param q - quaternion to compute the inverse of\n * @returns A quaternion that is the result of a * b\n */\nfunction inverse$1(q, dst) {\n dst = dst || new QuatType(4);\n const a0 = q[0];\n const a1 = q[1];\n const a2 = q[2];\n const a3 = q[3];\n const dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n const invDot = dot ? 1 / dot : 0;\n dst[0] = -a0 * invDot;\n dst[1] = -a1 * invDot;\n dst[2] = -a2 * invDot;\n dst[3] = a3 * invDot;\n return dst;\n}\n/**\n * Compute the conjugate of a quaternion\n * For quaternions with a magnitude of 1 (a unit quaternion)\n * this returns the same as the inverse but is faster to calculate.\n *\n * @param q - quaternion to compute the conjugate of.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The conjugate of q\n */\nfunction conjugate(q, dst) {\n dst = dst || new QuatType(4);\n dst[0] = -q[0];\n dst[1] = -q[1];\n dst[2] = -q[2];\n dst[3] = q[3];\n return dst;\n}\n/**\n * Creates a quaternion from the given rotation matrix.\n *\n * The created quaternion is not normalized.\n *\n * @param m - rotation matrix\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nfunction fromMat(m, dst) {\n dst = dst || new QuatType(4);\n /*\n 0 1 2\n 3 4 5\n 6 7 8\n \n 0 1 2\n 4 5 6\n 8 9 10\n */\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n const trace = m[0] + m[5] + m[10];\n if (trace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n const root = Math.sqrt(trace + 1); // 2w\n dst[3] = 0.5 * root;\n const invRoot = 0.5 / root; // 1/(4w)\n dst[0] = (m[6] - m[9]) * invRoot;\n dst[1] = (m[8] - m[2]) * invRoot;\n dst[2] = (m[1] - m[4]) * invRoot;\n }\n else {\n // |w| <= 1/2\n let i = 0;\n if (m[5] > m[0]) {\n i = 1;\n }\n if (m[10] > m[i * 4 + i]) {\n i = 2;\n }\n const j = (i + 1) % 3;\n const k = (i + 2) % 3;\n const root = Math.sqrt(m[i * 4 + i] - m[j * 4 + j] - m[k * 4 + k] + 1.0);\n dst[i] = 0.5 * root;\n const invRoot = 0.5 / root;\n dst[3] = (m[j * 4 + k] - m[k * 4 + j]) * invRoot;\n dst[j] = (m[j * 4 + i] + m[i * 4 + j]) * invRoot;\n dst[k] = (m[k * 4 + i] + m[i * 4 + k]) * invRoot;\n }\n return dst;\n}\n/**\n * Creates a quaternion from the given euler angle x, y, z using the provided intrinsic order for the conversion.\n *\n * @param xAngleInRadians - angle to rotate around X axis in radians.\n * @param yAngleInRadians - angle to rotate around Y axis in radians.\n * @param zAngleInRadians - angle to rotate around Z axis in radians.\n * @param order - order to apply euler angles\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion representing the same rotation as the euler angles applied in the given order\n */\nfunction fromEuler(xAngleInRadians, yAngleInRadians, zAngleInRadians, order, dst) {\n dst = dst || new QuatType(4);\n const xHalfAngle = xAngleInRadians * 0.5;\n const yHalfAngle = yAngleInRadians * 0.5;\n const zHalfAngle = zAngleInRadians * 0.5;\n const sx = Math.sin(xHalfAngle);\n const cx = Math.cos(xHalfAngle);\n const sy = Math.sin(yHalfAngle);\n const cy = Math.cos(yHalfAngle);\n const sz = Math.sin(zHalfAngle);\n const cz = Math.cos(zHalfAngle);\n switch (order) {\n case 'xyz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'xzy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n case 'yxz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n case 'yzx':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'zxy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'zyx':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n default:\n throw new Error(`Unknown rotation order: ${order}`);\n }\n return dst;\n}\n/**\n * Copies a quaternion. (same as {@link quat.clone})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is a copy of q\n */\nfunction copy$1(q, dst) {\n dst = dst || new QuatType(4);\n dst[0] = q[0];\n dst[1] = q[1];\n dst[2] = q[2];\n dst[3] = q[3];\n return dst;\n}\n/**\n * Clones a quaternion. (same as {@link quat.copy})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A copy of q.\n */\nconst clone$1 = copy$1;\n/**\n * Adds two quaternions; assumes a and b have the same dimension.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the sum of a and b.\n */\nfunction add$1(a, b, dst) {\n dst = dst || new QuatType(4);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n return dst;\n}\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nfunction subtract$1(a, b, dst) {\n dst = dst || new QuatType(4);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n return dst;\n}\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nconst sub$1 = subtract$1;\n/**\n * Multiplies a quaternion by a scalar.\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nfunction mulScalar$1(v, k, dst) {\n dst = dst || new QuatType(4);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n return dst;\n}\n/**\n * Multiplies a quaternion by a scalar. (same as mulScalar)\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nconst scale$1 = mulScalar$1;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nfunction divScalar$1(v, k, dst) {\n dst = dst || new QuatType(4);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n return dst;\n}\n/**\n * Computes the dot product of two quaternions\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns dot product\n */\nfunction dot$1(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n/**\n * Performs linear interpolation on two quaternions.\n * Given quaternions a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param t - Interpolation coefficient.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp$1(a, b, t, dst) {\n dst = dst || new QuatType(4);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n return dst;\n}\n/**\n * Computes the length of quaternion\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nfunction length$1(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n/**\n * Computes the length of quaternion (same as length)\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nconst len$1 = length$1;\n/**\n * Computes the square of the length of quaternion\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nfunction lengthSq$1(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n/**\n * Computes the square of the length of quaternion (same as lengthSq)\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nconst lenSq$1 = lengthSq$1;\n/**\n * Divides a quaternion by its Euclidean length and returns the quotient.\n * @param v - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The normalized quaternion.\n */\nfunction normalize$1(v, dst) {\n dst = dst || new QuatType(4);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n return dst;\n}\n/**\n * Check if 2 quaternions are approximately equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are approximately equal\n */\nfunction equalsApproximately$1(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON;\n}\n/**\n * Check if 2 quaternions are exactly equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are exactly equal\n */\nfunction equals$1(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Creates an identity quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns an identity quaternion\n */\nfunction identity(dst) {\n dst = dst || new QuatType(4);\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n return dst;\n}\nlet tempVec3;\nlet xUnitVec3;\nlet yUnitVec3;\n/**\n * Computes a quaternion to represent the shortest rotation from one vector to another.\n *\n * @param aUnit - the start vector\n * @param bUnit - the end vector\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nfunction rotationTo(aUnit, bUnit, dst) {\n dst = dst || new QuatType(4);\n tempVec3 = tempVec3 || create$4();\n xUnitVec3 = xUnitVec3 || create$4(1, 0, 0);\n yUnitVec3 = yUnitVec3 || create$4(0, 1, 0);\n const dot = dot$2(aUnit, bUnit);\n if (dot < -0.999999) {\n cross(xUnitVec3, aUnit, tempVec3);\n if (len$2(tempVec3) < 0.000001) {\n cross(yUnitVec3, aUnit, tempVec3);\n }\n normalize$2(tempVec3, tempVec3);\n fromAxisAngle(tempVec3, Math.PI, dst);\n return dst;\n }\n else if (dot > 0.999999) {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n return dst;\n }\n else {\n cross(aUnit, bUnit, tempVec3);\n dst[0] = tempVec3[0];\n dst[1] = tempVec3[1];\n dst[2] = tempVec3[2];\n dst[3] = 1 + dot;\n return normalize$1(dst, dst);\n }\n}\nlet tempQuat1;\nlet tempQuat2;\n/**\n * Performs a spherical linear interpolation with two control points\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param c - the third quaternion\n * @param d - the fourth quaternion\n * @param t - Interpolation coefficient 0 to 1\n * @returns result\n */\nfunction sqlerp(a, b, c, d, t, dst) {\n dst = dst || new QuatType(4);\n tempQuat1 = tempQuat1 || new QuatType(4);\n tempQuat2 = tempQuat2 || new QuatType(4);\n slerp(a, d, t, tempQuat1);\n slerp(b, c, t, tempQuat2);\n slerp(tempQuat1, tempQuat2, 2 * t * (1 - t), dst);\n return dst;\n}\n\nvar quatImpl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create$1,\n setDefaultType: setDefaultType$2,\n fromValues: fromValues$1,\n set: set$1,\n fromAxisAngle: fromAxisAngle,\n toAxisAngle: toAxisAngle,\n angle: angle,\n multiply: multiply$1,\n mul: mul$1,\n rotateX: rotateX,\n rotateY: rotateY,\n rotateZ: rotateZ,\n slerp: slerp,\n inverse: inverse$1,\n conjugate: conjugate,\n fromMat: fromMat,\n fromEuler: fromEuler,\n copy: copy$1,\n clone: clone$1,\n add: add$1,\n subtract: subtract$1,\n sub: sub$1,\n mulScalar: mulScalar$1,\n scale: scale$1,\n divScalar: divScalar$1,\n dot: dot$1,\n lerp: lerp$1,\n length: length$1,\n len: len$1,\n lengthSq: lengthSq$1,\n lenSq: lenSq$1,\n normalize: normalize$1,\n equalsApproximately: equalsApproximately$1,\n equals: equals$1,\n identity: identity,\n rotationTo: rotationTo,\n sqlerp: sqlerp\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Vec4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec4`. In other words you can do this\n *\n * const v = vec4.cross(v1, v2); // Creates a new Vec4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec4.create();\n * vec4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet VecType = Float32Array;\n/**\n * Sets the type this library creates for a Vec4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec4\n */\nfunction setDefaultType$1(ctor) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n/**\n * Creates a vec4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nfunction create(x, y, z, w) {\n const dst = new VecType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a vec4; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nconst fromValues = create;\n/**\n * Sets the values of a Vec4\n * Also see {@link vec4.create} and {@link vec4.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set(x, y, z, w, dst) {\n dst = dst || new VecType(4);\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n return dst;\n}\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nfunction ceil(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n dst[3] = Math.ceil(v[3]);\n return dst;\n}\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nfunction floor(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n dst[3] = Math.floor(v[3]);\n return dst;\n}\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nfunction round(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n dst[3] = Math.round(v[3]);\n return dst;\n}\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nfunction clamp(v, min = 0, max = 1, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n dst[3] = Math.min(max, Math.max(min, v[3]));\n return dst;\n}\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nfunction add(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n return dst;\n}\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nfunction addScaled(a, b, scale, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n dst[3] = a[3] + b[3] * scale;\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nfunction subtract(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nconst sub = subtract;\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nfunction equalsApproximately(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON;\n}\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nfunction equals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp(a, b, t, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n return dst;\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nfunction lerpV(a, b, t, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n dst[3] = a[3] + t[3] * (b[3] - a[3]);\n return dst;\n}\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nfunction max(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n dst[3] = Math.max(a[3], b[3]);\n return dst;\n}\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nfunction min(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n dst[3] = Math.min(a[3], b[3]);\n return dst;\n}\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction mulScalar(v, k, dst) {\n dst = dst || new VecType(4);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n return dst;\n}\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nconst scale = mulScalar;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction divScalar(v, k, dst) {\n dst = dst || new VecType(4);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n return dst;\n}\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nfunction inverse(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n dst[3] = 1 / v[3];\n return dst;\n}\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nconst invert = inverse;\n/**\n * Computes the dot product of two vectors\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nfunction dot(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nfunction length(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nconst len = length;\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nfunction lengthSq(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nconst lenSq = lengthSq;\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nfunction distance(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return Math.sqrt(dx * dx + dy * dy + dz * dz + dw * dw);\n}\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nconst dist = distance;\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nfunction distanceSq(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return dx * dx + dy * dy + dz * dz + dw * dw;\n}\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nconst distSq = distanceSq;\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nfunction normalize(v, dst) {\n dst = dst || new VecType(4);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n return dst;\n}\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nfunction negate(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n dst[3] = -v[3];\n return dst;\n}\n/**\n * Copies a vector. (same as {@link vec4.clone})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nfunction copy(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n dst[3] = v[3];\n return dst;\n}\n/**\n * Clones a vector. (same as {@link vec4.copy})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nconst clone = copy;\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nfunction multiply(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n dst[3] = a[3] * b[3];\n return dst;\n}\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nconst mul = multiply;\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nfunction divide(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n dst[3] = a[3] / b[3];\n return dst;\n}\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nconst div = divide;\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nfunction zero(dst) {\n dst = dst || new VecType(4);\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n return dst;\n}\n/**\n * transform vec4 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec4 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat4(v, m, dst) {\n dst = dst || new VecType(4);\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = v[3];\n dst[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n dst[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n dst[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n dst[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return dst;\n}\n\nvar vec4Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create,\n setDefaultType: setDefaultType$1,\n fromValues: fromValues,\n set: set,\n ceil: ceil,\n floor: floor,\n round: round,\n clamp: clamp,\n add: add,\n addScaled: addScaled,\n subtract: subtract,\n sub: sub,\n equalsApproximately: equalsApproximately,\n equals: equals,\n lerp: lerp,\n lerpV: lerpV,\n max: max,\n min: min,\n mulScalar: mulScalar,\n scale: scale,\n divScalar: divScalar,\n inverse: inverse,\n invert: invert,\n dot: dot,\n length: length,\n len: len,\n lengthSq: lengthSq,\n lenSq: lenSq,\n distance: distance,\n dist: dist,\n distanceSq: distanceSq,\n distSq: distSq,\n normalize: normalize,\n negate: negate,\n copy: copy,\n clone: clone,\n multiply: multiply,\n mul: mul,\n divide: divide,\n div: div,\n zero: zero,\n transformMat4: transformMat4\n});\n\n/**\n * Sets the type this library creates for all types\n *\n * example:\n *\n * ```\n * setDefaultType(Float64Array);\n * ```\n *\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n */\nfunction setDefaultType(ctor) {\n setDefaultType$4(ctor);\n setDefaultType$3(ctor);\n setDefaultType$2(ctor);\n setDefaultType$6(ctor);\n setDefaultType$5(ctor);\n setDefaultType$1(ctor);\n}\n\nexport { mat3Impl as mat3, mat4Impl as mat4, quatImpl as quat, setDefaultType, utils, vec2Impl as vec2, vec3Impl as vec3, vec4Impl as vec4 };\n//# sourceMappingURL=wgpu-matrix.module.js.map\n","import { Quat } from 'wgpu-matrix';\nimport { Accessor, BufferView, GlTf, Scene } from './gltf';\nimport { Mat4, Vec3, mat4 } from 'wgpu-matrix';\n\n//NOTE: GLTF code is not generally extensible to all gltf models\n// Modified from Will Usher code found at this link https://www.willusher.io/graphics/2023/05/16/0-to-gltf-first-mesh\n\n// Associates the mode paramete of a gltf primitive object with the primitive's intended render mode\nenum GLTFRenderMode {\n POINTS = 0,\n LINE = 1,\n LINE_LOOP = 2,\n LINE_STRIP = 3,\n TRIANGLES = 4,\n TRIANGLE_STRIP = 5,\n TRIANGLE_FAN = 6,\n}\n\n// Determines how to interpret each element of the structure that is accessed from our accessor\nenum GLTFDataComponentType {\n BYTE = 5120,\n UNSIGNED_BYTE = 5121,\n SHORT = 5122,\n UNSIGNED_SHORT = 5123,\n INT = 5124,\n UNSIGNED_INT = 5125,\n FLOAT = 5126,\n DOUBLE = 5130,\n}\n\n// Determines how to interpret the structure of the values accessed by an accessor\nenum GLTFDataStructureType {\n SCALAR = 0,\n VEC2 = 1,\n VEC3 = 2,\n VEC4 = 3,\n MAT2 = 4,\n MAT3 = 5,\n MAT4 = 6,\n}\n\nexport const alignTo = (val: number, align: number): number => {\n return Math.floor((val + align - 1) / align) * align;\n};\n\nconst parseGltfDataStructureType = (type: string) => {\n switch (type) {\n case 'SCALAR':\n return GLTFDataStructureType.SCALAR;\n case 'VEC2':\n return GLTFDataStructureType.VEC2;\n case 'VEC3':\n return GLTFDataStructureType.VEC3;\n case 'VEC4':\n return GLTFDataStructureType.VEC4;\n case 'MAT2':\n return GLTFDataStructureType.MAT2;\n case 'MAT3':\n return GLTFDataStructureType.MAT3;\n case 'MAT4':\n return GLTFDataStructureType.MAT4;\n default:\n throw Error(`Unhandled glTF Type ${type}`);\n }\n};\n\nconst gltfDataStructureTypeNumComponents = (type: GLTFDataStructureType) => {\n switch (type) {\n case GLTFDataStructureType.SCALAR:\n return 1;\n case GLTFDataStructureType.VEC2:\n return 2;\n case GLTFDataStructureType.VEC3:\n return 3;\n case GLTFDataStructureType.VEC4:\n case GLTFDataStructureType.MAT2:\n return 4;\n case GLTFDataStructureType.MAT3:\n return 9;\n case GLTFDataStructureType.MAT4:\n return 16;\n default:\n throw Error(`Invalid glTF Type ${type}`);\n }\n};\n\n// Note: only returns non-normalized type names,\n// so byte/ubyte = sint8/uint8, not snorm8/unorm8, same for ushort\nconst gltfVertexType = (\n componentType: GLTFDataComponentType,\n type: GLTFDataStructureType\n) => {\n let typeStr = null;\n switch (componentType) {\n case GLTFDataComponentType.BYTE:\n typeStr = 'sint8';\n break;\n case GLTFDataComponentType.UNSIGNED_BYTE:\n typeStr = 'uint8';\n break;\n case GLTFDataComponentType.SHORT:\n typeStr = 'sint16';\n break;\n case GLTFDataComponentType.UNSIGNED_SHORT:\n typeStr = 'uint16';\n break;\n case GLTFDataComponentType.INT:\n typeStr = 'int32';\n break;\n case GLTFDataComponentType.UNSIGNED_INT:\n typeStr = 'uint32';\n break;\n case GLTFDataComponentType.FLOAT:\n typeStr = 'float32';\n break;\n default:\n throw Error(`Unrecognized or unsupported glTF type ${componentType}`);\n }\n\n switch (gltfDataStructureTypeNumComponents(type)) {\n case 1:\n return typeStr;\n case 2:\n return typeStr + 'x2';\n case 3:\n return typeStr + 'x3';\n case 4:\n return typeStr + 'x4';\n // Vertex attributes should never be a matrix type, so we should not hit this\n // unless we're passed an improperly created gltf file\n default:\n throw Error(`Invalid number of components for gltfType: ${type}`);\n }\n};\n\nconst gltfElementSize = (\n componentType: GLTFDataComponentType,\n type: GLTFDataStructureType\n) => {\n let componentSize = 0;\n switch (componentType) {\n case GLTFDataComponentType.BYTE:\n componentSize = 1;\n break;\n case GLTFDataComponentType.UNSIGNED_BYTE:\n componentSize = 1;\n break;\n case GLTFDataComponentType.SHORT:\n componentSize = 2;\n break;\n case GLTFDataComponentType.UNSIGNED_SHORT:\n componentSize = 2;\n break;\n case GLTFDataComponentType.INT:\n componentSize = 4;\n break;\n case GLTFDataComponentType.UNSIGNED_INT:\n componentSize = 4;\n break;\n case GLTFDataComponentType.FLOAT:\n componentSize = 4;\n break;\n case GLTFDataComponentType.DOUBLE:\n componentSize = 8;\n break;\n default:\n throw Error('Unrecognized GLTF Component Type?');\n }\n return gltfDataStructureTypeNumComponents(type) * componentSize;\n};\n\n// Convert differently depending on if the shader is a vertex or compute shader\nconst convertGPUVertexFormatToWGSLFormat = (vertexFormat: GPUVertexFormat) => {\n switch (vertexFormat) {\n case 'float32': {\n return 'f32';\n }\n case 'float32x2': {\n return 'vec2';\n }\n case 'float32x3': {\n return 'vec3';\n }\n case 'float32x4': {\n return 'vec4';\n }\n case 'uint32': {\n return 'u32';\n }\n case 'uint32x2': {\n return 'vec2';\n }\n case 'uint32x3': {\n return 'vec3';\n }\n case 'uint32x4': {\n return 'vec4';\n }\n case 'uint8x2': {\n return 'vec2';\n }\n case 'uint8x4': {\n return 'vec4';\n }\n case 'uint16x4': {\n return 'vec4';\n }\n case 'uint16x2': {\n return 'vec2';\n }\n default: {\n return 'f32';\n }\n }\n};\n\nexport class GLTFBuffer {\n buffer: Uint8Array;\n constructor(buffer: ArrayBuffer, offset: number, size: number) {\n this.buffer = new Uint8Array(buffer, offset, size);\n }\n}\n\nexport class GLTFBufferView {\n byteLength: number;\n byteStride: number;\n view: Uint8Array;\n needsUpload: boolean;\n gpuBuffer: GPUBuffer;\n usage: number;\n constructor(buffer: GLTFBuffer, view: BufferView) {\n this.byteLength = view['byteLength'];\n this.byteStride = 0;\n if (view['byteStride'] !== undefined) {\n this.byteStride = view['byteStride'];\n }\n // Create the buffer view. Note that subarray creates a new typed\n // view over the same array buffer, we do not make a copy here.\n let viewOffset = 0;\n if (view['byteOffset'] !== undefined) {\n viewOffset = view['byteOffset'];\n }\n // NOTE: This creates a uint8array view into the buffer!\n // When we call .buffer on this view, it will give us back the original array buffer\n // Accordingly, when converting our buffer from a uint8array to a float32array representation\n // we need to apply the byte offset of our view when creating our buffer\n // ie new Float32Array(this.view.buffer, this.view.byteOffset, this.view.byteLength)\n this.view = buffer.buffer.subarray(\n viewOffset,\n viewOffset + this.byteLength\n );\n\n this.needsUpload = false;\n this.gpuBuffer = null;\n this.usage = 0;\n }\n\n addUsage(usage: number) {\n this.usage = this.usage | usage;\n }\n\n upload(device: GPUDevice) {\n // Note: must align to 4 byte size when mapped at creation is true\n const buf: GPUBuffer = device.createBuffer({\n size: alignTo(this.view.byteLength, 4),\n usage: this.usage,\n mappedAtCreation: true,\n });\n new Uint8Array(buf.getMappedRange()).set(this.view);\n buf.unmap();\n this.gpuBuffer = buf;\n this.needsUpload = false;\n }\n}\n\nexport class GLTFAccessor {\n count: number;\n componentType: GLTFDataComponentType;\n structureType: GLTFDataStructureType;\n view: GLTFBufferView;\n byteOffset: number;\n constructor(view: GLTFBufferView, accessor: Accessor) {\n this.count = accessor['count'];\n this.componentType = accessor['componentType'];\n this.structureType = parseGltfDataStructureType(accessor['type']);\n this.view = view;\n this.byteOffset = 0;\n if (accessor['byteOffset'] !== undefined) {\n this.byteOffset = accessor['byteOffset'];\n }\n }\n\n get byteStride() {\n const elementSize = gltfElementSize(this.componentType, this.structureType);\n return Math.max(elementSize, this.view.byteStride);\n }\n\n get byteLength() {\n return this.count * this.byteStride;\n }\n\n // Get the vertex attribute type for accessors that are used as vertex attributes\n get vertexType() {\n return gltfVertexType(this.componentType, this.structureType);\n }\n}\n\ninterface AttributeMapInterface {\n [key: string]: GLTFAccessor;\n}\n\nexport class GLTFPrimitive {\n topology: GLTFRenderMode;\n renderPipeline: GPURenderPipeline;\n private attributeMap: AttributeMapInterface;\n private attributes: string[] = [];\n constructor(\n topology: GLTFRenderMode,\n attributeMap: AttributeMapInterface,\n attributes: string[]\n ) {\n this.topology = topology;\n this.renderPipeline = null;\n // Maps attribute names to accessors\n this.attributeMap = attributeMap;\n this.attributes = attributes;\n\n for (const key in this.attributeMap) {\n this.attributeMap[key].view.needsUpload = true;\n if (key === 'INDICES') {\n this.attributeMap['INDICES'].view.addUsage(GPUBufferUsage.INDEX);\n continue;\n }\n this.attributeMap[key].view.addUsage(GPUBufferUsage.VERTEX);\n }\n }\n\n buildRenderPipeline(\n device: GPUDevice,\n vertexShader: string,\n fragmentShader: string,\n colorFormat: GPUTextureFormat,\n depthFormat: GPUTextureFormat,\n bgLayouts: GPUBindGroupLayout[],\n label: string\n ) {\n // For now, just check if the attributeMap contains a given attribute using map.has(), and add it if it does\n // POSITION, NORMAL, TEXCOORD_0, JOINTS_0, WEIGHTS_0 for order\n // Vertex attribute state and shader stage\n let VertexInputShaderString = `struct VertexInput {\\n`;\n const vertexBuffers: GPUVertexBufferLayout[] = this.attributes.map(\n (attr, idx) => {\n const vertexFormat: GPUVertexFormat =\n this.attributeMap[attr].vertexType;\n const attrString = attr.toLowerCase().replace(/_0$/, '');\n VertexInputShaderString += `\\t@location(${idx}) ${attrString}: ${convertGPUVertexFormatToWGSLFormat(\n vertexFormat\n )},\\n`;\n return {\n arrayStride: this.attributeMap[attr].byteStride,\n attributes: [\n {\n format: this.attributeMap[attr].vertexType,\n offset: this.attributeMap[attr].byteOffset,\n shaderLocation: idx,\n },\n ],\n } as GPUVertexBufferLayout;\n }\n );\n VertexInputShaderString += '}';\n\n const vertexState: GPUVertexState = {\n // Shader stage info\n module: device.createShaderModule({\n code: VertexInputShaderString + vertexShader,\n }),\n buffers: vertexBuffers,\n };\n\n const fragmentState: GPUFragmentState = {\n // Shader info\n module: device.createShaderModule({\n code: VertexInputShaderString + fragmentShader,\n }),\n // Output render target info\n targets: [{ format: colorFormat }],\n };\n\n // Our loader only supports triangle lists and strips, so by default we set\n // the primitive topology to triangle list, and check if it's instead a triangle strip\n const primitive: GPUPrimitiveState = { topology: 'triangle-list' };\n if (this.topology == GLTFRenderMode.TRIANGLE_STRIP) {\n primitive.topology = 'triangle-strip';\n primitive.stripIndexFormat = this.attributeMap['INDICES'].vertexType;\n }\n\n const layout: GPUPipelineLayout = device.createPipelineLayout({\n bindGroupLayouts: bgLayouts,\n label: `${label}.pipelineLayout`,\n });\n\n const rpDescript: GPURenderPipelineDescriptor = {\n layout: layout,\n label: `${label}.pipeline`,\n vertex: vertexState,\n fragment: fragmentState,\n primitive: primitive,\n depthStencil: {\n format: depthFormat,\n depthWriteEnabled: true,\n depthCompare: 'less',\n },\n };\n\n this.renderPipeline = device.createRenderPipeline(rpDescript);\n }\n\n render(renderPassEncoder: GPURenderPassEncoder, bindGroups: GPUBindGroup[]) {\n renderPassEncoder.setPipeline(this.renderPipeline);\n bindGroups.forEach((bg, idx) => {\n renderPassEncoder.setBindGroup(idx, bg);\n });\n\n //if skin do something with bone bind group\n this.attributes.map((attr, idx) => {\n renderPassEncoder.setVertexBuffer(\n idx,\n this.attributeMap[attr].view.gpuBuffer,\n this.attributeMap[attr].byteOffset,\n this.attributeMap[attr].byteLength\n );\n });\n\n if (this.attributeMap['INDICES']) {\n renderPassEncoder.setIndexBuffer(\n this.attributeMap['INDICES'].view.gpuBuffer,\n this.attributeMap['INDICES'].vertexType,\n this.attributeMap['INDICES'].byteOffset,\n this.attributeMap['INDICES'].byteLength\n );\n renderPassEncoder.drawIndexed(this.attributeMap['INDICES'].count);\n } else {\n renderPassEncoder.draw(this.attributeMap['POSITION'].count);\n }\n }\n}\n\nexport class GLTFMesh {\n name: string;\n primitives: GLTFPrimitive[];\n constructor(name: string, primitives: GLTFPrimitive[]) {\n this.name = name;\n this.primitives = primitives;\n }\n\n buildRenderPipeline(\n device: GPUDevice,\n vertexShader: string,\n fragmentShader: string,\n colorFormat: GPUTextureFormat,\n depthFormat: GPUTextureFormat,\n bgLayouts: GPUBindGroupLayout[]\n ) {\n // We take a pretty simple approach to start. Just loop through all the primitives and\n // build their respective render pipelines\n for (let i = 0; i < this.primitives.length; ++i) {\n this.primitives[i].buildRenderPipeline(\n device,\n vertexShader,\n fragmentShader,\n colorFormat,\n depthFormat,\n bgLayouts,\n `PrimitivePipeline${i}`\n );\n }\n }\n\n render(renderPassEncoder: GPURenderPassEncoder, bindGroups: GPUBindGroup[]) {\n // We take a pretty simple approach to start. Just loop through all the primitives and\n // call their individual draw methods\n for (let i = 0; i < this.primitives.length; ++i) {\n this.primitives[i].render(renderPassEncoder, bindGroups);\n }\n }\n}\n\nexport const validateGLBHeader = (header: DataView) => {\n if (header.getUint32(0, true) != 0x46546c67) {\n throw Error('Provided file is not a glB file');\n }\n if (header.getUint32(4, true) != 2) {\n throw Error('Provided file is glTF 2.0 file');\n }\n};\n\nexport const validateBinaryHeader = (header: Uint32Array) => {\n if (header[1] != 0x004e4942) {\n throw Error(\n 'Invalid glB: The second chunk of the glB file is not a binary chunk!'\n );\n }\n};\n\ntype TempReturn = {\n meshes: GLTFMesh[];\n nodes: GLTFNode[];\n scenes: GLTFScene[];\n skins: GLTFSkin[];\n};\n\nexport class BaseTransformation {\n position: Vec3;\n rotation: Quat;\n scale: Vec3;\n constructor(\n // Identity translation vec3\n position = [0, 0, 0],\n // Identity quaternion\n rotation = [0, 0, 0, 1],\n // Identity scale vec3\n scale = [1, 1, 1]\n ) {\n this.position = position;\n this.rotation = rotation;\n this.scale = scale;\n }\n getMatrix(): Mat4 {\n // Analagous to let transformationMatrix: mat4x4f = translation * rotation * scale;\n const dst = mat4.identity();\n // Scale the transformation Matrix\n mat4.scale(dst, this.scale, dst);\n // Calculate the rotationMatrix from the quaternion\n const rotationMatrix = mat4.fromQuat(this.rotation);\n // Apply the rotation Matrix to the scaleMatrix (rotMat * scaleMat)\n mat4.multiply(rotationMatrix, dst, dst);\n // Translate the transformationMatrix\n mat4.translate(dst, this.position, dst);\n return dst;\n }\n}\n\nexport class GLTFNode {\n name: string;\n source: BaseTransformation;\n parent: GLTFNode | null;\n children: GLTFNode[];\n // Transforms all node's children in the node's local space, with node itself acting as the origin\n localMatrix: Mat4;\n worldMatrix: Mat4;\n // List of Meshes associated with this node\n drawables: GLTFMesh[];\n test = 0;\n skin?: GLTFSkin;\n private nodeTransformGPUBuffer: GPUBuffer;\n private nodeTransformBindGroup: GPUBindGroup;\n\n constructor(\n device: GPUDevice,\n bgLayout: GPUBindGroupLayout,\n source: BaseTransformation,\n name?: string,\n skin?: GLTFSkin\n ) {\n this.name = name\n ? name\n : `node_${source.position} ${source.rotation} ${source.scale}`;\n this.source = source;\n this.parent = null;\n this.children = [];\n this.localMatrix = mat4.identity();\n this.worldMatrix = mat4.identity();\n this.drawables = [];\n this.nodeTransformGPUBuffer = device.createBuffer({\n size: Float32Array.BYTES_PER_ELEMENT * 16,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n this.nodeTransformBindGroup = device.createBindGroup({\n layout: bgLayout,\n entries: [\n {\n binding: 0,\n resource: {\n buffer: this.nodeTransformGPUBuffer,\n },\n },\n ],\n });\n this.skin = skin;\n }\n\n setParent(parent: GLTFNode) {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\n parent.addChild(this);\n this.parent = parent;\n }\n\n updateWorldMatrix(device: GPUDevice, parentWorldMatrix?: Mat4) {\n // Get local transform of this particular node, and if the node has a parent,\n // multiply it against the parent's transform matrix to get transformMatrix relative to world.\n this.localMatrix = this.source.getMatrix();\n if (parentWorldMatrix) {\n mat4.multiply(parentWorldMatrix, this.localMatrix, this.worldMatrix);\n } else {\n mat4.copy(this.localMatrix, this.worldMatrix);\n }\n const worldMatrix = this.worldMatrix as Float32Array;\n device.queue.writeBuffer(\n this.nodeTransformGPUBuffer,\n 0,\n worldMatrix.buffer,\n worldMatrix.byteOffset,\n worldMatrix.byteLength\n );\n for (const child of this.children) {\n child.updateWorldMatrix(device, worldMatrix);\n }\n }\n\n traverse(fn: (n: GLTFNode, ...args) => void) {\n fn(this);\n for (const child of this.children) {\n child.traverse(fn);\n }\n }\n\n renderDrawables(\n passEncoder: GPURenderPassEncoder,\n bindGroups: GPUBindGroup[]\n ) {\n if (this.drawables !== undefined) {\n for (const drawable of this.drawables) {\n if (this.skin) {\n drawable.render(passEncoder, [\n ...bindGroups,\n this.nodeTransformBindGroup,\n this.skin.skinBindGroup,\n ]);\n } else {\n drawable.render(passEncoder, [\n ...bindGroups,\n this.nodeTransformBindGroup,\n ]);\n }\n }\n }\n // Render any of its children\n for (const child of this.children) {\n child.renderDrawables(passEncoder, bindGroups);\n }\n }\n\n private addChild(child: GLTFNode) {\n this.children.push(child);\n }\n\n private removeChild(child: GLTFNode) {\n const ndx = this.children.indexOf(child);\n this.children.splice(ndx, 1);\n }\n}\n\nexport class GLTFScene {\n nodes?: number[];\n root: GLTFNode;\n name?: string;\n\n constructor(\n device: GPUDevice,\n nodeTransformBGL: GPUBindGroupLayout,\n baseScene: Scene\n ) {\n this.nodes = baseScene.nodes;\n this.name = baseScene.name;\n this.root = new GLTFNode(\n device,\n nodeTransformBGL,\n new BaseTransformation(),\n baseScene.name\n );\n }\n}\n\nexport class GLTFSkin {\n // Nodes of the skin's joints\n // [5, 2, 3] means our joint info is at nodes 5, 2, and 3\n joints: number[];\n // Bind Group for this skin's uniform buffer\n skinBindGroup: GPUBindGroup;\n // Static bindGroupLayout shared across all skins\n // In a larger shader with more properties, certain bind groups\n // would likely have to be combined due to device limitations in the number of bind groups\n // allowed within a shader\n // Inverse bind matrices parsed from the accessor\n private inverseBindMatrices: Float32Array;\n private jointMatricesUniformBuffer: GPUBuffer;\n private inverseBindMatricesUniformBuffer: GPUBuffer;\n static skinBindGroupLayout: GPUBindGroupLayout;\n\n static createSharedBindGroupLayout(device: GPUDevice) {\n this.skinBindGroupLayout = device.createBindGroupLayout({\n label: 'StaticGLTFSkin.bindGroupLayout',\n entries: [\n // Holds the initial joint matrices buffer\n {\n binding: 0,\n buffer: {\n type: 'read-only-storage',\n },\n visibility: GPUShaderStage.VERTEX,\n },\n // Holds the inverse bind matrices buffer\n {\n binding: 1,\n buffer: {\n type: 'read-only-storage',\n },\n visibility: GPUShaderStage.VERTEX,\n },\n ],\n });\n }\n\n // For the sake of simplicity and easier debugging, we're going to convert our skin gpu accessor to a\n // float32array, which should be performant enough for this example since there is only one skin (again, this)\n // is not a comprehensive gltf parser\n constructor(\n device: GPUDevice,\n inverseBindMatricesAccessor: GLTFAccessor,\n joints: number[]\n ) {\n if (\n inverseBindMatricesAccessor.componentType !==\n GLTFDataComponentType.FLOAT ||\n inverseBindMatricesAccessor.byteStride !== 64\n ) {\n throw Error(\n `This skin's provided accessor does not access a mat4x4 matrix, or does not access the provided mat4x4 data correctly`\n );\n }\n // NOTE: Come back to this uint8array to float32array conversion in case it is incorrect\n this.inverseBindMatrices = new Float32Array(\n inverseBindMatricesAccessor.view.view.buffer,\n inverseBindMatricesAccessor.view.view.byteOffset,\n inverseBindMatricesAccessor.view.view.byteLength / 4\n );\n this.joints = joints;\n const skinGPUBufferUsage: GPUBufferDescriptor = {\n size: Float32Array.BYTES_PER_ELEMENT * 16 * joints.length,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n };\n this.jointMatricesUniformBuffer = device.createBuffer(skinGPUBufferUsage);\n this.inverseBindMatricesUniformBuffer =\n device.createBuffer(skinGPUBufferUsage);\n device.queue.writeBuffer(\n this.inverseBindMatricesUniformBuffer,\n 0,\n this.inverseBindMatrices\n );\n this.skinBindGroup = device.createBindGroup({\n layout: GLTFSkin.skinBindGroupLayout,\n label: 'StaticGLTFSkin.bindGroup',\n entries: [\n {\n binding: 0,\n resource: {\n buffer: this.jointMatricesUniformBuffer,\n },\n },\n {\n binding: 1,\n resource: {\n buffer: this.inverseBindMatricesUniformBuffer,\n },\n },\n ],\n });\n }\n\n update(device: GPUDevice, currentNodeIndex: number, nodes: GLTFNode[]) {\n const globalWorldInverse = mat4.inverse(\n nodes[currentNodeIndex].worldMatrix\n );\n for (let j = 0; j < this.joints.length; j++) {\n const joint = this.joints[j];\n const dstMatrix: Mat4 = mat4.identity();\n mat4.multiply(globalWorldInverse, nodes[joint].worldMatrix, dstMatrix);\n const toWrite = dstMatrix as Float32Array;\n device.queue.writeBuffer(\n this.jointMatricesUniformBuffer,\n j * 64,\n toWrite.buffer,\n toWrite.byteOffset,\n toWrite.byteLength\n );\n }\n }\n}\n\n// Upload a GLB model, parse its JSON and Binary components, and create the requisite GPU resources\n// to render them. NOTE: Not extensible to all GLTF contexts at this point in time\nexport const convertGLBToJSONAndBinary = async (\n buffer: ArrayBuffer,\n device: GPUDevice\n): Promise => {\n // Binary GLTF layout: https://cdn.willusher.io/webgpu-0-to-gltf/glb-layout.svg\n const jsonHeader = new DataView(buffer, 0, 20);\n validateGLBHeader(jsonHeader);\n\n // Length of the jsonChunk found at jsonHeader[12 - 15]\n const jsonChunkLength = jsonHeader.getUint32(12, true);\n\n // Parse the JSON chunk of the glB file to a JSON object\n const jsonChunk: GlTf = JSON.parse(\n new TextDecoder('utf-8').decode(new Uint8Array(buffer, 20, jsonChunkLength))\n );\n\n // Binary data located after jsonChunk\n const binaryHeader = new Uint32Array(buffer, 20 + jsonChunkLength, 2);\n validateBinaryHeader(binaryHeader);\n\n const binaryChunk = new GLTFBuffer(\n buffer,\n 28 + jsonChunkLength,\n binaryHeader[0]\n );\n\n //Const populate missing properties of jsonChunk\n for (const accessor of jsonChunk.accessors) {\n accessor.byteOffset = accessor.byteOffset ?? 0;\n accessor.normalized = accessor.normalized ?? false;\n }\n\n for (const bufferView of jsonChunk.bufferViews) {\n bufferView.byteOffset = bufferView.byteOffset ?? 0;\n }\n\n if (jsonChunk.samplers) {\n for (const sampler of jsonChunk.samplers) {\n sampler.wrapS = sampler.wrapS ?? 10497; //GL.REPEAT\n sampler.wrapT = sampler.wrapT ?? 10947; //GL.REPEAT\n }\n }\n\n //Mark each accessor with its intended usage within the vertexShader.\n //Often necessary due to infrequencey with which the BufferView target field is populated.\n for (const mesh of jsonChunk.meshes) {\n for (const primitive of mesh.primitives) {\n if ('indices' in primitive) {\n const accessor = jsonChunk.accessors[primitive.indices];\n jsonChunk.accessors[primitive.indices].bufferViewUsage |=\n GPUBufferUsage.INDEX;\n jsonChunk.bufferViews[accessor.bufferView].usage |=\n GPUBufferUsage.INDEX;\n }\n for (const attribute of Object.values(primitive.attributes)) {\n const accessor = jsonChunk.accessors[attribute];\n jsonChunk.accessors[attribute].bufferViewUsage |= GPUBufferUsage.VERTEX;\n jsonChunk.bufferViews[accessor.bufferView].usage |=\n GPUBufferUsage.VERTEX;\n }\n }\n }\n\n // Create GLTFBufferView objects for all the buffer views in the glTF file\n const bufferViews: GLTFBufferView[] = [];\n for (let i = 0; i < jsonChunk.bufferViews.length; ++i) {\n bufferViews.push(new GLTFBufferView(binaryChunk, jsonChunk.bufferViews[i]));\n }\n\n const accessors: GLTFAccessor[] = [];\n for (let i = 0; i < jsonChunk.accessors.length; ++i) {\n const accessorInfo = jsonChunk.accessors[i];\n const viewID = accessorInfo['bufferView'];\n accessors.push(new GLTFAccessor(bufferViews[viewID], accessorInfo));\n }\n // Load the first mesh\n const meshes: GLTFMesh[] = [];\n for (let i = 0; i < jsonChunk.meshes.length; i++) {\n const mesh = jsonChunk.meshes[i];\n const meshPrimitives: GLTFPrimitive[] = [];\n for (let j = 0; j < mesh.primitives.length; ++j) {\n const prim = mesh.primitives[j];\n let topology = prim['mode'];\n // Default is triangles if mode specified\n if (topology === undefined) {\n topology = GLTFRenderMode.TRIANGLES;\n }\n if (\n topology != GLTFRenderMode.TRIANGLES &&\n topology != GLTFRenderMode.TRIANGLE_STRIP\n ) {\n throw Error(`Unsupported primitive mode ${prim['mode']}`);\n }\n\n const primitiveAttributeMap = {};\n const attributes = [];\n if (jsonChunk['accessors'][prim['indices']] !== undefined) {\n const indices = accessors[prim['indices']];\n primitiveAttributeMap['INDICES'] = indices;\n }\n\n // Loop through all the attributes and store within our attributeMap\n for (const attr in prim['attributes']) {\n const accessor = accessors[prim['attributes'][attr]];\n primitiveAttributeMap[attr] = accessor;\n if (accessor.structureType > 3) {\n throw Error(\n 'Vertex attribute accessor accessed an unsupported data type for vertex attribute'\n );\n }\n attributes.push(attr);\n }\n meshPrimitives.push(\n new GLTFPrimitive(topology, primitiveAttributeMap, attributes)\n );\n }\n meshes.push(new GLTFMesh(mesh.name, meshPrimitives));\n }\n\n const skins: GLTFSkin[] = [];\n for (const skin of jsonChunk.skins) {\n const inverseBindMatrixAccessor = accessors[skin.inverseBindMatrices];\n inverseBindMatrixAccessor.view.addUsage(\n GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n );\n inverseBindMatrixAccessor.view.needsUpload = true;\n }\n\n // Upload the buffer views used by mesh\n for (let i = 0; i < bufferViews.length; ++i) {\n if (bufferViews[i].needsUpload) {\n bufferViews[i].upload(device);\n }\n }\n\n GLTFSkin.createSharedBindGroupLayout(device);\n for (const skin of jsonChunk.skins) {\n const inverseBindMatrixAccessor = accessors[skin.inverseBindMatrices];\n const joints = skin.joints;\n skins.push(new GLTFSkin(device, inverseBindMatrixAccessor, joints));\n }\n\n const nodes: GLTFNode[] = [];\n\n // Access each node. If node references a mesh, add mesh to that node\n const nodeUniformsBindGroupLayout = device.createBindGroupLayout({\n label: 'NodeUniforms.bindGroupLayout',\n entries: [\n {\n binding: 0,\n buffer: {\n type: 'uniform',\n },\n visibility: GPUShaderStage.VERTEX,\n },\n ],\n });\n for (const currNode of jsonChunk.nodes) {\n const baseTransformation = new BaseTransformation(\n currNode.translation,\n currNode.rotation,\n currNode.scale\n );\n const nodeToCreate = new GLTFNode(\n device,\n nodeUniformsBindGroupLayout,\n baseTransformation,\n currNode.name,\n skins[currNode.skin]\n );\n const meshToAdd = meshes[currNode.mesh];\n if (meshToAdd) {\n nodeToCreate.drawables.push(meshToAdd);\n }\n nodes.push(nodeToCreate);\n }\n\n // Assign each node its children\n nodes.forEach((node, idx) => {\n const children = jsonChunk.nodes[idx].children;\n if (children) {\n children.forEach((childIdx) => {\n const child = nodes[childIdx];\n child.setParent(node);\n });\n }\n });\n\n const scenes: GLTFScene[] = [];\n\n for (const jsonScene of jsonChunk.scenes) {\n const scene = new GLTFScene(device, nodeUniformsBindGroupLayout, jsonScene);\n const sceneChildren = scene.nodes;\n sceneChildren.forEach((childIdx) => {\n const child = nodes[childIdx];\n child.setParent(scene.root);\n });\n scenes.push(scene);\n }\n return {\n meshes,\n nodes,\n scenes,\n skins,\n };\n};\n","import type { GUI } from 'dat.gui';\nimport fullscreenTexturedQuad from '../../shaders/fullscreenTexturedQuad.wgsl';\n\ntype BindGroupBindingLayout =\n | GPUBufferBindingLayout\n | GPUTextureBindingLayout\n | GPUSamplerBindingLayout\n | GPUStorageTextureBindingLayout\n | GPUExternalTextureBindingLayout;\n\n// An object containing\n// 1. A generated Bind Group Layout\n// 2. An array of Bind Groups that accord to that layout\nexport type BindGroupCluster = {\n bindGroups: GPUBindGroup[];\n bindGroupLayout: GPUBindGroupLayout;\n};\n\ntype ResourceTypeName =\n | 'buffer'\n | 'texture'\n | 'sampler'\n | 'externalTexture'\n | 'storageTexture';\n\n/**\n * @param {number[]} bindings - The binding value of each resource in the bind group.\n * @param {number[]} visibilities - The GPUShaderStage visibility of the resource at the corresponding index.\n * @param {ResourceTypeName[]} resourceTypes - The resourceType at the corresponding index.\n * @returns {BindGroupsObjectsAndLayout} An object containing an array of bindGroups and the bindGroupLayout they implement.\n */\nexport const createBindGroupCluster = (\n bindings: number[],\n visibilities: number[],\n resourceTypes: ResourceTypeName[],\n resourceLayouts: BindGroupBindingLayout[],\n resources: GPUBindingResource[][],\n label: string,\n device: GPUDevice\n): BindGroupCluster => {\n const layoutEntries: GPUBindGroupLayoutEntry[] = [];\n for (let i = 0; i < bindings.length; i++) {\n layoutEntries.push({\n binding: bindings[i],\n visibility: visibilities[i % visibilities.length],\n [resourceTypes[i]]: resourceLayouts[i],\n });\n }\n\n const bindGroupLayout = device.createBindGroupLayout({\n label: `${label}.bindGroupLayout`,\n entries: layoutEntries,\n });\n\n const bindGroups: GPUBindGroup[] = [];\n //i represent the bindGroup index, j represents the binding index of the resource within the bindgroup\n //i=0, j=0 bindGroup: 0, binding: 0\n //i=1, j=1, bindGroup: 0, binding: 1\n //NOTE: not the same as @group(0) @binding(1) group index within the fragment shader is set within a pipeline\n for (let i = 0; i < resources.length; i++) {\n const groupEntries: GPUBindGroupEntry[] = [];\n for (let j = 0; j < resources[0].length; j++) {\n groupEntries.push({\n binding: j,\n resource: resources[i][j],\n });\n }\n const newBindGroup = device.createBindGroup({\n label: `${label}.bindGroup${i}`,\n layout: bindGroupLayout,\n entries: groupEntries,\n });\n bindGroups.push(newBindGroup);\n }\n\n return {\n bindGroups,\n bindGroupLayout,\n };\n};\n\nexport type ShaderKeyInterface = {\n [K in T[number]]: number;\n};\n\nexport type SampleInitParams = {\n canvas: HTMLCanvasElement;\n gui?: GUI;\n stats?: Stats;\n};\n\ninterface DeviceInitParms {\n device: GPUDevice;\n}\n\ninterface DeviceInit3DParams extends DeviceInitParms {\n context: GPUCanvasContext;\n presentationFormat: GPUTextureFormat;\n timestampQueryAvailable: boolean;\n}\n\ntype CallbackSync3D = (params: SampleInitParams & DeviceInit3DParams) => void;\ntype CallbackAsync3D = (\n params: SampleInitParams & DeviceInit3DParams\n) => Promise;\n\ntype SampleInitCallback3D = CallbackSync3D | CallbackAsync3D;\nexport type SampleInit = (params: SampleInitParams) => void;\n\nexport const SampleInitFactoryWebGPU = async (\n callback: SampleInitCallback3D\n): Promise => {\n const init = async ({ canvas, gui, stats }) => {\n const adapter = await navigator.gpu.requestAdapter();\n const timestampQueryAvailable = adapter.features.has('timestamp-query');\n let device: GPUDevice;\n if (timestampQueryAvailable) {\n device = await adapter.requestDevice({\n requiredFeatures: ['timestamp-query'],\n });\n } else {\n device = await adapter.requestDevice();\n }\n const context = canvas.getContext('webgpu') as GPUCanvasContext;\n const devicePixelRatio = window.devicePixelRatio;\n canvas.width = canvas.clientWidth * devicePixelRatio;\n canvas.height = canvas.clientHeight * devicePixelRatio;\n const presentationFormat = navigator.gpu.getPreferredCanvasFormat();\n context.configure({\n device,\n format: presentationFormat,\n alphaMode: 'premultiplied',\n });\n\n callback({\n canvas,\n gui,\n device,\n context,\n presentationFormat,\n stats,\n timestampQueryAvailable,\n });\n };\n return init;\n};\n\nexport abstract class Base2DRendererClass {\n abstract switchBindGroup(name: string): void;\n abstract startRun(\n commandEncoder: GPUCommandEncoder,\n ...args: unknown[]\n ): void;\n renderPassDescriptor: GPURenderPassDescriptor;\n pipeline: GPURenderPipeline;\n bindGroupMap: Record;\n currentBindGroup: GPUBindGroup;\n currentBindGroupName: string;\n\n executeRun(\n commandEncoder: GPUCommandEncoder,\n renderPassDescriptor: GPURenderPassDescriptor,\n pipeline: GPURenderPipeline,\n bindGroups: GPUBindGroup[]\n ) {\n const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);\n passEncoder.setPipeline(pipeline);\n for (let i = 0; i < bindGroups.length; i++) {\n passEncoder.setBindGroup(i, bindGroups[i]);\n }\n passEncoder.draw(6, 1, 0, 0);\n passEncoder.end();\n }\n\n setUniformArguments(\n device: GPUDevice,\n uniformBuffer: GPUBuffer,\n instance: T,\n keys: K\n ) {\n for (let i = 0; i < keys.length; i++) {\n device.queue.writeBuffer(\n uniformBuffer,\n i * 4,\n new Float32Array([instance[keys[i]]])\n );\n }\n }\n\n create2DRenderPipeline(\n device: GPUDevice,\n label: string,\n bgLayouts: GPUBindGroupLayout[],\n code: string,\n presentationFormat: GPUTextureFormat\n ) {\n return device.createRenderPipeline({\n label: `${label}.pipeline`,\n layout: device.createPipelineLayout({\n bindGroupLayouts: bgLayouts,\n }),\n vertex: {\n module: device.createShaderModule({\n code: fullscreenTexturedQuad,\n }),\n },\n fragment: {\n module: device.createShaderModule({\n code: code,\n }),\n targets: [\n {\n format: presentationFormat,\n },\n ],\n },\n primitive: {\n topology: 'triangle-list',\n cullMode: 'none',\n },\n });\n }\n}\n","/* eslint-disable prettier/prettier */\nexport const gridVertices = new Float32Array([\n // B0\n 0, 1, // 0 \n 0, -1, // 1\n // CONNECTOR\n 2, 1, // 2\n 2, -1, // 3\n // B1\n 4, 1, // 4\n 4, -1, // 5\n // CONNECTOR\n 6, 1, // 6\n 6, -1, // 7\n // B2\n 8, 1, // 8\n 8, -1, // 9,\n // CONNECTOR\n 10, 1, //10\n 10, -1, //11\n // B3\n 12, 1, //12\n 12, -1, //13\n]);\n\n// Representing the indice of four bones that can influence each vertex\nexport const gridJoints = new Uint32Array([\n 0, 0, 0, 0, // Vertex 0 is influenced by bone 0\n 0, 0, 0, 0, // 1\n 0, 1, 0, 0, // 2\n 0, 1, 0, 0, // 3\n 1, 0, 0, 0, // 4\n 1, 0, 0, 0, // 5\n 1, 2, 0, 0, // Vertex 6 is influenced by bone 1 and bone 2\n 1, 2, 0, 0, // 7\n 2, 0, 0, 0, // 8\n 2, 0, 0, 0, // 9\n 1, 2, 3, 0, //10\n 1, 2, 3, 0, //11\n 2, 3, 0, 0, //12\n 2, 3, 0, 0, //13\n])\n\n// The weights applied when ve\nexport const gridWeights = new Float32Array([\n // B0\n 1, 0, 0, 0, // 0\n 1, 0, 0, 0, // 1\n // CONNECTOR\n .5,.5, 0, 0, // 2\n .5,.5, 0, 0, // 3\n // B1\n 1, 0, 0, 0, // 4\n 1, 0, 0, 0, // 5\n // CONNECTOR\n .5,.5, 0, 0, // 6\n .5,.5, 0, 0, // 7\n // B2\n 1, 0, 0, 0, // 8\n 1, 0, 0, 0, // 9\n // CONNECTOR\n .5,.5, 0, 0, // 10\n .5,.5, 0, 0, // 11\n // B3\n 1, 0, 0, 0, // 12\n 1, 0, 0, 0, // 13\n]);\n\n// Using data above...\n// Vertex 0 is influenced by bone 0 with a weight of 1 \n// Vertex 1 is influenced by bone 1 with a weight of 1\n// Vertex 2 is influenced by bone 0 and 1 with a weight of 0.5 each\n// and so on..\n// Although a vertex can hypothetically be influenced by 4 bones,\n// in this example, we stick to each vertex being infleunced by only two\n// although there can be downstream effects of parent bones influencing child bones\n// that influence their own children\n\nexport const gridIndices = new Uint16Array([\n // B0\n 0, 1,\n 0, 2,\n 1, 3,\n // CONNECTOR\n 2, 3, //\n 2, 4,\n 3, 5,\n // B1\n 4, 5,\n 4, 6,\n 5, 7, \n // CONNECTOR\n 6, 7,\n 6, 8,\n 7, 9,\n // B2\n 8, 9,\n 8, 10,\n 9, 11,\n // CONNECTOR\n 10, 11,\n 10, 12,\n 11, 13,\n // B3\n 12, 13,\n]);","import { gridVertices, gridIndices, gridJoints, gridWeights } from './gridData';\n\n// Uses constant grid data to create appropriately sized GPU Buffers for our skinned grid\nexport const createSkinnedGridBuffers = (device: GPUDevice) => {\n // Utility function that creates GPUBuffers from data\n const createBuffer = (\n data: Float32Array | Uint32Array,\n type: 'f32' | 'u32'\n ) => {\n const buffer = device.createBuffer({\n size: data.byteLength,\n usage: GPUBufferUsage.VERTEX,\n mappedAtCreation: true,\n });\n if (type === 'f32') {\n new Float32Array(buffer.getMappedRange()).set(data);\n } else {\n new Uint32Array(buffer.getMappedRange()).set(data);\n }\n buffer.unmap();\n return buffer;\n };\n const positionsBuffer = createBuffer(gridVertices, 'f32');\n const jointsBuffer = createBuffer(gridJoints, 'u32');\n const weightsBuffer = createBuffer(gridWeights, 'f32');\n const indicesBuffer = device.createBuffer({\n size: Uint16Array.BYTES_PER_ELEMENT * gridIndices.length,\n usage: GPUBufferUsage.INDEX,\n mappedAtCreation: true,\n });\n new Uint16Array(indicesBuffer.getMappedRange()).set(gridIndices);\n indicesBuffer.unmap();\n\n return {\n positions: positionsBuffer,\n joints: jointsBuffer,\n weights: weightsBuffer,\n indices: indicesBuffer,\n };\n};\n\nexport const createSkinnedGridRenderPipeline = (\n device: GPUDevice,\n presentationFormat: GPUTextureFormat,\n vertexShader: string,\n fragmentShader: string,\n bgLayouts: GPUBindGroupLayout[]\n) => {\n const pipeline = device.createRenderPipeline({\n label: 'SkinnedGridRenderer',\n layout: device.createPipelineLayout({\n label: `SkinnedGridRenderer.pipelineLayout`,\n bindGroupLayouts: bgLayouts,\n }),\n vertex: {\n module: device.createShaderModule({\n label: `SkinnedGridRenderer.vertexShader`,\n code: vertexShader,\n }),\n buffers: [\n // Vertex Positions (positions)\n {\n arrayStride: Float32Array.BYTES_PER_ELEMENT * 2,\n attributes: [\n {\n format: 'float32x2',\n offset: 0,\n shaderLocation: 0,\n },\n ],\n },\n // Bone Indices (joints)\n {\n arrayStride: Uint32Array.BYTES_PER_ELEMENT * 4,\n attributes: [\n {\n format: 'uint32x4',\n offset: 0,\n shaderLocation: 1,\n },\n ],\n },\n // Bone Weights (weights)\n {\n arrayStride: Float32Array.BYTES_PER_ELEMENT * 4,\n attributes: [\n {\n format: 'float32x4',\n offset: 0,\n shaderLocation: 2,\n },\n ],\n },\n ],\n },\n fragment: {\n module: device.createShaderModule({\n label: `SkinnedGridRenderer.fragmentShader`,\n code: fragmentShader,\n }),\n targets: [\n {\n format: presentationFormat,\n },\n ],\n },\n primitive: {\n topology: 'line-list',\n },\n });\n return pipeline;\n};\n","import { GUI } from 'dat.gui';\nimport { convertGLBToJSONAndBinary, GLTFSkin } from './glbUtils';\nimport gltfWGSL from './gltf.wgsl';\nimport gridWGSL from './grid.wgsl';\nimport { Mat4, mat4, Quat, vec3 } from 'wgpu-matrix';\nimport { createBindGroupCluster } from '../bitonicSort/utils';\nimport {\n createSkinnedGridBuffers,\n createSkinnedGridRenderPipeline,\n} from './gridUtils';\nimport { gridIndices } from './gridData';\n\nconst MAT4X4_BYTES = 64;\n\ninterface BoneObject {\n transforms: Mat4[];\n bindPoses: Mat4[];\n bindPosesInv: Mat4[];\n}\n\nenum RenderMode {\n NORMAL,\n JOINTS,\n WEIGHTS,\n}\n\nenum SkinMode {\n ON,\n OFF,\n}\n\n// Copied from toji/gl-matrix\nconst getRotation = (mat: Mat4): Quat => {\n // Initialize our output quaternion\n const out = [0, 0, 0, 0];\n // Extract the scaling factor from the final matrix transformation\n // to normalize our rotation;\n const scaling = mat4.getScaling(mat);\n const is1 = 1 / scaling[0];\n const is2 = 1 / scaling[1];\n const is3 = 1 / scaling[2];\n\n // Scale the matrix elements by the scaling factors\n const sm11 = mat[0] * is1;\n const sm12 = mat[1] * is2;\n const sm13 = mat[2] * is3;\n const sm21 = mat[4] * is1;\n const sm22 = mat[5] * is2;\n const sm23 = mat[6] * is3;\n const sm31 = mat[8] * is1;\n const sm32 = mat[9] * is2;\n const sm33 = mat[10] * is3;\n\n // The trace of a square matrix is the sum of its diagonal entries\n // While the matrix trace has many interesting mathematical properties,\n // the primary purpose of the trace is to assess the characteristics of the rotation.\n const trace = sm11 + sm22 + sm33;\n let S = 0;\n\n // If all matrix elements contribute equally to the rotation.\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out[3] = 0.25 * S;\n out[0] = (sm23 - sm32) / S;\n out[1] = (sm31 - sm13) / S;\n out[2] = (sm12 - sm21) / S;\n // If the rotation is primarily around the x-axis\n } else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out[3] = (sm23 - sm32) / S;\n out[0] = 0.25 * S;\n out[1] = (sm12 + sm21) / S;\n out[2] = (sm31 + sm13) / S;\n // If rotation is primarily around the y-axis\n } else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out[3] = (sm31 - sm13) / S;\n out[0] = (sm12 + sm21) / S;\n out[1] = 0.25 * S;\n out[2] = (sm23 + sm32) / S;\n // If the rotation is primarily around the z-axis\n } else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out[3] = (sm12 - sm21) / S;\n out[0] = (sm31 + sm13) / S;\n out[1] = (sm23 + sm32) / S;\n out[2] = 0.25 * S;\n }\n\n return out;\n};\n\n//Normal setup\nconst canvas = document.querySelector('canvas') as HTMLCanvasElement;\nconst adapter = await navigator.gpu.requestAdapter();\nconst device = await adapter.requestDevice();\n\nconst context = canvas.getContext('webgpu') as GPUCanvasContext;\n\nconst devicePixelRatio = window.devicePixelRatio || 1;\ncanvas.width = canvas.clientWidth * devicePixelRatio;\ncanvas.height = canvas.clientHeight * devicePixelRatio;\nconst presentationFormat = navigator.gpu.getPreferredCanvasFormat();\n\ncontext.configure({\n device,\n format: presentationFormat,\n alphaMode: 'premultiplied',\n});\n\nconst settings = {\n cameraX: 0,\n cameraY: -5.1,\n cameraZ: -14.6,\n objectScale: 1,\n angle: 0.2,\n speed: 50,\n object: 'Whale',\n renderMode: 'NORMAL',\n skinMode: 'ON',\n};\n\nconst gui = new GUI();\n\n// Determine whether we want to render our whale or our skinned grid\ngui.add(settings, 'object', ['Whale', 'Skinned Grid']).onChange(() => {\n if (settings.object === 'Skinned Grid') {\n settings.cameraX = -10;\n settings.cameraY = 0;\n settings.objectScale = 1.27;\n } else {\n if (settings.skinMode === 'OFF') {\n settings.cameraX = 0;\n settings.cameraY = 0;\n settings.cameraZ = -11;\n } else {\n settings.cameraX = 0;\n settings.cameraY = -5.1;\n settings.cameraZ = -14.6;\n }\n }\n});\n\n// Output the mesh normals, its joints, or the weights that influence the movement of the joints\ngui\n .add(settings, 'renderMode', ['NORMAL', 'JOINTS', 'WEIGHTS'])\n .onChange(() => {\n device.queue.writeBuffer(\n generalUniformsBuffer,\n 0,\n new Uint32Array([RenderMode[settings.renderMode]])\n );\n });\n// Determine whether the mesh is static or whether skinning is activated\ngui.add(settings, 'skinMode', ['ON', 'OFF']).onChange(() => {\n if (settings.object === 'Whale') {\n if (settings.skinMode === 'OFF') {\n settings.cameraX = 0;\n settings.cameraY = 0;\n settings.cameraZ = -11;\n } else {\n settings.cameraX = 0;\n settings.cameraY = -5.1;\n settings.cameraZ = -14.6;\n }\n }\n device.queue.writeBuffer(\n generalUniformsBuffer,\n 4,\n new Uint32Array([SkinMode[settings.skinMode]])\n );\n});\nconst animFolder = gui.addFolder('Animation Settings');\nanimFolder.add(settings, 'angle', 0.05, 0.5).step(0.05);\nanimFolder.add(settings, 'speed', 10, 100).step(10);\n\nconst depthTexture = device.createTexture({\n size: [canvas.width, canvas.height],\n format: 'depth24plus',\n usage: GPUTextureUsage.RENDER_ATTACHMENT,\n});\n\nconst cameraBuffer = device.createBuffer({\n size: MAT4X4_BYTES * 3,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n});\n\nconst cameraBGCluster = createBindGroupCluster(\n [0],\n [GPUShaderStage.VERTEX],\n ['buffer'],\n [{ type: 'uniform' }],\n [[{ buffer: cameraBuffer }]],\n 'Camera',\n device\n);\n\nconst generalUniformsBuffer = device.createBuffer({\n size: Uint32Array.BYTES_PER_ELEMENT * 2,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n});\n\nconst generalUniformsBGCLuster = createBindGroupCluster(\n [0],\n [GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT],\n ['buffer'],\n [{ type: 'uniform' }],\n [[{ buffer: generalUniformsBuffer }]],\n 'General',\n device\n);\n\n// Same bindGroupLayout as in main file.\nconst nodeUniformsBindGroupLayout = device.createBindGroupLayout({\n label: 'NodeUniforms.bindGroupLayout',\n entries: [\n {\n binding: 0,\n buffer: {\n type: 'uniform',\n },\n visibility: GPUShaderStage.VERTEX,\n },\n ],\n});\n\n// Fetch whale resources from the glb file\nconst whaleScene = await fetch('../../assets/gltf/whale.glb')\n .then((res) => res.arrayBuffer())\n .then((buffer) => convertGLBToJSONAndBinary(buffer, device));\n\n// Builds a render pipeline for our whale mesh\n// Since we are building a lightweight gltf parser around a gltf scene with a known\n// quantity of meshes, we only build a renderPipeline for the singular mesh present\n// within our scene. A more robust gltf parser would loop through all the meshes,\n// cache replicated pipelines, and perform other optimizations.\nwhaleScene.meshes[0].buildRenderPipeline(\n device,\n gltfWGSL,\n gltfWGSL,\n presentationFormat,\n depthTexture.format,\n [\n cameraBGCluster.bindGroupLayout,\n generalUniformsBGCLuster.bindGroupLayout,\n nodeUniformsBindGroupLayout,\n GLTFSkin.skinBindGroupLayout,\n ]\n);\n\n// Create skinned grid resources\nconst skinnedGridVertexBuffers = createSkinnedGridBuffers(device);\n// Buffer for our uniforms, joints, and inverse bind matrices\nconst skinnedGridUniformBufferUsage: GPUBufferDescriptor = {\n // 5 4x4 matrices, one for each bone\n size: MAT4X4_BYTES * 5,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n};\nconst skinnedGridJointUniformBuffer = device.createBuffer(\n skinnedGridUniformBufferUsage\n);\nconst skinnedGridInverseBindUniformBuffer = device.createBuffer(\n skinnedGridUniformBufferUsage\n);\nconst skinnedGridBoneBGCluster = createBindGroupCluster(\n [0, 1],\n [GPUShaderStage.VERTEX, GPUShaderStage.VERTEX],\n ['buffer', 'buffer'],\n [{ type: 'read-only-storage' }, { type: 'read-only-storage' }],\n [\n [\n { buffer: skinnedGridJointUniformBuffer },\n { buffer: skinnedGridInverseBindUniformBuffer },\n ],\n ],\n 'SkinnedGridJointUniforms',\n device\n);\nconst skinnedGridPipeline = createSkinnedGridRenderPipeline(\n device,\n presentationFormat,\n gridWGSL,\n gridWGSL,\n [\n cameraBGCluster.bindGroupLayout,\n generalUniformsBGCLuster.bindGroupLayout,\n skinnedGridBoneBGCluster.bindGroupLayout,\n ]\n);\n\n// Global Calc\nconst aspect = canvas.width / canvas.height;\nconst perspectiveProjection = mat4.perspective(\n (2 * Math.PI) / 5,\n aspect,\n 0.1,\n 100.0\n);\n\nconst orthographicProjection = mat4.ortho(-20, 20, -10, 10, -100, 100);\n\nfunction getProjectionMatrix() {\n if (settings.object !== 'Skinned Grid') {\n return perspectiveProjection as Float32Array;\n }\n return orthographicProjection as Float32Array;\n}\n\nfunction getViewMatrix() {\n const viewMatrix = mat4.identity();\n if (settings.object === 'Skinned Grid') {\n mat4.translate(\n viewMatrix,\n vec3.fromValues(\n settings.cameraX * settings.objectScale,\n settings.cameraY * settings.objectScale,\n settings.cameraZ\n ),\n viewMatrix\n );\n } else {\n mat4.translate(\n viewMatrix,\n vec3.fromValues(settings.cameraX, settings.cameraY, settings.cameraZ),\n viewMatrix\n );\n }\n return viewMatrix as Float32Array;\n}\n\nfunction getModelMatrix() {\n const modelMatrix = mat4.identity();\n const scaleVector = vec3.fromValues(\n settings.objectScale,\n settings.objectScale,\n settings.objectScale\n );\n mat4.scale(modelMatrix, scaleVector, modelMatrix);\n if (settings.object === 'Whale') {\n mat4.rotateY(modelMatrix, (Date.now() / 1000) * 0.5, modelMatrix);\n }\n return modelMatrix as Float32Array;\n}\n\n// Pass Descriptor for GLTFs\nconst gltfRenderPassDescriptor: GPURenderPassDescriptor = {\n colorAttachments: [\n {\n view: undefined, // Assigned later\n\n clearValue: { r: 0.3, g: 0.3, b: 0.3, a: 1.0 },\n loadOp: 'clear',\n storeOp: 'store',\n },\n ],\n depthStencilAttachment: {\n view: depthTexture.createView(),\n depthLoadOp: 'clear',\n depthClearValue: 1.0,\n depthStoreOp: 'store',\n },\n};\n\n// Pass descriptor for grid with no depth testing\nconst skinnedGridRenderPassDescriptor: GPURenderPassDescriptor = {\n colorAttachments: [\n {\n view: undefined, // Assigned later\n\n clearValue: { r: 0.3, g: 0.3, b: 0.3, a: 1.0 },\n loadOp: 'clear',\n storeOp: 'store',\n },\n ],\n};\n\nconst animSkinnedGrid = (boneTransforms: Mat4[], angle: number) => {\n const m = mat4.identity();\n mat4.rotateZ(m, angle, boneTransforms[0]);\n mat4.translate(boneTransforms[0], vec3.create(4, 0, 0), m);\n mat4.rotateZ(m, angle, boneTransforms[1]);\n mat4.translate(boneTransforms[1], vec3.create(4, 0, 0), m);\n mat4.rotateZ(m, angle, boneTransforms[2]);\n};\n\n// Create a group of bones\n// Each index associates an actual bone to its transforms, bindPoses, uniforms, etc\nconst createBoneCollection = (numBones: number): BoneObject => {\n // Initial bone transformation\n const transforms: Mat4[] = [];\n // Bone bind poses, an extra matrix per joint/bone that represents the starting point\n // of the bone before any transformations are applied\n const bindPoses: Mat4[] = [];\n // Create a transform, bind pose, and inverse bind pose for each bone\n for (let i = 0; i < numBones; i++) {\n transforms.push(mat4.identity());\n bindPoses.push(mat4.identity());\n }\n\n // Get initial bind pose positions\n animSkinnedGrid(bindPoses, 0);\n const bindPosesInv = bindPoses.map((bindPose) => {\n return mat4.inverse(bindPose);\n });\n\n return {\n transforms,\n bindPoses,\n bindPosesInv,\n };\n};\n\n// Create bones of the skinned grid and write the inverse bind positions to\n// the skinned grid's inverse bind matrix array\nconst gridBoneCollection = createBoneCollection(5);\nfor (let i = 0; i < gridBoneCollection.bindPosesInv.length; i++) {\n device.queue.writeBuffer(\n skinnedGridInverseBindUniformBuffer,\n i * 64,\n gridBoneCollection.bindPosesInv[i] as Float32Array\n );\n}\n\n// A map that maps a joint index to the original matrix transformation of a bone\nconst origMatrices = new Map();\nconst animWhaleSkin = (skin: GLTFSkin, angle: number) => {\n for (let i = 0; i < skin.joints.length; i++) {\n // Index into the current joint\n const joint = skin.joints[i];\n // If our map does\n if (!origMatrices.has(joint)) {\n origMatrices.set(joint, whaleScene.nodes[joint].source.getMatrix());\n }\n // Get the original position, rotation, and scale of the current joint\n const origMatrix = origMatrices.get(joint);\n let m = mat4.create();\n // Depending on which bone we are accessing, apply a specific rotation to the bone's original\n // transformation to animate it\n if (joint === 1 || joint === 0) {\n m = mat4.rotateY(origMatrix, -angle);\n } else if (joint === 3 || joint === 4) {\n m = mat4.rotateX(origMatrix, joint === 3 ? angle : -angle);\n } else {\n m = mat4.rotateZ(origMatrix, angle);\n }\n // Apply the current transformation to the transform values within the relevant nodes\n // (these nodes, of course, each being nodes that represent joints/bones)\n whaleScene.nodes[joint].source.position = mat4.getTranslation(m);\n whaleScene.nodes[joint].source.scale = mat4.getScaling(m);\n whaleScene.nodes[joint].source.rotation = getRotation(m);\n }\n};\n\nfunction frame() {\n // Calculate camera matrices\n const projectionMatrix = getProjectionMatrix();\n const viewMatrix = getViewMatrix();\n const modelMatrix = getModelMatrix();\n\n // Calculate bone transformation\n const t = (Date.now() / 20000) * settings.speed;\n const angle = Math.sin(t) * settings.angle;\n // Compute Transforms when angle is applied\n animSkinnedGrid(gridBoneCollection.transforms, angle);\n\n // Write to mvp to camera buffer\n device.queue.writeBuffer(\n cameraBuffer,\n 0,\n projectionMatrix.buffer,\n projectionMatrix.byteOffset,\n projectionMatrix.byteLength\n );\n\n device.queue.writeBuffer(\n cameraBuffer,\n 64,\n viewMatrix.buffer,\n viewMatrix.byteOffset,\n viewMatrix.byteLength\n );\n\n device.queue.writeBuffer(\n cameraBuffer,\n 128,\n modelMatrix.buffer,\n modelMatrix.byteOffset,\n modelMatrix.byteLength\n );\n\n // Write to skinned grid bone uniform buffer\n for (let i = 0; i < gridBoneCollection.transforms.length; i++) {\n device.queue.writeBuffer(\n skinnedGridJointUniformBuffer,\n i * 64,\n gridBoneCollection.transforms[i] as Float32Array\n );\n }\n\n // Difference between these two render passes is just the presence of depthTexture\n gltfRenderPassDescriptor.colorAttachments[0].view = context\n .getCurrentTexture()\n .createView();\n\n skinnedGridRenderPassDescriptor.colorAttachments[0].view = context\n .getCurrentTexture()\n .createView();\n\n // Update node matrixes\n for (const scene of whaleScene.scenes) {\n scene.root.updateWorldMatrix(device);\n }\n\n // Updates skins (we index into skins in the renderer, which is not the best approach but hey)\n animWhaleSkin(whaleScene.skins[0], Math.sin(t) * settings.angle);\n // Node 6 should be the only node with a drawable mesh so hopefully this works fine\n whaleScene.skins[0].update(device, 6, whaleScene.nodes);\n\n const commandEncoder = device.createCommandEncoder();\n if (settings.object === 'Whale') {\n const passEncoder = commandEncoder.beginRenderPass(\n gltfRenderPassDescriptor\n );\n for (const scene of whaleScene.scenes) {\n scene.root.renderDrawables(passEncoder, [\n cameraBGCluster.bindGroups[0],\n generalUniformsBGCLuster.bindGroups[0],\n ]);\n }\n passEncoder.end();\n } else {\n // Our skinned grid isn't checking for depth, so we pass it\n // a separate render descriptor that does not take in a depth texture\n const passEncoder = commandEncoder.beginRenderPass(\n skinnedGridRenderPassDescriptor\n );\n passEncoder.setPipeline(skinnedGridPipeline);\n passEncoder.setBindGroup(0, cameraBGCluster.bindGroups[0]);\n passEncoder.setBindGroup(1, generalUniformsBGCLuster.bindGroups[0]);\n passEncoder.setBindGroup(2, skinnedGridBoneBGCluster.bindGroups[0]);\n // Pass in vertex and index buffers generated from our static skinned grid\n // data at ./gridData.ts\n passEncoder.setVertexBuffer(0, skinnedGridVertexBuffers.positions);\n passEncoder.setVertexBuffer(1, skinnedGridVertexBuffers.joints);\n passEncoder.setVertexBuffer(2, skinnedGridVertexBuffers.weights);\n passEncoder.setIndexBuffer(skinnedGridVertexBuffers.indices, 'uint16');\n passEncoder.drawIndexed(gridIndices.length, 1);\n passEncoder.end();\n }\n\n device.queue.submit([commandEncoder.finish()]);\n\n requestAnimationFrame(frame);\n}\nrequestAnimationFrame(frame);\n"],"names":["requestAnimationFrame","requestAnimationFrame$1","mat4","GUI","vec3"],"mappings":"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CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GA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AC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG;AACpD,SAAS,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;AAC/C,IAAI,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG;AACpD,SAAS,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;AAC/C,IAAI,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;AACrD,SAAS,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;AAChD,IAAI,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;AACrD,SAAS,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;AAChD,IAAI,OAAO,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;AACrD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,QAAQ,GAAG,SAAS,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE;AAC/B,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AACjC,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG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M,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACvC,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACvC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/B,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE;AACnB,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,KAAK;AACL,IAAI,OAAO,GAAG,CAAC;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE;AACjD,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AACjC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,IAAI,CAAC,IAAI,CAAC,CAAC;AACX,IAAI,CAAC,IAAI,CAAC,CAAC;AACX,IAAI,CAAC,IAAI,CAAC,CAAC;AACX,IAAI,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AACrB,IAAI,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AACrB,IAAI,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AACrB,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACvC,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACvC,IAAI,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;AACjC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5C,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAChC,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,OAAO,GAAG,CAAC;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,QAAQ,GAAG,YAAY,CAAC;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE;AAClD,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AACjC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,IAAI,CAAC,IAAI,CAAC,CAAC;AACX,IAAI,CAAC,IAAI,CAAC,CAAC;AACX,IAAI,CAAC,IAAI,CAAC,CAAC;AACX,IAAI,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AACrB,IAAI,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AACrB,IAAI,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AACrB,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACvC,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACvC,IAAI,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;AACjC,IAAI,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAClC,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/C,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/C,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/C,IAAI,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAClC,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/C,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/C,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/C,IAAI,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAClC,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAChD,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAChD,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE;AACnB,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,KAAK;AACL,IAAI,OAAO,GAAG,CAAC;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE;AACzB,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AACjC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACnB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,OAAO,GAAG,CAAC;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE;AAC5B,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AACjC,IAAI,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAChC,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAChC,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE;AACnB,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,KAAK;AACL,IAAI,OAAO,GAAG,CAAC;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE;AAChC,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AACjC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,IAAI,OAAO,GAAG,CAAC;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE;AACjC,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AACjC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE;AACnB,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,KAAK;AACL,IAAI,OAAO,GAAG,CAAC;AACf,CAAC;AACD;AACA,IAAI,QAAQ,gBAAgB,MAAM,CAAC,MAAM,CAAC;AAC1C,IAAI,SAAS,EAAE,IAAI;AACnB,IAAI,cAAc,EAAE,gBAAgB;AACpC,IAAI,MAAM,EAAE,QAAQ;AACpB,IAAI,GAAG,EAAE,KAAK;AACd,IAAI,QAAQ,EAAE,QAAQ;AACtB,IAAI,QAAQ,EAAE,QAAQ;AACtB,IAAI,MAAM,EAAE,QAAQ;AACpB,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,mBAAmB,EAAE,qBAAqB;AAC9C,IAAI,MAAM,EAAE,QAAQ;AACpB,IAAI,QAAQ,EAAE,UAAU;AACxB,IAAI,SAAS,EAAE,SAAS;AACxB,IAAI,OAAO,EAAE,SAAS;AACtB,IAAI,WAAW,EAAE,WAAW;AAC5B,IAAI,MAAM,EAAE,QAAQ;AACpB,IAAI,QAAQ,EAAE,UAAU;AACxB,IAAI,GAAG,EAAE,KAAK;AACd,IAAI,cAAc,EAAE,cAAc;AAClC,IAAI,cAAc,EAAE,cAAc;AAClC,IAAI,OAAO,EAAE,OAAO;AACpB,IAAI,OAAO,EAAE,OAAO;AACpB,IAAI,UAAU,EAAE,UAAU;AAC1B,IAAI,WAAW,EAAE,WAAW;AAC5B,IAAI,KAAK,EAAE,KAAK;AAChB,IAAI,OAAO,EAAE,OAAO;AACpB,IAAI,GAAG,EAAE,GAAG;AACZ,IAAI,SAAS,EAAE,SAAS;AACxB,IAAI,MAAM,EAAE,MAAM;AAClB,IAAI,WAAW,EAAE,WAAW;AAC5B,IAAI,SAAS,EAAE,SAAS;AACxB,IAAI,SAAS,EAAE,SAAS;AACxB,IAAI,OAAO,EAAE,SAAS;AACtB,IAAI,SAAS,EAAE,SAAS;AACxB,IAAI,OAAO,EAAE,SAAS;AACtB,IAAI,SAAS,EAAE,SAAS;AACxB,IAAI,OAAO,EAAE,SAAS;AACtB,IAAI,YAAY,EAAE,YAAY;AAC9B,IAAI,QAAQ,EAAE,QAAQ;AACtB,IAAI,UAAU,EAAE,UAAU;AAC1B,IAAI,MAAM,EAAE,MAAM;AAClB,IAAI,OAAO,EAAE,OAAO;AACpB,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,cAAc,EAAE,cAAc;AAClC,IAAI,YAAY,EAAE,YAAY;AAC9B,CAAC,CAAC;;ACj2HF;AACA;AAEA;AACA,IAAK,cAQJ,CAAA;AARD,CAAA,UAAK,cAAc,EAAA;AACjB,IAAA,cAAA,CAAA,cAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACV,IAAA,cAAA,CAAA,cAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,cAAA,CAAA,cAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa,CAAA;AACb,IAAA,cAAA,CAAA,cAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc,CAAA;AACd,IAAA,cAAA,CAAA,cAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa,CAAA;AACb,IAAA,cAAA,CAAA,cAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAkB,CAAA;AAClB,IAAA,cAAA,CAAA,cAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAgB,CAAA;AAClB,CAAC,EARI,cAAc,KAAd,cAAc,GAQlB,EAAA,CAAA,CAAA,CAAA;AAED;AACA,IAAK,qBASJ,CAAA;AATD,CAAA,UAAK,qBAAqB,EAAA;AACxB,IAAA,qBAAA,CAAA,qBAAA,CAAA,MAAA,CAAA,GAAA,IAAA,CAAA,GAAA,MAAW,CAAA;AACX,IAAA,qBAAA,CAAA,qBAAA,CAAA,eAAA,CAAA,GAAA,IAAA,CAAA,GAAA,eAAoB,CAAA;AACpB,IAAA,qBAAA,CAAA,qBAAA,CAAA,OAAA,CAAA,GAAA,IAAA,CAAA,GAAA,OAAY,CAAA;AACZ,IAAA,qBAAA,CAAA,qBAAA,CAAA,gBAAA,CAAA,GAAA,IAAA,CAAA,GAAA,gBAAqB,CAAA;AACrB,IAAA,qBAAA,CAAA,qBAAA,CAAA,KAAA,CAAA,GAAA,IAAA,CAAA,GAAA,KAAU,CAAA;AACV,IAAA,qBAAA,CAAA,qBAAA,CAAA,cAAA,CAAA,GAAA,IAAA,CAAA,GAAA,cAAmB,CAAA;AACnB,IAAA,qBAAA,CAAA,qBAAA,CAAA,OAAA,CAAA,GAAA,IAAA,CAAA,GAAA,OAAY,CAAA;AACZ,IAAA,qBAAA,CAAA,qBAAA,CAAA,QAAA,CAAA,GAAA,IAAA,CAAA,GAAA,QAAa,CAAA;AACf,CAAC,EATI,qBAAqB,KAArB,qBAAqB,GASzB,EAAA,CAAA,CAAA,CAAA;AAED;AACA,IAAK,qBAQJ,CAAA;AARD,CAAA,UAAK,qBAAqB,EAAA;AACxB,IAAA,qBAAA,CAAA,qBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACV,IAAA,qBAAA,CAAA,qBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,qBAAA,CAAA,qBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,qBAAA,CAAA,qBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,qBAAA,CAAA,qBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,qBAAA,CAAA,qBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,qBAAA,CAAA,qBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACV,CAAC,EARI,qBAAqB,KAArB,qBAAqB,GAQzB,EAAA,CAAA,CAAA,CAAA;AAEM,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,KAAa,KAAY;AAC5D,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAAC,IAAY,KAAI;IAClD,QAAQ,IAAI;AACV,QAAA,KAAK,QAAQ;YACX,OAAO,qBAAqB,CAAC,MAAM,CAAC;AACtC,QAAA,KAAK,MAAM;YACT,OAAO,qBAAqB,CAAC,IAAI,CAAC;AACpC,QAAA,KAAK,MAAM;YACT,OAAO,qBAAqB,CAAC,IAAI,CAAC;AACpC,QAAA,KAAK,MAAM;YACT,OAAO,qBAAqB,CAAC,IAAI,CAAC;AACpC,QAAA,KAAK,MAAM;YACT,OAAO,qBAAqB,CAAC,IAAI,CAAC;AACpC,QAAA,KAAK,MAAM;YACT,OAAO,qBAAqB,CAAC,IAAI,CAAC;AACpC,QAAA,KAAK,MAAM;YACT,OAAO,qBAAqB,CAAC,IAAI,CAAC;AACpC,QAAA;AACE,YAAA,MAAM,KAAK,CAAC,CAAA,oBAAA,EAAuB,IAAI,CAAA,CAAE,CAAC,CAAC;KAC9C;AACH,CAAC,CAAC;AAEF,MAAM,kCAAkC,GAAG,CAAC,IAA2B,KAAI;IACzE,QAAQ,IAAI;QACV,KAAK,qBAAqB,CAAC,MAAM;AAC/B,YAAA,OAAO,CAAC,CAAC;QACX,KAAK,qBAAqB,CAAC,IAAI;AAC7B,YAAA,OAAO,CAAC,CAAC;QACX,KAAK,qBAAqB,CAAC,IAAI;AAC7B,YAAA,OAAO,CAAC,CAAC;QACX,KAAK,qBAAqB,CAAC,IAAI,CAAC;QAChC,KAAK,qBAAqB,CAAC,IAAI;AAC7B,YAAA,OAAO,CAAC,CAAC;QACX,KAAK,qBAAqB,CAAC,IAAI;AAC7B,YAAA,OAAO,CAAC,CAAC;QACX,KAAK,qBAAqB,CAAC,IAAI;AAC7B,YAAA,OAAO,EAAE,CAAC;AACZ,QAAA;AACE,YAAA,MAAM,KAAK,CAAC,CAAA,kBAAA,EAAqB,IAAI,CAAA,CAAE,CAAC,CAAC;KAC5C;AACH,CAAC,CAAC;AAEF;AACA;AACA,MAAM,cAAc,GAAG,CACrB,aAAoC,EACpC,IAA2B,KACzB;IACF,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,QAAQ,aAAa;QACnB,KAAK,qBAAqB,CAAC,IAAI;YAC7B,OAAO,GAAG,OAAO,CAAC;YAClB,MAAM;QACR,KAAK,qBAAqB,CAAC,aAAa;YACtC,OAAO,GAAG,OAAO,CAAC;YAClB,MAAM;QACR,KAAK,qBAAqB,CAAC,KAAK;YAC9B,OAAO,GAAG,QAAQ,CAAC;YACnB,MAAM;QACR,KAAK,qBAAqB,CAAC,cAAc;YACvC,OAAO,GAAG,QAAQ,CAAC;YACnB,MAAM;QACR,KAAK,qBAAqB,CAAC,GAAG;YAC5B,OAAO,GAAG,OAAO,CAAC;YAClB,MAAM;QACR,KAAK,qBAAqB,CAAC,YAAY;YACrC,OAAO,GAAG,QAAQ,CAAC;YACnB,MAAM;QACR,KAAK,qBAAqB,CAAC,KAAK;YAC9B,OAAO,GAAG,SAAS,CAAC;YACpB,MAAM;AACR,QAAA;AACE,YAAA,MAAM,KAAK,CAAC,CAAA,sCAAA,EAAyC,aAAa,CAAA,CAAE,CAAC,CAAC;KACzE;AAED,IAAA,QAAQ,kCAAkC,CAAC,IAAI,CAAC;AAC9C,QAAA,KAAK,CAAC;AACJ,YAAA,OAAO,OAAO,CAAC;AACjB,QAAA,KAAK,CAAC;YACJ,OAAO,OAAO,GAAG,IAAI,CAAC;AACxB,QAAA,KAAK,CAAC;YACJ,OAAO,OAAO,GAAG,IAAI,CAAC;AACxB,QAAA,KAAK,CAAC;YACJ,OAAO,OAAO,GAAG,IAAI,CAAC;;;AAGxB,QAAA;AACE,YAAA,MAAM,KAAK,CAAC,CAAA,2CAAA,EAA8C,IAAI,CAAA,CAAE,CAAC,CAAC;KACrE;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACtB,aAAoC,EACpC,IAA2B,KACzB;IACF,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,QAAQ,aAAa;QACnB,KAAK,qBAAqB,CAAC,IAAI;YAC7B,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACR,KAAK,qBAAqB,CAAC,aAAa;YACtC,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACR,KAAK,qBAAqB,CAAC,KAAK;YAC9B,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACR,KAAK,qBAAqB,CAAC,cAAc;YACvC,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACR,KAAK,qBAAqB,CAAC,GAAG;YAC5B,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACR,KAAK,qBAAqB,CAAC,YAAY;YACrC,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACR,KAAK,qBAAqB,CAAC,KAAK;YAC9B,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;QACR,KAAK,qBAAqB,CAAC,MAAM;YAC/B,aAAa,GAAG,CAAC,CAAC;YAClB,MAAM;AACR,QAAA;AACE,YAAA,MAAM,KAAK,CAAC,mCAAmC,CAAC,CAAC;KACpD;AACD,IAAA,OAAO,kCAAkC,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC;AAClE,CAAC,CAAC;AAEF;AACA,MAAM,kCAAkC,GAAG,CAAC,YAA6B,KAAI;IAC3E,QAAQ,YAAY;QAClB,KAAK,SAAS,EAAE;AACd,YAAA,OAAO,KAAK,CAAC;SACd;QACD,KAAK,WAAW,EAAE;AAChB,YAAA,OAAO,WAAW,CAAC;SACpB;QACD,KAAK,WAAW,EAAE;AAChB,YAAA,OAAO,WAAW,CAAC;SACpB;QACD,KAAK,WAAW,EAAE;AAChB,YAAA,OAAO,WAAW,CAAC;SACpB;QACD,KAAK,QAAQ,EAAE;AACb,YAAA,OAAO,KAAK,CAAC;SACd;QACD,KAAK,UAAU,EAAE;AACf,YAAA,OAAO,WAAW,CAAC;SACpB;QACD,KAAK,UAAU,EAAE;AACf,YAAA,OAAO,WAAW,CAAC;SACpB;QACD,KAAK,UAAU,EAAE;AACf,YAAA,OAAO,WAAW,CAAC;SACpB;QACD,KAAK,SAAS,EAAE;AACd,YAAA,OAAO,WAAW,CAAC;SACpB;QACD,KAAK,SAAS,EAAE;AACd,YAAA,OAAO,WAAW,CAAC;SACpB;QACD,KAAK,UAAU,EAAE;AACf,YAAA,OAAO,WAAW,CAAC;SACpB;QACD,KAAK,UAAU,EAAE;AACf,YAAA,OAAO,WAAW,CAAC;SACpB;QACD,SAAS;AACP,YAAA,OAAO,KAAK,CAAC;SACd;KACF;AACH,CAAC,CAAC;MAEW,UAAU,CAAA;AACrB,IAAA,MAAM,CAAa;AACnB,IAAA,WAAA,CAAY,MAAmB,EAAE,MAAc,EAAE,IAAY,EAAA;AAC3D,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;KACpD;AACF,CAAA;MAEY,cAAc,CAAA;AACzB,IAAA,UAAU,CAAS;AACnB,IAAA,UAAU,CAAS;AACnB,IAAA,IAAI,CAAa;AACjB,IAAA,WAAW,CAAU;AACrB,IAAA,SAAS,CAAY;AACrB,IAAA,KAAK,CAAS;IACd,WAAY,CAAA,MAAkB,EAAE,IAAgB,EAAA;AAC9C,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACpB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE;AACpC,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;SACtC;;;QAGD,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE;AACpC,YAAA,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;SACjC;;;;;;AAMD,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAChC,UAAU,EACV,UAAU,GAAG,IAAI,CAAC,UAAU,CAC7B,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;KAChB;AAED,IAAA,QAAQ,CAAC,KAAa,EAAA;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACjC;AAED,IAAA,MAAM,CAAC,MAAiB,EAAA;;AAEtB,QAAA,MAAM,GAAG,GAAc,MAAM,CAAC,YAAY,CAAC;YACzC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YACtC,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,gBAAgB,EAAE,IAAI;AACvB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,UAAU,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,GAAG,CAAC,KAAK,EAAE,CAAC;AACZ,QAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC1B;AACF,CAAA;MAEY,YAAY,CAAA;AACvB,IAAA,KAAK,CAAS;AACd,IAAA,aAAa,CAAwB;AACrC,IAAA,aAAa,CAAwB;AACrC,IAAA,IAAI,CAAiB;AACrB,IAAA,UAAU,CAAS;IACnB,WAAY,CAAA,IAAoB,EAAE,QAAkB,EAAA;AAClD,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;QAC/C,IAAI,CAAC,aAAa,GAAG,0BAA0B,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAClE,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACpB,QAAA,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE;AACxC,YAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;SAC1C;KACF;AAED,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAC5E,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACpD;AAED,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;KACrC;;AAGD,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;KAC/D;AACF,CAAA;MAMY,aAAa,CAAA;AACxB,IAAA,QAAQ,CAAiB;AACzB,IAAA,cAAc,CAAoB;AAC1B,IAAA,YAAY,CAAwB;IACpC,UAAU,GAAa,EAAE,CAAC;AAClC,IAAA,WAAA,CACE,QAAwB,EACxB,YAAmC,EACnC,UAAoB,EAAA;AAEpB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;;AAE3B,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAE7B,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE;YACnC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC/C,YAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBACjE,SAAS;aACV;AACD,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;SAC7D;KACF;AAED,IAAA,mBAAmB,CACjB,MAAiB,EACjB,YAAoB,EACpB,cAAsB,EACtB,WAA6B,EAC7B,WAA6B,EAC7B,SAA+B,EAC/B,KAAa,EAAA;;;;QAKb,IAAI,uBAAuB,GAAG,CAAA,sBAAA,CAAwB,CAAC;AACvD,QAAA,MAAM,aAAa,GAA4B,IAAI,CAAC,UAAU,CAAC,GAAG,CAChE,CAAC,IAAI,EAAE,GAAG,KAAI;YACZ,MAAM,YAAY,GAChB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;AACrC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzD,uBAAuB,IAAI,CAAe,YAAA,EAAA,GAAG,CAAK,EAAA,EAAA,UAAU,CAAK,EAAA,EAAA,kCAAkC,CACjG,YAAY,CACb,CAAA,GAAA,CAAK,CAAC;YACP,OAAO;gBACL,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU;AAC/C,gBAAA,UAAU,EAAE;AACV,oBAAA;wBACE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU;wBAC1C,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU;AAC1C,wBAAA,cAAc,EAAE,GAAG;AACpB,qBAAA;AACF,iBAAA;aACuB,CAAC;AAC7B,SAAC,CACF,CAAC;QACF,uBAAuB,IAAI,GAAG,CAAC;AAE/B,QAAA,MAAM,WAAW,GAAmB;;AAElC,YAAA,MAAM,EAAE,MAAM,CAAC,kBAAkB,CAAC;gBAChC,IAAI,EAAE,uBAAuB,GAAG,YAAY;aAC7C,CAAC;AACF,YAAA,OAAO,EAAE,aAAa;SACvB,CAAC;AAEF,QAAA,MAAM,aAAa,GAAqB;;AAEtC,YAAA,MAAM,EAAE,MAAM,CAAC,kBAAkB,CAAC;gBAChC,IAAI,EAAE,uBAAuB,GAAG,cAAc;aAC/C,CAAC;;AAEF,YAAA,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;SACnC,CAAC;;;AAIF,QAAA,MAAM,SAAS,GAAsB,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;QACnE,IAAI,IAAI,CAAC,QAAQ,IAAI,cAAc,CAAC,cAAc,EAAE;AAClD,YAAA,SAAS,CAAC,QAAQ,GAAG,gBAAgB,CAAC;YACtC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC;SACtE;AAED,QAAA,MAAM,MAAM,GAAsB,MAAM,CAAC,oBAAoB,CAAC;AAC5D,YAAA,gBAAgB,EAAE,SAAS;YAC3B,KAAK,EAAE,CAAG,EAAA,KAAK,CAAiB,eAAA,CAAA;AACjC,SAAA,CAAC,CAAC;AAEH,QAAA,MAAM,UAAU,GAAgC;AAC9C,YAAA,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,CAAG,EAAA,KAAK,CAAW,SAAA,CAAA;AAC1B,YAAA,MAAM,EAAE,WAAW;AACnB,YAAA,QAAQ,EAAE,aAAa;AACvB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,YAAY,EAAE;AACZ,gBAAA,MAAM,EAAE,WAAW;AACnB,gBAAA,iBAAiB,EAAE,IAAI;AACvB,gBAAA,YAAY,EAAE,MAAM;AACrB,aAAA;SACF,CAAC;QAEF,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;KAC/D;IAED,MAAM,CAAC,iBAAuC,EAAE,UAA0B,EAAA;AACxE,QAAA,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACnD,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,KAAI;AAC7B,YAAA,iBAAiB,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC1C,SAAC,CAAC,CAAC;;QAGH,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,KAAI;AAChC,YAAA,iBAAiB,CAAC,eAAe,CAC/B,GAAG,EACH,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EACtC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU,EAClC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU,CACnC,CAAC;AACJ,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;AAChC,YAAA,iBAAiB,CAAC,cAAc,CAC9B,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,EAC3C,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,UAAU,EACvC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,UAAU,EACvC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,UAAU,CACxC,CAAC;AACF,YAAA,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;SACnE;aAAM;AACL,YAAA,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC;SAC7D;KACF;AACF,CAAA;MAEY,QAAQ,CAAA;AACnB,IAAA,IAAI,CAAS;AACb,IAAA,UAAU,CAAkB;IAC5B,WAAY,CAAA,IAAY,EAAE,UAA2B,EAAA;AACnD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;KAC9B;IAED,mBAAmB,CACjB,MAAiB,EACjB,YAAoB,EACpB,cAAsB,EACtB,WAA6B,EAC7B,WAA6B,EAC7B,SAA+B,EAAA;;;AAI/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAC/C,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,mBAAmB,CACpC,MAAM,EACN,YAAY,EACZ,cAAc,EACd,WAAW,EACX,WAAW,EACX,SAAS,EACT,CAAoB,iBAAA,EAAA,CAAC,CAAE,CAAA,CACxB,CAAC;SACH;KACF;IAED,MAAM,CAAC,iBAAuC,EAAE,UAA0B,EAAA;;;AAGxE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;SAC1D;KACF;AACF,CAAA;AAEM,MAAM,iBAAiB,GAAG,CAAC,MAAgB,KAAI;IACpD,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,UAAU,EAAE;AAC3C,QAAA,MAAM,KAAK,CAAC,iCAAiC,CAAC,CAAC;KAChD;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;AAClC,QAAA,MAAM,KAAK,CAAC,gCAAgC,CAAC,CAAC;KAC/C;AACH,CAAC,CAAC;AAEK,MAAM,oBAAoB,GAAG,CAAC,MAAmB,KAAI;AAC1D,IAAA,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE;AAC3B,QAAA,MAAM,KAAK,CACT,sEAAsE,CACvE,CAAC;KACH;AACH,CAAC,CAAC;MASW,kBAAkB,CAAA;AAC7B,IAAA,QAAQ,CAAO;AACf,IAAA,QAAQ,CAAO;AACf,IAAA,KAAK,CAAO;AACZ,IAAA,WAAA;;AAEE,IAAA,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;IAEpB,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;AAEvB,IAAA,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAA;AAEjB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;IACD,SAAS,GAAA;;AAEP,QAAA,MAAM,GAAG,GAAGC,QAAI,CAAC,QAAQ,EAAE,CAAC;;QAE5BA,QAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;;QAEjC,MAAM,cAAc,GAAGA,QAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;QAEpDA,QAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;;QAExCA,QAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACxC,QAAA,OAAO,GAAG,CAAC;KACZ;AACF,CAAA;MAEY,QAAQ,CAAA;AACnB,IAAA,IAAI,CAAS;AACb,IAAA,MAAM,CAAqB;AAC3B,IAAA,MAAM,CAAkB;AACxB,IAAA,QAAQ,CAAa;;AAErB,IAAA,WAAW,CAAO;AAClB,IAAA,WAAW,CAAO;;AAElB,IAAA,SAAS,CAAa;IACtB,IAAI,GAAG,CAAC,CAAC;AACT,IAAA,IAAI,CAAY;AACR,IAAA,sBAAsB,CAAY;AAClC,IAAA,sBAAsB,CAAe;IAE7C,WACE,CAAA,MAAiB,EACjB,QAA4B,EAC5B,MAA0B,EAC1B,IAAa,EACb,IAAe,EAAA;QAEf,IAAI,CAAC,IAAI,GAAG,IAAI;AACd,cAAE,IAAI;AACN,cAAE,CAAA,KAAA,EAAQ,MAAM,CAAC,QAAQ,CAAI,CAAA,EAAA,MAAM,CAAC,QAAQ,CAAI,CAAA,EAAA,MAAM,CAAC,KAAK,EAAE,CAAC;AACjE,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,WAAW,GAAGA,QAAI,CAAC,QAAQ,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,GAAGA,QAAI,CAAC,QAAQ,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,YAAY,CAAC;AAChD,YAAA,IAAI,EAAE,YAAY,CAAC,iBAAiB,GAAG,EAAE;AACzC,YAAA,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;AACxD,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,eAAe,CAAC;AACnD,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,OAAO,EAAE;AACP,gBAAA;AACE,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,QAAQ,EAAE;wBACR,MAAM,EAAE,IAAI,CAAC,sBAAsB;AACpC,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,SAAS,CAAC,MAAgB,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACpB;AACD,QAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACtB;IAED,iBAAiB,CAAC,MAAiB,EAAE,iBAAwB,EAAA;;;QAG3D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC3C,IAAI,iBAAiB,EAAE;AACrB,YAAAA,QAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;SACtE;aAAM;YACLA,QAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;SAC/C;AACD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAA2B,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,WAAW,CACtB,IAAI,CAAC,sBAAsB,EAC3B,CAAC,EACD,WAAW,CAAC,MAAM,EAClB,WAAW,CAAC,UAAU,EACtB,WAAW,CAAC,UAAU,CACvB,CAAC;AACF,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjC,YAAA,KAAK,CAAC,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;SAC9C;KACF;AAED,IAAA,QAAQ,CAAC,EAAkC,EAAA;QACzC,EAAE,CAAC,IAAI,CAAC,CAAC;AACT,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjC,YAAA,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SACpB;KACF;IAED,eAAe,CACb,WAAiC,EACjC,UAA0B,EAAA;AAE1B,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;AAChC,YAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AACrC,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,oBAAA,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE;AAC3B,wBAAA,GAAG,UAAU;AACb,wBAAA,IAAI,CAAC,sBAAsB;wBAC3B,IAAI,CAAC,IAAI,CAAC,aAAa;AACxB,qBAAA,CAAC,CAAC;iBACJ;qBAAM;AACL,oBAAA,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE;AAC3B,wBAAA,GAAG,UAAU;AACb,wBAAA,IAAI,CAAC,sBAAsB;AAC5B,qBAAA,CAAC,CAAC;iBACJ;aACF;SACF;;AAED,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjC,YAAA,KAAK,CAAC,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;SAChD;KACF;AAEO,IAAA,QAAQ,CAAC,KAAe,EAAA;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;AAEO,IAAA,WAAW,CAAC,KAAe,EAAA;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;KAC9B;AACF,CAAA;MAEY,SAAS,CAAA;AACpB,IAAA,KAAK,CAAY;AACjB,IAAA,IAAI,CAAW;AACf,IAAA,IAAI,CAAU;AAEd,IAAA,WAAA,CACE,MAAiB,EACjB,gBAAoC,EACpC,SAAgB,EAAA;AAEhB,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CACtB,MAAM,EACN,gBAAgB,EAChB,IAAI,kBAAkB,EAAE,EACxB,SAAS,CAAC,IAAI,CACf,CAAC;KACH;AACF,CAAA;MAEY,QAAQ,CAAA;;;AAGnB,IAAA,MAAM,CAAW;;AAEjB,IAAA,aAAa,CAAe;;;;;;AAMpB,IAAA,mBAAmB,CAAe;AAClC,IAAA,0BAA0B,CAAY;AACtC,IAAA,gCAAgC,CAAY;IACpD,OAAO,mBAAmB,CAAqB;IAE/C,OAAO,2BAA2B,CAAC,MAAiB,EAAA;AAClD,QAAA,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACtD,YAAA,KAAK,EAAE,gCAAgC;AACvC,YAAA,OAAO,EAAE;;AAEP,gBAAA;AACE,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,MAAM,EAAE;AACN,wBAAA,IAAI,EAAE,mBAAmB;AAC1B,qBAAA;oBACD,UAAU,EAAE,cAAc,CAAC,MAAM;AAClC,iBAAA;;AAED,gBAAA;AACE,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,MAAM,EAAE;AACN,wBAAA,IAAI,EAAE,mBAAmB;AAC1B,qBAAA;oBACD,UAAU,EAAE,cAAc,CAAC,MAAM;AAClC,iBAAA;AACF,aAAA;AACF,SAAA,CAAC,CAAC;KACJ;;;;AAKD,IAAA,WAAA,CACE,MAAiB,EACjB,2BAAyC,EACzC,MAAgB,EAAA;QAEhB,IACE,2BAA2B,CAAC,aAAa;AACvC,YAAA,qBAAqB,CAAC,KAAK;AAC7B,YAAA,2BAA2B,CAAC,UAAU,KAAK,EAAE,EAC7C;AACA,YAAA,MAAM,KAAK,CACT,CAAgI,8HAAA,CAAA,CACjI,CAAC;SACH;;AAED,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,YAAY,CACzC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAC5C,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAChD,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CACrD,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,MAAM,kBAAkB,GAAwB;YAC9C,IAAI,EAAE,YAAY,CAAC,iBAAiB,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM;AACzD,YAAA,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;SACxD,CAAC;QACF,IAAI,CAAC,0BAA0B,GAAG,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;AAC1E,QAAA,IAAI,CAAC,gCAAgC;AACnC,YAAA,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;AAC1C,QAAA,MAAM,CAAC,KAAK,CAAC,WAAW,CACtB,IAAI,CAAC,gCAAgC,EACrC,CAAC,EACD,IAAI,CAAC,mBAAmB,CACzB,CAAC;AACF,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;YAC1C,MAAM,EAAE,QAAQ,CAAC,mBAAmB;AACpC,YAAA,KAAK,EAAE,0BAA0B;AACjC,YAAA,OAAO,EAAE;AACP,gBAAA;AACE,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,QAAQ,EAAE;wBACR,MAAM,EAAE,IAAI,CAAC,0BAA0B;AACxC,qBAAA;AACF,iBAAA;AACD,gBAAA;AACE,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,QAAQ,EAAE;wBACR,MAAM,EAAE,IAAI,CAAC,gCAAgC;AAC9C,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,MAAM,CAAC,MAAiB,EAAE,gBAAwB,EAAE,KAAiB,EAAA;AACnE,QAAA,MAAM,kBAAkB,GAAGA,QAAI,CAAC,OAAO,CACrC,KAAK,CAAC,gBAAgB,CAAC,CAAC,WAAW,CACpC,CAAC;AACF,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC7B,YAAA,MAAM,SAAS,GAASA,QAAI,CAAC,QAAQ,EAAE,CAAC;AACxC,YAAAA,QAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACvE,MAAM,OAAO,GAAG,SAAyB,CAAC;YAC1C,MAAM,CAAC,KAAK,CAAC,WAAW,CACtB,IAAI,CAAC,0BAA0B,EAC/B,CAAC,GAAG,EAAE,EACN,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,UAAU,CACnB,CAAC;SACH;KACF;AACF,CAAA;AAED;AACA;AACO,MAAM,yBAAyB,GAAG,OACvC,MAAmB,EACnB,MAAiB,KACM;;IAEvB,MAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/C,iBAAiB,CAAC,UAAU,CAAC,CAAC;;IAG9B,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;;IAGvD,MAAM,SAAS,GAAS,IAAI,CAAC,KAAK,CAChC,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC,CAC7E,CAAC;;AAGF,IAAA,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,GAAG,eAAe,EAAE,CAAC,CAAC,CAAC;IACtE,oBAAoB,CAAC,YAAY,CAAC,CAAC;AAEnC,IAAA,MAAM,WAAW,GAAG,IAAI,UAAU,CAChC,MAAM,EACN,EAAE,GAAG,eAAe,EACpB,YAAY,CAAC,CAAC,CAAC,CAChB,CAAC;;AAGF,IAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,SAAS,EAAE;QAC1C,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC;QAC/C,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,KAAK,CAAC;KACpD;AAED,IAAA,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,WAAW,EAAE;QAC9C,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,IAAI,CAAC,CAAC;KACpD;AAED,IAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;AACtB,QAAA,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE;YACxC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;YACvC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;SACxC;KACF;;;AAID,IAAA,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,MAAM,EAAE;AACnC,QAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;AACvC,YAAA,IAAI,SAAS,IAAI,SAAS,EAAE;gBAC1B,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBACxD,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,eAAe;oBACpD,cAAc,CAAC,KAAK,CAAC;gBACvB,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,KAAK;oBAC9C,cAAc,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;gBAC3D,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBAChD,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,eAAe,IAAI,cAAc,CAAC,MAAM,CAAC;gBACxE,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,KAAK;oBAC9C,cAAc,CAAC,MAAM,CAAC;aACzB;SACF;KACF;;IAGD,MAAM,WAAW,GAAqB,EAAE,CAAC;AACzC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACrD,QAAA,WAAW,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7E;IAED,MAAM,SAAS,GAAmB,EAAE,CAAC;AACrC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QACnD,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC5C,QAAA,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;AAC1C,QAAA,SAAS,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;KACrE;;IAED,MAAM,MAAM,GAAe,EAAE,CAAC;AAC9B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAChD,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,cAAc,GAAoB,EAAE,CAAC;AAC3C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAChC,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;;AAE5B,YAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC1B,gBAAA,QAAQ,GAAG,cAAc,CAAC,SAAS,CAAC;aACrC;AACD,YAAA,IACE,QAAQ,IAAI,cAAc,CAAC,SAAS;AACpC,gBAAA,QAAQ,IAAI,cAAc,CAAC,cAAc,EACzC;gBACA,MAAM,KAAK,CAAC,CAA8B,2BAAA,EAAA,IAAI,CAAC,MAAM,CAAC,CAAE,CAAA,CAAC,CAAC;aAC3D;YAED,MAAM,qBAAqB,GAAG,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,YAAA,IAAI,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,SAAS,EAAE;gBACzD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3C,gBAAA,qBAAqB,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;aAC5C;;YAGD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE;AACrC,gBAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,gBAAA,qBAAqB,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;AACvC,gBAAA,IAAI,QAAQ,CAAC,aAAa,GAAG,CAAC,EAAE;AAC9B,oBAAA,MAAM,KAAK,CACT,kFAAkF,CACnF,CAAC;iBACH;AACD,gBAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvB;AACD,YAAA,cAAc,CAAC,IAAI,CACjB,IAAI,aAAa,CAAC,QAAQ,EAAE,qBAAqB,EAAE,UAAU,CAAC,CAC/D,CAAC;SACH;AACD,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;KACtD;IAED,MAAM,KAAK,GAAe,EAAE,CAAC;AAC7B,IAAA,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE;QAClC,MAAM,yBAAyB,GAAG,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACtE,QAAA,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CACrC,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,CACjD,CAAC;AACF,QAAA,yBAAyB,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KACnD;;AAGD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AAC3C,QAAA,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;YAC9B,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAC/B;KACF;AAED,IAAA,QAAQ,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAC7C,IAAA,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE;QAClC,MAAM,yBAAyB,GAAG,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACtE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC3B,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,yBAAyB,EAAE,MAAM,CAAC,CAAC,CAAC;KACrE;IAED,MAAM,KAAK,GAAe,EAAE,CAAC;;AAG7B,IAAA,MAAM,2BAA2B,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC/D,QAAA,KAAK,EAAE,8BAA8B;AACrC,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,MAAM,EAAE;AACN,oBAAA,IAAI,EAAE,SAAS;AAChB,iBAAA;gBACD,UAAU,EAAE,cAAc,CAAC,MAAM;AAClC,aAAA;AACF,SAAA;AACF,KAAA,CAAC,CAAC;AACH,IAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,KAAK,EAAE;AACtC,QAAA,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAC/C,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,KAAK,CACf,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,QAAQ,CAC/B,MAAM,EACN,2BAA2B,EAC3B,kBAAkB,EAClB,QAAQ,CAAC,IAAI,EACb,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CACrB,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,SAAS,EAAE;AACb,YAAA,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACxC;AACD,QAAA,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KAC1B;;IAGD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,KAAI;QAC1B,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC/C,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAC5B,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC9B,gBAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACxB,aAAC,CAAC,CAAC;SACJ;AACH,KAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAgB,EAAE,CAAC;AAE/B,IAAA,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE;QACxC,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,2BAA2B,EAAE,SAAS,CAAC,CAAC;AAC5E,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC;AAClC,QAAA,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AACjC,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC9B,YAAA,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC9B,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACpB;IACD,OAAO;QACL,MAAM;QACN,KAAK;QACL,MAAM;QACN,KAAK;KACN,CAAC;AACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACz9BD;;;;;AAKG;AACI,MAAM,sBAAsB,GAAG,CACpC,QAAkB,EAClB,YAAsB,EACtB,aAAiC,EACjC,eAAyC,EACzC,SAAiC,EACjC,KAAa,EACb,MAAiB,KACG;IACpB,MAAM,aAAa,GAA8B,EAAE,CAAC;AACpD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACxC,aAAa,CAAC,IAAI,CAAC;AACjB,YAAA,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;YACpB,UAAU,EAAE,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;YACjD,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;AACvC,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,MAAM,eAAe,GAAG,MAAM,CAAC,qBAAqB,CAAC;QACnD,KAAK,EAAE,CAAG,EAAA,KAAK,CAAkB,gBAAA,CAAA;AACjC,QAAA,OAAO,EAAE,aAAa;AACvB,KAAA,CAAC,CAAC;IAEH,MAAM,UAAU,GAAmB,EAAE,CAAC;;;;;AAKtC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACzC,MAAM,YAAY,GAAwB,EAAE,CAAC;AAC7C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,YAAY,CAAC,IAAI,CAAC;AAChB,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,aAAA,CAAC,CAAC;SACJ;AACD,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;AAC1C,YAAA,KAAK,EAAE,CAAA,EAAG,KAAK,CAAA,UAAA,EAAa,CAAC,CAAE,CAAA;AAC/B,YAAA,MAAM,EAAE,eAAe;AACvB,YAAA,OAAO,EAAE,YAAY;AACtB,SAAA,CAAC,CAAC;AACH,QAAA,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KAC/B;IAED,OAAO;QACL,UAAU;QACV,eAAe;KAChB,CAAC;AACJ,CAAC;;AC/ED;AACO,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC;;IAE3C,CAAC,EAAG,CAAC;AACL,IAAA,CAAC,EAAE,CAAC,CAAC;;IAEL,CAAC,EAAG,CAAC;AACL,IAAA,CAAC,EAAE,CAAC,CAAC;;IAEL,CAAC,EAAG,CAAC;AACL,IAAA,CAAC,EAAE,CAAC,CAAC;;IAEL,CAAC,EAAG,CAAC;AACL,IAAA,CAAC,EAAE,CAAC,CAAC;;IAEL,CAAC,EAAG,CAAC;AACL,IAAA,CAAC,EAAE,CAAC,CAAC;;IAEL,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,CAAC,CAAC;;IAEN,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,CAAC,CAAC;AACP,CAAA,CAAC,CAAC;AAEH;AACO,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC;AACxC,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACX,CAAA,CAAC,CAAA;AAEF;AACO,MAAM,WAAW,GAAG,IAAI,YAAY,CAAC;;AAE1C,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;;AAEX,IAAA,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACX,IAAA,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAC;;AAEV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;;AAEX,IAAA,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACX,IAAA,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAC;;AAEV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;;AAEX,IAAA,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACX,IAAA,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAC;;AAEV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACV,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACX,CAAA,CAAC,CAAC;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEO,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC;;AAEzC,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC;;IAEJ,CAAC,EAAE,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC;;AAEJ,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC;;AAEJ,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC;;AAEJ,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,CAAC,EAAE,EAAE;AACL,IAAA,CAAC,EAAE,EAAE;;AAEL,IAAA,EAAE,EAAE,EAAE;AACN,IAAA,EAAE,EAAE,EAAE;AACN,IAAA,EAAE,EAAE,EAAE;;AAEN,IAAA,EAAE,EAAE,EAAE;AACP,CAAA,CAAC;;ACvGF;AACO,MAAM,wBAAwB,GAAG,CAAC,MAAiB,KAAI;;AAE5D,IAAA,MAAM,YAAY,GAAG,CACnB,IAAgC,EAChC,IAAmB,KACjB;AACF,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;YACjC,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,KAAK,EAAE,cAAc,CAAC,MAAM;AAC5B,YAAA,gBAAgB,EAAE,IAAI;AACvB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,IAAI,KAAK,KAAK,EAAE;AAClB,YAAA,IAAI,YAAY,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACrD;aAAM;AACL,YAAA,IAAI,WAAW,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACpD;QACD,MAAM,CAAC,KAAK,EAAE,CAAC;AACf,QAAA,OAAO,MAAM,CAAC;AAChB,KAAC,CAAC;IACF,MAAM,eAAe,GAAG,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AACvD,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;AACxC,QAAA,IAAI,EAAE,WAAW,CAAC,iBAAiB,GAAG,WAAW,CAAC,MAAM;QACxD,KAAK,EAAE,cAAc,CAAC,KAAK;AAC3B,QAAA,gBAAgB,EAAE,IAAI;AACvB,KAAA,CAAC,CAAC;AACH,IAAA,IAAI,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACjE,aAAa,CAAC,KAAK,EAAE,CAAC;IAEtB,OAAO;AACL,QAAA,SAAS,EAAE,eAAe;AAC1B,QAAA,MAAM,EAAE,YAAY;AACpB,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,OAAO,EAAE,aAAa;KACvB,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,+BAA+B,GAAG,CAC7C,MAAiB,EACjB,kBAAoC,EACpC,YAAoB,EACpB,cAAsB,EACtB,SAA+B,KAC7B;AACF,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAC3C,QAAA,KAAK,EAAE,qBAAqB;AAC5B,QAAA,MAAM,EAAE,MAAM,CAAC,oBAAoB,CAAC;AAClC,YAAA,KAAK,EAAE,CAAoC,kCAAA,CAAA;AAC3C,YAAA,gBAAgB,EAAE,SAAS;SAC5B,CAAC;AACF,QAAA,MAAM,EAAE;AACN,YAAA,MAAM,EAAE,MAAM,CAAC,kBAAkB,CAAC;AAChC,gBAAA,KAAK,EAAE,CAAkC,gCAAA,CAAA;AACzC,gBAAA,IAAI,EAAE,YAAY;aACnB,CAAC;AACF,YAAA,OAAO,EAAE;;AAEP,gBAAA;AACE,oBAAA,WAAW,EAAE,YAAY,CAAC,iBAAiB,GAAG,CAAC;AAC/C,oBAAA,UAAU,EAAE;AACV,wBAAA;AACE,4BAAA,MAAM,EAAE,WAAW;AACnB,4BAAA,MAAM,EAAE,CAAC;AACT,4BAAA,cAAc,EAAE,CAAC;AAClB,yBAAA;AACF,qBAAA;AACF,iBAAA;;AAED,gBAAA;AACE,oBAAA,WAAW,EAAE,WAAW,CAAC,iBAAiB,GAAG,CAAC;AAC9C,oBAAA,UAAU,EAAE;AACV,wBAAA;AACE,4BAAA,MAAM,EAAE,UAAU;AAClB,4BAAA,MAAM,EAAE,CAAC;AACT,4BAAA,cAAc,EAAE,CAAC;AAClB,yBAAA;AACF,qBAAA;AACF,iBAAA;;AAED,gBAAA;AACE,oBAAA,WAAW,EAAE,YAAY,CAAC,iBAAiB,GAAG,CAAC;AAC/C,oBAAA,UAAU,EAAE;AACV,wBAAA;AACE,4BAAA,MAAM,EAAE,WAAW;AACnB,4BAAA,MAAM,EAAE,CAAC;AACT,4BAAA,cAAc,EAAE,CAAC;AAClB,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,MAAM,EAAE,MAAM,CAAC,kBAAkB,CAAC;AAChC,gBAAA,KAAK,EAAE,CAAoC,kCAAA,CAAA;AAC3C,gBAAA,IAAI,EAAE,cAAc;aACrB,CAAC;AACF,YAAA,OAAO,EAAE;AACP,gBAAA;AACE,oBAAA,MAAM,EAAE,kBAAkB;AAC3B,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,SAAS,EAAE;AACT,YAAA,QAAQ,EAAE,WAAW;AACtB,SAAA;AACF,KAAA,CAAC,CAAC;AACH,IAAA,OAAO,QAAQ,CAAC;AAClB,CAAC;;ACnGD,MAAM,YAAY,GAAG,EAAE,CAAC;AAQxB,IAAK,UAIJ,CAAA;AAJD,CAAA,UAAK,UAAU,EAAA;AACb,IAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM,CAAA;AACN,IAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM,CAAA;AACN,IAAA,UAAA,CAAA,UAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO,CAAA;AACT,CAAC,EAJI,UAAU,KAAV,UAAU,GAId,EAAA,CAAA,CAAA,CAAA;AAED,IAAK,QAGJ,CAAA;AAHD,CAAA,UAAK,QAAQ,EAAA;AACX,IAAA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAE,CAAA;AACF,IAAA,QAAA,CAAA,QAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG,CAAA;AACL,CAAC,EAHI,QAAQ,KAAR,QAAQ,GAGZ,EAAA,CAAA,CAAA,CAAA;AAED;AACA,MAAM,WAAW,GAAG,CAAC,GAAS,KAAU;;IAEtC,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;;;IAGzB,MAAM,OAAO,GAAGA,QAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;;IAG3B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;;;;AAK3B,IAAA,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,IAAI,CAAC,GAAG,CAAC,CAAC;;AAGV,IAAA,IAAI,KAAK,GAAG,CAAC,EAAE;QACb,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B,QAAA,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;QAClB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;QAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;QAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;;KAE5B;SAAM,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE;AACrC,QAAA,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5C,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;AAC3B,QAAA,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;QAClB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;QAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;;KAE5B;AAAM,SAAA,IAAI,IAAI,GAAG,IAAI,EAAE;AACtB,QAAA,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5C,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;QAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;AAC3B,QAAA,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;QAClB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;;KAE5B;SAAM;AACL,QAAA,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5C,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;QAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;QAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;AAC3B,QAAA,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;KACnB;AAED,IAAA,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF;AACA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAsB,CAAC;AACrE,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;AACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;AAE7C,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAqB,CAAC;AAEhE,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;AACtD,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,GAAG,gBAAgB,CAAC;AACrD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,YAAY,GAAG,gBAAgB,CAAC;AACvD,MAAM,kBAAkB,GAAG,SAAS,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;AAEpE,OAAO,CAAC,SAAS,CAAC;IAChB,MAAM;AACN,IAAA,MAAM,EAAE,kBAAkB;AAC1B,IAAA,SAAS,EAAE,eAAe;AAC3B,CAAA,CAAC,CAAC;AAEH,MAAM,QAAQ,GAAG;AACf,IAAA,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC,GAAG;IACb,OAAO,EAAE,CAAC,IAAI;AACd,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,UAAU,EAAE,QAAQ;AACpB,IAAA,QAAQ,EAAE,IAAI;CACf,CAAC;AAEF,MAAM,GAAG,GAAG,IAAIC,KAAG,EAAE,CAAC;AAEtB;AACA,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAK;AACnE,IAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,cAAc,EAAE;AACtC,QAAA,QAAQ,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;AACvB,QAAA,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;AACrB,QAAA,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;KAC7B;SAAM;AACL,QAAA,IAAI,QAAQ,CAAC,QAAQ,KAAK,KAAK,EAAE;AAC/B,YAAA,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;AACrB,YAAA,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;AACrB,YAAA,QAAQ,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;SACxB;aAAM;AACL,YAAA,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;AACrB,YAAA,QAAQ,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC;AACxB,YAAA,QAAQ,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC;SAC1B;KACF;AACH,CAAC,CAAC,CAAC;AAEH;AACA,GAAG;AACA,KAAA,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;KAC5D,QAAQ,CAAC,MAAK;IACb,MAAM,CAAC,KAAK,CAAC,WAAW,CACtB,qBAAqB,EACrB,CAAC,EACD,IAAI,WAAW,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CACnD,CAAC;AACJ,CAAC,CAAC,CAAC;AACL;AACA,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAK;AACzD,IAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE;AAC/B,QAAA,IAAI,QAAQ,CAAC,QAAQ,KAAK,KAAK,EAAE;AAC/B,YAAA,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;AACrB,YAAA,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;AACrB,YAAA,QAAQ,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;SACxB;aAAM;AACL,YAAA,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;AACrB,YAAA,QAAQ,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC;AACxB,YAAA,QAAQ,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC;SAC1B;KACF;IACD,MAAM,CAAC,KAAK,CAAC,WAAW,CACtB,qBAAqB,EACrB,CAAC,EACD,IAAI,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC/C,CAAC;AACJ,CAAC,CAAC,CAAC;AACH,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;AACvD,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxD,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEpD,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC;IACxC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;AACnC,IAAA,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,eAAe,CAAC,iBAAiB;AACzC,CAAA,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IACvC,IAAI,EAAE,YAAY,GAAG,CAAC;AACtB,IAAA,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;AACxD,CAAA,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,sBAAsB,CAC5C,CAAC,CAAC,CAAC,EACH,CAAC,cAAc,CAAC,MAAM,CAAC,EACvB,CAAC,QAAQ,CAAC,EACV,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACrB,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,EAC5B,QAAQ,EACR,MAAM,CACP,CAAC;AAEF,MAAM,qBAAqB,GAAG,MAAM,CAAC,YAAY,CAAC;AAChD,IAAA,IAAI,EAAE,WAAW,CAAC,iBAAiB,GAAG,CAAC;AACvC,IAAA,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;AACxD,CAAA,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,sBAAsB,CACrD,CAAC,CAAC,CAAC,EACH,CAAC,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,EACjD,CAAC,QAAQ,CAAC,EACV,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACrB,CAAC,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC,EACrC,SAAS,EACT,MAAM,CACP,CAAC;AAEF;AACA,MAAM,2BAA2B,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC/D,IAAA,KAAK,EAAE,8BAA8B;AACrC,IAAA,OAAO,EAAE;AACP,QAAA;AACE,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,SAAS;AAChB,aAAA;YACD,UAAU,EAAE,cAAc,CAAC,MAAM;AAClC,SAAA;AACF,KAAA;AACF,CAAA,CAAC,CAAC;AAEH;AACA,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,6BAA6B,CAAC;KAC1D,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC;AAChC,KAAA,IAAI,CAAC,CAAC,MAAM,KAAK,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE/D;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,mBAAmB,CACtC,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,kBAAkB,EAClB,YAAY,CAAC,MAAM,EACnB;AACE,IAAA,eAAe,CAAC,eAAe;AAC/B,IAAA,wBAAwB,CAAC,eAAe;IACxC,2BAA2B;AAC3B,IAAA,QAAQ,CAAC,mBAAmB;AAC7B,CAAA,CACF,CAAC;AAEF;AACA,MAAM,wBAAwB,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAClE;AACA,MAAM,6BAA6B,GAAwB;;IAEzD,IAAI,EAAE,YAAY,GAAG,CAAC;AACtB,IAAA,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;CACxD,CAAC;AACF,MAAM,6BAA6B,GAAG,MAAM,CAAC,YAAY,CACvD,6BAA6B,CAC9B,CAAC;AACF,MAAM,mCAAmC,GAAG,MAAM,CAAC,YAAY,CAC7D,6BAA6B,CAC9B,CAAC;AACF,MAAM,wBAAwB,GAAG,sBAAsB,CACrD,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,EAC9C,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACpB,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,EAC9D;AACE,IAAA;QACE,EAAE,MAAM,EAAE,6BAA6B,EAAE;QACzC,EAAE,MAAM,EAAE,mCAAmC,EAAE;AAChD,KAAA;AACF,CAAA,EACD,0BAA0B,EAC1B,MAAM,CACP,CAAC;AACF,MAAM,mBAAmB,GAAG,+BAA+B,CACzD,MAAM,EACN,kBAAkB,EAClB,QAAQ,EACR,QAAQ,EACR;AACE,IAAA,eAAe,CAAC,eAAe;AAC/B,IAAA,wBAAwB,CAAC,eAAe;AACxC,IAAA,wBAAwB,CAAC,eAAe;AACzC,CAAA,CACF,CAAC;AAEF;AACA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;AAC5C,MAAM,qBAAqB,GAAGD,QAAI,CAAC,WAAW,CAC5C,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,EACjB,MAAM,EACN,GAAG,EACH,KAAK,CACN,CAAC;AAEF,MAAM,sBAAsB,GAAGA,QAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAEvE,SAAS,mBAAmB,GAAA;AAC1B,IAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,cAAc,EAAE;AACtC,QAAA,OAAO,qBAAqC,CAAC;KAC9C;AACD,IAAA,OAAO,sBAAsC,CAAC;AAChD,CAAC;AAED,SAAS,aAAa,GAAA;AACpB,IAAA,MAAM,UAAU,GAAGA,QAAI,CAAC,QAAQ,EAAE,CAAC;AACnC,IAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,cAAc,EAAE;AACtC,QAAAA,QAAI,CAAC,SAAS,CACZ,UAAU,EACVE,QAAI,CAAC,UAAU,CACb,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,WAAW,EACvC,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,WAAW,EACvC,QAAQ,CAAC,OAAO,CACjB,EACD,UAAU,CACX,CAAC;KACH;SAAM;QACLF,QAAI,CAAC,SAAS,CACZ,UAAU,EACVE,QAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,EACrE,UAAU,CACX,CAAC;KACH;AACD,IAAA,OAAO,UAA0B,CAAC;AACpC,CAAC;AAED,SAAS,cAAc,GAAA;AACrB,IAAA,MAAM,WAAW,GAAGF,QAAI,CAAC,QAAQ,EAAE,CAAC;AACpC,IAAA,MAAM,WAAW,GAAGE,QAAI,CAAC,UAAU,CACjC,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,WAAW,CACrB,CAAC;IACFF,QAAI,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AAClD,IAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE;AAC/B,QAAAA,QAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,WAAW,CAAC,CAAC;KACnE;AACD,IAAA,OAAO,WAA2B,CAAC;AACrC,CAAC;AAED;AACA,MAAM,wBAAwB,GAA4B;AACxD,IAAA,gBAAgB,EAAE;AAChB,QAAA;YACE,IAAI,EAAE,SAAS;AAEf,YAAA,UAAU,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;AAC9C,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,OAAO,EAAE,OAAO;AACjB,SAAA;AACF,KAAA;AACD,IAAA,sBAAsB,EAAE;AACtB,QAAA,IAAI,EAAE,YAAY,CAAC,UAAU,EAAE;AAC/B,QAAA,WAAW,EAAE,OAAO;AACpB,QAAA,eAAe,EAAE,GAAG;AACpB,QAAA,YAAY,EAAE,OAAO;AACtB,KAAA;CACF,CAAC;AAEF;AACA,MAAM,+BAA+B,GAA4B;AAC/D,IAAA,gBAAgB,EAAE;AAChB,QAAA;YACE,IAAI,EAAE,SAAS;AAEf,YAAA,UAAU,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;AAC9C,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,OAAO,EAAE,OAAO;AACjB,SAAA;AACF,KAAA;CACF,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,cAAsB,EAAE,KAAa,KAAI;AAChE,IAAA,MAAM,CAAC,GAAGA,QAAI,CAAC,QAAQ,EAAE,CAAC;AAC1B,IAAAA,QAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1CA,QAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,EAAEE,QAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3D,IAAAF,QAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1CA,QAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,EAAEE,QAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3D,IAAAF,QAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF;AACA;AACA,MAAM,oBAAoB,GAAG,CAAC,QAAgB,KAAgB;;IAE5D,MAAM,UAAU,GAAW,EAAE,CAAC;;;IAG9B,MAAM,SAAS,GAAW,EAAE,CAAC;;AAE7B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;QACjC,UAAU,CAAC,IAAI,CAACA,QAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjC,SAAS,CAAC,IAAI,CAACA,QAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;KACjC;;AAGD,IAAA,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC9B,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;AAC9C,QAAA,OAAOA,QAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAChC,KAAC,CAAC,CAAC;IAEH,OAAO;QACL,UAAU;QACV,SAAS;QACT,YAAY;KACb,CAAC;AACJ,CAAC,CAAC;AAEF;AACA;AACA,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;AACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/D,IAAA,MAAM,CAAC,KAAK,CAAC,WAAW,CACtB,mCAAmC,EACnC,CAAC,GAAG,EAAE,EACN,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAiB,CACnD,CAAC;AACJ,CAAC;AAED;AACA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAgB,CAAC;AAC7C,MAAM,aAAa,GAAG,CAAC,IAAc,EAAE,KAAa,KAAI;AACtD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;QAE3C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;;QAE7B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC5B,YAAA,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;SACrE;;QAED,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,GAAGA,QAAI,CAAC,MAAM,EAAE,CAAC;;;QAGtB,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE;YAC9B,CAAC,GAAGA,QAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC;SACtC;aAAM,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE;YACrC,CAAC,GAAGA,QAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;SAC5D;aAAM;YACL,CAAC,GAAGA,QAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;SACrC;;;AAGD,QAAA,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAGA,QAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACjE,QAAA,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,GAAGA,QAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1D,QAAA,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;KAC1D;AACH,CAAC,CAAC;AAEF,SAAS,KAAK,GAAA;;AAEZ,IAAA,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;AAC/C,IAAA,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;AACnC,IAAA,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;;AAGrC,IAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC;AAChD,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;;AAE3C,IAAA,eAAe,CAAC,kBAAkB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;;IAGtD,MAAM,CAAC,KAAK,CAAC,WAAW,CACtB,YAAY,EACZ,CAAC,EACD,gBAAgB,CAAC,MAAM,EACvB,gBAAgB,CAAC,UAAU,EAC3B,gBAAgB,CAAC,UAAU,CAC5B,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,WAAW,CACtB,YAAY,EACZ,EAAE,EACF,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,UAAU,CACtB,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,WAAW,CACtB,YAAY,EACZ,GAAG,EACH,WAAW,CAAC,MAAM,EAClB,WAAW,CAAC,UAAU,EACtB,WAAW,CAAC,UAAU,CACvB,CAAC;;AAGF,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7D,QAAA,MAAM,CAAC,KAAK,CAAC,WAAW,CACtB,6BAA6B,EAC7B,CAAC,GAAG,EAAE,EACN,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAiB,CACjD,CAAC;KACH;;IAGD,wBAAwB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO;AACxD,SAAA,iBAAiB,EAAE;AACnB,SAAA,UAAU,EAAE,CAAC;IAEhB,+BAA+B,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO;AAC/D,SAAA,iBAAiB,EAAE;AACnB,SAAA,UAAU,EAAE,CAAC;;AAGhB,IAAA,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE;AACrC,QAAA,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;KACtC;;AAGD,IAAA,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;;AAEjE,IAAA,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;AAExD,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;AACrD,IAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE;QAC/B,MAAM,WAAW,GAAG,cAAc,CAAC,eAAe,CAChD,wBAAwB,CACzB,CAAC;AACF,QAAA,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE;AACrC,YAAA,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;AACtC,gBAAA,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7B,gBAAA,wBAAwB,CAAC,UAAU,CAAC,CAAC,CAAC;AACvC,aAAA,CAAC,CAAC;SACJ;QACD,WAAW,CAAC,GAAG,EAAE,CAAC;KACnB;SAAM;;;QAGL,MAAM,WAAW,GAAG,cAAc,CAAC,eAAe,CAChD,+BAA+B,CAChC,CAAC;AACF,QAAA,WAAW,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;AAC7C,QAAA,WAAW,CAAC,YAAY,CAAC,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,QAAA,WAAW,CAAC,YAAY,CAAC,CAAC,EAAE,wBAAwB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,QAAA,WAAW,CAAC,YAAY,CAAC,CAAC,EAAE,wBAAwB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;;;QAGpE,WAAW,CAAC,eAAe,CAAC,CAAC,EAAE,wBAAwB,CAAC,SAAS,CAAC,CAAC;QACnE,WAAW,CAAC,eAAe,CAAC,CAAC,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAChE,WAAW,CAAC,eAAe,CAAC,CAAC,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACjE,WAAW,CAAC,cAAc,CAAC,wBAAwB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACvE,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC/C,WAAW,CAAC,GAAG,EAAE,CAAC;KACnB;AAED,IAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAE/C,qBAAqB,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AACD,qBAAqB,CAAC,KAAK,CAAC","x_google_ignoreList":[0,1]} \ No newline at end of file +{"version":3,"file":"main.js","sources":["../../../node_modules/dat.gui/build/dat.gui.module.js","../../../node_modules/wgpu-matrix/dist/2.x/wgpu-matrix.module.js","../../../../../sample/skinnedMesh/glbUtils.ts","../../../../../sample/bitonicSort/utils.ts","../../../../../sample/skinnedMesh/gridData.ts","../../../../../sample/skinnedMesh/gridUtils.ts","../../../../../sample/skinnedMesh/main.ts"],"sourcesContent":["/**\n * dat-gui JavaScript Controller Library\n * https://github.com/dataarts/dat.gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction ___$insertStyle(css) {\n if (!css) {\n return;\n }\n if (typeof window === 'undefined') {\n return;\n }\n\n var style = document.createElement('style');\n\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n document.head.appendChild(style);\n\n return css;\n}\n\nfunction colorToString (color, forceCSSHex) {\n var colorFormat = color.__state.conversionName.toString();\n var r = Math.round(color.r);\n var g = Math.round(color.g);\n var b = Math.round(color.b);\n var a = color.a;\n var h = Math.round(color.h);\n var s = color.s.toFixed(1);\n var v = color.v.toFixed(1);\n if (forceCSSHex || colorFormat === 'THREE_CHAR_HEX' || colorFormat === 'SIX_CHAR_HEX') {\n var str = color.hex.toString(16);\n while (str.length < 6) {\n str = '0' + str;\n }\n return '#' + str;\n } else if (colorFormat === 'CSS_RGB') {\n return 'rgb(' + r + ',' + g + ',' + b + ')';\n } else if (colorFormat === 'CSS_RGBA') {\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n } else if (colorFormat === 'HEX') {\n return '0x' + color.hex.toString(16);\n } else if (colorFormat === 'RGB_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ']';\n } else if (colorFormat === 'RGBA_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ',' + a + ']';\n } else if (colorFormat === 'RGB_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + '}';\n } else if (colorFormat === 'RGBA_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}';\n } else if (colorFormat === 'HSV_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + '}';\n } else if (colorFormat === 'HSVA_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}';\n }\n return 'unknown format';\n}\n\nvar ARR_EACH = Array.prototype.forEach;\nvar ARR_SLICE = Array.prototype.slice;\nvar Common = {\n BREAK: {},\n extend: function extend(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (!this.isUndefined(obj[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n defaults: function defaults(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (this.isUndefined(target[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n compose: function compose() {\n var toCall = ARR_SLICE.call(arguments);\n return function () {\n var args = ARR_SLICE.call(arguments);\n for (var i = toCall.length - 1; i >= 0; i--) {\n args = [toCall[i].apply(this, args)];\n }\n return args[0];\n };\n },\n each: function each(obj, itr, scope) {\n if (!obj) {\n return;\n }\n if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) {\n obj.forEach(itr, scope);\n } else if (obj.length === obj.length + 0) {\n var key = void 0;\n var l = void 0;\n for (key = 0, l = obj.length; key < l; key++) {\n if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) {\n return;\n }\n }\n } else {\n for (var _key in obj) {\n if (itr.call(scope, obj[_key], _key) === this.BREAK) {\n return;\n }\n }\n }\n },\n defer: function defer(fnc) {\n setTimeout(fnc, 0);\n },\n debounce: function debounce(func, threshold, callImmediately) {\n var timeout = void 0;\n return function () {\n var obj = this;\n var args = arguments;\n function delayed() {\n timeout = null;\n if (!callImmediately) func.apply(obj, args);\n }\n var callNow = callImmediately || !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(delayed, threshold);\n if (callNow) {\n func.apply(obj, args);\n }\n };\n },\n toArray: function toArray(obj) {\n if (obj.toArray) return obj.toArray();\n return ARR_SLICE.call(obj);\n },\n isUndefined: function isUndefined(obj) {\n return obj === undefined;\n },\n isNull: function isNull(obj) {\n return obj === null;\n },\n isNaN: function (_isNaN) {\n function isNaN(_x) {\n return _isNaN.apply(this, arguments);\n }\n isNaN.toString = function () {\n return _isNaN.toString();\n };\n return isNaN;\n }(function (obj) {\n return isNaN(obj);\n }),\n isArray: Array.isArray || function (obj) {\n return obj.constructor === Array;\n },\n isObject: function isObject(obj) {\n return obj === Object(obj);\n },\n isNumber: function isNumber(obj) {\n return obj === obj + 0;\n },\n isString: function isString(obj) {\n return obj === obj + '';\n },\n isBoolean: function isBoolean(obj) {\n return obj === false || obj === true;\n },\n isFunction: function isFunction(obj) {\n return obj instanceof Function;\n }\n};\n\nvar INTERPRETATIONS = [\n{\n litmus: Common.isString,\n conversions: {\n THREE_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString() + test[1].toString() + test[2].toString() + test[2].toString() + test[3].toString() + test[3].toString(), 0)\n };\n },\n write: colorToString\n },\n SIX_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9]{6})$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString(), 0)\n };\n },\n write: colorToString\n },\n CSS_RGB: {\n read: function read(original) {\n var test = original.match(/^rgb\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3])\n };\n },\n write: colorToString\n },\n CSS_RGBA: {\n read: function read(original) {\n var test = original.match(/^rgba\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3]),\n a: parseFloat(test[4])\n };\n },\n write: colorToString\n }\n }\n},\n{\n litmus: Common.isNumber,\n conversions: {\n HEX: {\n read: function read(original) {\n return {\n space: 'HEX',\n hex: original,\n conversionName: 'HEX'\n };\n },\n write: function write(color) {\n return color.hex;\n }\n }\n }\n},\n{\n litmus: Common.isArray,\n conversions: {\n RGB_ARRAY: {\n read: function read(original) {\n if (original.length !== 3) {\n return false;\n }\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b];\n }\n },\n RGBA_ARRAY: {\n read: function read(original) {\n if (original.length !== 4) return false;\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2],\n a: original[3]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b, color.a];\n }\n }\n }\n},\n{\n litmus: Common.isObject,\n conversions: {\n RGBA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b) && Common.isNumber(original.a)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b,\n a: color.a\n };\n }\n },\n RGB_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b\n };\n }\n },\n HSVA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v) && Common.isNumber(original.a)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v,\n a: color.a\n };\n }\n },\n HSV_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v\n };\n }\n }\n }\n}];\nvar result = void 0;\nvar toReturn = void 0;\nvar interpret = function interpret() {\n toReturn = false;\n var original = arguments.length > 1 ? Common.toArray(arguments) : arguments[0];\n Common.each(INTERPRETATIONS, function (family) {\n if (family.litmus(original)) {\n Common.each(family.conversions, function (conversion, conversionName) {\n result = conversion.read(original);\n if (toReturn === false && result !== false) {\n toReturn = result;\n result.conversionName = conversionName;\n result.conversion = conversion;\n return Common.BREAK;\n }\n });\n return Common.BREAK;\n }\n });\n return toReturn;\n};\n\nvar tmpComponent = void 0;\nvar ColorMath = {\n hsv_to_rgb: function hsv_to_rgb(h, s, v) {\n var hi = Math.floor(h / 60) % 6;\n var f = h / 60 - Math.floor(h / 60);\n var p = v * (1.0 - s);\n var q = v * (1.0 - f * s);\n var t = v * (1.0 - (1.0 - f) * s);\n var c = [[v, t, p], [q, v, p], [p, v, t], [p, q, v], [t, p, v], [v, p, q]][hi];\n return {\n r: c[0] * 255,\n g: c[1] * 255,\n b: c[2] * 255\n };\n },\n rgb_to_hsv: function rgb_to_hsv(r, g, b) {\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var h = void 0;\n var s = void 0;\n if (max !== 0) {\n s = delta / max;\n } else {\n return {\n h: NaN,\n s: 0,\n v: 0\n };\n }\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h /= 6;\n if (h < 0) {\n h += 1;\n }\n return {\n h: h * 360,\n s: s,\n v: max / 255\n };\n },\n rgb_to_hex: function rgb_to_hex(r, g, b) {\n var hex = this.hex_with_component(0, 2, r);\n hex = this.hex_with_component(hex, 1, g);\n hex = this.hex_with_component(hex, 0, b);\n return hex;\n },\n component_from_hex: function component_from_hex(hex, componentIndex) {\n return hex >> componentIndex * 8 & 0xFF;\n },\n hex_with_component: function hex_with_component(hex, componentIndex, value) {\n return value << (tmpComponent = componentIndex * 8) | hex & ~(0xFF << tmpComponent);\n }\n};\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar Color = function () {\n function Color() {\n classCallCheck(this, Color);\n this.__state = interpret.apply(this, arguments);\n if (this.__state === false) {\n throw new Error('Failed to interpret color arguments');\n }\n this.__state.a = this.__state.a || 1;\n }\n createClass(Color, [{\n key: 'toString',\n value: function toString() {\n return colorToString(this);\n }\n }, {\n key: 'toHexString',\n value: function toHexString() {\n return colorToString(this, true);\n }\n }, {\n key: 'toOriginal',\n value: function toOriginal() {\n return this.__state.conversion.write(this);\n }\n }]);\n return Color;\n}();\nfunction defineRGBComponent(target, component, componentHexIndex) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'RGB') {\n return this.__state[component];\n }\n Color.recalculateRGB(this, component, componentHexIndex);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'RGB') {\n Color.recalculateRGB(this, component, componentHexIndex);\n this.__state.space = 'RGB';\n }\n this.__state[component] = v;\n }\n });\n}\nfunction defineHSVComponent(target, component) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'HSV') {\n return this.__state[component];\n }\n Color.recalculateHSV(this);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'HSV') {\n Color.recalculateHSV(this);\n this.__state.space = 'HSV';\n }\n this.__state[component] = v;\n }\n });\n}\nColor.recalculateRGB = function (color, component, componentHexIndex) {\n if (color.__state.space === 'HEX') {\n color.__state[component] = ColorMath.component_from_hex(color.__state.hex, componentHexIndex);\n } else if (color.__state.space === 'HSV') {\n Common.extend(color.__state, ColorMath.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v));\n } else {\n throw new Error('Corrupted color state');\n }\n};\nColor.recalculateHSV = function (color) {\n var result = ColorMath.rgb_to_hsv(color.r, color.g, color.b);\n Common.extend(color.__state, {\n s: result.s,\n v: result.v\n });\n if (!Common.isNaN(result.h)) {\n color.__state.h = result.h;\n } else if (Common.isUndefined(color.__state.h)) {\n color.__state.h = 0;\n }\n};\nColor.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a'];\ndefineRGBComponent(Color.prototype, 'r', 2);\ndefineRGBComponent(Color.prototype, 'g', 1);\ndefineRGBComponent(Color.prototype, 'b', 0);\ndefineHSVComponent(Color.prototype, 'h');\ndefineHSVComponent(Color.prototype, 's');\ndefineHSVComponent(Color.prototype, 'v');\nObject.defineProperty(Color.prototype, 'a', {\n get: function get$$1() {\n return this.__state.a;\n },\n set: function set$$1(v) {\n this.__state.a = v;\n }\n});\nObject.defineProperty(Color.prototype, 'hex', {\n get: function get$$1() {\n if (this.__state.space !== 'HEX') {\n this.__state.hex = ColorMath.rgb_to_hex(this.r, this.g, this.b);\n this.__state.space = 'HEX';\n }\n return this.__state.hex;\n },\n set: function set$$1(v) {\n this.__state.space = 'HEX';\n this.__state.hex = v;\n }\n});\n\nvar Controller = function () {\n function Controller(object, property) {\n classCallCheck(this, Controller);\n this.initialValue = object[property];\n this.domElement = document.createElement('div');\n this.object = object;\n this.property = property;\n this.__onChange = undefined;\n this.__onFinishChange = undefined;\n }\n createClass(Controller, [{\n key: 'onChange',\n value: function onChange(fnc) {\n this.__onChange = fnc;\n return this;\n }\n }, {\n key: 'onFinishChange',\n value: function onFinishChange(fnc) {\n this.__onFinishChange = fnc;\n return this;\n }\n }, {\n key: 'setValue',\n value: function setValue(newValue) {\n this.object[this.property] = newValue;\n if (this.__onChange) {\n this.__onChange.call(this, newValue);\n }\n this.updateDisplay();\n return this;\n }\n }, {\n key: 'getValue',\n value: function getValue() {\n return this.object[this.property];\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n return this;\n }\n }, {\n key: 'isModified',\n value: function isModified() {\n return this.initialValue !== this.getValue();\n }\n }]);\n return Controller;\n}();\n\nvar EVENT_MAP = {\n HTMLEvents: ['change'],\n MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'],\n KeyboardEvents: ['keydown']\n};\nvar EVENT_MAP_INV = {};\nCommon.each(EVENT_MAP, function (v, k) {\n Common.each(v, function (e) {\n EVENT_MAP_INV[e] = k;\n });\n});\nvar CSS_VALUE_PIXELS = /(\\d+(\\.\\d+)?)px/;\nfunction cssValueToPixels(val) {\n if (val === '0' || Common.isUndefined(val)) {\n return 0;\n }\n var match = val.match(CSS_VALUE_PIXELS);\n if (!Common.isNull(match)) {\n return parseFloat(match[1]);\n }\n return 0;\n}\nvar dom = {\n makeSelectable: function makeSelectable(elem, selectable) {\n if (elem === undefined || elem.style === undefined) return;\n elem.onselectstart = selectable ? function () {\n return false;\n } : function () {};\n elem.style.MozUserSelect = selectable ? 'auto' : 'none';\n elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none';\n elem.unselectable = selectable ? 'on' : 'off';\n },\n makeFullscreen: function makeFullscreen(elem, hor, vert) {\n var vertical = vert;\n var horizontal = hor;\n if (Common.isUndefined(horizontal)) {\n horizontal = true;\n }\n if (Common.isUndefined(vertical)) {\n vertical = true;\n }\n elem.style.position = 'absolute';\n if (horizontal) {\n elem.style.left = 0;\n elem.style.right = 0;\n }\n if (vertical) {\n elem.style.top = 0;\n elem.style.bottom = 0;\n }\n },\n fakeEvent: function fakeEvent(elem, eventType, pars, aux) {\n var params = pars || {};\n var className = EVENT_MAP_INV[eventType];\n if (!className) {\n throw new Error('Event type ' + eventType + ' not supported.');\n }\n var evt = document.createEvent(className);\n switch (className) {\n case 'MouseEvents':\n {\n var clientX = params.x || params.clientX || 0;\n var clientY = params.y || params.clientY || 0;\n evt.initMouseEvent(eventType, params.bubbles || false, params.cancelable || true, window, params.clickCount || 1, 0,\n 0,\n clientX,\n clientY,\n false, false, false, false, 0, null);\n break;\n }\n case 'KeyboardEvents':\n {\n var init = evt.initKeyboardEvent || evt.initKeyEvent;\n Common.defaults(params, {\n cancelable: true,\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n keyCode: undefined,\n charCode: undefined\n });\n init(eventType, params.bubbles || false, params.cancelable, window, params.ctrlKey, params.altKey, params.shiftKey, params.metaKey, params.keyCode, params.charCode);\n break;\n }\n default:\n {\n evt.initEvent(eventType, params.bubbles || false, params.cancelable || true);\n break;\n }\n }\n Common.defaults(evt, aux);\n elem.dispatchEvent(evt);\n },\n bind: function bind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.addEventListener) {\n elem.addEventListener(event, func, bool);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + event, func);\n }\n return dom;\n },\n unbind: function unbind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.removeEventListener) {\n elem.removeEventListener(event, func, bool);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + event, func);\n }\n return dom;\n },\n addClass: function addClass(elem, className) {\n if (elem.className === undefined) {\n elem.className = className;\n } else if (elem.className !== className) {\n var classes = elem.className.split(/ +/);\n if (classes.indexOf(className) === -1) {\n classes.push(className);\n elem.className = classes.join(' ').replace(/^\\s+/, '').replace(/\\s+$/, '');\n }\n }\n return dom;\n },\n removeClass: function removeClass(elem, className) {\n if (className) {\n if (elem.className === className) {\n elem.removeAttribute('class');\n } else {\n var classes = elem.className.split(/ +/);\n var index = classes.indexOf(className);\n if (index !== -1) {\n classes.splice(index, 1);\n elem.className = classes.join(' ');\n }\n }\n } else {\n elem.className = undefined;\n }\n return dom;\n },\n hasClass: function hasClass(elem, className) {\n return new RegExp('(?:^|\\\\s+)' + className + '(?:\\\\s+|$)').test(elem.className) || false;\n },\n getWidth: function getWidth(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-left-width']) + cssValueToPixels(style['border-right-width']) + cssValueToPixels(style['padding-left']) + cssValueToPixels(style['padding-right']) + cssValueToPixels(style.width);\n },\n getHeight: function getHeight(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-top-width']) + cssValueToPixels(style['border-bottom-width']) + cssValueToPixels(style['padding-top']) + cssValueToPixels(style['padding-bottom']) + cssValueToPixels(style.height);\n },\n getOffset: function getOffset(el) {\n var elem = el;\n var offset = { left: 0, top: 0 };\n if (elem.offsetParent) {\n do {\n offset.left += elem.offsetLeft;\n offset.top += elem.offsetTop;\n elem = elem.offsetParent;\n } while (elem);\n }\n return offset;\n },\n isActive: function isActive(elem) {\n return elem === document.activeElement && (elem.type || elem.href);\n }\n};\n\nvar BooleanController = function (_Controller) {\n inherits(BooleanController, _Controller);\n function BooleanController(object, property) {\n classCallCheck(this, BooleanController);\n var _this2 = possibleConstructorReturn(this, (BooleanController.__proto__ || Object.getPrototypeOf(BooleanController)).call(this, object, property));\n var _this = _this2;\n _this2.__prev = _this2.getValue();\n _this2.__checkbox = document.createElement('input');\n _this2.__checkbox.setAttribute('type', 'checkbox');\n function onChange() {\n _this.setValue(!_this.__prev);\n }\n dom.bind(_this2.__checkbox, 'change', onChange, false);\n _this2.domElement.appendChild(_this2.__checkbox);\n _this2.updateDisplay();\n return _this2;\n }\n createClass(BooleanController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n this.__prev = this.getValue();\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (this.getValue() === true) {\n this.__checkbox.setAttribute('checked', 'checked');\n this.__checkbox.checked = true;\n this.__prev = true;\n } else {\n this.__checkbox.checked = false;\n this.__prev = false;\n }\n return get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return BooleanController;\n}(Controller);\n\nvar OptionController = function (_Controller) {\n inherits(OptionController, _Controller);\n function OptionController(object, property, opts) {\n classCallCheck(this, OptionController);\n var _this2 = possibleConstructorReturn(this, (OptionController.__proto__ || Object.getPrototypeOf(OptionController)).call(this, object, property));\n var options = opts;\n var _this = _this2;\n _this2.__select = document.createElement('select');\n if (Common.isArray(options)) {\n var map = {};\n Common.each(options, function (element) {\n map[element] = element;\n });\n options = map;\n }\n Common.each(options, function (value, key) {\n var opt = document.createElement('option');\n opt.innerHTML = key;\n opt.setAttribute('value', value);\n _this.__select.appendChild(opt);\n });\n _this2.updateDisplay();\n dom.bind(_this2.__select, 'change', function () {\n var desiredValue = this.options[this.selectedIndex].value;\n _this.setValue(desiredValue);\n });\n _this2.domElement.appendChild(_this2.__select);\n return _this2;\n }\n createClass(OptionController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (dom.isActive(this.__select)) return this;\n this.__select.value = this.getValue();\n return get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return OptionController;\n}(Controller);\n\nvar StringController = function (_Controller) {\n inherits(StringController, _Controller);\n function StringController(object, property) {\n classCallCheck(this, StringController);\n var _this2 = possibleConstructorReturn(this, (StringController.__proto__ || Object.getPrototypeOf(StringController)).call(this, object, property));\n var _this = _this2;\n function onChange() {\n _this.setValue(_this.__input.value);\n }\n function onBlur() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'keyup', onChange);\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n this.blur();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(StringController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (!dom.isActive(this.__input)) {\n this.__input.value = this.getValue();\n }\n return get(StringController.prototype.__proto__ || Object.getPrototypeOf(StringController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return StringController;\n}(Controller);\n\nfunction numDecimals(x) {\n var _x = x.toString();\n if (_x.indexOf('.') > -1) {\n return _x.length - _x.indexOf('.') - 1;\n }\n return 0;\n}\nvar NumberController = function (_Controller) {\n inherits(NumberController, _Controller);\n function NumberController(object, property, params) {\n classCallCheck(this, NumberController);\n var _this = possibleConstructorReturn(this, (NumberController.__proto__ || Object.getPrototypeOf(NumberController)).call(this, object, property));\n var _params = params || {};\n _this.__min = _params.min;\n _this.__max = _params.max;\n _this.__step = _params.step;\n if (Common.isUndefined(_this.__step)) {\n if (_this.initialValue === 0) {\n _this.__impliedStep = 1;\n } else {\n _this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(_this.initialValue)) / Math.LN10)) / 10;\n }\n } else {\n _this.__impliedStep = _this.__step;\n }\n _this.__precision = numDecimals(_this.__impliedStep);\n return _this;\n }\n createClass(NumberController, [{\n key: 'setValue',\n value: function setValue(v) {\n var _v = v;\n if (this.__min !== undefined && _v < this.__min) {\n _v = this.__min;\n } else if (this.__max !== undefined && _v > this.__max) {\n _v = this.__max;\n }\n if (this.__step !== undefined && _v % this.__step !== 0) {\n _v = Math.round(_v / this.__step) * this.__step;\n }\n return get(NumberController.prototype.__proto__ || Object.getPrototypeOf(NumberController.prototype), 'setValue', this).call(this, _v);\n }\n }, {\n key: 'min',\n value: function min(minValue) {\n this.__min = minValue;\n return this;\n }\n }, {\n key: 'max',\n value: function max(maxValue) {\n this.__max = maxValue;\n return this;\n }\n }, {\n key: 'step',\n value: function step(stepValue) {\n this.__step = stepValue;\n this.__impliedStep = stepValue;\n this.__precision = numDecimals(stepValue);\n return this;\n }\n }]);\n return NumberController;\n}(Controller);\n\nfunction roundToDecimal(value, decimals) {\n var tenTo = Math.pow(10, decimals);\n return Math.round(value * tenTo) / tenTo;\n}\nvar NumberControllerBox = function (_NumberController) {\n inherits(NumberControllerBox, _NumberController);\n function NumberControllerBox(object, property, params) {\n classCallCheck(this, NumberControllerBox);\n var _this2 = possibleConstructorReturn(this, (NumberControllerBox.__proto__ || Object.getPrototypeOf(NumberControllerBox)).call(this, object, property, params));\n _this2.__truncationSuspended = false;\n var _this = _this2;\n var prevY = void 0;\n function onChange() {\n var attempted = parseFloat(_this.__input.value);\n if (!Common.isNaN(attempted)) {\n _this.setValue(attempted);\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onBlur() {\n onFinish();\n }\n function onMouseDrag(e) {\n var diff = prevY - e.clientY;\n _this.setValue(_this.getValue() + diff * _this.__impliedStep);\n prevY = e.clientY;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n onFinish();\n }\n function onMouseDown(e) {\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n prevY = e.clientY;\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'mousedown', onMouseDown);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n _this.__truncationSuspended = true;\n this.blur();\n _this.__truncationSuspended = false;\n onFinish();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(NumberControllerBox, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision);\n return get(NumberControllerBox.prototype.__proto__ || Object.getPrototypeOf(NumberControllerBox.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerBox;\n}(NumberController);\n\nfunction map(v, i1, i2, o1, o2) {\n return o1 + (o2 - o1) * ((v - i1) / (i2 - i1));\n}\nvar NumberControllerSlider = function (_NumberController) {\n inherits(NumberControllerSlider, _NumberController);\n function NumberControllerSlider(object, property, min, max, step) {\n classCallCheck(this, NumberControllerSlider);\n var _this2 = possibleConstructorReturn(this, (NumberControllerSlider.__proto__ || Object.getPrototypeOf(NumberControllerSlider)).call(this, object, property, { min: min, max: max, step: step }));\n var _this = _this2;\n _this2.__background = document.createElement('div');\n _this2.__foreground = document.createElement('div');\n dom.bind(_this2.__background, 'mousedown', onMouseDown);\n dom.bind(_this2.__background, 'touchstart', onTouchStart);\n dom.addClass(_this2.__background, 'slider');\n dom.addClass(_this2.__foreground, 'slider-fg');\n function onMouseDown(e) {\n document.activeElement.blur();\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n onMouseDrag(e);\n }\n function onMouseDrag(e) {\n e.preventDefault();\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n return false;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onTouchStart(e) {\n if (e.touches.length !== 1) {\n return;\n }\n dom.bind(window, 'touchmove', onTouchMove);\n dom.bind(window, 'touchend', onTouchEnd);\n onTouchMove(e);\n }\n function onTouchMove(e) {\n var clientX = e.touches[0].clientX;\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n }\n function onTouchEnd() {\n dom.unbind(window, 'touchmove', onTouchMove);\n dom.unbind(window, 'touchend', onTouchEnd);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.updateDisplay();\n _this2.__background.appendChild(_this2.__foreground);\n _this2.domElement.appendChild(_this2.__background);\n return _this2;\n }\n createClass(NumberControllerSlider, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var pct = (this.getValue() - this.__min) / (this.__max - this.__min);\n this.__foreground.style.width = pct * 100 + '%';\n return get(NumberControllerSlider.prototype.__proto__ || Object.getPrototypeOf(NumberControllerSlider.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerSlider;\n}(NumberController);\n\nvar FunctionController = function (_Controller) {\n inherits(FunctionController, _Controller);\n function FunctionController(object, property, text) {\n classCallCheck(this, FunctionController);\n var _this2 = possibleConstructorReturn(this, (FunctionController.__proto__ || Object.getPrototypeOf(FunctionController)).call(this, object, property));\n var _this = _this2;\n _this2.__button = document.createElement('div');\n _this2.__button.innerHTML = text === undefined ? 'Fire' : text;\n dom.bind(_this2.__button, 'click', function (e) {\n e.preventDefault();\n _this.fire();\n return false;\n });\n dom.addClass(_this2.__button, 'button');\n _this2.domElement.appendChild(_this2.__button);\n return _this2;\n }\n createClass(FunctionController, [{\n key: 'fire',\n value: function fire() {\n if (this.__onChange) {\n this.__onChange.call(this);\n }\n this.getValue().call(this.object);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n }\n }]);\n return FunctionController;\n}(Controller);\n\nvar ColorController = function (_Controller) {\n inherits(ColorController, _Controller);\n function ColorController(object, property) {\n classCallCheck(this, ColorController);\n var _this2 = possibleConstructorReturn(this, (ColorController.__proto__ || Object.getPrototypeOf(ColorController)).call(this, object, property));\n _this2.__color = new Color(_this2.getValue());\n _this2.__temp = new Color(0);\n var _this = _this2;\n _this2.domElement = document.createElement('div');\n dom.makeSelectable(_this2.domElement, false);\n _this2.__selector = document.createElement('div');\n _this2.__selector.className = 'selector';\n _this2.__saturation_field = document.createElement('div');\n _this2.__saturation_field.className = 'saturation-field';\n _this2.__field_knob = document.createElement('div');\n _this2.__field_knob.className = 'field-knob';\n _this2.__field_knob_border = '2px solid ';\n _this2.__hue_knob = document.createElement('div');\n _this2.__hue_knob.className = 'hue-knob';\n _this2.__hue_field = document.createElement('div');\n _this2.__hue_field.className = 'hue-field';\n _this2.__input = document.createElement('input');\n _this2.__input.type = 'text';\n _this2.__input_textShadow = '0 1px 1px ';\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n onBlur.call(this);\n }\n });\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__selector, 'mousedown', function () {\n dom.addClass(this, 'drag').bind(window, 'mouseup', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n dom.bind(_this2.__selector, 'touchstart', function () {\n dom.addClass(this, 'drag').bind(window, 'touchend', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n var valueField = document.createElement('div');\n Common.extend(_this2.__selector.style, {\n width: '122px',\n height: '102px',\n padding: '3px',\n backgroundColor: '#222',\n boxShadow: '0px 1px 3px rgba(0,0,0,0.3)'\n });\n Common.extend(_this2.__field_knob.style, {\n position: 'absolute',\n width: '12px',\n height: '12px',\n border: _this2.__field_knob_border + (_this2.__color.v < 0.5 ? '#fff' : '#000'),\n boxShadow: '0px 1px 3px rgba(0,0,0,0.5)',\n borderRadius: '12px',\n zIndex: 1\n });\n Common.extend(_this2.__hue_knob.style, {\n position: 'absolute',\n width: '15px',\n height: '2px',\n borderRight: '4px solid #fff',\n zIndex: 1\n });\n Common.extend(_this2.__saturation_field.style, {\n width: '100px',\n height: '100px',\n border: '1px solid #555',\n marginRight: '3px',\n display: 'inline-block',\n cursor: 'pointer'\n });\n Common.extend(valueField.style, {\n width: '100%',\n height: '100%',\n background: 'none'\n });\n linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000');\n Common.extend(_this2.__hue_field.style, {\n width: '15px',\n height: '100px',\n border: '1px solid #555',\n cursor: 'ns-resize',\n position: 'absolute',\n top: '3px',\n right: '3px'\n });\n hueGradient(_this2.__hue_field);\n Common.extend(_this2.__input.style, {\n outline: 'none',\n textAlign: 'center',\n color: '#fff',\n border: 0,\n fontWeight: 'bold',\n textShadow: _this2.__input_textShadow + 'rgba(0,0,0,0.7)'\n });\n dom.bind(_this2.__saturation_field, 'mousedown', fieldDown);\n dom.bind(_this2.__saturation_field, 'touchstart', fieldDown);\n dom.bind(_this2.__field_knob, 'mousedown', fieldDown);\n dom.bind(_this2.__field_knob, 'touchstart', fieldDown);\n dom.bind(_this2.__hue_field, 'mousedown', fieldDownH);\n dom.bind(_this2.__hue_field, 'touchstart', fieldDownH);\n function fieldDown(e) {\n setSV(e);\n dom.bind(window, 'mousemove', setSV);\n dom.bind(window, 'touchmove', setSV);\n dom.bind(window, 'mouseup', fieldUpSV);\n dom.bind(window, 'touchend', fieldUpSV);\n }\n function fieldDownH(e) {\n setH(e);\n dom.bind(window, 'mousemove', setH);\n dom.bind(window, 'touchmove', setH);\n dom.bind(window, 'mouseup', fieldUpH);\n dom.bind(window, 'touchend', fieldUpH);\n }\n function fieldUpSV() {\n dom.unbind(window, 'mousemove', setSV);\n dom.unbind(window, 'touchmove', setSV);\n dom.unbind(window, 'mouseup', fieldUpSV);\n dom.unbind(window, 'touchend', fieldUpSV);\n onFinish();\n }\n function fieldUpH() {\n dom.unbind(window, 'mousemove', setH);\n dom.unbind(window, 'touchmove', setH);\n dom.unbind(window, 'mouseup', fieldUpH);\n dom.unbind(window, 'touchend', fieldUpH);\n onFinish();\n }\n function onBlur() {\n var i = interpret(this.value);\n if (i !== false) {\n _this.__color.__state = i;\n _this.setValue(_this.__color.toOriginal());\n } else {\n this.value = _this.__color.toString();\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.__color.toOriginal());\n }\n }\n _this2.__saturation_field.appendChild(valueField);\n _this2.__selector.appendChild(_this2.__field_knob);\n _this2.__selector.appendChild(_this2.__saturation_field);\n _this2.__selector.appendChild(_this2.__hue_field);\n _this2.__hue_field.appendChild(_this2.__hue_knob);\n _this2.domElement.appendChild(_this2.__input);\n _this2.domElement.appendChild(_this2.__selector);\n _this2.updateDisplay();\n function setSV(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__saturation_field.getBoundingClientRect();\n var _ref = e.touches && e.touches[0] || e,\n clientX = _ref.clientX,\n clientY = _ref.clientY;\n var s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left);\n var v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (v > 1) {\n v = 1;\n } else if (v < 0) {\n v = 0;\n }\n if (s > 1) {\n s = 1;\n } else if (s < 0) {\n s = 0;\n }\n _this.__color.v = v;\n _this.__color.s = s;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n function setH(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__hue_field.getBoundingClientRect();\n var _ref2 = e.touches && e.touches[0] || e,\n clientY = _ref2.clientY;\n var h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (h > 1) {\n h = 1;\n } else if (h < 0) {\n h = 0;\n }\n _this.__color.h = h * 360;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n return _this2;\n }\n createClass(ColorController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var i = interpret(this.getValue());\n if (i !== false) {\n var mismatch = false;\n Common.each(Color.COMPONENTS, function (component) {\n if (!Common.isUndefined(i[component]) && !Common.isUndefined(this.__color.__state[component]) && i[component] !== this.__color.__state[component]) {\n mismatch = true;\n return {};\n }\n }, this);\n if (mismatch) {\n Common.extend(this.__color.__state, i);\n }\n }\n Common.extend(this.__temp.__state, this.__color.__state);\n this.__temp.a = 1;\n var flip = this.__color.v < 0.5 || this.__color.s > 0.5 ? 255 : 0;\n var _flip = 255 - flip;\n Common.extend(this.__field_knob.style, {\n marginLeft: 100 * this.__color.s - 7 + 'px',\n marginTop: 100 * (1 - this.__color.v) - 7 + 'px',\n backgroundColor: this.__temp.toHexString(),\n border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')'\n });\n this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px';\n this.__temp.s = 1;\n this.__temp.v = 1;\n linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString());\n this.__input.value = this.__color.toString();\n Common.extend(this.__input.style, {\n backgroundColor: this.__color.toHexString(),\n color: 'rgb(' + flip + ',' + flip + ',' + flip + ')',\n textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)'\n });\n }\n }]);\n return ColorController;\n}(Controller);\nvar vendors = ['-moz-', '-o-', '-webkit-', '-ms-', ''];\nfunction linearGradient(elem, x, a, b) {\n elem.style.background = '';\n Common.each(vendors, function (vendor) {\n elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); ';\n });\n}\nfunction hueGradient(elem) {\n elem.style.background = '';\n elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);';\n elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n}\n\nvar css = {\n load: function load(url, indoc) {\n var doc = indoc || document;\n var link = doc.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.href = url;\n doc.getElementsByTagName('head')[0].appendChild(link);\n },\n inject: function inject(cssContent, indoc) {\n var doc = indoc || document;\n var injected = document.createElement('style');\n injected.type = 'text/css';\n injected.innerHTML = cssContent;\n var head = doc.getElementsByTagName('head')[0];\n try {\n head.appendChild(injected);\n } catch (e) {\n }\n }\n};\n\nvar saveDialogContents = \"
\\n\\n Here's the new load parameter for your GUI's constructor:\\n\\n \\n\\n
\\n\\n Automatically save\\n values to localStorage on exit.\\n\\n
The values saved to localStorage will\\n override those passed to dat.GUI's constructor. This makes it\\n easier to work incrementally, but localStorage is fragile,\\n and your friends may not see the same values you do.\\n\\n
\\n\\n
\\n\\n
\";\n\nvar ControllerFactory = function ControllerFactory(object, property) {\n var initialValue = object[property];\n if (Common.isArray(arguments[2]) || Common.isObject(arguments[2])) {\n return new OptionController(object, property, arguments[2]);\n }\n if (Common.isNumber(initialValue)) {\n if (Common.isNumber(arguments[2]) && Common.isNumber(arguments[3])) {\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerSlider(object, property, arguments[2], arguments[3], arguments[4]);\n }\n return new NumberControllerSlider(object, property, arguments[2], arguments[3]);\n }\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3], step: arguments[4] });\n }\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] });\n }\n if (Common.isString(initialValue)) {\n return new StringController(object, property);\n }\n if (Common.isFunction(initialValue)) {\n return new FunctionController(object, property, '');\n }\n if (Common.isBoolean(initialValue)) {\n return new BooleanController(object, property);\n }\n return null;\n};\n\nfunction requestAnimationFrame(callback) {\n setTimeout(callback, 1000 / 60);\n}\nvar requestAnimationFrame$1 = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || requestAnimationFrame;\n\nvar CenteredDiv = function () {\n function CenteredDiv() {\n classCallCheck(this, CenteredDiv);\n this.backgroundElement = document.createElement('div');\n Common.extend(this.backgroundElement.style, {\n backgroundColor: 'rgba(0,0,0,0.8)',\n top: 0,\n left: 0,\n display: 'none',\n zIndex: '1000',\n opacity: 0,\n WebkitTransition: 'opacity 0.2s linear',\n transition: 'opacity 0.2s linear'\n });\n dom.makeFullscreen(this.backgroundElement);\n this.backgroundElement.style.position = 'fixed';\n this.domElement = document.createElement('div');\n Common.extend(this.domElement.style, {\n position: 'fixed',\n display: 'none',\n zIndex: '1001',\n opacity: 0,\n WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear',\n transition: 'transform 0.2s ease-out, opacity 0.2s linear'\n });\n document.body.appendChild(this.backgroundElement);\n document.body.appendChild(this.domElement);\n var _this = this;\n dom.bind(this.backgroundElement, 'click', function () {\n _this.hide();\n });\n }\n createClass(CenteredDiv, [{\n key: 'show',\n value: function show() {\n var _this = this;\n this.backgroundElement.style.display = 'block';\n this.domElement.style.display = 'block';\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n this.layout();\n Common.defer(function () {\n _this.backgroundElement.style.opacity = 1;\n _this.domElement.style.opacity = 1;\n _this.domElement.style.webkitTransform = 'scale(1)';\n });\n }\n }, {\n key: 'hide',\n value: function hide() {\n var _this = this;\n var hide = function hide() {\n _this.domElement.style.display = 'none';\n _this.backgroundElement.style.display = 'none';\n dom.unbind(_this.domElement, 'webkitTransitionEnd', hide);\n dom.unbind(_this.domElement, 'transitionend', hide);\n dom.unbind(_this.domElement, 'oTransitionEnd', hide);\n };\n dom.bind(this.domElement, 'webkitTransitionEnd', hide);\n dom.bind(this.domElement, 'transitionend', hide);\n dom.bind(this.domElement, 'oTransitionEnd', hide);\n this.backgroundElement.style.opacity = 0;\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n }\n }, {\n key: 'layout',\n value: function layout() {\n this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px';\n this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px';\n }\n }]);\n return CenteredDiv;\n}();\n\nvar styleSheet = ___$insertStyle(\".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .cr.function .property-name{width:100%}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\\n\");\n\ncss.inject(styleSheet);\nvar CSS_NAMESPACE = 'dg';\nvar HIDE_KEY_CODE = 72;\nvar CLOSE_BUTTON_HEIGHT = 20;\nvar DEFAULT_DEFAULT_PRESET_NAME = 'Default';\nvar SUPPORTS_LOCAL_STORAGE = function () {\n try {\n return !!window.localStorage;\n } catch (e) {\n return false;\n }\n}();\nvar SAVE_DIALOGUE = void 0;\nvar autoPlaceVirgin = true;\nvar autoPlaceContainer = void 0;\nvar hide = false;\nvar hideableGuis = [];\nvar GUI = function GUI(pars) {\n var _this = this;\n var params = pars || {};\n this.domElement = document.createElement('div');\n this.__ul = document.createElement('ul');\n this.domElement.appendChild(this.__ul);\n dom.addClass(this.domElement, CSS_NAMESPACE);\n this.__folders = {};\n this.__controllers = [];\n this.__rememberedObjects = [];\n this.__rememberedObjectIndecesToControllers = [];\n this.__listening = [];\n params = Common.defaults(params, {\n closeOnTop: false,\n autoPlace: true,\n width: GUI.DEFAULT_WIDTH\n });\n params = Common.defaults(params, {\n resizable: params.autoPlace,\n hideable: params.autoPlace\n });\n if (!Common.isUndefined(params.load)) {\n if (params.preset) {\n params.load.preset = params.preset;\n }\n } else {\n params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME };\n }\n if (Common.isUndefined(params.parent) && params.hideable) {\n hideableGuis.push(this);\n }\n params.resizable = Common.isUndefined(params.parent) && params.resizable;\n if (params.autoPlace && Common.isUndefined(params.scrollable)) {\n params.scrollable = true;\n }\n var useLocalStorage = SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true';\n var saveToLocalStorage = void 0;\n var titleRow = void 0;\n Object.defineProperties(this,\n {\n parent: {\n get: function get$$1() {\n return params.parent;\n }\n },\n scrollable: {\n get: function get$$1() {\n return params.scrollable;\n }\n },\n autoPlace: {\n get: function get$$1() {\n return params.autoPlace;\n }\n },\n closeOnTop: {\n get: function get$$1() {\n return params.closeOnTop;\n }\n },\n preset: {\n get: function get$$1() {\n if (_this.parent) {\n return _this.getRoot().preset;\n }\n return params.load.preset;\n },\n set: function set$$1(v) {\n if (_this.parent) {\n _this.getRoot().preset = v;\n } else {\n params.load.preset = v;\n }\n setPresetSelectIndex(this);\n _this.revert();\n }\n },\n width: {\n get: function get$$1() {\n return params.width;\n },\n set: function set$$1(v) {\n params.width = v;\n setWidth(_this, v);\n }\n },\n name: {\n get: function get$$1() {\n return params.name;\n },\n set: function set$$1(v) {\n params.name = v;\n if (titleRow) {\n titleRow.innerHTML = params.name;\n }\n }\n },\n closed: {\n get: function get$$1() {\n return params.closed;\n },\n set: function set$$1(v) {\n params.closed = v;\n if (params.closed) {\n dom.addClass(_this.__ul, GUI.CLASS_CLOSED);\n } else {\n dom.removeClass(_this.__ul, GUI.CLASS_CLOSED);\n }\n this.onResize();\n if (_this.__closeButton) {\n _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED;\n }\n }\n },\n load: {\n get: function get$$1() {\n return params.load;\n }\n },\n useLocalStorage: {\n get: function get$$1() {\n return useLocalStorage;\n },\n set: function set$$1(bool) {\n if (SUPPORTS_LOCAL_STORAGE) {\n useLocalStorage = bool;\n if (bool) {\n dom.bind(window, 'unload', saveToLocalStorage);\n } else {\n dom.unbind(window, 'unload', saveToLocalStorage);\n }\n localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool);\n }\n }\n }\n });\n if (Common.isUndefined(params.parent)) {\n this.closed = params.closed || false;\n dom.addClass(this.domElement, GUI.CLASS_MAIN);\n dom.makeSelectable(this.domElement, false);\n if (SUPPORTS_LOCAL_STORAGE) {\n if (useLocalStorage) {\n _this.useLocalStorage = true;\n var savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui'));\n if (savedGui) {\n params.load = JSON.parse(savedGui);\n }\n }\n }\n this.__closeButton = document.createElement('div');\n this.__closeButton.innerHTML = GUI.TEXT_CLOSED;\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON);\n if (params.closeOnTop) {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP);\n this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]);\n } else {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM);\n this.domElement.appendChild(this.__closeButton);\n }\n dom.bind(this.__closeButton, 'click', function () {\n _this.closed = !_this.closed;\n });\n } else {\n if (params.closed === undefined) {\n params.closed = true;\n }\n var titleRowName = document.createTextNode(params.name);\n dom.addClass(titleRowName, 'controller-name');\n titleRow = addRow(_this, titleRowName);\n var onClickTitle = function onClickTitle(e) {\n e.preventDefault();\n _this.closed = !_this.closed;\n return false;\n };\n dom.addClass(this.__ul, GUI.CLASS_CLOSED);\n dom.addClass(titleRow, 'title');\n dom.bind(titleRow, 'click', onClickTitle);\n if (!params.closed) {\n this.closed = false;\n }\n }\n if (params.autoPlace) {\n if (Common.isUndefined(params.parent)) {\n if (autoPlaceVirgin) {\n autoPlaceContainer = document.createElement('div');\n dom.addClass(autoPlaceContainer, CSS_NAMESPACE);\n dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER);\n document.body.appendChild(autoPlaceContainer);\n autoPlaceVirgin = false;\n }\n autoPlaceContainer.appendChild(this.domElement);\n dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE);\n }\n if (!this.parent) {\n setWidth(_this, params.width);\n }\n }\n this.__resizeHandler = function () {\n _this.onResizeDebounced();\n };\n dom.bind(window, 'resize', this.__resizeHandler);\n dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler);\n dom.bind(this.__ul, 'transitionend', this.__resizeHandler);\n dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler);\n this.onResize();\n if (params.resizable) {\n addResizeHandle(this);\n }\n saveToLocalStorage = function saveToLocalStorage() {\n if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') {\n localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject()));\n }\n };\n this.saveToLocalStorageIfPossible = saveToLocalStorage;\n function resetWidth() {\n var root = _this.getRoot();\n root.width += 1;\n Common.defer(function () {\n root.width -= 1;\n });\n }\n if (!params.parent) {\n resetWidth();\n }\n};\nGUI.toggleHide = function () {\n hide = !hide;\n Common.each(hideableGuis, function (gui) {\n gui.domElement.style.display = hide ? 'none' : '';\n });\n};\nGUI.CLASS_AUTO_PLACE = 'a';\nGUI.CLASS_AUTO_PLACE_CONTAINER = 'ac';\nGUI.CLASS_MAIN = 'main';\nGUI.CLASS_CONTROLLER_ROW = 'cr';\nGUI.CLASS_TOO_TALL = 'taller-than-window';\nGUI.CLASS_CLOSED = 'closed';\nGUI.CLASS_CLOSE_BUTTON = 'close-button';\nGUI.CLASS_CLOSE_TOP = 'close-top';\nGUI.CLASS_CLOSE_BOTTOM = 'close-bottom';\nGUI.CLASS_DRAG = 'drag';\nGUI.DEFAULT_WIDTH = 245;\nGUI.TEXT_CLOSED = 'Close Controls';\nGUI.TEXT_OPEN = 'Open Controls';\nGUI._keydownHandler = function (e) {\n if (document.activeElement.type !== 'text' && (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) {\n GUI.toggleHide();\n }\n};\ndom.bind(window, 'keydown', GUI._keydownHandler, false);\nCommon.extend(GUI.prototype,\n{\n add: function add(object, property) {\n return _add(this, object, property, {\n factoryArgs: Array.prototype.slice.call(arguments, 2)\n });\n },\n addColor: function addColor(object, property) {\n return _add(this, object, property, {\n color: true\n });\n },\n remove: function remove(controller) {\n this.__ul.removeChild(controller.__li);\n this.__controllers.splice(this.__controllers.indexOf(controller), 1);\n var _this = this;\n Common.defer(function () {\n _this.onResize();\n });\n },\n destroy: function destroy() {\n if (this.parent) {\n throw new Error('Only the root GUI should be removed with .destroy(). ' + 'For subfolders, use gui.removeFolder(folder) instead.');\n }\n if (this.autoPlace) {\n autoPlaceContainer.removeChild(this.domElement);\n }\n var _this = this;\n Common.each(this.__folders, function (subfolder) {\n _this.removeFolder(subfolder);\n });\n dom.unbind(window, 'keydown', GUI._keydownHandler, false);\n removeListeners(this);\n },\n addFolder: function addFolder(name) {\n if (this.__folders[name] !== undefined) {\n throw new Error('You already have a folder in this GUI by the' + ' name \"' + name + '\"');\n }\n var newGuiParams = { name: name, parent: this };\n newGuiParams.autoPlace = this.autoPlace;\n if (this.load &&\n this.load.folders &&\n this.load.folders[name]) {\n newGuiParams.closed = this.load.folders[name].closed;\n newGuiParams.load = this.load.folders[name];\n }\n var gui = new GUI(newGuiParams);\n this.__folders[name] = gui;\n var li = addRow(this, gui.domElement);\n dom.addClass(li, 'folder');\n return gui;\n },\n removeFolder: function removeFolder(folder) {\n this.__ul.removeChild(folder.domElement.parentElement);\n delete this.__folders[folder.name];\n if (this.load &&\n this.load.folders &&\n this.load.folders[folder.name]) {\n delete this.load.folders[folder.name];\n }\n removeListeners(folder);\n var _this = this;\n Common.each(folder.__folders, function (subfolder) {\n folder.removeFolder(subfolder);\n });\n Common.defer(function () {\n _this.onResize();\n });\n },\n open: function open() {\n this.closed = false;\n },\n close: function close() {\n this.closed = true;\n },\n hide: function hide() {\n this.domElement.style.display = 'none';\n },\n show: function show() {\n this.domElement.style.display = '';\n },\n onResize: function onResize() {\n var root = this.getRoot();\n if (root.scrollable) {\n var top = dom.getOffset(root.__ul).top;\n var h = 0;\n Common.each(root.__ul.childNodes, function (node) {\n if (!(root.autoPlace && node === root.__save_row)) {\n h += dom.getHeight(node);\n }\n });\n if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) {\n dom.addClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px';\n } else {\n dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = 'auto';\n }\n }\n if (root.__resize_handle) {\n Common.defer(function () {\n root.__resize_handle.style.height = root.__ul.offsetHeight + 'px';\n });\n }\n if (root.__closeButton) {\n root.__closeButton.style.width = root.width + 'px';\n }\n },\n onResizeDebounced: Common.debounce(function () {\n this.onResize();\n }, 50),\n remember: function remember() {\n if (Common.isUndefined(SAVE_DIALOGUE)) {\n SAVE_DIALOGUE = new CenteredDiv();\n SAVE_DIALOGUE.domElement.innerHTML = saveDialogContents;\n }\n if (this.parent) {\n throw new Error('You can only call remember on a top level GUI.');\n }\n var _this = this;\n Common.each(Array.prototype.slice.call(arguments), function (object) {\n if (_this.__rememberedObjects.length === 0) {\n addSaveMenu(_this);\n }\n if (_this.__rememberedObjects.indexOf(object) === -1) {\n _this.__rememberedObjects.push(object);\n }\n });\n if (this.autoPlace) {\n setWidth(this, this.width);\n }\n },\n getRoot: function getRoot() {\n var gui = this;\n while (gui.parent) {\n gui = gui.parent;\n }\n return gui;\n },\n getSaveObject: function getSaveObject() {\n var toReturn = this.load;\n toReturn.closed = this.closed;\n if (this.__rememberedObjects.length > 0) {\n toReturn.preset = this.preset;\n if (!toReturn.remembered) {\n toReturn.remembered = {};\n }\n toReturn.remembered[this.preset] = getCurrentPreset(this);\n }\n toReturn.folders = {};\n Common.each(this.__folders, function (element, key) {\n toReturn.folders[key] = element.getSaveObject();\n });\n return toReturn;\n },\n save: function save() {\n if (!this.load.remembered) {\n this.load.remembered = {};\n }\n this.load.remembered[this.preset] = getCurrentPreset(this);\n markPresetModified(this, false);\n this.saveToLocalStorageIfPossible();\n },\n saveAs: function saveAs(presetName) {\n if (!this.load.remembered) {\n this.load.remembered = {};\n this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true);\n }\n this.load.remembered[presetName] = getCurrentPreset(this);\n this.preset = presetName;\n addPresetOption(this, presetName, true);\n this.saveToLocalStorageIfPossible();\n },\n revert: function revert(gui) {\n Common.each(this.__controllers, function (controller) {\n if (!this.getRoot().load.remembered) {\n controller.setValue(controller.initialValue);\n } else {\n recallSavedValue(gui || this.getRoot(), controller);\n }\n if (controller.__onFinishChange) {\n controller.__onFinishChange.call(controller, controller.getValue());\n }\n }, this);\n Common.each(this.__folders, function (folder) {\n folder.revert(folder);\n });\n if (!gui) {\n markPresetModified(this.getRoot(), false);\n }\n },\n listen: function listen(controller) {\n var init = this.__listening.length === 0;\n this.__listening.push(controller);\n if (init) {\n updateDisplays(this.__listening);\n }\n },\n updateDisplay: function updateDisplay() {\n Common.each(this.__controllers, function (controller) {\n controller.updateDisplay();\n });\n Common.each(this.__folders, function (folder) {\n folder.updateDisplay();\n });\n }\n});\nfunction addRow(gui, newDom, liBefore) {\n var li = document.createElement('li');\n if (newDom) {\n li.appendChild(newDom);\n }\n if (liBefore) {\n gui.__ul.insertBefore(li, liBefore);\n } else {\n gui.__ul.appendChild(li);\n }\n gui.onResize();\n return li;\n}\nfunction removeListeners(gui) {\n dom.unbind(window, 'resize', gui.__resizeHandler);\n if (gui.saveToLocalStorageIfPossible) {\n dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible);\n }\n}\nfunction markPresetModified(gui, modified) {\n var opt = gui.__preset_select[gui.__preset_select.selectedIndex];\n if (modified) {\n opt.innerHTML = opt.value + '*';\n } else {\n opt.innerHTML = opt.value;\n }\n}\nfunction augmentController(gui, li, controller) {\n controller.__li = li;\n controller.__gui = gui;\n Common.extend(controller, {\n options: function options(_options) {\n if (arguments.length > 1) {\n var nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: nextSibling,\n factoryArgs: [Common.toArray(arguments)]\n });\n }\n if (Common.isArray(_options) || Common.isObject(_options)) {\n var _nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: _nextSibling,\n factoryArgs: [_options]\n });\n }\n },\n name: function name(_name) {\n controller.__li.firstElementChild.firstElementChild.innerHTML = _name;\n return controller;\n },\n listen: function listen() {\n controller.__gui.listen(controller);\n return controller;\n },\n remove: function remove() {\n controller.__gui.remove(controller);\n return controller;\n }\n });\n if (controller instanceof NumberControllerSlider) {\n var box = new NumberControllerBox(controller.object, controller.property, { min: controller.__min, max: controller.__max, step: controller.__step });\n Common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function (method) {\n var pc = controller[method];\n var pb = box[method];\n controller[method] = box[method] = function () {\n var args = Array.prototype.slice.call(arguments);\n pb.apply(box, args);\n return pc.apply(controller, args);\n };\n });\n dom.addClass(li, 'has-slider');\n controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild);\n } else if (controller instanceof NumberControllerBox) {\n var r = function r(returned) {\n if (Common.isNumber(controller.__min) && Common.isNumber(controller.__max)) {\n var oldName = controller.__li.firstElementChild.firstElementChild.innerHTML;\n var wasListening = controller.__gui.__listening.indexOf(controller) > -1;\n controller.remove();\n var newController = _add(gui, controller.object, controller.property, {\n before: controller.__li.nextElementSibling,\n factoryArgs: [controller.__min, controller.__max, controller.__step]\n });\n newController.name(oldName);\n if (wasListening) newController.listen();\n return newController;\n }\n return returned;\n };\n controller.min = Common.compose(r, controller.min);\n controller.max = Common.compose(r, controller.max);\n } else if (controller instanceof BooleanController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__checkbox, 'click');\n });\n dom.bind(controller.__checkbox, 'click', function (e) {\n e.stopPropagation();\n });\n } else if (controller instanceof FunctionController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__button, 'click');\n });\n dom.bind(li, 'mouseover', function () {\n dom.addClass(controller.__button, 'hover');\n });\n dom.bind(li, 'mouseout', function () {\n dom.removeClass(controller.__button, 'hover');\n });\n } else if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n controller.updateDisplay = Common.compose(function (val) {\n li.style.borderLeftColor = controller.__color.toString();\n return val;\n }, controller.updateDisplay);\n controller.updateDisplay();\n }\n controller.setValue = Common.compose(function (val) {\n if (gui.getRoot().__preset_select && controller.isModified()) {\n markPresetModified(gui.getRoot(), true);\n }\n return val;\n }, controller.setValue);\n}\nfunction recallSavedValue(gui, controller) {\n var root = gui.getRoot();\n var matchedIndex = root.__rememberedObjects.indexOf(controller.object);\n if (matchedIndex !== -1) {\n var controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex];\n if (controllerMap === undefined) {\n controllerMap = {};\n root.__rememberedObjectIndecesToControllers[matchedIndex] = controllerMap;\n }\n controllerMap[controller.property] = controller;\n if (root.load && root.load.remembered) {\n var presetMap = root.load.remembered;\n var preset = void 0;\n if (presetMap[gui.preset]) {\n preset = presetMap[gui.preset];\n } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) {\n preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME];\n } else {\n return;\n }\n if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) {\n var value = preset[matchedIndex][controller.property];\n controller.initialValue = value;\n controller.setValue(value);\n }\n }\n }\n}\nfunction _add(gui, object, property, params) {\n if (object[property] === undefined) {\n throw new Error('Object \"' + object + '\" has no property \"' + property + '\"');\n }\n var controller = void 0;\n if (params.color) {\n controller = new ColorController(object, property);\n } else {\n var factoryArgs = [object, property].concat(params.factoryArgs);\n controller = ControllerFactory.apply(gui, factoryArgs);\n }\n if (params.before instanceof Controller) {\n params.before = params.before.__li;\n }\n recallSavedValue(gui, controller);\n dom.addClass(controller.domElement, 'c');\n var name = document.createElement('span');\n dom.addClass(name, 'property-name');\n name.innerHTML = controller.property;\n var container = document.createElement('div');\n container.appendChild(name);\n container.appendChild(controller.domElement);\n var li = addRow(gui, container, params.before);\n dom.addClass(li, GUI.CLASS_CONTROLLER_ROW);\n if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n } else {\n dom.addClass(li, _typeof(controller.getValue()));\n }\n augmentController(gui, li, controller);\n gui.__controllers.push(controller);\n return controller;\n}\nfunction getLocalStorageHash(gui, key) {\n return document.location.href + '.' + key;\n}\nfunction addPresetOption(gui, name, setSelected) {\n var opt = document.createElement('option');\n opt.innerHTML = name;\n opt.value = name;\n gui.__preset_select.appendChild(opt);\n if (setSelected) {\n gui.__preset_select.selectedIndex = gui.__preset_select.length - 1;\n }\n}\nfunction showHideExplain(gui, explain) {\n explain.style.display = gui.useLocalStorage ? 'block' : 'none';\n}\nfunction addSaveMenu(gui) {\n var div = gui.__save_row = document.createElement('li');\n dom.addClass(gui.domElement, 'has-save');\n gui.__ul.insertBefore(div, gui.__ul.firstChild);\n dom.addClass(div, 'save-row');\n var gears = document.createElement('span');\n gears.innerHTML = ' ';\n dom.addClass(gears, 'button gears');\n var button = document.createElement('span');\n button.innerHTML = 'Save';\n dom.addClass(button, 'button');\n dom.addClass(button, 'save');\n var button2 = document.createElement('span');\n button2.innerHTML = 'New';\n dom.addClass(button2, 'button');\n dom.addClass(button2, 'save-as');\n var button3 = document.createElement('span');\n button3.innerHTML = 'Revert';\n dom.addClass(button3, 'button');\n dom.addClass(button3, 'revert');\n var select = gui.__preset_select = document.createElement('select');\n if (gui.load && gui.load.remembered) {\n Common.each(gui.load.remembered, function (value, key) {\n addPresetOption(gui, key, key === gui.preset);\n });\n } else {\n addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false);\n }\n dom.bind(select, 'change', function () {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n gui.__preset_select[index].innerHTML = gui.__preset_select[index].value;\n }\n gui.preset = this.value;\n });\n div.appendChild(select);\n div.appendChild(gears);\n div.appendChild(button);\n div.appendChild(button2);\n div.appendChild(button3);\n if (SUPPORTS_LOCAL_STORAGE) {\n var explain = document.getElementById('dg-local-explain');\n var localStorageCheckBox = document.getElementById('dg-local-storage');\n var saveLocally = document.getElementById('dg-save-locally');\n saveLocally.style.display = 'block';\n if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') {\n localStorageCheckBox.setAttribute('checked', 'checked');\n }\n showHideExplain(gui, explain);\n dom.bind(localStorageCheckBox, 'change', function () {\n gui.useLocalStorage = !gui.useLocalStorage;\n showHideExplain(gui, explain);\n });\n }\n var newConstructorTextArea = document.getElementById('dg-new-constructor');\n dom.bind(newConstructorTextArea, 'keydown', function (e) {\n if (e.metaKey && (e.which === 67 || e.keyCode === 67)) {\n SAVE_DIALOGUE.hide();\n }\n });\n dom.bind(gears, 'click', function () {\n newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2);\n SAVE_DIALOGUE.show();\n newConstructorTextArea.focus();\n newConstructorTextArea.select();\n });\n dom.bind(button, 'click', function () {\n gui.save();\n });\n dom.bind(button2, 'click', function () {\n var presetName = prompt('Enter a new preset name.');\n if (presetName) {\n gui.saveAs(presetName);\n }\n });\n dom.bind(button3, 'click', function () {\n gui.revert();\n });\n}\nfunction addResizeHandle(gui) {\n var pmouseX = void 0;\n gui.__resize_handle = document.createElement('div');\n Common.extend(gui.__resize_handle.style, {\n width: '6px',\n marginLeft: '-3px',\n height: '200px',\n cursor: 'ew-resize',\n position: 'absolute'\n });\n function drag(e) {\n e.preventDefault();\n gui.width += pmouseX - e.clientX;\n gui.onResize();\n pmouseX = e.clientX;\n return false;\n }\n function dragStop() {\n dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.unbind(window, 'mousemove', drag);\n dom.unbind(window, 'mouseup', dragStop);\n }\n function dragStart(e) {\n e.preventDefault();\n pmouseX = e.clientX;\n dom.addClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.bind(window, 'mousemove', drag);\n dom.bind(window, 'mouseup', dragStop);\n return false;\n }\n dom.bind(gui.__resize_handle, 'mousedown', dragStart);\n dom.bind(gui.__closeButton, 'mousedown', dragStart);\n gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild);\n}\nfunction setWidth(gui, w) {\n gui.domElement.style.width = w + 'px';\n if (gui.__save_row && gui.autoPlace) {\n gui.__save_row.style.width = w + 'px';\n }\n if (gui.__closeButton) {\n gui.__closeButton.style.width = w + 'px';\n }\n}\nfunction getCurrentPreset(gui, useInitialValues) {\n var toReturn = {};\n Common.each(gui.__rememberedObjects, function (val, index) {\n var savedValues = {};\n var controllerMap = gui.__rememberedObjectIndecesToControllers[index];\n Common.each(controllerMap, function (controller, property) {\n savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue();\n });\n toReturn[index] = savedValues;\n });\n return toReturn;\n}\nfunction setPresetSelectIndex(gui) {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n if (gui.__preset_select[index].value === gui.preset) {\n gui.__preset_select.selectedIndex = index;\n }\n }\n}\nfunction updateDisplays(controllerArray) {\n if (controllerArray.length !== 0) {\n requestAnimationFrame$1.call(window, function () {\n updateDisplays(controllerArray);\n });\n }\n Common.each(controllerArray, function (c) {\n c.updateDisplay();\n });\n}\n\nvar color = {\n Color: Color,\n math: ColorMath,\n interpret: interpret\n};\nvar controllers = {\n Controller: Controller,\n BooleanController: BooleanController,\n OptionController: OptionController,\n StringController: StringController,\n NumberController: NumberController,\n NumberControllerBox: NumberControllerBox,\n NumberControllerSlider: NumberControllerSlider,\n FunctionController: FunctionController,\n ColorController: ColorController\n};\nvar dom$1 = { dom: dom };\nvar gui = { GUI: GUI };\nvar GUI$1 = GUI;\nvar index = {\n color: color,\n controllers: controllers,\n dom: dom$1,\n gui: gui,\n GUI: GUI$1\n};\n\nexport { color, controllers, dom$1 as dom, gui, GUI$1 as GUI };\nexport default index;\n//# sourceMappingURL=dat.gui.module.js.map\n","/* wgpu-matrix@2.5.1, license MIT */\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nlet EPSILON = 0.000001;\n/**\n * Set the value for EPSILON for various checks\n * @param v - Value to use for EPSILON.\n * @returns previous value of EPSILON;\n */\nfunction setEpsilon(v) {\n const old = EPSILON;\n EPSILON = v;\n return old;\n}\n/**\n * Convert degrees to radians\n * @param degrees - Angle in degrees\n * @returns angle converted to radians\n */\nfunction degToRad(degrees) {\n return degrees * Math.PI / 180;\n}\n/**\n * Convert radians to degrees\n * @param radians - Angle in radians\n * @returns angle converted to degrees\n */\nfunction radToDeg(radians) {\n return radians * 180 / Math.PI;\n}\n/**\n * Lerps between a and b via t\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @returns a + (b - a) * t\n */\nfunction lerp$4(a, b, t) {\n return a + (b - a) * t;\n}\n/**\n * Compute the opposite of lerp. Given a and b and a value between\n * a and b returns a value between 0 and 1. 0 if a, 1 if b.\n * Note: no clamping is done.\n * @param a - start value\n * @param b - end value\n * @param v - value between a and b\n * @returns (v - a) / (b - a)\n */\nfunction inverseLerp(a, b, v) {\n const d = b - a;\n return (Math.abs(b - a) < EPSILON)\n ? a\n : (v - a) / d;\n}\n/**\n * Compute the euclidean modulo\n *\n * ```\n * // table for n / 3\n * -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 <- n\n * ------------------------------------\n * -2 -1 -0 -2 -1 0, 1, 2, 0, 1, 2 <- n % 3\n * 1 2 0 1 2 0, 1, 2, 0, 1, 2 <- euclideanModule(n, 3)\n * ```\n *\n * @param n - dividend\n * @param m - divisor\n * @returns the euclidean modulo of n / m\n */\nfunction euclideanModulo(n, m) {\n return ((n % m) + m) % m;\n}\n\nvar utils = /*#__PURE__*/Object.freeze({\n __proto__: null,\n get EPSILON () { return EPSILON; },\n setEpsilon: setEpsilon,\n degToRad: degToRad,\n radToDeg: radToDeg,\n lerp: lerp$4,\n inverseLerp: inverseLerp,\n euclideanModulo: euclideanModulo\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Vec2 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new Vec2. In other words you can do this\n *\n * const v = vec2.cross(v1, v2); // Creates a new Vec2 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec2.create();\n * vec2.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec2.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet VecType$2 = Float32Array;\n/**\n * Sets the type this library creates for a Vec2\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec2\n */\nfunction setDefaultType$6(ctor) {\n const oldType = VecType$2;\n VecType$2 = ctor;\n return oldType;\n}\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values.\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Vec2's specified type\n * it would be faster to use\n *\n * ```\n * const v = vec2.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Vec2Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `vec2.create` is usually used\n * to create a Vec2 to be filled out as in\n *\n * ```\n * const sum = vec2.create();\n * vec2.add(v1, v2, sum);\n * ```\n *\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nfunction create$5(x = 0, y = 0) {\n const dst = new VecType$2(2);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Vec3 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec3`. In other words you can do this\n *\n * const v = vec3.cross(v1, v2); // Creates a new Vec3 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec3.create();\n * vec3.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec3.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet VecType$1 = Float32Array;\n/**\n * Sets the type this library creates for a Vec3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec3\n */\nfunction setDefaultType$5(ctor) {\n const oldType = VecType$1;\n VecType$1 = ctor;\n return oldType;\n}\n/**\n * Creates a vec3; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nfunction create$4(x, y, z) {\n const dst = new VecType$1(3);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n }\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a Vec2; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @returns the created vector\n */\nconst fromValues$3 = create$5;\n/**\n * Sets the values of a Vec2\n * Also see {@link vec2.create} and {@link vec2.copy}\n *\n * @param x first value\n * @param y second value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set$5(x, y, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = x;\n dst[1] = y;\n return dst;\n}\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nfunction ceil$2(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n return dst;\n}\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nfunction floor$2(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n return dst;\n}\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nfunction round$2(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n return dst;\n}\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nfunction clamp$2(v, min = 0, max = 1, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n return dst;\n}\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nfunction add$3(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n return dst;\n}\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nfunction addScaled$2(a, b, scale, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n return dst;\n}\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nfunction angle$2(a, b) {\n const ax = a[0];\n const ay = a[1];\n const bx = a[0];\n const by = a[1];\n const mag1 = Math.sqrt(ax * ax + ay * ay);\n const mag2 = Math.sqrt(bx * bx + by * by);\n const mag = mag1 * mag2;\n const cosine = mag && dot$3(a, b) / mag;\n return Math.acos(cosine);\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nfunction subtract$3(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nconst sub$3 = subtract$3;\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nfunction equalsApproximately$5(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON;\n}\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nfunction equals$5(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp$3(a, b, t, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n return dst;\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nfunction lerpV$2(a, b, t, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n return dst;\n}\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nfunction max$2(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n return dst;\n}\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nfunction min$2(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n return dst;\n}\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction mulScalar$3(v, k, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n return dst;\n}\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nconst scale$5 = mulScalar$3;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction divScalar$3(v, k, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n return dst;\n}\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nfunction inverse$5(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n return dst;\n}\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nconst invert$4 = inverse$5;\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nfunction cross$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n const z = a[0] * b[1] - a[1] * b[0];\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = z;\n return dst;\n}\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nfunction dot$3(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nfunction length$3(v) {\n const v0 = v[0];\n const v1 = v[1];\n return Math.sqrt(v0 * v0 + v1 * v1);\n}\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nconst len$3 = length$3;\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nfunction lengthSq$3(v) {\n const v0 = v[0];\n const v1 = v[1];\n return v0 * v0 + v1 * v1;\n}\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nconst lenSq$3 = lengthSq$3;\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nfunction distance$2(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return Math.sqrt(dx * dx + dy * dy);\n}\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nconst dist$2 = distance$2;\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nfunction distanceSq$2(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n return dx * dx + dy * dy;\n}\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nconst distSq$2 = distanceSq$2;\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nfunction normalize$3(v, dst) {\n dst = dst || new VecType$2(2);\n const v0 = v[0];\n const v1 = v[1];\n const len = Math.sqrt(v0 * v0 + v1 * v1);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n }\n return dst;\n}\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nfunction negate$4(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = -v[0];\n dst[1] = -v[1];\n return dst;\n}\n/**\n * Copies a vector. (same as {@link vec2.clone})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nfunction copy$5(v, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = v[0];\n dst[1] = v[1];\n return dst;\n}\n/**\n * Clones a vector. (same as {@link vec2.copy})\n * Also see {@link vec2.create} and {@link vec2.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nconst clone$5 = copy$5;\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nfunction multiply$5(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n return dst;\n}\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nconst mul$5 = multiply$5;\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nfunction divide$2(a, b, dst) {\n dst = dst || new VecType$2(2);\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n return dst;\n}\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nconst div$2 = divide$2;\n/**\n * Creates a random unit vector * scale\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nfunction random$1(scale = 1, dst) {\n dst = dst || new VecType$2(2);\n const angle = Math.random() * 2 * Math.PI;\n dst[0] = Math.cos(angle) * scale;\n dst[1] = Math.sin(angle) * scale;\n return dst;\n}\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nfunction zero$2(dst) {\n dst = dst || new VecType$2(2);\n dst[0] = 0;\n dst[1] = 0;\n return dst;\n}\n/**\n * transform Vec2 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat4$2(v, m, dst) {\n dst = dst || new VecType$2(2);\n const x = v[0];\n const y = v[1];\n dst[0] = x * m[0] + y * m[4] + m[12];\n dst[1] = x * m[1] + y * m[5] + m[13];\n return dst;\n}\n/**\n * Transforms vec4 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional Vec2 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat3$1(v, m, dst) {\n dst = dst || new VecType$2(2);\n const x = v[0];\n const y = v[1];\n dst[0] = m[0] * x + m[4] * y + m[8];\n dst[1] = m[1] * x + m[5] * y + m[9];\n return dst;\n}\n\nvar vec2Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create$5,\n setDefaultType: setDefaultType$6,\n fromValues: fromValues$3,\n set: set$5,\n ceil: ceil$2,\n floor: floor$2,\n round: round$2,\n clamp: clamp$2,\n add: add$3,\n addScaled: addScaled$2,\n angle: angle$2,\n subtract: subtract$3,\n sub: sub$3,\n equalsApproximately: equalsApproximately$5,\n equals: equals$5,\n lerp: lerp$3,\n lerpV: lerpV$2,\n max: max$2,\n min: min$2,\n mulScalar: mulScalar$3,\n scale: scale$5,\n divScalar: divScalar$3,\n inverse: inverse$5,\n invert: invert$4,\n cross: cross$1,\n dot: dot$3,\n length: length$3,\n len: len$3,\n lengthSq: lengthSq$3,\n lenSq: lenSq$3,\n distance: distance$2,\n dist: dist$2,\n distanceSq: distanceSq$2,\n distSq: distSq$2,\n normalize: normalize$3,\n negate: negate$4,\n copy: copy$5,\n clone: clone$5,\n multiply: multiply$5,\n mul: mul$5,\n divide: divide$2,\n div: div$2,\n random: random$1,\n zero: zero$2,\n transformMat4: transformMat4$2,\n transformMat3: transformMat3$1\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * 3x3 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat3.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat3.create();\n * mat3.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat3.identity();\n * const trans = mat3.translation([1, 2, 3]);\n * mat3.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType$1 = Float32Array;\n// This mess is because with Mat3 we have 3 unused elements.\n// For Float32Array and Float64Array that's not an issue\n// but for Array it's troublesome\nconst ctorMap = new Map([\n [Float32Array, () => new Float32Array(12)],\n [Float64Array, () => new Float64Array(12)],\n [Array, () => new Array(12).fill(0)],\n]);\nlet newMat3 = ctorMap.get(Float32Array);\n/**\n * Sets the type this library creates for a Mat3\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat3\n */\nfunction setDefaultType$4(ctor) {\n const oldType = MatType$1;\n MatType$1 = ctor;\n newMat3 = ctorMap.get(ctor);\n return oldType;\n}\n/**\n * Create a Mat3 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat3's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat3.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat3Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat3.create` is usually used\n * to create a Mat3 to be filled out as in\n *\n * ```\n * const m = mat3.create();\n * mat3.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @returns matrix created from values.\n */\nfunction create$3(v0, v1, v2, v3, v4, v5, v6, v7, v8) {\n const dst = newMat3();\n // to make the array homogenous\n dst[3] = 0;\n dst[7] = 0;\n dst[11] = 0;\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[4] = v3;\n if (v4 !== undefined) {\n dst[5] = v4;\n if (v5 !== undefined) {\n dst[6] = v5;\n if (v6 !== undefined) {\n dst[8] = v6;\n if (v7 !== undefined) {\n dst[9] = v7;\n if (v8 !== undefined) {\n dst[10] = v8;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return dst;\n}\n/**\n * Sets the values of a Mat3\n * Also see {@link mat3.create} and {@link mat3.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 set from values.\n */\nfunction set$4(v0, v1, v2, v3, v4, v5, v6, v7, v8, dst) {\n dst = dst || newMat3();\n dst[0] = v0;\n dst[1] = v1;\n dst[2] = v2;\n dst[3] = 0;\n dst[4] = v3;\n dst[5] = v4;\n dst[6] = v5;\n dst[7] = 0;\n dst[8] = v6;\n dst[9] = v7;\n dst[10] = v8;\n dst[11] = 0;\n return dst;\n}\n/**\n * Creates a Mat3 from the upper left 3x3 part of a Mat4\n * @param m4 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from m4\n */\nfunction fromMat4(m4, dst) {\n dst = dst || newMat3();\n dst[0] = m4[0];\n dst[1] = m4[1];\n dst[2] = m4[2];\n dst[3] = 0;\n dst[4] = m4[4];\n dst[5] = m4[5];\n dst[6] = m4[6];\n dst[7] = 0;\n dst[8] = m4[8];\n dst[9] = m4[9];\n dst[10] = m4[10];\n dst[11] = 0;\n return dst;\n}\n/**\n * Creates a Mat3 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat3 made from q\n */\nfunction fromQuat$1(q, dst) {\n dst = dst || newMat3();\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n dst[0] = 1 - yy - zz;\n dst[1] = yx + wz;\n dst[2] = zx - wy;\n dst[3] = 0;\n dst[4] = yx - wz;\n dst[5] = 1 - xx - zz;\n dst[6] = zy + wx;\n dst[7] = 0;\n dst[8] = zx + wy;\n dst[9] = zy - wx;\n dst[10] = 1 - xx - yy;\n dst[11] = 0;\n return dst;\n}\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nfunction negate$3(m, dst) {\n dst = dst || newMat3();\n dst[0] = -m[0];\n dst[1] = -m[1];\n dst[2] = -m[2];\n dst[4] = -m[4];\n dst[5] = -m[5];\n dst[6] = -m[6];\n dst[8] = -m[8];\n dst[9] = -m[9];\n dst[10] = -m[10];\n return dst;\n}\n/**\n * Copies a matrix. (same as {@link mat3.clone})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nfunction copy$4(m, dst) {\n dst = dst || newMat3();\n dst[0] = m[0];\n dst[1] = m[1];\n dst[2] = m[2];\n dst[4] = m[4];\n dst[5] = m[5];\n dst[6] = m[6];\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n return dst;\n}\n/**\n * Copies a matrix (same as {@link mat3.copy})\n * Also see {@link mat3.create} and {@link mat3.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nconst clone$4 = copy$4;\n/**\n * Check if 2 matrices are approximately equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are approximately equal\n */\nfunction equalsApproximately$4(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[4] - b[4]) < EPSILON &&\n Math.abs(a[5] - b[5]) < EPSILON &&\n Math.abs(a[6] - b[6]) < EPSILON &&\n Math.abs(a[8] - b[8]) < EPSILON &&\n Math.abs(a[9] - b[9]) < EPSILON &&\n Math.abs(a[10] - b[10]) < EPSILON;\n}\n/**\n * Check if 2 matrices are exactly equal\n * @param a Operand matrix.\n * @param b Operand matrix.\n * @returns true if matrices are exactly equal\n */\nfunction equals$4(a, b) {\n return a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[4] === b[4] &&\n a[5] === b[5] &&\n a[6] === b[6] &&\n a[8] === b[8] &&\n a[9] === b[9] &&\n a[10] === b[10];\n}\n/**\n * Creates a 3-by-3 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 3-by-3 identity matrix.\n */\nfunction identity$2(dst) {\n dst = dst || newMat3();\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nfunction transpose$1(m, dst) {\n dst = dst || newMat3();\n if (dst === m) {\n let t;\n // 0 1 2\n // 4 5 6\n // 8 9 10\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n return dst;\n }\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n dst[0] = m00;\n dst[1] = m10;\n dst[2] = m20;\n dst[4] = m01;\n dst[5] = m11;\n dst[6] = m21;\n dst[8] = m02;\n dst[9] = m12;\n dst[10] = m22;\n return dst;\n}\n/**\n * Computes the inverse of a 3-by-3 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nfunction inverse$4(m, dst) {\n dst = dst || newMat3();\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const b01 = m22 * m11 - m12 * m21;\n const b11 = -m22 * m10 + m12 * m20;\n const b21 = m21 * m10 - m11 * m20;\n const invDet = 1 / (m00 * b01 + m01 * b11 + m02 * b21);\n dst[0] = b01 * invDet;\n dst[1] = (-m22 * m01 + m02 * m21) * invDet;\n dst[2] = (m12 * m01 - m02 * m11) * invDet;\n dst[4] = b11 * invDet;\n dst[5] = (m22 * m00 - m02 * m20) * invDet;\n dst[6] = (-m12 * m00 + m02 * m10) * invDet;\n dst[8] = b21 * invDet;\n dst[9] = (-m21 * m00 + m01 * m20) * invDet;\n dst[10] = (m11 * m00 - m01 * m10) * invDet;\n return dst;\n}\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nfunction determinant$1(m) {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n return m00 * (m11 * m22 - m21 * m12) -\n m10 * (m01 * m22 - m21 * m02) +\n m20 * (m01 * m12 - m11 * m02);\n}\n/**\n * Computes the inverse of a 3-by-3 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nconst invert$3 = inverse$4;\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nfunction multiply$4(a, b, dst) {\n dst = dst || newMat3();\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a10 = a[4 + 0];\n const a11 = a[4 + 1];\n const a12 = a[4 + 2];\n const a20 = a[8 + 0];\n const a21 = a[8 + 1];\n const a22 = a[8 + 2];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b10 = b[4 + 0];\n const b11 = b[4 + 1];\n const b12 = b[4 + 2];\n const b20 = b[8 + 0];\n const b21 = b[8 + 1];\n const b22 = b[8 + 2];\n dst[0] = a00 * b00 + a10 * b01 + a20 * b02;\n dst[1] = a01 * b00 + a11 * b01 + a21 * b02;\n dst[2] = a02 * b00 + a12 * b01 + a22 * b02;\n dst[4] = a00 * b10 + a10 * b11 + a20 * b12;\n dst[5] = a01 * b10 + a11 * b11 + a21 * b12;\n dst[6] = a02 * b10 + a12 * b11 + a22 * b12;\n dst[8] = a00 * b20 + a10 * b21 + a20 * b22;\n dst[9] = a01 * b20 + a11 * b21 + a21 * b22;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22;\n return dst;\n}\n/**\n * Multiplies two 3-by-3 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nconst mul$4 = multiply$4;\n/**\n * Sets the translation component of a 3-by-3 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nfunction setTranslation$1(a, v, dst) {\n dst = dst || identity$2();\n if (a !== dst) {\n dst[0] = a[0];\n dst[1] = a[1];\n dst[2] = a[2];\n dst[4] = a[4];\n dst[5] = a[5];\n dst[6] = a[6];\n }\n dst[8] = v[0];\n dst[9] = v[1];\n dst[10] = 1;\n return dst;\n}\n/**\n * Returns the translation component of a 3-by-3 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nfunction getTranslation$2(m, dst) {\n dst = dst || create$5();\n dst[0] = m[8];\n dst[1] = m[9];\n return dst;\n}\n/**\n * Returns an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y,\n * @returns The axis component of m.\n */\nfunction getAxis$2(m, axis, dst) {\n dst = dst || create$5();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n return dst;\n}\n/**\n * Sets an axis of a 3x3 matrix as a vector with 2 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nfunction setAxis$1(m, v, axis, dst) {\n if (dst !== m) {\n dst = copy$4(m, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nfunction getScaling$2(m, dst) {\n dst = dst || create$5();\n const xx = m[0];\n const xy = m[1];\n const yx = m[4];\n const yy = m[5];\n dst[0] = Math.sqrt(xx * xx + xy * xy);\n dst[1] = Math.sqrt(yx * yx + yy * yy);\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which translates by the given vector v.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nfunction translation$1(v, dst) {\n dst = dst || newMat3();\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[8] = v[0];\n dst[9] = v[1];\n dst[10] = 1;\n return dst;\n}\n/**\n * Translates the given 3-by-3 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nfunction translate$1(m, v, dst) {\n dst = dst || newMat3();\n const v0 = v[0];\n const v1 = v[1];\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n if (m !== dst) {\n dst[0] = m00;\n dst[1] = m01;\n dst[2] = m02;\n dst[4] = m10;\n dst[5] = m11;\n dst[6] = m12;\n }\n dst[8] = m00 * v0 + m10 * v1 + m20;\n dst[9] = m01 * v0 + m11 * v1 + m21;\n dst[10] = m02 * v0 + m12 * v1 + m22;\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which rotates by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotation$1(angleInRadians, dst) {\n dst = dst || newMat3();\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c;\n dst[1] = s;\n dst[2] = 0;\n dst[4] = -s;\n dst[5] = c;\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Rotates the given 3-by-3 matrix by the given angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotate$1(m, angleInRadians, dst) {\n dst = dst || newMat3();\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c * m00 + s * m10;\n dst[1] = c * m01 + s * m11;\n dst[2] = c * m02 + s * m12;\n dst[4] = c * m10 - s * m00;\n dst[5] = c * m11 - s * m01;\n dst[6] = c * m12 - s * m02;\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n }\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * 2 entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction scaling$1(v, dst) {\n dst = dst || newMat3();\n dst[0] = v[0];\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = v[1];\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of 2 entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction scale$4(m, v, dst) {\n dst = dst || newMat3();\n const v0 = v[0];\n const v1 = v[1];\n dst[0] = v0 * m[0 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2];\n dst[4] = v1 * m[1 * 4 + 0];\n dst[5] = v1 * m[1 * 4 + 1];\n dst[6] = v1 * m[1 * 4 + 2];\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n }\n return dst;\n}\n/**\n * Creates a 3-by-3 matrix which scales uniformly in each dimension\n * @param s - Amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction uniformScaling$1(s, dst) {\n dst = dst || newMat3();\n dst[0] = s;\n dst[1] = 0;\n dst[2] = 0;\n dst[4] = 0;\n dst[5] = s;\n dst[6] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n return dst;\n}\n/**\n * Scales the given 3-by-3 matrix in each dimension by an amount\n * given.\n * @param m - The matrix to be modified.\n * @param s - Amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction uniformScale$1(m, s, dst) {\n dst = dst || newMat3();\n dst[0] = s * m[0 * 4 + 0];\n dst[1] = s * m[0 * 4 + 1];\n dst[2] = s * m[0 * 4 + 2];\n dst[4] = s * m[1 * 4 + 0];\n dst[5] = s * m[1 * 4 + 1];\n dst[6] = s * m[1 * 4 + 2];\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n }\n return dst;\n}\n\nvar mat3Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setDefaultType: setDefaultType$4,\n create: create$3,\n set: set$4,\n fromMat4: fromMat4,\n fromQuat: fromQuat$1,\n negate: negate$3,\n copy: copy$4,\n clone: clone$4,\n equalsApproximately: equalsApproximately$4,\n equals: equals$4,\n identity: identity$2,\n transpose: transpose$1,\n inverse: inverse$4,\n determinant: determinant$1,\n invert: invert$3,\n multiply: multiply$4,\n mul: mul$4,\n setTranslation: setTranslation$1,\n getTranslation: getTranslation$2,\n getAxis: getAxis$2,\n setAxis: setAxis$1,\n getScaling: getScaling$2,\n translation: translation$1,\n translate: translate$1,\n rotation: rotation$1,\n rotate: rotate$1,\n scaling: scaling$1,\n scale: scale$4,\n uniformScaling: uniformScaling$1,\n uniformScale: uniformScale$1\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a vec3; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @returns the created vector\n */\nconst fromValues$2 = create$4;\n/**\n * Sets the values of a Vec3\n * Also see {@link vec3.create} and {@link vec3.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set$3(x, y, z, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n return dst;\n}\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nfunction ceil$1(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n return dst;\n}\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nfunction floor$1(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n return dst;\n}\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nfunction round$1(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n return dst;\n}\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nfunction clamp$1(v, min = 0, max = 1, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n return dst;\n}\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nfunction add$2(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n return dst;\n}\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nfunction addScaled$1(a, b, scale, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n return dst;\n}\n/**\n * Returns the angle in radians between two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns The angle in radians between the 2 vectors.\n */\nfunction angle$1(a, b) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = a[0];\n const by = a[1];\n const bz = a[2];\n const mag1 = Math.sqrt(ax * ax + ay * ay + az * az);\n const mag2 = Math.sqrt(bx * bx + by * by + bz * bz);\n const mag = mag1 * mag2;\n const cosine = mag && dot$2(a, b) / mag;\n return Math.acos(cosine);\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nfunction subtract$2(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nconst sub$2 = subtract$2;\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nfunction equalsApproximately$3(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON;\n}\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nfunction equals$3(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp$2(a, b, t, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n return dst;\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nfunction lerpV$1(a, b, t, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n return dst;\n}\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nfunction max$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n return dst;\n}\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nfunction min$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n return dst;\n}\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction mulScalar$2(v, k, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n return dst;\n}\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nconst scale$3 = mulScalar$2;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction divScalar$2(v, k, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n return dst;\n}\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nfunction inverse$3(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n return dst;\n}\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nconst invert$2 = inverse$3;\n/**\n * Computes the cross product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of a cross b.\n */\nfunction cross(a, b, dst) {\n dst = dst || new VecType$1(3);\n const t1 = a[2] * b[0] - a[0] * b[2];\n const t2 = a[0] * b[1] - a[1] * b[0];\n dst[0] = a[1] * b[2] - a[2] * b[1];\n dst[1] = t1;\n dst[2] = t2;\n return dst;\n}\n/**\n * Computes the dot product of two vectors; assumes both vectors have\n * three entries.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nfunction dot$2(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]);\n}\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nfunction length$2(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n}\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nconst len$2 = length$2;\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nfunction lengthSq$2(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n return v0 * v0 + v1 * v1 + v2 * v2;\n}\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nconst lenSq$2 = lengthSq$2;\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nfunction distance$1(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n}\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nconst dist$1 = distance$1;\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nfunction distanceSq$1(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n return dx * dx + dy * dy + dz * dz;\n}\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nconst distSq$1 = distanceSq$1;\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nfunction normalize$2(v, dst) {\n dst = dst || new VecType$1(3);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n }\n return dst;\n}\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nfunction negate$2(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n return dst;\n}\n/**\n * Copies a vector. (same as {@link vec3.clone})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nfunction copy$3(v, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n return dst;\n}\n/**\n * Clones a vector. (same as {@link vec3.copy})\n * Also see {@link vec3.create} and {@link vec3.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nconst clone$3 = copy$3;\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nfunction multiply$3(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n return dst;\n}\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nconst mul$3 = multiply$3;\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nfunction divide$1(a, b, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n return dst;\n}\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nconst div$1 = divide$1;\n/**\n * Creates a random vector\n * @param scale - Default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The random vector.\n */\nfunction random(scale = 1, dst) {\n dst = dst || new VecType$1(3);\n const angle = Math.random() * 2 * Math.PI;\n const z = Math.random() * 2 - 1;\n const zScale = Math.sqrt(1 - z * z) * scale;\n dst[0] = Math.cos(angle) * zScale;\n dst[1] = Math.sin(angle) * zScale;\n dst[2] = z * scale;\n return dst;\n}\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nfunction zero$1(dst) {\n dst = dst || new VecType$1(3);\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n return dst;\n}\n/**\n * transform vec3 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat4$1(v, m, dst) {\n dst = dst || new VecType$1(3);\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = (m[3] * x + m[7] * y + m[11] * z + m[15]) || 1;\n dst[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n dst[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n dst[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return dst;\n}\n/**\n * Transform vec4 by upper 3x3 matrix inside 4x4 matrix.\n * @param v - The direction.\n * @param m - The matrix.\n * @param dst - optional Vec3 to store result. If not passed a new one is created.\n * @returns The transformed vector.\n */\nfunction transformMat4Upper3x3(v, m, dst) {\n dst = dst || new VecType$1(3);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n dst[0] = v0 * m[0 * 4 + 0] + v1 * m[1 * 4 + 0] + v2 * m[2 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1] + v1 * m[1 * 4 + 1] + v2 * m[2 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2] + v1 * m[1 * 4 + 2] + v2 * m[2 * 4 + 2];\n return dst;\n}\n/**\n * Transforms vec3 by 3x3 matrix\n *\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat3(v, m, dst) {\n dst = dst || new VecType$1(3);\n const x = v[0];\n const y = v[1];\n const z = v[2];\n dst[0] = x * m[0] + y * m[4] + z * m[8];\n dst[1] = x * m[1] + y * m[5] + z * m[9];\n dst[2] = x * m[2] + y * m[6] + z * m[10];\n return dst;\n}\n/**\n * Transforms vec3 by Quaternion\n * @param v - the vector to transform\n * @param q - the quaternion to transform by\n * @param dst - optional vec3 to store result. If not passed a new one is created.\n * @returns the transformed\n */\nfunction transformQuat(v, q, dst) {\n dst = dst || new VecType$1(3);\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const w2 = q[3] * 2;\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const uvX = qy * z - qz * y;\n const uvY = qz * x - qx * z;\n const uvZ = qx * y - qy * x;\n dst[0] = x + uvX * w2 + (qy * uvZ - qz * uvY) * 2;\n dst[1] = y + uvY * w2 + (qz * uvX - qx * uvZ) * 2;\n dst[2] = z + uvZ * w2 + (qx * uvY - qy * uvX) * 2;\n return dst;\n}\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nfunction getTranslation$1(m, dst) {\n dst = dst || new VecType$1(3);\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nfunction getAxis$1(m, axis, dst) {\n dst = dst || new VecType$1(3);\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nfunction getScaling$1(m, dst) {\n dst = dst || new VecType$1(3);\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return dst;\n}\n\nvar vec3Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create$4,\n setDefaultType: setDefaultType$5,\n fromValues: fromValues$2,\n set: set$3,\n ceil: ceil$1,\n floor: floor$1,\n round: round$1,\n clamp: clamp$1,\n add: add$2,\n addScaled: addScaled$1,\n angle: angle$1,\n subtract: subtract$2,\n sub: sub$2,\n equalsApproximately: equalsApproximately$3,\n equals: equals$3,\n lerp: lerp$2,\n lerpV: lerpV$1,\n max: max$1,\n min: min$1,\n mulScalar: mulScalar$2,\n scale: scale$3,\n divScalar: divScalar$2,\n inverse: inverse$3,\n invert: invert$2,\n cross: cross,\n dot: dot$2,\n length: length$2,\n len: len$2,\n lengthSq: lengthSq$2,\n lenSq: lenSq$2,\n distance: distance$1,\n dist: dist$1,\n distanceSq: distanceSq$1,\n distSq: distSq$1,\n normalize: normalize$2,\n negate: negate$2,\n copy: copy$3,\n clone: clone$3,\n multiply: multiply$3,\n mul: mul$3,\n divide: divide$1,\n div: div$1,\n random: random,\n zero: zero$1,\n transformMat4: transformMat4$1,\n transformMat4Upper3x3: transformMat4Upper3x3,\n transformMat3: transformMat3,\n transformQuat: transformQuat,\n getTranslation: getTranslation$1,\n getAxis: getAxis$1,\n getScaling: getScaling$1\n});\n\n/**\n * 4x4 Matrix math math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new matrix. In other words you can do this\n *\n * const mat = mat4.translation([1, 2, 3]); // Creates a new translation matrix\n *\n * or\n *\n * const mat = mat4.create();\n * mat4.translation([1, 2, 3], mat); // Puts translation matrix in mat.\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always save to pass any matrix as the destination. So for example\n *\n * const mat = mat4.identity();\n * const trans = mat4.translation([1, 2, 3]);\n * mat4.multiply(mat, trans, mat); // Multiplies mat * trans and puts result in mat.\n *\n */\nlet MatType = Float32Array;\n/**\n * Sets the type this library creates for a Mat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Mat4\n */\nfunction setDefaultType$3(ctor) {\n const oldType = MatType;\n MatType = ctor;\n return oldType;\n}\n/**\n * Create a Mat4 from values\n *\n * Note: Since passing in a raw JavaScript array\n * is valid in all circumstances, if you want to\n * force a JavaScript array into a Mat4's specified type\n * it would be faster to use\n *\n * ```\n * const m = mat4.clone(someJSArray);\n * ```\n *\n * Note: a consequence of the implementation is if your Mat4Type = `Array`\n * instead of `Float32Array` or `Float64Array` then any values you\n * don't pass in will be undefined. Usually this is not an issue since\n * (a) using `Array` is rare and (b) using `mat4.create` is usually used\n * to create a Mat4 to be filled out as in\n *\n * ```\n * const m = mat4.create();\n * mat4.perspective(fov, aspect, near, far, m);\n * ```\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @returns created from values.\n */\nfunction create$2(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) {\n const dst = new MatType(16);\n if (v0 !== undefined) {\n dst[0] = v0;\n if (v1 !== undefined) {\n dst[1] = v1;\n if (v2 !== undefined) {\n dst[2] = v2;\n if (v3 !== undefined) {\n dst[3] = v3;\n if (v4 !== undefined) {\n dst[4] = v4;\n if (v5 !== undefined) {\n dst[5] = v5;\n if (v6 !== undefined) {\n dst[6] = v6;\n if (v7 !== undefined) {\n dst[7] = v7;\n if (v8 !== undefined) {\n dst[8] = v8;\n if (v9 !== undefined) {\n dst[9] = v9;\n if (v10 !== undefined) {\n dst[10] = v10;\n if (v11 !== undefined) {\n dst[11] = v11;\n if (v12 !== undefined) {\n dst[12] = v12;\n if (v13 !== undefined) {\n dst[13] = v13;\n if (v14 !== undefined) {\n dst[14] = v14;\n if (v15 !== undefined) {\n dst[15] = v15;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return dst;\n}\n/**\n * Sets the values of a Mat4\n * Also see {@link mat4.create} and {@link mat4.copy}\n *\n * @param v0 - value for element 0\n * @param v1 - value for element 1\n * @param v2 - value for element 2\n * @param v3 - value for element 3\n * @param v4 - value for element 4\n * @param v5 - value for element 5\n * @param v6 - value for element 6\n * @param v7 - value for element 7\n * @param v8 - value for element 8\n * @param v9 - value for element 9\n * @param v10 - value for element 10\n * @param v11 - value for element 11\n * @param v12 - value for element 12\n * @param v13 - value for element 13\n * @param v14 - value for element 14\n * @param v15 - value for element 15\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 created from values.\n */\nfunction set$2(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, dst) {\n dst = dst || new MatType(16);\n dst[0] = v0;\n dst[1] = v1;\n dst[2] = v2;\n dst[3] = v3;\n dst[4] = v4;\n dst[5] = v5;\n dst[6] = v6;\n dst[7] = v7;\n dst[8] = v8;\n dst[9] = v9;\n dst[10] = v10;\n dst[11] = v11;\n dst[12] = v12;\n dst[13] = v13;\n dst[14] = v14;\n dst[15] = v15;\n return dst;\n}\n/**\n * Creates a Mat4 from a Mat3\n * @param m3 - source matrix\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from m3\n */\nfunction fromMat3(m3, dst) {\n dst = dst || new MatType(16);\n dst[0] = m3[0];\n dst[1] = m3[1];\n dst[2] = m3[2];\n dst[3] = 0;\n dst[4] = m3[4];\n dst[5] = m3[5];\n dst[6] = m3[6];\n dst[7] = 0;\n dst[8] = m3[8];\n dst[9] = m3[9];\n dst[10] = m3[10];\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Creates a Mat4 rotation matrix from a quaternion\n * @param q - quaternion to create matrix from\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns Mat4 made from q\n */\nfunction fromQuat(q, dst) {\n dst = dst || new MatType(16);\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n dst[0] = 1 - yy - zz;\n dst[1] = yx + wz;\n dst[2] = zx - wy;\n dst[3] = 0;\n dst[4] = yx - wz;\n dst[5] = 1 - xx - zz;\n dst[6] = zy + wx;\n dst[7] = 0;\n dst[8] = zx + wy;\n dst[9] = zy - wx;\n dst[10] = 1 - xx - yy;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Negates a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns -m.\n */\nfunction negate$1(m, dst) {\n dst = dst || new MatType(16);\n dst[0] = -m[0];\n dst[1] = -m[1];\n dst[2] = -m[2];\n dst[3] = -m[3];\n dst[4] = -m[4];\n dst[5] = -m[5];\n dst[6] = -m[6];\n dst[7] = -m[7];\n dst[8] = -m[8];\n dst[9] = -m[9];\n dst[10] = -m[10];\n dst[11] = -m[11];\n dst[12] = -m[12];\n dst[13] = -m[13];\n dst[14] = -m[14];\n dst[15] = -m[15];\n return dst;\n}\n/**\n * Copies a matrix. (same as {@link mat4.clone})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nfunction copy$2(m, dst) {\n dst = dst || new MatType(16);\n dst[0] = m[0];\n dst[1] = m[1];\n dst[2] = m[2];\n dst[3] = m[3];\n dst[4] = m[4];\n dst[5] = m[5];\n dst[6] = m[6];\n dst[7] = m[7];\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n dst[11] = m[11];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n return dst;\n}\n/**\n * Copies a matrix (same as {@link mat4.copy})\n * Also see {@link mat4.create} and {@link mat4.set}\n * @param m - The matrix.\n * @param dst - The matrix. If not passed a new one is created.\n * @returns A copy of m.\n */\nconst clone$2 = copy$2;\n/**\n * Check if 2 matrices are approximately equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are approximately equal\n */\nfunction equalsApproximately$2(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON &&\n Math.abs(a[4] - b[4]) < EPSILON &&\n Math.abs(a[5] - b[5]) < EPSILON &&\n Math.abs(a[6] - b[6]) < EPSILON &&\n Math.abs(a[7] - b[7]) < EPSILON &&\n Math.abs(a[8] - b[8]) < EPSILON &&\n Math.abs(a[9] - b[9]) < EPSILON &&\n Math.abs(a[10] - b[10]) < EPSILON &&\n Math.abs(a[11] - b[11]) < EPSILON &&\n Math.abs(a[12] - b[12]) < EPSILON &&\n Math.abs(a[13] - b[13]) < EPSILON &&\n Math.abs(a[14] - b[14]) < EPSILON &&\n Math.abs(a[15] - b[15]) < EPSILON;\n}\n/**\n * Check if 2 matrices are exactly equal\n * @param a - Operand matrix.\n * @param b - Operand matrix.\n * @returns true if matrices are exactly equal\n */\nfunction equals$2(a, b) {\n return a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[3] === b[3] &&\n a[4] === b[4] &&\n a[5] === b[5] &&\n a[6] === b[6] &&\n a[7] === b[7] &&\n a[8] === b[8] &&\n a[9] === b[9] &&\n a[10] === b[10] &&\n a[11] === b[11] &&\n a[12] === b[12] &&\n a[13] === b[13] &&\n a[14] === b[14] &&\n a[15] === b[15];\n}\n/**\n * Creates a 4-by-4 identity matrix.\n *\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A 4-by-4 identity matrix.\n */\nfunction identity$1(dst) {\n dst = dst || new MatType(16);\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Takes the transpose of a matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The transpose of m.\n */\nfunction transpose(m, dst) {\n dst = dst || new MatType(16);\n if (dst === m) {\n let t;\n t = m[1];\n m[1] = m[4];\n m[4] = t;\n t = m[2];\n m[2] = m[8];\n m[8] = t;\n t = m[3];\n m[3] = m[12];\n m[12] = t;\n t = m[6];\n m[6] = m[9];\n m[9] = t;\n t = m[7];\n m[7] = m[13];\n m[13] = t;\n t = m[11];\n m[11] = m[14];\n m[14] = t;\n return dst;\n }\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n dst[0] = m00;\n dst[1] = m10;\n dst[2] = m20;\n dst[3] = m30;\n dst[4] = m01;\n dst[5] = m11;\n dst[6] = m21;\n dst[7] = m31;\n dst[8] = m02;\n dst[9] = m12;\n dst[10] = m22;\n dst[11] = m32;\n dst[12] = m03;\n dst[13] = m13;\n dst[14] = m23;\n dst[15] = m33;\n return dst;\n}\n/**\n * Computes the inverse of a 4-by-4 matrix.\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nfunction inverse$2(m, dst) {\n dst = dst || new MatType(16);\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n const tmp12 = m20 * m31;\n const tmp13 = m30 * m21;\n const tmp14 = m10 * m31;\n const tmp15 = m30 * m11;\n const tmp16 = m10 * m21;\n const tmp17 = m20 * m11;\n const tmp18 = m00 * m31;\n const tmp19 = m30 * m01;\n const tmp20 = m00 * m21;\n const tmp21 = m20 * m01;\n const tmp22 = m00 * m11;\n const tmp23 = m10 * m01;\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n const d = 1 / (m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3);\n dst[0] = d * t0;\n dst[1] = d * t1;\n dst[2] = d * t2;\n dst[3] = d * t3;\n dst[4] = d * ((tmp1 * m10 + tmp2 * m20 + tmp5 * m30) -\n (tmp0 * m10 + tmp3 * m20 + tmp4 * m30));\n dst[5] = d * ((tmp0 * m00 + tmp7 * m20 + tmp8 * m30) -\n (tmp1 * m00 + tmp6 * m20 + tmp9 * m30));\n dst[6] = d * ((tmp3 * m00 + tmp6 * m10 + tmp11 * m30) -\n (tmp2 * m00 + tmp7 * m10 + tmp10 * m30));\n dst[7] = d * ((tmp4 * m00 + tmp9 * m10 + tmp10 * m20) -\n (tmp5 * m00 + tmp8 * m10 + tmp11 * m20));\n dst[8] = d * ((tmp12 * m13 + tmp15 * m23 + tmp16 * m33) -\n (tmp13 * m13 + tmp14 * m23 + tmp17 * m33));\n dst[9] = d * ((tmp13 * m03 + tmp18 * m23 + tmp21 * m33) -\n (tmp12 * m03 + tmp19 * m23 + tmp20 * m33));\n dst[10] = d * ((tmp14 * m03 + tmp19 * m13 + tmp22 * m33) -\n (tmp15 * m03 + tmp18 * m13 + tmp23 * m33));\n dst[11] = d * ((tmp17 * m03 + tmp20 * m13 + tmp23 * m23) -\n (tmp16 * m03 + tmp21 * m13 + tmp22 * m23));\n dst[12] = d * ((tmp14 * m22 + tmp17 * m32 + tmp13 * m12) -\n (tmp16 * m32 + tmp12 * m12 + tmp15 * m22));\n dst[13] = d * ((tmp20 * m32 + tmp12 * m02 + tmp19 * m22) -\n (tmp18 * m22 + tmp21 * m32 + tmp13 * m02));\n dst[14] = d * ((tmp18 * m12 + tmp23 * m32 + tmp15 * m02) -\n (tmp22 * m32 + tmp14 * m02 + tmp19 * m12));\n dst[15] = d * ((tmp22 * m22 + tmp16 * m02 + tmp21 * m12) -\n (tmp20 * m12 + tmp23 * m22 + tmp17 * m02));\n return dst;\n}\n/**\n * Compute the determinant of a matrix\n * @param m - the matrix\n * @returns the determinant\n */\nfunction determinant(m) {\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n const tmp0 = m22 * m33;\n const tmp1 = m32 * m23;\n const tmp2 = m12 * m33;\n const tmp3 = m32 * m13;\n const tmp4 = m12 * m23;\n const tmp5 = m22 * m13;\n const tmp6 = m02 * m33;\n const tmp7 = m32 * m03;\n const tmp8 = m02 * m23;\n const tmp9 = m22 * m03;\n const tmp10 = m02 * m13;\n const tmp11 = m12 * m03;\n const t0 = (tmp0 * m11 + tmp3 * m21 + tmp4 * m31) -\n (tmp1 * m11 + tmp2 * m21 + tmp5 * m31);\n const t1 = (tmp1 * m01 + tmp6 * m21 + tmp9 * m31) -\n (tmp0 * m01 + tmp7 * m21 + tmp8 * m31);\n const t2 = (tmp2 * m01 + tmp7 * m11 + tmp10 * m31) -\n (tmp3 * m01 + tmp6 * m11 + tmp11 * m31);\n const t3 = (tmp5 * m01 + tmp8 * m11 + tmp11 * m21) -\n (tmp4 * m01 + tmp9 * m11 + tmp10 * m21);\n return m00 * t0 + m10 * t1 + m20 * t2 + m30 * t3;\n}\n/**\n * Computes the inverse of a 4-by-4 matrix. (same as inverse)\n * @param m - The matrix.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The inverse of m.\n */\nconst invert$1 = inverse$2;\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nfunction multiply$2(a, b, dst) {\n dst = dst || new MatType(16);\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4 + 0];\n const a11 = a[4 + 1];\n const a12 = a[4 + 2];\n const a13 = a[4 + 3];\n const a20 = a[8 + 0];\n const a21 = a[8 + 1];\n const a22 = a[8 + 2];\n const a23 = a[8 + 3];\n const a30 = a[12 + 0];\n const a31 = a[12 + 1];\n const a32 = a[12 + 2];\n const a33 = a[12 + 3];\n const b00 = b[0];\n const b01 = b[1];\n const b02 = b[2];\n const b03 = b[3];\n const b10 = b[4 + 0];\n const b11 = b[4 + 1];\n const b12 = b[4 + 2];\n const b13 = b[4 + 3];\n const b20 = b[8 + 0];\n const b21 = b[8 + 1];\n const b22 = b[8 + 2];\n const b23 = b[8 + 3];\n const b30 = b[12 + 0];\n const b31 = b[12 + 1];\n const b32 = b[12 + 2];\n const b33 = b[12 + 3];\n dst[0] = a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03;\n dst[1] = a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03;\n dst[2] = a02 * b00 + a12 * b01 + a22 * b02 + a32 * b03;\n dst[3] = a03 * b00 + a13 * b01 + a23 * b02 + a33 * b03;\n dst[4] = a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13;\n dst[5] = a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13;\n dst[6] = a02 * b10 + a12 * b11 + a22 * b12 + a32 * b13;\n dst[7] = a03 * b10 + a13 * b11 + a23 * b12 + a33 * b13;\n dst[8] = a00 * b20 + a10 * b21 + a20 * b22 + a30 * b23;\n dst[9] = a01 * b20 + a11 * b21 + a21 * b22 + a31 * b23;\n dst[10] = a02 * b20 + a12 * b21 + a22 * b22 + a32 * b23;\n dst[11] = a03 * b20 + a13 * b21 + a23 * b22 + a33 * b23;\n dst[12] = a00 * b30 + a10 * b31 + a20 * b32 + a30 * b33;\n dst[13] = a01 * b30 + a11 * b31 + a21 * b32 + a31 * b33;\n dst[14] = a02 * b30 + a12 * b31 + a22 * b32 + a32 * b33;\n dst[15] = a03 * b30 + a13 * b31 + a23 * b32 + a33 * b33;\n return dst;\n}\n/**\n * Multiplies two 4-by-4 matrices with a on the left and b on the right (same as multiply)\n * @param a - The matrix on the left.\n * @param b - The matrix on the right.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix product of a and b.\n */\nconst mul$2 = multiply$2;\n/**\n * Sets the translation component of a 4-by-4 matrix to the given\n * vector.\n * @param a - The matrix.\n * @param v - The vector.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The matrix with translation set.\n */\nfunction setTranslation(a, v, dst) {\n dst = dst || identity$1();\n if (a !== dst) {\n dst[0] = a[0];\n dst[1] = a[1];\n dst[2] = a[2];\n dst[3] = a[3];\n dst[4] = a[4];\n dst[5] = a[5];\n dst[6] = a[6];\n dst[7] = a[7];\n dst[8] = a[8];\n dst[9] = a[9];\n dst[10] = a[10];\n dst[11] = a[11];\n }\n dst[12] = v[0];\n dst[13] = v[1];\n dst[14] = v[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Returns the translation component of a 4-by-4 matrix as a vector with 3\n * entries.\n * @param m - The matrix.\n * @param dst - vector to hold result. If not passed a new one is created.\n * @returns The translation component of m.\n */\nfunction getTranslation(m, dst) {\n dst = dst || create$4();\n dst[0] = m[12];\n dst[1] = m[13];\n dst[2] = m[14];\n return dst;\n}\n/**\n * Returns an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @returns The axis component of m.\n */\nfunction getAxis(m, axis, dst) {\n dst = dst || create$4();\n const off = axis * 4;\n dst[0] = m[off + 0];\n dst[1] = m[off + 1];\n dst[2] = m[off + 2];\n return dst;\n}\n/**\n * Sets an axis of a 4x4 matrix as a vector with 3 entries\n * @param m - The matrix.\n * @param v - the axis vector\n * @param axis - The axis 0 = x, 1 = y, 2 = z;\n * @param dst - The matrix to set. If not passed a new one is created.\n * @returns The matrix with axis set.\n */\nfunction setAxis(a, v, axis, dst) {\n if (dst !== a) {\n dst = copy$2(a, dst);\n }\n const off = axis * 4;\n dst[off + 0] = v[0];\n dst[off + 1] = v[1];\n dst[off + 2] = v[2];\n return dst;\n}\n/**\n * Returns the scaling component of the matrix\n * @param m - The Matrix\n * @param dst - The vector to set. If not passed a new one is created.\n */\nfunction getScaling(m, dst) {\n dst = dst || create$4();\n const xx = m[0];\n const xy = m[1];\n const xz = m[2];\n const yx = m[4];\n const yy = m[5];\n const yz = m[6];\n const zx = m[8];\n const zy = m[9];\n const zz = m[10];\n dst[0] = Math.sqrt(xx * xx + xy * xy + xz * xz);\n dst[1] = Math.sqrt(yx * yx + yy * yy + yz * yz);\n dst[2] = Math.sqrt(zx * zx + zy * zy + zz * zz);\n return dst;\n}\n/**\n * Computes a 4-by-4 perspective transformation matrix given the angular height\n * of the frustum, the aspect ratio, and the near and far clipping planes. The\n * arguments define a frustum extending in the negative z direction. The given\n * angle is the vertical angle of the frustum, and the horizontal angle is\n * determined to produce the given aspect ratio. The arguments near and far are\n * the distances to the near and far clipping planes. Note that near and far\n * are not z coordinates, but rather they are distances along the negative\n * z-axis. The matrix generated sends the viewing frustum to the unit box.\n * We assume a unit box extending from -1 to 1 in the x and y dimensions and\n * from 0 to 1 in the z dimension.\n *\n * Note: If you pass `Infinity` for zFar then it will produce a projection matrix\n * returns -Infinity for Z when transforming coordinates with Z <= 0 and +Infinity for Z\n * otherwise.\n *\n * @param fieldOfViewYInRadians - The camera angle from top to bottom (in radians).\n * @param aspect - The aspect ratio width / height.\n * @param zNear - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param zFar - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The perspective matrix.\n */\nfunction perspective(fieldOfViewYInRadians, aspect, zNear, zFar, dst) {\n dst = dst || new MatType(16);\n const f = Math.tan(Math.PI * 0.5 - 0.5 * fieldOfViewYInRadians);\n dst[0] = f / aspect;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = f;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[11] = -1;\n dst[12] = 0;\n dst[13] = 0;\n dst[15] = 0;\n if (zFar === Infinity) {\n dst[10] = -1;\n dst[14] = -zNear;\n }\n else {\n const rangeInv = 1 / (zNear - zFar);\n dst[10] = zFar * rangeInv;\n dst[14] = zFar * zNear * rangeInv;\n }\n return dst;\n}\n/**\n * Computes a 4-by-4 orthogonal transformation matrix that transforms from\n * the given the left, right, bottom, and top dimensions to -1 +1 in x, and y\n * and 0 to +1 in z.\n * @param left - Left side of the near clipping plane viewport.\n * @param right - Right side of the near clipping plane viewport.\n * @param bottom - Bottom of the near clipping plane viewport.\n * @param top - Top of the near clipping plane viewport.\n * @param near - The depth (negative z coordinate)\n * of the near clipping plane.\n * @param far - The depth (negative z coordinate)\n * of the far clipping plane.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The orthographic projection matrix.\n */\nfunction ortho(left, right, bottom, top, near, far, dst) {\n dst = dst || new MatType(16);\n dst[0] = 2 / (right - left);\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 2 / (top - bottom);\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1 / (near - far);\n dst[11] = 0;\n dst[12] = (right + left) / (left - right);\n dst[13] = (top + bottom) / (bottom - top);\n dst[14] = near / (near - far);\n dst[15] = 1;\n return dst;\n}\n/**\n * Computes a 4-by-4 perspective transformation matrix given the left, right,\n * top, bottom, near and far clipping planes. The arguments define a frustum\n * extending in the negative z direction. The arguments near and far are the\n * distances to the near and far clipping planes. Note that near and far are not\n * z coordinates, but rather they are distances along the negative z-axis. The\n * matrix generated sends the viewing frustum to the unit box. We assume a unit\n * box extending from -1 to 1 in the x and y dimensions and from 0 to 1 in the z\n * dimension.\n * @param left - The x coordinate of the left plane of the box.\n * @param right - The x coordinate of the right plane of the box.\n * @param bottom - The y coordinate of the bottom plane of the box.\n * @param top - The y coordinate of the right plane of the box.\n * @param near - The negative z coordinate of the near plane of the box.\n * @param far - The negative z coordinate of the far plane of the box.\n * @param dst - Output matrix. If not passed a new one is created.\n * @returns The perspective projection matrix.\n */\nfunction frustum(left, right, bottom, top, near, far, dst) {\n dst = dst || new MatType(16);\n const dx = (right - left);\n const dy = (top - bottom);\n const dz = (near - far);\n dst[0] = 2 * near / dx;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 2 * near / dy;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = (left + right) / dx;\n dst[9] = (top + bottom) / dy;\n dst[10] = far / dz;\n dst[11] = -1;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = near * far / dz;\n dst[15] = 0;\n return dst;\n}\nlet xAxis;\nlet yAxis;\nlet zAxis;\n/**\n * Computes a 4-by-4 aim transformation.\n *\n * This is a matrix which positions an object aiming down positive Z.\n * toward the target.\n *\n * Note: this is **NOT** the inverse of lookAt as lookAt looks at negative Z.\n *\n * @param position - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nfunction aim(position, target, up, dst) {\n dst = dst || new MatType(16);\n xAxis = xAxis || create$4();\n yAxis = yAxis || create$4();\n zAxis = zAxis || create$4();\n normalize$2(subtract$2(target, position, zAxis), zAxis);\n normalize$2(cross(up, zAxis, xAxis), xAxis);\n normalize$2(cross(zAxis, xAxis, yAxis), yAxis);\n dst[0] = xAxis[0];\n dst[1] = xAxis[1];\n dst[2] = xAxis[2];\n dst[3] = 0;\n dst[4] = yAxis[0];\n dst[5] = yAxis[1];\n dst[6] = yAxis[2];\n dst[7] = 0;\n dst[8] = zAxis[0];\n dst[9] = zAxis[1];\n dst[10] = zAxis[2];\n dst[11] = 0;\n dst[12] = position[0];\n dst[13] = position[1];\n dst[14] = position[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Computes a 4-by-4 camera aim transformation.\n *\n * This is a matrix which positions an object aiming down negative Z.\n * toward the target.\n *\n * Note: this is the inverse of `lookAt`\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The aim matrix.\n */\nfunction cameraAim(eye, target, up, dst) {\n dst = dst || new MatType(16);\n xAxis = xAxis || create$4();\n yAxis = yAxis || create$4();\n zAxis = zAxis || create$4();\n normalize$2(subtract$2(eye, target, zAxis), zAxis);\n normalize$2(cross(up, zAxis, xAxis), xAxis);\n normalize$2(cross(zAxis, xAxis, yAxis), yAxis);\n dst[0] = xAxis[0];\n dst[1] = xAxis[1];\n dst[2] = xAxis[2];\n dst[3] = 0;\n dst[4] = yAxis[0];\n dst[5] = yAxis[1];\n dst[6] = yAxis[2];\n dst[7] = 0;\n dst[8] = zAxis[0];\n dst[9] = zAxis[1];\n dst[10] = zAxis[2];\n dst[11] = 0;\n dst[12] = eye[0];\n dst[13] = eye[1];\n dst[14] = eye[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Computes a 4-by-4 view transformation.\n *\n * This is a view matrix which transforms all other objects\n * to be in the space of the view defined by the parameters.\n *\n * @param eye - The position of the object.\n * @param target - The position meant to be aimed at.\n * @param up - A vector pointing up.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The look-at matrix.\n */\nfunction lookAt(eye, target, up, dst) {\n dst = dst || new MatType(16);\n xAxis = xAxis || create$4();\n yAxis = yAxis || create$4();\n zAxis = zAxis || create$4();\n normalize$2(subtract$2(eye, target, zAxis), zAxis);\n normalize$2(cross(up, zAxis, xAxis), xAxis);\n normalize$2(cross(zAxis, xAxis, yAxis), yAxis);\n dst[0] = xAxis[0];\n dst[1] = yAxis[0];\n dst[2] = zAxis[0];\n dst[3] = 0;\n dst[4] = xAxis[1];\n dst[5] = yAxis[1];\n dst[6] = zAxis[1];\n dst[7] = 0;\n dst[8] = xAxis[2];\n dst[9] = yAxis[2];\n dst[10] = zAxis[2];\n dst[11] = 0;\n dst[12] = -(xAxis[0] * eye[0] + xAxis[1] * eye[1] + xAxis[2] * eye[2]);\n dst[13] = -(yAxis[0] * eye[0] + yAxis[1] * eye[1] + yAxis[2] * eye[2]);\n dst[14] = -(zAxis[0] * eye[0] + zAxis[1] * eye[1] + zAxis[2] * eye[2]);\n dst[15] = 1;\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which translates by the given vector v.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translation matrix.\n */\nfunction translation(v, dst) {\n dst = dst || new MatType(16);\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n dst[11] = 0;\n dst[12] = v[0];\n dst[13] = v[1];\n dst[14] = v[2];\n dst[15] = 1;\n return dst;\n}\n/**\n * Translates the given 4-by-4 matrix by the given vector v.\n * @param m - The matrix.\n * @param v - The vector by\n * which to translate.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The translated matrix.\n */\nfunction translate(m, v, dst) {\n dst = dst || new MatType(16);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const m30 = m[3 * 4 + 0];\n const m31 = m[3 * 4 + 1];\n const m32 = m[3 * 4 + 2];\n const m33 = m[3 * 4 + 3];\n if (m !== dst) {\n dst[0] = m00;\n dst[1] = m01;\n dst[2] = m02;\n dst[3] = m03;\n dst[4] = m10;\n dst[5] = m11;\n dst[6] = m12;\n dst[7] = m13;\n dst[8] = m20;\n dst[9] = m21;\n dst[10] = m22;\n dst[11] = m23;\n }\n dst[12] = m00 * v0 + m10 * v1 + m20 * v2 + m30;\n dst[13] = m01 * v0 + m11 * v1 + m21 * v2 + m31;\n dst[14] = m02 * v0 + m12 * v1 + m22 * v2 + m32;\n dst[15] = m03 * v0 + m13 * v1 + m23 * v2 + m33;\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the x-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotationX(angleInRadians, dst) {\n dst = dst || new MatType(16);\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = c;\n dst[6] = s;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = -s;\n dst[10] = c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the x-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotateX$1(m, angleInRadians, dst) {\n dst = dst || new MatType(16);\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[4] = c * m10 + s * m20;\n dst[5] = c * m11 + s * m21;\n dst[6] = c * m12 + s * m22;\n dst[7] = c * m13 + s * m23;\n dst[8] = c * m20 - s * m10;\n dst[9] = c * m21 - s * m11;\n dst[10] = c * m22 - s * m12;\n dst[11] = c * m23 - s * m13;\n if (m !== dst) {\n dst[0] = m[0];\n dst[1] = m[1];\n dst[2] = m[2];\n dst[3] = m[3];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the y-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotationY(angleInRadians, dst) {\n dst = dst || new MatType(16);\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c;\n dst[1] = 0;\n dst[2] = -s;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = 1;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = s;\n dst[9] = 0;\n dst[10] = c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the y-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotateY$1(m, angleInRadians, dst) {\n dst = dst || new MatType(16);\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m20 = m[2 * 4 + 0];\n const m21 = m[2 * 4 + 1];\n const m22 = m[2 * 4 + 2];\n const m23 = m[2 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c * m00 - s * m20;\n dst[1] = c * m01 - s * m21;\n dst[2] = c * m02 - s * m22;\n dst[3] = c * m03 - s * m23;\n dst[8] = c * m20 + s * m00;\n dst[9] = c * m21 + s * m01;\n dst[10] = c * m22 + s * m02;\n dst[11] = c * m23 + s * m03;\n if (m !== dst) {\n dst[4] = m[4];\n dst[5] = m[5];\n dst[6] = m[6];\n dst[7] = m[7];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the z-axis by the given angle.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotation matrix.\n */\nfunction rotationZ(angleInRadians, dst) {\n dst = dst || new MatType(16);\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c;\n dst[1] = s;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = -s;\n dst[5] = c;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = 1;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the z-axis by the given\n * angle.\n * @param m - The matrix.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction rotateZ$1(m, angleInRadians, dst) {\n dst = dst || new MatType(16);\n const m00 = m[0 * 4 + 0];\n const m01 = m[0 * 4 + 1];\n const m02 = m[0 * 4 + 2];\n const m03 = m[0 * 4 + 3];\n const m10 = m[1 * 4 + 0];\n const m11 = m[1 * 4 + 1];\n const m12 = m[1 * 4 + 2];\n const m13 = m[1 * 4 + 3];\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n dst[0] = c * m00 + s * m10;\n dst[1] = c * m01 + s * m11;\n dst[2] = c * m02 + s * m12;\n dst[3] = c * m03 + s * m13;\n dst[4] = c * m10 - s * m00;\n dst[5] = c * m11 - s * m01;\n dst[6] = c * m12 - s * m02;\n dst[7] = c * m13 - s * m03;\n if (m !== dst) {\n dst[8] = m[8];\n dst[9] = m[9];\n dst[10] = m[10];\n dst[11] = m[11];\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nfunction axisRotation(axis, angleInRadians, dst) {\n dst = dst || new MatType(16);\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n dst[0] = xx + (1 - xx) * c;\n dst[1] = x * y * oneMinusCosine + z * s;\n dst[2] = x * z * oneMinusCosine - y * s;\n dst[3] = 0;\n dst[4] = x * y * oneMinusCosine - z * s;\n dst[5] = yy + (1 - yy) * c;\n dst[6] = y * z * oneMinusCosine + x * s;\n dst[7] = 0;\n dst[8] = x * z * oneMinusCosine + y * s;\n dst[9] = y * z * oneMinusCosine - x * s;\n dst[10] = zz + (1 - zz) * c;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which rotates around the given axis by the given\n * angle. (same as axisRotation)\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns A matrix which rotates angle radians\n * around the axis.\n */\nconst rotation = axisRotation;\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle.\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nfunction axisRotate(m, axis, angleInRadians, dst) {\n dst = dst || new MatType(16);\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n const n = Math.sqrt(x * x + y * y + z * z);\n x /= n;\n y /= n;\n z /= n;\n const xx = x * x;\n const yy = y * y;\n const zz = z * z;\n const c = Math.cos(angleInRadians);\n const s = Math.sin(angleInRadians);\n const oneMinusCosine = 1 - c;\n const r00 = xx + (1 - xx) * c;\n const r01 = x * y * oneMinusCosine + z * s;\n const r02 = x * z * oneMinusCosine - y * s;\n const r10 = x * y * oneMinusCosine - z * s;\n const r11 = yy + (1 - yy) * c;\n const r12 = y * z * oneMinusCosine + x * s;\n const r20 = x * z * oneMinusCosine + y * s;\n const r21 = y * z * oneMinusCosine - x * s;\n const r22 = zz + (1 - zz) * c;\n const m00 = m[0];\n const m01 = m[1];\n const m02 = m[2];\n const m03 = m[3];\n const m10 = m[4];\n const m11 = m[5];\n const m12 = m[6];\n const m13 = m[7];\n const m20 = m[8];\n const m21 = m[9];\n const m22 = m[10];\n const m23 = m[11];\n dst[0] = r00 * m00 + r01 * m10 + r02 * m20;\n dst[1] = r00 * m01 + r01 * m11 + r02 * m21;\n dst[2] = r00 * m02 + r01 * m12 + r02 * m22;\n dst[3] = r00 * m03 + r01 * m13 + r02 * m23;\n dst[4] = r10 * m00 + r11 * m10 + r12 * m20;\n dst[5] = r10 * m01 + r11 * m11 + r12 * m21;\n dst[6] = r10 * m02 + r11 * m12 + r12 * m22;\n dst[7] = r10 * m03 + r11 * m13 + r12 * m23;\n dst[8] = r20 * m00 + r21 * m10 + r22 * m20;\n dst[9] = r20 * m01 + r21 * m11 + r22 * m21;\n dst[10] = r20 * m02 + r21 * m12 + r22 * m22;\n dst[11] = r20 * m03 + r21 * m13 + r22 * m23;\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Rotates the given 4-by-4 matrix around the given axis by the\n * given angle. (same as rotate)\n * @param m - The matrix.\n * @param axis - The axis\n * about which to rotate.\n * @param angleInRadians - The angle by which to rotate (in radians).\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The rotated matrix.\n */\nconst rotate = axisRotate;\n/**\n * Creates a 4-by-4 matrix which scales in each dimension by an amount given by\n * the corresponding entry in the given vector; assumes the vector has three\n * entries.\n * @param v - A vector of\n * three entries specifying the factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction scaling(v, dst) {\n dst = dst || new MatType(16);\n dst[0] = v[0];\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = v[1];\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = v[2];\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Scales the given 4-by-4 matrix in each dimension by an amount\n * given by the corresponding entry in the given vector; assumes the vector has\n * three entries.\n * @param m - The matrix to be modified.\n * @param v - A vector of three entries specifying the\n * factor by which to scale in each dimension.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction scale$2(m, v, dst) {\n dst = dst || new MatType(16);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n dst[0] = v0 * m[0 * 4 + 0];\n dst[1] = v0 * m[0 * 4 + 1];\n dst[2] = v0 * m[0 * 4 + 2];\n dst[3] = v0 * m[0 * 4 + 3];\n dst[4] = v1 * m[1 * 4 + 0];\n dst[5] = v1 * m[1 * 4 + 1];\n dst[6] = v1 * m[1 * 4 + 2];\n dst[7] = v1 * m[1 * 4 + 3];\n dst[8] = v2 * m[2 * 4 + 0];\n dst[9] = v2 * m[2 * 4 + 1];\n dst[10] = v2 * m[2 * 4 + 2];\n dst[11] = v2 * m[2 * 4 + 3];\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n/**\n * Creates a 4-by-4 matrix which scales a uniform amount in each dimension.\n * @param s - the amount to scale\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaling matrix.\n */\nfunction uniformScaling(s, dst) {\n dst = dst || new MatType(16);\n dst[0] = s;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n dst[4] = 0;\n dst[5] = s;\n dst[6] = 0;\n dst[7] = 0;\n dst[8] = 0;\n dst[9] = 0;\n dst[10] = s;\n dst[11] = 0;\n dst[12] = 0;\n dst[13] = 0;\n dst[14] = 0;\n dst[15] = 1;\n return dst;\n}\n/**\n * Scales the given 4-by-4 matrix in each dimension by a uniform scale.\n * @param m - The matrix to be modified.\n * @param s - The amount to scale.\n * @param dst - matrix to hold result. If not passed a new one is created.\n * @returns The scaled matrix.\n */\nfunction uniformScale(m, s, dst) {\n dst = dst || new MatType(16);\n dst[0] = s * m[0 * 4 + 0];\n dst[1] = s * m[0 * 4 + 1];\n dst[2] = s * m[0 * 4 + 2];\n dst[3] = s * m[0 * 4 + 3];\n dst[4] = s * m[1 * 4 + 0];\n dst[5] = s * m[1 * 4 + 1];\n dst[6] = s * m[1 * 4 + 2];\n dst[7] = s * m[1 * 4 + 3];\n dst[8] = s * m[2 * 4 + 0];\n dst[9] = s * m[2 * 4 + 1];\n dst[10] = s * m[2 * 4 + 2];\n dst[11] = s * m[2 * 4 + 3];\n if (m !== dst) {\n dst[12] = m[12];\n dst[13] = m[13];\n dst[14] = m[14];\n dst[15] = m[15];\n }\n return dst;\n}\n\nvar mat4Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setDefaultType: setDefaultType$3,\n create: create$2,\n set: set$2,\n fromMat3: fromMat3,\n fromQuat: fromQuat,\n negate: negate$1,\n copy: copy$2,\n clone: clone$2,\n equalsApproximately: equalsApproximately$2,\n equals: equals$2,\n identity: identity$1,\n transpose: transpose,\n inverse: inverse$2,\n determinant: determinant,\n invert: invert$1,\n multiply: multiply$2,\n mul: mul$2,\n setTranslation: setTranslation,\n getTranslation: getTranslation,\n getAxis: getAxis,\n setAxis: setAxis,\n getScaling: getScaling,\n perspective: perspective,\n ortho: ortho,\n frustum: frustum,\n aim: aim,\n cameraAim: cameraAim,\n lookAt: lookAt,\n translation: translation,\n translate: translate,\n rotationX: rotationX,\n rotateX: rotateX$1,\n rotationY: rotationY,\n rotateY: rotateY$1,\n rotationZ: rotationZ,\n rotateZ: rotateZ$1,\n axisRotation: axisRotation,\n rotation: rotation,\n axisRotate: axisRotate,\n rotate: rotate,\n scaling: scaling,\n scale: scale$2,\n uniformScaling: uniformScaling,\n uniformScale: uniformScale\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Quat4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Quat4`. In other words you can do this\n *\n * const v = quat4.cross(v1, v2); // Creates a new Quat4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = quat4.create();\n * quat4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * quat4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet QuatType = Float32Array;\n/**\n * Sets the type this library creates for a Quat4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Quat4\n */\nfunction setDefaultType$2(ctor) {\n const oldType = QuatType;\n QuatType = ctor;\n return oldType;\n}\n/**\n * Creates a quat4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nfunction create$1(x, y, z, w) {\n const dst = new QuatType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a Quat; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nconst fromValues$1 = create$1;\n/**\n * Sets the values of a Quat\n * Also see {@link quat.create} and {@link quat.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set$1(x, y, z, w, dst) {\n dst = dst || new QuatType(4);\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n return dst;\n}\n/**\n * Sets a quaternion from the given angle and axis,\n * then returns it.\n *\n * @param axis - the axis to rotate around\n * @param angleInRadians - the angle\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The quaternion that represents the given axis and angle\n **/\nfunction fromAxisAngle(axis, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const s = Math.sin(halfAngle);\n dst[0] = s * axis[0];\n dst[1] = s * axis[1];\n dst[2] = s * axis[2];\n dst[3] = Math.cos(halfAngle);\n return dst;\n}\n/**\n * Gets the rotation axis and angle\n * @param q - quaternion to compute from\n * @param dst - Vec3 to hold result. If not passed in a new one is created.\n * @return angle and axis\n */\nfunction toAxisAngle(q, dst) {\n dst = dst || create$4(4);\n const angle = Math.acos(q[3]) * 2;\n const s = Math.sin(angle * 0.5);\n if (s > EPSILON) {\n dst[0] = q[0] / s;\n dst[1] = q[1] / s;\n dst[2] = q[2] / s;\n }\n else {\n dst[0] = 1;\n dst[1] = 0;\n dst[2] = 0;\n }\n return { angle, axis: dst };\n}\n/**\n * Returns the angle in degrees between two rotations a and b.\n * @param a - quaternion a\n * @param b - quaternion b\n * @return angle in radians between the two quaternions\n */\nfunction angle(a, b) {\n const d = dot$1(a, b);\n return Math.acos(2 * d * d - 1);\n}\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction multiply$1(a, b, dst) {\n dst = dst || new QuatType(4);\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const bw = b[3];\n dst[0] = ax * bw + aw * bx + ay * bz - az * by;\n dst[1] = ay * bw + aw * by + az * bx - ax * bz;\n dst[2] = az * bw + aw * bz + ax * by - ay * bx;\n dst[3] = aw * bw - ax * bx - ay * by - az * bz;\n return dst;\n}\n/**\n * Multiplies two quaternions\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nconst mul$1 = multiply$1;\n/**\n * Rotates the given quaternion around the X axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction rotateX(q, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const bx = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n dst[0] = qx * bw + qw * bx;\n dst[1] = qy * bw + qz * bx;\n dst[2] = qz * bw - qy * bx;\n dst[3] = qw * bw - qx * bx;\n return dst;\n}\n/**\n * Rotates the given quaternion around the Y axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction rotateY(q, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const by = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n dst[0] = qx * bw - qz * by;\n dst[1] = qy * bw + qw * by;\n dst[2] = qz * bw + qx * by;\n dst[3] = qw * bw - qy * by;\n return dst;\n}\n/**\n * Rotates the given quaternion around the Z axis by the given angle.\n * @param q - quaternion to rotate\n * @param angleInRadians - The angle by which to rotate\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction rotateZ(q, angleInRadians, dst) {\n dst = dst || new QuatType(4);\n const halfAngle = angleInRadians * 0.5;\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n const bz = Math.sin(halfAngle);\n const bw = Math.cos(halfAngle);\n dst[0] = qx * bw + qy * bz;\n dst[1] = qy * bw - qx * bz;\n dst[2] = qz * bw + qw * bz;\n dst[3] = qw * bw - qz * bz;\n return dst;\n}\n/**\n * Spherically linear interpolate between two quaternions\n *\n * @param a - starting value\n * @param b - ending value\n * @param t - value where 0 = a and 1 = b\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the result of a * b\n */\nfunction slerp(a, b, t, dst) {\n dst = dst || new QuatType(4);\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n let bx = b[0];\n let by = b[1];\n let bz = b[2];\n let bw = b[3];\n let cosOmega = ax * bx + ay * by + az * bz + aw * bw;\n if (cosOmega < 0) {\n cosOmega = -cosOmega;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n let scale0;\n let scale1;\n if (1.0 - cosOmega > EPSILON) {\n const omega = Math.acos(cosOmega);\n const sinOmega = Math.sin(omega);\n scale0 = Math.sin((1 - t) * omega) / sinOmega;\n scale1 = Math.sin(t * omega) / sinOmega;\n }\n else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n dst[0] = scale0 * ax + scale1 * bx;\n dst[1] = scale0 * ay + scale1 * by;\n dst[2] = scale0 * az + scale1 * bz;\n dst[3] = scale0 * aw + scale1 * bw;\n return dst;\n}\n/**\n * Compute the inverse of a quaternion\n *\n * @param q - quaternion to compute the inverse of\n * @returns A quaternion that is the result of a * b\n */\nfunction inverse$1(q, dst) {\n dst = dst || new QuatType(4);\n const a0 = q[0];\n const a1 = q[1];\n const a2 = q[2];\n const a3 = q[3];\n const dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n const invDot = dot ? 1 / dot : 0;\n dst[0] = -a0 * invDot;\n dst[1] = -a1 * invDot;\n dst[2] = -a2 * invDot;\n dst[3] = a3 * invDot;\n return dst;\n}\n/**\n * Compute the conjugate of a quaternion\n * For quaternions with a magnitude of 1 (a unit quaternion)\n * this returns the same as the inverse but is faster to calculate.\n *\n * @param q - quaternion to compute the conjugate of.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The conjugate of q\n */\nfunction conjugate(q, dst) {\n dst = dst || new QuatType(4);\n dst[0] = -q[0];\n dst[1] = -q[1];\n dst[2] = -q[2];\n dst[3] = q[3];\n return dst;\n}\n/**\n * Creates a quaternion from the given rotation matrix.\n *\n * The created quaternion is not normalized.\n *\n * @param m - rotation matrix\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nfunction fromMat(m, dst) {\n dst = dst || new QuatType(4);\n /*\n 0 1 2\n 3 4 5\n 6 7 8\n \n 0 1 2\n 4 5 6\n 8 9 10\n */\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n const trace = m[0] + m[5] + m[10];\n if (trace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n const root = Math.sqrt(trace + 1); // 2w\n dst[3] = 0.5 * root;\n const invRoot = 0.5 / root; // 1/(4w)\n dst[0] = (m[6] - m[9]) * invRoot;\n dst[1] = (m[8] - m[2]) * invRoot;\n dst[2] = (m[1] - m[4]) * invRoot;\n }\n else {\n // |w| <= 1/2\n let i = 0;\n if (m[5] > m[0]) {\n i = 1;\n }\n if (m[10] > m[i * 4 + i]) {\n i = 2;\n }\n const j = (i + 1) % 3;\n const k = (i + 2) % 3;\n const root = Math.sqrt(m[i * 4 + i] - m[j * 4 + j] - m[k * 4 + k] + 1.0);\n dst[i] = 0.5 * root;\n const invRoot = 0.5 / root;\n dst[3] = (m[j * 4 + k] - m[k * 4 + j]) * invRoot;\n dst[j] = (m[j * 4 + i] + m[i * 4 + j]) * invRoot;\n dst[k] = (m[k * 4 + i] + m[i * 4 + k]) * invRoot;\n }\n return dst;\n}\n/**\n * Creates a quaternion from the given euler angle x, y, z using the provided intrinsic order for the conversion.\n *\n * @param xAngleInRadians - angle to rotate around X axis in radians.\n * @param yAngleInRadians - angle to rotate around Y axis in radians.\n * @param zAngleInRadians - angle to rotate around Z axis in radians.\n * @param order - order to apply euler angles\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion representing the same rotation as the euler angles applied in the given order\n */\nfunction fromEuler(xAngleInRadians, yAngleInRadians, zAngleInRadians, order, dst) {\n dst = dst || new QuatType(4);\n const xHalfAngle = xAngleInRadians * 0.5;\n const yHalfAngle = yAngleInRadians * 0.5;\n const zHalfAngle = zAngleInRadians * 0.5;\n const sx = Math.sin(xHalfAngle);\n const cx = Math.cos(xHalfAngle);\n const sy = Math.sin(yHalfAngle);\n const cy = Math.cos(yHalfAngle);\n const sz = Math.sin(zHalfAngle);\n const cz = Math.cos(zHalfAngle);\n switch (order) {\n case 'xyz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'xzy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n case 'yxz':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz - sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n case 'yzx':\n dst[0] = sx * cy * cz + cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'zxy':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz + sx * sy * cz;\n dst[3] = cx * cy * cz - sx * sy * sz;\n break;\n case 'zyx':\n dst[0] = sx * cy * cz - cx * sy * sz;\n dst[1] = cx * sy * cz + sx * cy * sz;\n dst[2] = cx * cy * sz - sx * sy * cz;\n dst[3] = cx * cy * cz + sx * sy * sz;\n break;\n default:\n throw new Error(`Unknown rotation order: ${order}`);\n }\n return dst;\n}\n/**\n * Copies a quaternion. (same as {@link quat.clone})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is a copy of q\n */\nfunction copy$1(q, dst) {\n dst = dst || new QuatType(4);\n dst[0] = q[0];\n dst[1] = q[1];\n dst[2] = q[2];\n dst[3] = q[3];\n return dst;\n}\n/**\n * Clones a quaternion. (same as {@link quat.copy})\n * Also see {@link quat.create} and {@link quat.set}\n * @param q - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A copy of q.\n */\nconst clone$1 = copy$1;\n/**\n * Adds two quaternions; assumes a and b have the same dimension.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the sum of a and b.\n */\nfunction add$1(a, b, dst) {\n dst = dst || new QuatType(4);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n return dst;\n}\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nfunction subtract$1(a, b, dst) {\n dst = dst || new QuatType(4);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n return dst;\n}\n/**\n * Subtracts two quaternions.\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns A quaternion that is the difference of a and b.\n */\nconst sub$1 = subtract$1;\n/**\n * Multiplies a quaternion by a scalar.\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nfunction mulScalar$1(v, k, dst) {\n dst = dst || new QuatType(4);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n return dst;\n}\n/**\n * Multiplies a quaternion by a scalar. (same as mulScalar)\n * @param v - The quaternion.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nconst scale$1 = mulScalar$1;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The scaled quaternion.\n */\nfunction divScalar$1(v, k, dst) {\n dst = dst || new QuatType(4);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n return dst;\n}\n/**\n * Computes the dot product of two quaternions\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns dot product\n */\nfunction dot$1(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n/**\n * Performs linear interpolation on two quaternions.\n * Given quaternions a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @param t - Interpolation coefficient.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp$1(a, b, t, dst) {\n dst = dst || new QuatType(4);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n return dst;\n}\n/**\n * Computes the length of quaternion\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nfunction length$1(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n/**\n * Computes the length of quaternion (same as length)\n * @param v - quaternion.\n * @returns length of quaternion.\n */\nconst len$1 = length$1;\n/**\n * Computes the square of the length of quaternion\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nfunction lengthSq$1(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n/**\n * Computes the square of the length of quaternion (same as lengthSq)\n * @param v - quaternion.\n * @returns square of the length of quaternion.\n */\nconst lenSq$1 = lengthSq$1;\n/**\n * Divides a quaternion by its Euclidean length and returns the quotient.\n * @param v - The quaternion.\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns The normalized quaternion.\n */\nfunction normalize$1(v, dst) {\n dst = dst || new QuatType(4);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n return dst;\n}\n/**\n * Check if 2 quaternions are approximately equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are approximately equal\n */\nfunction equalsApproximately$1(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON;\n}\n/**\n * Check if 2 quaternions are exactly equal\n * @param a - Operand quaternion.\n * @param b - Operand quaternion.\n * @returns true if quaternions are exactly equal\n */\nfunction equals$1(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Creates an identity quaternion\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns an identity quaternion\n */\nfunction identity(dst) {\n dst = dst || new QuatType(4);\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n return dst;\n}\nlet tempVec3;\nlet xUnitVec3;\nlet yUnitVec3;\n/**\n * Computes a quaternion to represent the shortest rotation from one vector to another.\n *\n * @param aUnit - the start vector\n * @param bUnit - the end vector\n * @param dst - quaternion to hold result. If not passed in a new one is created.\n * @returns the result\n */\nfunction rotationTo(aUnit, bUnit, dst) {\n dst = dst || new QuatType(4);\n tempVec3 = tempVec3 || create$4();\n xUnitVec3 = xUnitVec3 || create$4(1, 0, 0);\n yUnitVec3 = yUnitVec3 || create$4(0, 1, 0);\n const dot = dot$2(aUnit, bUnit);\n if (dot < -0.999999) {\n cross(xUnitVec3, aUnit, tempVec3);\n if (len$2(tempVec3) < 0.000001) {\n cross(yUnitVec3, aUnit, tempVec3);\n }\n normalize$2(tempVec3, tempVec3);\n fromAxisAngle(tempVec3, Math.PI, dst);\n return dst;\n }\n else if (dot > 0.999999) {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 1;\n return dst;\n }\n else {\n cross(aUnit, bUnit, tempVec3);\n dst[0] = tempVec3[0];\n dst[1] = tempVec3[1];\n dst[2] = tempVec3[2];\n dst[3] = 1 + dot;\n return normalize$1(dst, dst);\n }\n}\nlet tempQuat1;\nlet tempQuat2;\n/**\n * Performs a spherical linear interpolation with two control points\n *\n * @param a - the first quaternion\n * @param b - the second quaternion\n * @param c - the third quaternion\n * @param d - the fourth quaternion\n * @param t - Interpolation coefficient 0 to 1\n * @returns result\n */\nfunction sqlerp(a, b, c, d, t, dst) {\n dst = dst || new QuatType(4);\n tempQuat1 = tempQuat1 || new QuatType(4);\n tempQuat2 = tempQuat2 || new QuatType(4);\n slerp(a, d, t, tempQuat1);\n slerp(b, c, t, tempQuat2);\n slerp(tempQuat1, tempQuat2, 2 * t * (1 - t), dst);\n return dst;\n}\n\nvar quatImpl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create$1,\n setDefaultType: setDefaultType$2,\n fromValues: fromValues$1,\n set: set$1,\n fromAxisAngle: fromAxisAngle,\n toAxisAngle: toAxisAngle,\n angle: angle,\n multiply: multiply$1,\n mul: mul$1,\n rotateX: rotateX,\n rotateY: rotateY,\n rotateZ: rotateZ,\n slerp: slerp,\n inverse: inverse$1,\n conjugate: conjugate,\n fromMat: fromMat,\n fromEuler: fromEuler,\n copy: copy$1,\n clone: clone$1,\n add: add$1,\n subtract: subtract$1,\n sub: sub$1,\n mulScalar: mulScalar$1,\n scale: scale$1,\n divScalar: divScalar$1,\n dot: dot$1,\n lerp: lerp$1,\n length: length$1,\n len: len$1,\n lengthSq: lengthSq$1,\n lenSq: lenSq$1,\n normalize: normalize$1,\n equalsApproximately: equalsApproximately$1,\n equals: equals$1,\n identity: identity,\n rotationTo: rotationTo,\n sqlerp: sqlerp\n});\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n *\n * Vec4 math functions.\n *\n * Almost all functions take an optional `dst` argument. If it is not passed in the\n * functions will create a new `Vec4`. In other words you can do this\n *\n * const v = vec4.cross(v1, v2); // Creates a new Vec4 with the cross product of v1 x v2.\n *\n * or\n *\n * const v = vec4.create();\n * vec4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v\n *\n * The first style is often easier but depending on where it's used it generates garbage where\n * as there is almost never allocation with the second style.\n *\n * It is always safe to pass any vector as the destination. So for example\n *\n * vec4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1\n *\n */\nlet VecType = Float32Array;\n/**\n * Sets the type this library creates for a Vec4\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n * @returns previous constructor for Vec4\n */\nfunction setDefaultType$1(ctor) {\n const oldType = VecType;\n VecType = ctor;\n return oldType;\n}\n/**\n * Creates a vec4; may be called with x, y, z to set initial values.\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param w - Initial w value.\n * @returns the created vector\n */\nfunction create(x, y, z, w) {\n const dst = new VecType(4);\n if (x !== undefined) {\n dst[0] = x;\n if (y !== undefined) {\n dst[1] = y;\n if (z !== undefined) {\n dst[2] = z;\n if (w !== undefined) {\n dst[3] = w;\n }\n }\n }\n }\n return dst;\n}\n\n/*\n * Copyright 2022 Gregg Tavares\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n/**\n * Creates a vec4; may be called with x, y, z to set initial values. (same as create)\n * @param x - Initial x value.\n * @param y - Initial y value.\n * @param z - Initial z value.\n * @param z - Initial w value.\n * @returns the created vector\n */\nconst fromValues = create;\n/**\n * Sets the values of a Vec4\n * Also see {@link vec4.create} and {@link vec4.copy}\n *\n * @param x first value\n * @param y second value\n * @param z third value\n * @param w fourth value\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector with its elements set.\n */\nfunction set(x, y, z, w, dst) {\n dst = dst || new VecType(4);\n dst[0] = x;\n dst[1] = y;\n dst[2] = z;\n dst[3] = w;\n return dst;\n}\n/**\n * Applies Math.ceil to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the ceil of each element of v.\n */\nfunction ceil(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.ceil(v[0]);\n dst[1] = Math.ceil(v[1]);\n dst[2] = Math.ceil(v[2]);\n dst[3] = Math.ceil(v[3]);\n return dst;\n}\n/**\n * Applies Math.floor to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the floor of each element of v.\n */\nfunction floor(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.floor(v[0]);\n dst[1] = Math.floor(v[1]);\n dst[2] = Math.floor(v[2]);\n dst[3] = Math.floor(v[3]);\n return dst;\n}\n/**\n * Applies Math.round to each element of vector\n * @param v - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the round of each element of v.\n */\nfunction round(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.round(v[0]);\n dst[1] = Math.round(v[1]);\n dst[2] = Math.round(v[2]);\n dst[3] = Math.round(v[3]);\n return dst;\n}\n/**\n * Clamp each element of vector between min and max\n * @param v - Operand vector.\n * @param max - Min value, default 0\n * @param min - Max value, default 1\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that the clamped value of each element of v.\n */\nfunction clamp(v, min = 0, max = 1, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.min(max, Math.max(min, v[0]));\n dst[1] = Math.min(max, Math.max(min, v[1]));\n dst[2] = Math.min(max, Math.max(min, v[2]));\n dst[3] = Math.min(max, Math.max(min, v[3]));\n return dst;\n}\n/**\n * Adds two vectors; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a and b.\n */\nfunction add(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + b[0];\n dst[1] = a[1] + b[1];\n dst[2] = a[2] + b[2];\n dst[3] = a[3] + b[3];\n return dst;\n}\n/**\n * Adds two vectors, scaling the 2nd; assumes a and b have the same dimension.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param scale - Amount to scale b\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the sum of a + b * scale.\n */\nfunction addScaled(a, b, scale, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + b[0] * scale;\n dst[1] = a[1] + b[1] * scale;\n dst[2] = a[2] + b[2] * scale;\n dst[3] = a[3] + b[3] * scale;\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nfunction subtract(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] - b[0];\n dst[1] = a[1] - b[1];\n dst[2] = a[2] - b[2];\n dst[3] = a[3] - b[3];\n return dst;\n}\n/**\n * Subtracts two vectors.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A vector that is the difference of a and b.\n */\nconst sub = subtract;\n/**\n * Check if 2 vectors are approximately equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are approximately equal\n */\nfunction equalsApproximately(a, b) {\n return Math.abs(a[0] - b[0]) < EPSILON &&\n Math.abs(a[1] - b[1]) < EPSILON &&\n Math.abs(a[2] - b[2]) < EPSILON &&\n Math.abs(a[3] - b[3]) < EPSILON;\n}\n/**\n * Check if 2 vectors are exactly equal\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns true if vectors are exactly equal\n */\nfunction equals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficient.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The linear interpolated result.\n */\nfunction lerp(a, b, t, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + t * (b[0] - a[0]);\n dst[1] = a[1] + t * (b[1] - a[1]);\n dst[2] = a[2] + t * (b[2] - a[2]);\n dst[3] = a[3] + t * (b[3] - a[3]);\n return dst;\n}\n/**\n * Performs linear interpolation on two vectors.\n * Given vectors a and b and interpolation coefficient vector t, returns\n * a + t * (b - a).\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param t - Interpolation coefficients vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns the linear interpolated result.\n */\nfunction lerpV(a, b, t, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] + t[0] * (b[0] - a[0]);\n dst[1] = a[1] + t[1] * (b[1] - a[1]);\n dst[2] = a[2] + t[2] * (b[2] - a[2]);\n dst[3] = a[3] + t[3] * (b[3] - a[3]);\n return dst;\n}\n/**\n * Return max values of two vectors.\n * Given vectors a and b returns\n * [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The max components vector.\n */\nfunction max(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.max(a[0], b[0]);\n dst[1] = Math.max(a[1], b[1]);\n dst[2] = Math.max(a[2], b[2]);\n dst[3] = Math.max(a[3], b[3]);\n return dst;\n}\n/**\n * Return min values of two vectors.\n * Given vectors a and b returns\n * [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])].\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The min components vector.\n */\nfunction min(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = Math.min(a[0], b[0]);\n dst[1] = Math.min(a[1], b[1]);\n dst[2] = Math.min(a[2], b[2]);\n dst[3] = Math.min(a[3], b[3]);\n return dst;\n}\n/**\n * Multiplies a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction mulScalar(v, k, dst) {\n dst = dst || new VecType(4);\n dst[0] = v[0] * k;\n dst[1] = v[1] * k;\n dst[2] = v[2] * k;\n dst[3] = v[3] * k;\n return dst;\n}\n/**\n * Multiplies a vector by a scalar. (same as mulScalar)\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nconst scale = mulScalar;\n/**\n * Divides a vector by a scalar.\n * @param v - The vector.\n * @param k - The scalar.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The scaled vector.\n */\nfunction divScalar(v, k, dst) {\n dst = dst || new VecType(4);\n dst[0] = v[0] / k;\n dst[1] = v[1] / k;\n dst[2] = v[2] / k;\n dst[3] = v[3] / k;\n return dst;\n}\n/**\n * Inverse a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nfunction inverse(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = 1 / v[0];\n dst[1] = 1 / v[1];\n dst[2] = 1 / v[2];\n dst[3] = 1 / v[3];\n return dst;\n}\n/**\n * Invert a vector. (same as inverse)\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The inverted vector.\n */\nconst invert = inverse;\n/**\n * Computes the dot product of two vectors\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @returns dot product\n */\nfunction dot(a, b) {\n return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]) + (a[3] * b[3]);\n}\n/**\n * Computes the length of vector\n * @param v - vector.\n * @returns length of vector.\n */\nfunction length(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n}\n/**\n * Computes the length of vector (same as length)\n * @param v - vector.\n * @returns length of vector.\n */\nconst len = length;\n/**\n * Computes the square of the length of vector\n * @param v - vector.\n * @returns square of the length of vector.\n */\nfunction lengthSq(v) {\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n return v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3;\n}\n/**\n * Computes the square of the length of vector (same as lengthSq)\n * @param v - vector.\n * @returns square of the length of vector.\n */\nconst lenSq = lengthSq;\n/**\n * Computes the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nfunction distance(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return Math.sqrt(dx * dx + dy * dy + dz * dz + dw * dw);\n}\n/**\n * Computes the distance between 2 points (same as distance)\n * @param a - vector.\n * @param b - vector.\n * @returns distance between a and b\n */\nconst dist = distance;\n/**\n * Computes the square of the distance between 2 points\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nfunction distanceSq(a, b) {\n const dx = a[0] - b[0];\n const dy = a[1] - b[1];\n const dz = a[2] - b[2];\n const dw = a[3] - b[3];\n return dx * dx + dy * dy + dz * dz + dw * dw;\n}\n/**\n * Computes the square of the distance between 2 points (same as distanceSq)\n * @param a - vector.\n * @param b - vector.\n * @returns square of the distance between a and b\n */\nconst distSq = distanceSq;\n/**\n * Divides a vector by its Euclidean length and returns the quotient.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The normalized vector.\n */\nfunction normalize(v, dst) {\n dst = dst || new VecType(4);\n const v0 = v[0];\n const v1 = v[1];\n const v2 = v[2];\n const v3 = v[3];\n const len = Math.sqrt(v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3);\n if (len > 0.00001) {\n dst[0] = v0 / len;\n dst[1] = v1 / len;\n dst[2] = v2 / len;\n dst[3] = v3 / len;\n }\n else {\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n }\n return dst;\n}\n/**\n * Negates a vector.\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns -v.\n */\nfunction negate(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = -v[0];\n dst[1] = -v[1];\n dst[2] = -v[2];\n dst[3] = -v[3];\n return dst;\n}\n/**\n * Copies a vector. (same as {@link vec4.clone})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nfunction copy(v, dst) {\n dst = dst || new VecType(4);\n dst[0] = v[0];\n dst[1] = v[1];\n dst[2] = v[2];\n dst[3] = v[3];\n return dst;\n}\n/**\n * Clones a vector. (same as {@link vec4.copy})\n * Also see {@link vec4.create} and {@link vec4.set}\n * @param v - The vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns A copy of v.\n */\nconst clone = copy;\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nfunction multiply(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] * b[0];\n dst[1] = a[1] * b[1];\n dst[2] = a[2] * b[2];\n dst[3] = a[3] * b[3];\n return dst;\n}\n/**\n * Multiplies a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as mul)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of products of entries of a and b.\n */\nconst mul = multiply;\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length.\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nfunction divide(a, b, dst) {\n dst = dst || new VecType(4);\n dst[0] = a[0] / b[0];\n dst[1] = a[1] / b[1];\n dst[2] = a[2] / b[2];\n dst[3] = a[3] / b[3];\n return dst;\n}\n/**\n * Divides a vector by another vector (component-wise); assumes a and\n * b have the same length. (same as divide)\n * @param a - Operand vector.\n * @param b - Operand vector.\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The vector of quotients of entries of a and b.\n */\nconst div = divide;\n/**\n * Zero's a vector\n * @param dst - vector to hold result. If not passed in a new one is created.\n * @returns The zeroed vector.\n */\nfunction zero(dst) {\n dst = dst || new VecType(4);\n dst[0] = 0;\n dst[1] = 0;\n dst[2] = 0;\n dst[3] = 0;\n return dst;\n}\n/**\n * transform vec4 by 4x4 matrix\n * @param v - the vector\n * @param m - The matrix.\n * @param dst - optional vec4 to store result. If not passed a new one is created.\n * @returns the transformed vector\n */\nfunction transformMat4(v, m, dst) {\n dst = dst || new VecType(4);\n const x = v[0];\n const y = v[1];\n const z = v[2];\n const w = v[3];\n dst[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n dst[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n dst[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n dst[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return dst;\n}\n\nvar vec4Impl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n create: create,\n setDefaultType: setDefaultType$1,\n fromValues: fromValues,\n set: set,\n ceil: ceil,\n floor: floor,\n round: round,\n clamp: clamp,\n add: add,\n addScaled: addScaled,\n subtract: subtract,\n sub: sub,\n equalsApproximately: equalsApproximately,\n equals: equals,\n lerp: lerp,\n lerpV: lerpV,\n max: max,\n min: min,\n mulScalar: mulScalar,\n scale: scale,\n divScalar: divScalar,\n inverse: inverse,\n invert: invert,\n dot: dot,\n length: length,\n len: len,\n lengthSq: lengthSq,\n lenSq: lenSq,\n distance: distance,\n dist: dist,\n distanceSq: distanceSq,\n distSq: distSq,\n normalize: normalize,\n negate: negate,\n copy: copy,\n clone: clone,\n multiply: multiply,\n mul: mul,\n divide: divide,\n div: div,\n zero: zero,\n transformMat4: transformMat4\n});\n\n/**\n * Sets the type this library creates for all types\n *\n * example:\n *\n * ```\n * setDefaultType(Float64Array);\n * ```\n *\n * @param ctor - the constructor for the type. Either `Float32Array`, `Float64Array`, or `Array`\n */\nfunction setDefaultType(ctor) {\n setDefaultType$4(ctor);\n setDefaultType$3(ctor);\n setDefaultType$2(ctor);\n setDefaultType$6(ctor);\n setDefaultType$5(ctor);\n setDefaultType$1(ctor);\n}\n\nexport { mat3Impl as mat3, mat4Impl as mat4, quatImpl as quat, setDefaultType, utils, vec2Impl as vec2, vec3Impl as vec3, vec4Impl as vec4 };\n//# sourceMappingURL=wgpu-matrix.module.js.map\n","import { Quat } from 'wgpu-matrix';\nimport { Accessor, BufferView, GlTf, Scene } from './gltf';\nimport { Mat4, Vec3, mat4 } from 'wgpu-matrix';\n\n//NOTE: GLTF code is not generally extensible to all gltf models\n// Modified from Will Usher code found at this link https://www.willusher.io/graphics/2023/05/16/0-to-gltf-first-mesh\n\n// Associates the mode paramete of a gltf primitive object with the primitive's intended render mode\nenum GLTFRenderMode {\n POINTS = 0,\n LINE = 1,\n LINE_LOOP = 2,\n LINE_STRIP = 3,\n TRIANGLES = 4,\n TRIANGLE_STRIP = 5,\n TRIANGLE_FAN = 6,\n}\n\n// Determines how to interpret each element of the structure that is accessed from our accessor\nenum GLTFDataComponentType {\n BYTE = 5120,\n UNSIGNED_BYTE = 5121,\n SHORT = 5122,\n UNSIGNED_SHORT = 5123,\n INT = 5124,\n UNSIGNED_INT = 5125,\n FLOAT = 5126,\n DOUBLE = 5130,\n}\n\n// Determines how to interpret the structure of the values accessed by an accessor\nenum GLTFDataStructureType {\n SCALAR = 0,\n VEC2 = 1,\n VEC3 = 2,\n VEC4 = 3,\n MAT2 = 4,\n MAT3 = 5,\n MAT4 = 6,\n}\n\nexport const alignTo = (val: number, align: number): number => {\n return Math.floor((val + align - 1) / align) * align;\n};\n\nconst parseGltfDataStructureType = (type: string) => {\n switch (type) {\n case 'SCALAR':\n return GLTFDataStructureType.SCALAR;\n case 'VEC2':\n return GLTFDataStructureType.VEC2;\n case 'VEC3':\n return GLTFDataStructureType.VEC3;\n case 'VEC4':\n return GLTFDataStructureType.VEC4;\n case 'MAT2':\n return GLTFDataStructureType.MAT2;\n case 'MAT3':\n return GLTFDataStructureType.MAT3;\n case 'MAT4':\n return GLTFDataStructureType.MAT4;\n default:\n throw Error(`Unhandled glTF Type ${type}`);\n }\n};\n\nconst gltfDataStructureTypeNumComponents = (type: GLTFDataStructureType) => {\n switch (type) {\n case GLTFDataStructureType.SCALAR:\n return 1;\n case GLTFDataStructureType.VEC2:\n return 2;\n case GLTFDataStructureType.VEC3:\n return 3;\n case GLTFDataStructureType.VEC4:\n case GLTFDataStructureType.MAT2:\n return 4;\n case GLTFDataStructureType.MAT3:\n return 9;\n case GLTFDataStructureType.MAT4:\n return 16;\n default:\n throw Error(`Invalid glTF Type ${type}`);\n }\n};\n\n// Note: only returns non-normalized type names,\n// so byte/ubyte = sint8/uint8, not snorm8/unorm8, same for ushort\nconst gltfVertexType = (\n componentType: GLTFDataComponentType,\n type: GLTFDataStructureType\n) => {\n let typeStr = null;\n switch (componentType) {\n case GLTFDataComponentType.BYTE:\n typeStr = 'sint8';\n break;\n case GLTFDataComponentType.UNSIGNED_BYTE:\n typeStr = 'uint8';\n break;\n case GLTFDataComponentType.SHORT:\n typeStr = 'sint16';\n break;\n case GLTFDataComponentType.UNSIGNED_SHORT:\n typeStr = 'uint16';\n break;\n case GLTFDataComponentType.INT:\n typeStr = 'int32';\n break;\n case GLTFDataComponentType.UNSIGNED_INT:\n typeStr = 'uint32';\n break;\n case GLTFDataComponentType.FLOAT:\n typeStr = 'float32';\n break;\n default:\n throw Error(`Unrecognized or unsupported glTF type ${componentType}`);\n }\n\n switch (gltfDataStructureTypeNumComponents(type)) {\n case 1:\n return typeStr;\n case 2:\n return typeStr + 'x2';\n case 3:\n return typeStr + 'x3';\n case 4:\n return typeStr + 'x4';\n // Vertex attributes should never be a matrix type, so we should not hit this\n // unless we're passed an improperly created gltf file\n default:\n throw Error(`Invalid number of components for gltfType: ${type}`);\n }\n};\n\nconst gltfElementSize = (\n componentType: GLTFDataComponentType,\n type: GLTFDataStructureType\n) => {\n let componentSize = 0;\n switch (componentType) {\n case GLTFDataComponentType.BYTE:\n componentSize = 1;\n break;\n case GLTFDataComponentType.UNSIGNED_BYTE:\n componentSize = 1;\n break;\n case GLTFDataComponentType.SHORT:\n componentSize = 2;\n break;\n case GLTFDataComponentType.UNSIGNED_SHORT:\n componentSize = 2;\n break;\n case GLTFDataComponentType.INT:\n componentSize = 4;\n break;\n case GLTFDataComponentType.UNSIGNED_INT:\n componentSize = 4;\n break;\n case GLTFDataComponentType.FLOAT:\n componentSize = 4;\n break;\n case GLTFDataComponentType.DOUBLE:\n componentSize = 8;\n break;\n default:\n throw Error('Unrecognized GLTF Component Type?');\n }\n return gltfDataStructureTypeNumComponents(type) * componentSize;\n};\n\n// Convert differently depending on if the shader is a vertex or compute shader\nconst convertGPUVertexFormatToWGSLFormat = (vertexFormat: GPUVertexFormat) => {\n switch (vertexFormat) {\n case 'float32': {\n return 'f32';\n }\n case 'float32x2': {\n return 'vec2f';\n }\n case 'float32x3': {\n return 'vec3f';\n }\n case 'float32x4': {\n return 'vec4f';\n }\n case 'uint32': {\n return 'u32';\n }\n case 'uint32x2': {\n return 'vec2u';\n }\n case 'uint32x3': {\n return 'vec3u';\n }\n case 'uint32x4': {\n return 'vec4u';\n }\n case 'uint8x2': {\n return 'vec2u';\n }\n case 'uint8x4': {\n return 'vec4u';\n }\n case 'uint16x4': {\n return 'vec4u';\n }\n case 'uint16x2': {\n return 'vec2u';\n }\n default: {\n return 'f32';\n }\n }\n};\n\nexport class GLTFBuffer {\n buffer: Uint8Array;\n constructor(buffer: ArrayBuffer, offset: number, size: number) {\n this.buffer = new Uint8Array(buffer, offset, size);\n }\n}\n\nexport class GLTFBufferView {\n byteLength: number;\n byteStride: number;\n view: Uint8Array;\n needsUpload: boolean;\n gpuBuffer: GPUBuffer;\n usage: number;\n constructor(buffer: GLTFBuffer, view: BufferView) {\n this.byteLength = view['byteLength'];\n this.byteStride = 0;\n if (view['byteStride'] !== undefined) {\n this.byteStride = view['byteStride'];\n }\n // Create the buffer view. Note that subarray creates a new typed\n // view over the same array buffer, we do not make a copy here.\n let viewOffset = 0;\n if (view['byteOffset'] !== undefined) {\n viewOffset = view['byteOffset'];\n }\n // NOTE: This creates a uint8array view into the buffer!\n // When we call .buffer on this view, it will give us back the original array buffer\n // Accordingly, when converting our buffer from a uint8array to a float32array representation\n // we need to apply the byte offset of our view when creating our buffer\n // ie new Float32Array(this.view.buffer, this.view.byteOffset, this.view.byteLength)\n this.view = buffer.buffer.subarray(\n viewOffset,\n viewOffset + this.byteLength\n );\n\n this.needsUpload = false;\n this.gpuBuffer = null;\n this.usage = 0;\n }\n\n addUsage(usage: number) {\n this.usage = this.usage | usage;\n }\n\n upload(device: GPUDevice) {\n // Note: must align to 4 byte size when mapped at creation is true\n const buf: GPUBuffer = device.createBuffer({\n size: alignTo(this.view.byteLength, 4),\n usage: this.usage,\n mappedAtCreation: true,\n });\n new Uint8Array(buf.getMappedRange()).set(this.view);\n buf.unmap();\n this.gpuBuffer = buf;\n this.needsUpload = false;\n }\n}\n\nexport class GLTFAccessor {\n count: number;\n componentType: GLTFDataComponentType;\n structureType: GLTFDataStructureType;\n view: GLTFBufferView;\n byteOffset: number;\n constructor(view: GLTFBufferView, accessor: Accessor) {\n this.count = accessor['count'];\n this.componentType = accessor['componentType'];\n this.structureType = parseGltfDataStructureType(accessor['type']);\n this.view = view;\n this.byteOffset = 0;\n if (accessor['byteOffset'] !== undefined) {\n this.byteOffset = accessor['byteOffset'];\n }\n }\n\n get byteStride() {\n const elementSize = gltfElementSize(this.componentType, this.structureType);\n return Math.max(elementSize, this.view.byteStride);\n }\n\n get byteLength() {\n return this.count * this.byteStride;\n }\n\n // Get the vertex attribute type for accessors that are used as vertex attributes\n get vertexType() {\n return gltfVertexType(this.componentType, this.structureType);\n }\n}\n\ninterface AttributeMapInterface {\n [key: string]: GLTFAccessor;\n}\n\nexport class GLTFPrimitive {\n topology: GLTFRenderMode;\n renderPipeline: GPURenderPipeline;\n private attributeMap: AttributeMapInterface;\n private attributes: string[] = [];\n constructor(\n topology: GLTFRenderMode,\n attributeMap: AttributeMapInterface,\n attributes: string[]\n ) {\n this.topology = topology;\n this.renderPipeline = null;\n // Maps attribute names to accessors\n this.attributeMap = attributeMap;\n this.attributes = attributes;\n\n for (const key in this.attributeMap) {\n this.attributeMap[key].view.needsUpload = true;\n if (key === 'INDICES') {\n this.attributeMap['INDICES'].view.addUsage(GPUBufferUsage.INDEX);\n continue;\n }\n this.attributeMap[key].view.addUsage(GPUBufferUsage.VERTEX);\n }\n }\n\n buildRenderPipeline(\n device: GPUDevice,\n vertexShader: string,\n fragmentShader: string,\n colorFormat: GPUTextureFormat,\n depthFormat: GPUTextureFormat,\n bgLayouts: GPUBindGroupLayout[],\n label: string\n ) {\n // For now, just check if the attributeMap contains a given attribute using map.has(), and add it if it does\n // POSITION, NORMAL, TEXCOORD_0, JOINTS_0, WEIGHTS_0 for order\n // Vertex attribute state and shader stage\n let VertexInputShaderString = `struct VertexInput {\\n`;\n const vertexBuffers: GPUVertexBufferLayout[] = this.attributes.map(\n (attr, idx) => {\n const vertexFormat: GPUVertexFormat =\n this.attributeMap[attr].vertexType;\n const attrString = attr.toLowerCase().replace(/_0$/, '');\n VertexInputShaderString += `\\t@location(${idx}) ${attrString}: ${convertGPUVertexFormatToWGSLFormat(\n vertexFormat\n )},\\n`;\n return {\n arrayStride: this.attributeMap[attr].byteStride,\n attributes: [\n {\n format: this.attributeMap[attr].vertexType,\n offset: this.attributeMap[attr].byteOffset,\n shaderLocation: idx,\n },\n ],\n } as GPUVertexBufferLayout;\n }\n );\n VertexInputShaderString += '}';\n\n const vertexState: GPUVertexState = {\n // Shader stage info\n module: device.createShaderModule({\n code: VertexInputShaderString + vertexShader,\n }),\n buffers: vertexBuffers,\n };\n\n const fragmentState: GPUFragmentState = {\n // Shader info\n module: device.createShaderModule({\n code: VertexInputShaderString + fragmentShader,\n }),\n // Output render target info\n targets: [{ format: colorFormat }],\n };\n\n // Our loader only supports triangle lists and strips, so by default we set\n // the primitive topology to triangle list, and check if it's instead a triangle strip\n const primitive: GPUPrimitiveState = { topology: 'triangle-list' };\n if (this.topology == GLTFRenderMode.TRIANGLE_STRIP) {\n primitive.topology = 'triangle-strip';\n primitive.stripIndexFormat = this.attributeMap['INDICES'].vertexType;\n }\n\n const layout: GPUPipelineLayout = device.createPipelineLayout({\n bindGroupLayouts: bgLayouts,\n label: `${label}.pipelineLayout`,\n });\n\n const rpDescript: GPURenderPipelineDescriptor = {\n layout: layout,\n label: `${label}.pipeline`,\n vertex: vertexState,\n fragment: fragmentState,\n primitive: primitive,\n depthStencil: {\n format: depthFormat,\n depthWriteEnabled: true,\n depthCompare: 'less',\n },\n };\n\n this.renderPipeline = device.createRenderPipeline(rpDescript);\n }\n\n render(renderPassEncoder: GPURenderPassEncoder, bindGroups: GPUBindGroup[]) {\n renderPassEncoder.setPipeline(this.renderPipeline);\n bindGroups.forEach((bg, idx) => {\n renderPassEncoder.setBindGroup(idx, bg);\n });\n\n //if skin do something with bone bind group\n this.attributes.map((attr, idx) => {\n renderPassEncoder.setVertexBuffer(\n idx,\n this.attributeMap[attr].view.gpuBuffer,\n this.attributeMap[attr].byteOffset,\n this.attributeMap[attr].byteLength\n );\n });\n\n if (this.attributeMap['INDICES']) {\n renderPassEncoder.setIndexBuffer(\n this.attributeMap['INDICES'].view.gpuBuffer,\n this.attributeMap['INDICES'].vertexType,\n this.attributeMap['INDICES'].byteOffset,\n this.attributeMap['INDICES'].byteLength\n );\n renderPassEncoder.drawIndexed(this.attributeMap['INDICES'].count);\n } else {\n renderPassEncoder.draw(this.attributeMap['POSITION'].count);\n }\n }\n}\n\nexport class GLTFMesh {\n name: string;\n primitives: GLTFPrimitive[];\n constructor(name: string, primitives: GLTFPrimitive[]) {\n this.name = name;\n this.primitives = primitives;\n }\n\n buildRenderPipeline(\n device: GPUDevice,\n vertexShader: string,\n fragmentShader: string,\n colorFormat: GPUTextureFormat,\n depthFormat: GPUTextureFormat,\n bgLayouts: GPUBindGroupLayout[]\n ) {\n // We take a pretty simple approach to start. Just loop through all the primitives and\n // build their respective render pipelines\n for (let i = 0; i < this.primitives.length; ++i) {\n this.primitives[i].buildRenderPipeline(\n device,\n vertexShader,\n fragmentShader,\n colorFormat,\n depthFormat,\n bgLayouts,\n `PrimitivePipeline${i}`\n );\n }\n }\n\n render(renderPassEncoder: GPURenderPassEncoder, bindGroups: GPUBindGroup[]) {\n // We take a pretty simple approach to start. Just loop through all the primitives and\n // call their individual draw methods\n for (let i = 0; i < this.primitives.length; ++i) {\n this.primitives[i].render(renderPassEncoder, bindGroups);\n }\n }\n}\n\nexport const validateGLBHeader = (header: DataView) => {\n if (header.getUint32(0, true) != 0x46546c67) {\n throw Error('Provided file is not a glB file');\n }\n if (header.getUint32(4, true) != 2) {\n throw Error('Provided file is glTF 2.0 file');\n }\n};\n\nexport const validateBinaryHeader = (header: Uint32Array) => {\n if (header[1] != 0x004e4942) {\n throw Error(\n 'Invalid glB: The second chunk of the glB file is not a binary chunk!'\n );\n }\n};\n\ntype TempReturn = {\n meshes: GLTFMesh[];\n nodes: GLTFNode[];\n scenes: GLTFScene[];\n skins: GLTFSkin[];\n};\n\nexport class BaseTransformation {\n position: Vec3;\n rotation: Quat;\n scale: Vec3;\n constructor(\n // Identity translation vec3\n position = [0, 0, 0],\n // Identity quaternion\n rotation = [0, 0, 0, 1],\n // Identity scale vec3\n scale = [1, 1, 1]\n ) {\n this.position = position;\n this.rotation = rotation;\n this.scale = scale;\n }\n getMatrix(): Mat4 {\n // Analagous to let transformationMatrix: mat4x4f = translation * rotation * scale;\n const dst = mat4.identity();\n // Scale the transformation Matrix\n mat4.scale(dst, this.scale, dst);\n // Calculate the rotationMatrix from the quaternion\n const rotationMatrix = mat4.fromQuat(this.rotation);\n // Apply the rotation Matrix to the scaleMatrix (rotMat * scaleMat)\n mat4.multiply(rotationMatrix, dst, dst);\n // Translate the transformationMatrix\n mat4.translate(dst, this.position, dst);\n return dst;\n }\n}\n\nexport class GLTFNode {\n name: string;\n source: BaseTransformation;\n parent: GLTFNode | null;\n children: GLTFNode[];\n // Transforms all node's children in the node's local space, with node itself acting as the origin\n localMatrix: Mat4;\n worldMatrix: Mat4;\n // List of Meshes associated with this node\n drawables: GLTFMesh[];\n test = 0;\n skin?: GLTFSkin;\n private nodeTransformGPUBuffer: GPUBuffer;\n private nodeTransformBindGroup: GPUBindGroup;\n\n constructor(\n device: GPUDevice,\n bgLayout: GPUBindGroupLayout,\n source: BaseTransformation,\n name?: string,\n skin?: GLTFSkin\n ) {\n this.name = name\n ? name\n : `node_${source.position} ${source.rotation} ${source.scale}`;\n this.source = source;\n this.parent = null;\n this.children = [];\n this.localMatrix = mat4.identity();\n this.worldMatrix = mat4.identity();\n this.drawables = [];\n this.nodeTransformGPUBuffer = device.createBuffer({\n size: Float32Array.BYTES_PER_ELEMENT * 16,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n this.nodeTransformBindGroup = device.createBindGroup({\n layout: bgLayout,\n entries: [\n {\n binding: 0,\n resource: {\n buffer: this.nodeTransformGPUBuffer,\n },\n },\n ],\n });\n this.skin = skin;\n }\n\n setParent(parent: GLTFNode) {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\n parent.addChild(this);\n this.parent = parent;\n }\n\n updateWorldMatrix(device: GPUDevice, parentWorldMatrix?: Mat4) {\n // Get local transform of this particular node, and if the node has a parent,\n // multiply it against the parent's transform matrix to get transformMatrix relative to world.\n this.localMatrix = this.source.getMatrix();\n if (parentWorldMatrix) {\n mat4.multiply(parentWorldMatrix, this.localMatrix, this.worldMatrix);\n } else {\n mat4.copy(this.localMatrix, this.worldMatrix);\n }\n const worldMatrix = this.worldMatrix as Float32Array;\n device.queue.writeBuffer(\n this.nodeTransformGPUBuffer,\n 0,\n worldMatrix.buffer,\n worldMatrix.byteOffset,\n worldMatrix.byteLength\n );\n for (const child of this.children) {\n child.updateWorldMatrix(device, worldMatrix);\n }\n }\n\n traverse(fn: (n: GLTFNode, ...args) => void) {\n fn(this);\n for (const child of this.children) {\n child.traverse(fn);\n }\n }\n\n renderDrawables(\n passEncoder: GPURenderPassEncoder,\n bindGroups: GPUBindGroup[]\n ) {\n if (this.drawables !== undefined) {\n for (const drawable of this.drawables) {\n if (this.skin) {\n drawable.render(passEncoder, [\n ...bindGroups,\n this.nodeTransformBindGroup,\n this.skin.skinBindGroup,\n ]);\n } else {\n drawable.render(passEncoder, [\n ...bindGroups,\n this.nodeTransformBindGroup,\n ]);\n }\n }\n }\n // Render any of its children\n for (const child of this.children) {\n child.renderDrawables(passEncoder, bindGroups);\n }\n }\n\n private addChild(child: GLTFNode) {\n this.children.push(child);\n }\n\n private removeChild(child: GLTFNode) {\n const ndx = this.children.indexOf(child);\n this.children.splice(ndx, 1);\n }\n}\n\nexport class GLTFScene {\n nodes?: number[];\n root: GLTFNode;\n name?: string;\n\n constructor(\n device: GPUDevice,\n nodeTransformBGL: GPUBindGroupLayout,\n baseScene: Scene\n ) {\n this.nodes = baseScene.nodes;\n this.name = baseScene.name;\n this.root = new GLTFNode(\n device,\n nodeTransformBGL,\n new BaseTransformation(),\n baseScene.name\n );\n }\n}\n\nexport class GLTFSkin {\n // Nodes of the skin's joints\n // [5, 2, 3] means our joint info is at nodes 5, 2, and 3\n joints: number[];\n // Bind Group for this skin's uniform buffer\n skinBindGroup: GPUBindGroup;\n // Static bindGroupLayout shared across all skins\n // In a larger shader with more properties, certain bind groups\n // would likely have to be combined due to device limitations in the number of bind groups\n // allowed within a shader\n // Inverse bind matrices parsed from the accessor\n private inverseBindMatrices: Float32Array;\n private jointMatricesUniformBuffer: GPUBuffer;\n private inverseBindMatricesUniformBuffer: GPUBuffer;\n static skinBindGroupLayout: GPUBindGroupLayout;\n\n static createSharedBindGroupLayout(device: GPUDevice) {\n this.skinBindGroupLayout = device.createBindGroupLayout({\n label: 'StaticGLTFSkin.bindGroupLayout',\n entries: [\n // Holds the initial joint matrices buffer\n {\n binding: 0,\n buffer: {\n type: 'read-only-storage',\n },\n visibility: GPUShaderStage.VERTEX,\n },\n // Holds the inverse bind matrices buffer\n {\n binding: 1,\n buffer: {\n type: 'read-only-storage',\n },\n visibility: GPUShaderStage.VERTEX,\n },\n ],\n });\n }\n\n // For the sake of simplicity and easier debugging, we're going to convert our skin gpu accessor to a\n // float32array, which should be performant enough for this example since there is only one skin (again, this)\n // is not a comprehensive gltf parser\n constructor(\n device: GPUDevice,\n inverseBindMatricesAccessor: GLTFAccessor,\n joints: number[]\n ) {\n if (\n inverseBindMatricesAccessor.componentType !==\n GLTFDataComponentType.FLOAT ||\n inverseBindMatricesAccessor.byteStride !== 64\n ) {\n throw Error(\n `This skin's provided accessor does not access a mat4x4f matrix, or does not access the provided mat4x4f data correctly`\n );\n }\n // NOTE: Come back to this uint8array to float32array conversion in case it is incorrect\n this.inverseBindMatrices = new Float32Array(\n inverseBindMatricesAccessor.view.view.buffer,\n inverseBindMatricesAccessor.view.view.byteOffset,\n inverseBindMatricesAccessor.view.view.byteLength / 4\n );\n this.joints = joints;\n const skinGPUBufferUsage: GPUBufferDescriptor = {\n size: Float32Array.BYTES_PER_ELEMENT * 16 * joints.length,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n };\n this.jointMatricesUniformBuffer = device.createBuffer(skinGPUBufferUsage);\n this.inverseBindMatricesUniformBuffer =\n device.createBuffer(skinGPUBufferUsage);\n device.queue.writeBuffer(\n this.inverseBindMatricesUniformBuffer,\n 0,\n this.inverseBindMatrices\n );\n this.skinBindGroup = device.createBindGroup({\n layout: GLTFSkin.skinBindGroupLayout,\n label: 'StaticGLTFSkin.bindGroup',\n entries: [\n {\n binding: 0,\n resource: {\n buffer: this.jointMatricesUniformBuffer,\n },\n },\n {\n binding: 1,\n resource: {\n buffer: this.inverseBindMatricesUniformBuffer,\n },\n },\n ],\n });\n }\n\n update(device: GPUDevice, currentNodeIndex: number, nodes: GLTFNode[]) {\n const globalWorldInverse = mat4.inverse(\n nodes[currentNodeIndex].worldMatrix\n );\n for (let j = 0; j < this.joints.length; j++) {\n const joint = this.joints[j];\n const dstMatrix: Mat4 = mat4.identity();\n mat4.multiply(globalWorldInverse, nodes[joint].worldMatrix, dstMatrix);\n const toWrite = dstMatrix as Float32Array;\n device.queue.writeBuffer(\n this.jointMatricesUniformBuffer,\n j * 64,\n toWrite.buffer,\n toWrite.byteOffset,\n toWrite.byteLength\n );\n }\n }\n}\n\n// Upload a GLB model, parse its JSON and Binary components, and create the requisite GPU resources\n// to render them. NOTE: Not extensible to all GLTF contexts at this point in time\nexport const convertGLBToJSONAndBinary = async (\n buffer: ArrayBuffer,\n device: GPUDevice\n): Promise => {\n // Binary GLTF layout: https://cdn.willusher.io/webgpu-0-to-gltf/glb-layout.svg\n const jsonHeader = new DataView(buffer, 0, 20);\n validateGLBHeader(jsonHeader);\n\n // Length of the jsonChunk found at jsonHeader[12 - 15]\n const jsonChunkLength = jsonHeader.getUint32(12, true);\n\n // Parse the JSON chunk of the glB file to a JSON object\n const jsonChunk: GlTf = JSON.parse(\n new TextDecoder('utf-8').decode(new Uint8Array(buffer, 20, jsonChunkLength))\n );\n\n // Binary data located after jsonChunk\n const binaryHeader = new Uint32Array(buffer, 20 + jsonChunkLength, 2);\n validateBinaryHeader(binaryHeader);\n\n const binaryChunk = new GLTFBuffer(\n buffer,\n 28 + jsonChunkLength,\n binaryHeader[0]\n );\n\n //Const populate missing properties of jsonChunk\n for (const accessor of jsonChunk.accessors) {\n accessor.byteOffset = accessor.byteOffset ?? 0;\n accessor.normalized = accessor.normalized ?? false;\n }\n\n for (const bufferView of jsonChunk.bufferViews) {\n bufferView.byteOffset = bufferView.byteOffset ?? 0;\n }\n\n if (jsonChunk.samplers) {\n for (const sampler of jsonChunk.samplers) {\n sampler.wrapS = sampler.wrapS ?? 10497; //GL.REPEAT\n sampler.wrapT = sampler.wrapT ?? 10947; //GL.REPEAT\n }\n }\n\n //Mark each accessor with its intended usage within the vertexShader.\n //Often necessary due to infrequencey with which the BufferView target field is populated.\n for (const mesh of jsonChunk.meshes) {\n for (const primitive of mesh.primitives) {\n if ('indices' in primitive) {\n const accessor = jsonChunk.accessors[primitive.indices];\n jsonChunk.accessors[primitive.indices].bufferViewUsage |=\n GPUBufferUsage.INDEX;\n jsonChunk.bufferViews[accessor.bufferView].usage |=\n GPUBufferUsage.INDEX;\n }\n for (const attribute of Object.values(primitive.attributes)) {\n const accessor = jsonChunk.accessors[attribute];\n jsonChunk.accessors[attribute].bufferViewUsage |= GPUBufferUsage.VERTEX;\n jsonChunk.bufferViews[accessor.bufferView].usage |=\n GPUBufferUsage.VERTEX;\n }\n }\n }\n\n // Create GLTFBufferView objects for all the buffer views in the glTF file\n const bufferViews: GLTFBufferView[] = [];\n for (let i = 0; i < jsonChunk.bufferViews.length; ++i) {\n bufferViews.push(new GLTFBufferView(binaryChunk, jsonChunk.bufferViews[i]));\n }\n\n const accessors: GLTFAccessor[] = [];\n for (let i = 0; i < jsonChunk.accessors.length; ++i) {\n const accessorInfo = jsonChunk.accessors[i];\n const viewID = accessorInfo['bufferView'];\n accessors.push(new GLTFAccessor(bufferViews[viewID], accessorInfo));\n }\n // Load the first mesh\n const meshes: GLTFMesh[] = [];\n for (let i = 0; i < jsonChunk.meshes.length; i++) {\n const mesh = jsonChunk.meshes[i];\n const meshPrimitives: GLTFPrimitive[] = [];\n for (let j = 0; j < mesh.primitives.length; ++j) {\n const prim = mesh.primitives[j];\n let topology = prim['mode'];\n // Default is triangles if mode specified\n if (topology === undefined) {\n topology = GLTFRenderMode.TRIANGLES;\n }\n if (\n topology != GLTFRenderMode.TRIANGLES &&\n topology != GLTFRenderMode.TRIANGLE_STRIP\n ) {\n throw Error(`Unsupported primitive mode ${prim['mode']}`);\n }\n\n const primitiveAttributeMap = {};\n const attributes = [];\n if (jsonChunk['accessors'][prim['indices']] !== undefined) {\n const indices = accessors[prim['indices']];\n primitiveAttributeMap['INDICES'] = indices;\n }\n\n // Loop through all the attributes and store within our attributeMap\n for (const attr in prim['attributes']) {\n const accessor = accessors[prim['attributes'][attr]];\n primitiveAttributeMap[attr] = accessor;\n if (accessor.structureType > 3) {\n throw Error(\n 'Vertex attribute accessor accessed an unsupported data type for vertex attribute'\n );\n }\n attributes.push(attr);\n }\n meshPrimitives.push(\n new GLTFPrimitive(topology, primitiveAttributeMap, attributes)\n );\n }\n meshes.push(new GLTFMesh(mesh.name, meshPrimitives));\n }\n\n const skins: GLTFSkin[] = [];\n for (const skin of jsonChunk.skins) {\n const inverseBindMatrixAccessor = accessors[skin.inverseBindMatrices];\n inverseBindMatrixAccessor.view.addUsage(\n GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n );\n inverseBindMatrixAccessor.view.needsUpload = true;\n }\n\n // Upload the buffer views used by mesh\n for (let i = 0; i < bufferViews.length; ++i) {\n if (bufferViews[i].needsUpload) {\n bufferViews[i].upload(device);\n }\n }\n\n GLTFSkin.createSharedBindGroupLayout(device);\n for (const skin of jsonChunk.skins) {\n const inverseBindMatrixAccessor = accessors[skin.inverseBindMatrices];\n const joints = skin.joints;\n skins.push(new GLTFSkin(device, inverseBindMatrixAccessor, joints));\n }\n\n const nodes: GLTFNode[] = [];\n\n // Access each node. If node references a mesh, add mesh to that node\n const nodeUniformsBindGroupLayout = device.createBindGroupLayout({\n label: 'NodeUniforms.bindGroupLayout',\n entries: [\n {\n binding: 0,\n buffer: {\n type: 'uniform',\n },\n visibility: GPUShaderStage.VERTEX,\n },\n ],\n });\n for (const currNode of jsonChunk.nodes) {\n const baseTransformation = new BaseTransformation(\n currNode.translation,\n currNode.rotation,\n currNode.scale\n );\n const nodeToCreate = new GLTFNode(\n device,\n nodeUniformsBindGroupLayout,\n baseTransformation,\n currNode.name,\n skins[currNode.skin]\n );\n const meshToAdd = meshes[currNode.mesh];\n if (meshToAdd) {\n nodeToCreate.drawables.push(meshToAdd);\n }\n nodes.push(nodeToCreate);\n }\n\n // Assign each node its children\n nodes.forEach((node, idx) => {\n const children = jsonChunk.nodes[idx].children;\n if (children) {\n children.forEach((childIdx) => {\n const child = nodes[childIdx];\n child.setParent(node);\n });\n }\n });\n\n const scenes: GLTFScene[] = [];\n\n for (const jsonScene of jsonChunk.scenes) {\n const scene = new GLTFScene(device, nodeUniformsBindGroupLayout, jsonScene);\n const sceneChildren = scene.nodes;\n sceneChildren.forEach((childIdx) => {\n const child = nodes[childIdx];\n child.setParent(scene.root);\n });\n scenes.push(scene);\n }\n return {\n meshes,\n nodes,\n scenes,\n skins,\n };\n};\n","import type { GUI } from 'dat.gui';\nimport fullscreenTexturedQuad from '../../shaders/fullscreenTexturedQuad.wgsl';\n\ntype BindGroupBindingLayout =\n | GPUBufferBindingLayout\n | GPUTextureBindingLayout\n | GPUSamplerBindingLayout\n | GPUStorageTextureBindingLayout\n | GPUExternalTextureBindingLayout;\n\n// An object containing\n// 1. A generated Bind Group Layout\n// 2. An array of Bind Groups that accord to that layout\nexport type BindGroupCluster = {\n bindGroups: GPUBindGroup[];\n bindGroupLayout: GPUBindGroupLayout;\n};\n\ntype ResourceTypeName =\n | 'buffer'\n | 'texture'\n | 'sampler'\n | 'externalTexture'\n | 'storageTexture';\n\n/**\n * @param {number[]} bindings - The binding value of each resource in the bind group.\n * @param {number[]} visibilities - The GPUShaderStage visibility of the resource at the corresponding index.\n * @param {ResourceTypeName[]} resourceTypes - The resourceType at the corresponding index.\n * @returns {BindGroupsObjectsAndLayout} An object containing an array of bindGroups and the bindGroupLayout they implement.\n */\nexport const createBindGroupCluster = (\n bindings: number[],\n visibilities: number[],\n resourceTypes: ResourceTypeName[],\n resourceLayouts: BindGroupBindingLayout[],\n resources: GPUBindingResource[][],\n label: string,\n device: GPUDevice\n): BindGroupCluster => {\n const layoutEntries: GPUBindGroupLayoutEntry[] = [];\n for (let i = 0; i < bindings.length; i++) {\n layoutEntries.push({\n binding: bindings[i],\n visibility: visibilities[i % visibilities.length],\n [resourceTypes[i]]: resourceLayouts[i],\n });\n }\n\n const bindGroupLayout = device.createBindGroupLayout({\n label: `${label}.bindGroupLayout`,\n entries: layoutEntries,\n });\n\n const bindGroups: GPUBindGroup[] = [];\n //i represent the bindGroup index, j represents the binding index of the resource within the bindgroup\n //i=0, j=0 bindGroup: 0, binding: 0\n //i=1, j=1, bindGroup: 0, binding: 1\n //NOTE: not the same as @group(0) @binding(1) group index within the fragment shader is set within a pipeline\n for (let i = 0; i < resources.length; i++) {\n const groupEntries: GPUBindGroupEntry[] = [];\n for (let j = 0; j < resources[0].length; j++) {\n groupEntries.push({\n binding: j,\n resource: resources[i][j],\n });\n }\n const newBindGroup = device.createBindGroup({\n label: `${label}.bindGroup${i}`,\n layout: bindGroupLayout,\n entries: groupEntries,\n });\n bindGroups.push(newBindGroup);\n }\n\n return {\n bindGroups,\n bindGroupLayout,\n };\n};\n\nexport type ShaderKeyInterface = {\n [K in T[number]]: number;\n};\n\nexport type SampleInitParams = {\n canvas: HTMLCanvasElement;\n gui?: GUI;\n stats?: Stats;\n};\n\ninterface DeviceInitParms {\n device: GPUDevice;\n}\n\ninterface DeviceInit3DParams extends DeviceInitParms {\n context: GPUCanvasContext;\n presentationFormat: GPUTextureFormat;\n timestampQueryAvailable: boolean;\n}\n\ntype CallbackSync3D = (params: SampleInitParams & DeviceInit3DParams) => void;\ntype CallbackAsync3D = (\n params: SampleInitParams & DeviceInit3DParams\n) => Promise;\n\ntype SampleInitCallback3D = CallbackSync3D | CallbackAsync3D;\nexport type SampleInit = (params: SampleInitParams) => void;\n\nexport const SampleInitFactoryWebGPU = async (\n callback: SampleInitCallback3D\n): Promise => {\n const init = async ({ canvas, gui, stats }) => {\n const adapter = await navigator.gpu.requestAdapter();\n const timestampQueryAvailable = adapter.features.has('timestamp-query');\n let device: GPUDevice;\n if (timestampQueryAvailable) {\n device = await adapter.requestDevice({\n requiredFeatures: ['timestamp-query'],\n });\n } else {\n device = await adapter.requestDevice();\n }\n const context = canvas.getContext('webgpu') as GPUCanvasContext;\n const devicePixelRatio = window.devicePixelRatio;\n canvas.width = canvas.clientWidth * devicePixelRatio;\n canvas.height = canvas.clientHeight * devicePixelRatio;\n const presentationFormat = navigator.gpu.getPreferredCanvasFormat();\n context.configure({\n device,\n format: presentationFormat,\n alphaMode: 'premultiplied',\n });\n\n callback({\n canvas,\n gui,\n device,\n context,\n presentationFormat,\n stats,\n timestampQueryAvailable,\n });\n };\n return init;\n};\n\nexport abstract class Base2DRendererClass {\n abstract switchBindGroup(name: string): void;\n abstract startRun(\n commandEncoder: GPUCommandEncoder,\n ...args: unknown[]\n ): void;\n renderPassDescriptor: GPURenderPassDescriptor;\n pipeline: GPURenderPipeline;\n bindGroupMap: Record;\n currentBindGroup: GPUBindGroup;\n currentBindGroupName: string;\n\n executeRun(\n commandEncoder: GPUCommandEncoder,\n renderPassDescriptor: GPURenderPassDescriptor,\n pipeline: GPURenderPipeline,\n bindGroups: GPUBindGroup[]\n ) {\n const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);\n passEncoder.setPipeline(pipeline);\n for (let i = 0; i < bindGroups.length; i++) {\n passEncoder.setBindGroup(i, bindGroups[i]);\n }\n passEncoder.draw(6, 1, 0, 0);\n passEncoder.end();\n }\n\n setUniformArguments(\n device: GPUDevice,\n uniformBuffer: GPUBuffer,\n instance: T,\n keys: K\n ) {\n for (let i = 0; i < keys.length; i++) {\n device.queue.writeBuffer(\n uniformBuffer,\n i * 4,\n new Float32Array([instance[keys[i]]])\n );\n }\n }\n\n create2DRenderPipeline(\n device: GPUDevice,\n label: string,\n bgLayouts: GPUBindGroupLayout[],\n code: string,\n presentationFormat: GPUTextureFormat\n ) {\n return device.createRenderPipeline({\n label: `${label}.pipeline`,\n layout: device.createPipelineLayout({\n bindGroupLayouts: bgLayouts,\n }),\n vertex: {\n module: device.createShaderModule({\n code: fullscreenTexturedQuad,\n }),\n },\n fragment: {\n module: device.createShaderModule({\n code: code,\n }),\n targets: [\n {\n format: presentationFormat,\n },\n ],\n },\n primitive: {\n topology: 'triangle-list',\n cullMode: 'none',\n },\n });\n }\n}\n","/* eslint-disable prettier/prettier */\nexport const gridVertices = new Float32Array([\n // B0\n 0, 1, // 0 \n 0, -1, // 1\n // CONNECTOR\n 2, 1, // 2\n 2, -1, // 3\n // B1\n 4, 1, // 4\n 4, -1, // 5\n // CONNECTOR\n 6, 1, // 6\n 6, -1, // 7\n // B2\n 8, 1, // 8\n 8, -1, // 9,\n // CONNECTOR\n 10, 1, //10\n 10, -1, //11\n // B3\n 12, 1, //12\n 12, -1, //13\n]);\n\n// Representing the indice of four bones that can influence each vertex\nexport const gridJoints = new Uint32Array([\n 0, 0, 0, 0, // Vertex 0 is influenced by bone 0\n 0, 0, 0, 0, // 1\n 0, 1, 0, 0, // 2\n 0, 1, 0, 0, // 3\n 1, 0, 0, 0, // 4\n 1, 0, 0, 0, // 5\n 1, 2, 0, 0, // Vertex 6 is influenced by bone 1 and bone 2\n 1, 2, 0, 0, // 7\n 2, 0, 0, 0, // 8\n 2, 0, 0, 0, // 9\n 1, 2, 3, 0, //10\n 1, 2, 3, 0, //11\n 2, 3, 0, 0, //12\n 2, 3, 0, 0, //13\n])\n\n// The weights applied when ve\nexport const gridWeights = new Float32Array([\n // B0\n 1, 0, 0, 0, // 0\n 1, 0, 0, 0, // 1\n // CONNECTOR\n .5,.5, 0, 0, // 2\n .5,.5, 0, 0, // 3\n // B1\n 1, 0, 0, 0, // 4\n 1, 0, 0, 0, // 5\n // CONNECTOR\n .5,.5, 0, 0, // 6\n .5,.5, 0, 0, // 7\n // B2\n 1, 0, 0, 0, // 8\n 1, 0, 0, 0, // 9\n // CONNECTOR\n .5,.5, 0, 0, // 10\n .5,.5, 0, 0, // 11\n // B3\n 1, 0, 0, 0, // 12\n 1, 0, 0, 0, // 13\n]);\n\n// Using data above...\n// Vertex 0 is influenced by bone 0 with a weight of 1 \n// Vertex 1 is influenced by bone 1 with a weight of 1\n// Vertex 2 is influenced by bone 0 and 1 with a weight of 0.5 each\n// and so on..\n// Although a vertex can hypothetically be influenced by 4 bones,\n// in this example, we stick to each vertex being infleunced by only two\n// although there can be downstream effects of parent bones influencing child bones\n// that influence their own children\n\nexport const gridIndices = new Uint16Array([\n // B0\n 0, 1,\n 0, 2,\n 1, 3,\n // CONNECTOR\n 2, 3, //\n 2, 4,\n 3, 5,\n // B1\n 4, 5,\n 4, 6,\n 5, 7, \n // CONNECTOR\n 6, 7,\n 6, 8,\n 7, 9,\n // B2\n 8, 9,\n 8, 10,\n 9, 11,\n // CONNECTOR\n 10, 11,\n 10, 12,\n 11, 13,\n // B3\n 12, 13,\n]);","import { gridVertices, gridIndices, gridJoints, gridWeights } from './gridData';\n\n// Uses constant grid data to create appropriately sized GPU Buffers for our skinned grid\nexport const createSkinnedGridBuffers = (device: GPUDevice) => {\n // Utility function that creates GPUBuffers from data\n const createBuffer = (\n data: Float32Array | Uint32Array,\n type: 'f32' | 'u32'\n ) => {\n const buffer = device.createBuffer({\n size: data.byteLength,\n usage: GPUBufferUsage.VERTEX,\n mappedAtCreation: true,\n });\n if (type === 'f32') {\n new Float32Array(buffer.getMappedRange()).set(data);\n } else {\n new Uint32Array(buffer.getMappedRange()).set(data);\n }\n buffer.unmap();\n return buffer;\n };\n const positionsBuffer = createBuffer(gridVertices, 'f32');\n const jointsBuffer = createBuffer(gridJoints, 'u32');\n const weightsBuffer = createBuffer(gridWeights, 'f32');\n const indicesBuffer = device.createBuffer({\n size: Uint16Array.BYTES_PER_ELEMENT * gridIndices.length,\n usage: GPUBufferUsage.INDEX,\n mappedAtCreation: true,\n });\n new Uint16Array(indicesBuffer.getMappedRange()).set(gridIndices);\n indicesBuffer.unmap();\n\n return {\n positions: positionsBuffer,\n joints: jointsBuffer,\n weights: weightsBuffer,\n indices: indicesBuffer,\n };\n};\n\nexport const createSkinnedGridRenderPipeline = (\n device: GPUDevice,\n presentationFormat: GPUTextureFormat,\n vertexShader: string,\n fragmentShader: string,\n bgLayouts: GPUBindGroupLayout[]\n) => {\n const pipeline = device.createRenderPipeline({\n label: 'SkinnedGridRenderer',\n layout: device.createPipelineLayout({\n label: `SkinnedGridRenderer.pipelineLayout`,\n bindGroupLayouts: bgLayouts,\n }),\n vertex: {\n module: device.createShaderModule({\n label: `SkinnedGridRenderer.vertexShader`,\n code: vertexShader,\n }),\n buffers: [\n // Vertex Positions (positions)\n {\n arrayStride: Float32Array.BYTES_PER_ELEMENT * 2,\n attributes: [\n {\n format: 'float32x2',\n offset: 0,\n shaderLocation: 0,\n },\n ],\n },\n // Bone Indices (joints)\n {\n arrayStride: Uint32Array.BYTES_PER_ELEMENT * 4,\n attributes: [\n {\n format: 'uint32x4',\n offset: 0,\n shaderLocation: 1,\n },\n ],\n },\n // Bone Weights (weights)\n {\n arrayStride: Float32Array.BYTES_PER_ELEMENT * 4,\n attributes: [\n {\n format: 'float32x4',\n offset: 0,\n shaderLocation: 2,\n },\n ],\n },\n ],\n },\n fragment: {\n module: device.createShaderModule({\n label: `SkinnedGridRenderer.fragmentShader`,\n code: fragmentShader,\n }),\n targets: [\n {\n format: presentationFormat,\n },\n ],\n },\n primitive: {\n topology: 'line-list',\n },\n });\n return pipeline;\n};\n","import { GUI } from 'dat.gui';\nimport { convertGLBToJSONAndBinary, GLTFSkin } from './glbUtils';\nimport gltfWGSL from './gltf.wgsl';\nimport gridWGSL from './grid.wgsl';\nimport { Mat4, mat4, Quat, vec3 } from 'wgpu-matrix';\nimport { createBindGroupCluster } from '../bitonicSort/utils';\nimport {\n createSkinnedGridBuffers,\n createSkinnedGridRenderPipeline,\n} from './gridUtils';\nimport { gridIndices } from './gridData';\n\nconst MAT4X4_BYTES = 64;\n\ninterface BoneObject {\n transforms: Mat4[];\n bindPoses: Mat4[];\n bindPosesInv: Mat4[];\n}\n\nenum RenderMode {\n NORMAL,\n JOINTS,\n WEIGHTS,\n}\n\nenum SkinMode {\n ON,\n OFF,\n}\n\n// Copied from toji/gl-matrix\nconst getRotation = (mat: Mat4): Quat => {\n // Initialize our output quaternion\n const out = [0, 0, 0, 0];\n // Extract the scaling factor from the final matrix transformation\n // to normalize our rotation;\n const scaling = mat4.getScaling(mat);\n const is1 = 1 / scaling[0];\n const is2 = 1 / scaling[1];\n const is3 = 1 / scaling[2];\n\n // Scale the matrix elements by the scaling factors\n const sm11 = mat[0] * is1;\n const sm12 = mat[1] * is2;\n const sm13 = mat[2] * is3;\n const sm21 = mat[4] * is1;\n const sm22 = mat[5] * is2;\n const sm23 = mat[6] * is3;\n const sm31 = mat[8] * is1;\n const sm32 = mat[9] * is2;\n const sm33 = mat[10] * is3;\n\n // The trace of a square matrix is the sum of its diagonal entries\n // While the matrix trace has many interesting mathematical properties,\n // the primary purpose of the trace is to assess the characteristics of the rotation.\n const trace = sm11 + sm22 + sm33;\n let S = 0;\n\n // If all matrix elements contribute equally to the rotation.\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out[3] = 0.25 * S;\n out[0] = (sm23 - sm32) / S;\n out[1] = (sm31 - sm13) / S;\n out[2] = (sm12 - sm21) / S;\n // If the rotation is primarily around the x-axis\n } else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out[3] = (sm23 - sm32) / S;\n out[0] = 0.25 * S;\n out[1] = (sm12 + sm21) / S;\n out[2] = (sm31 + sm13) / S;\n // If rotation is primarily around the y-axis\n } else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out[3] = (sm31 - sm13) / S;\n out[0] = (sm12 + sm21) / S;\n out[1] = 0.25 * S;\n out[2] = (sm23 + sm32) / S;\n // If the rotation is primarily around the z-axis\n } else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out[3] = (sm12 - sm21) / S;\n out[0] = (sm31 + sm13) / S;\n out[1] = (sm23 + sm32) / S;\n out[2] = 0.25 * S;\n }\n\n return out;\n};\n\n//Normal setup\nconst canvas = document.querySelector('canvas') as HTMLCanvasElement;\nconst adapter = await navigator.gpu.requestAdapter();\nconst device = await adapter.requestDevice();\n\nconst context = canvas.getContext('webgpu') as GPUCanvasContext;\n\nconst devicePixelRatio = window.devicePixelRatio || 1;\ncanvas.width = canvas.clientWidth * devicePixelRatio;\ncanvas.height = canvas.clientHeight * devicePixelRatio;\nconst presentationFormat = navigator.gpu.getPreferredCanvasFormat();\n\ncontext.configure({\n device,\n format: presentationFormat,\n alphaMode: 'premultiplied',\n});\n\nconst settings = {\n cameraX: 0,\n cameraY: -5.1,\n cameraZ: -14.6,\n objectScale: 1,\n angle: 0.2,\n speed: 50,\n object: 'Whale',\n renderMode: 'NORMAL',\n skinMode: 'ON',\n};\n\nconst gui = new GUI();\n\n// Determine whether we want to render our whale or our skinned grid\ngui.add(settings, 'object', ['Whale', 'Skinned Grid']).onChange(() => {\n if (settings.object === 'Skinned Grid') {\n settings.cameraX = -10;\n settings.cameraY = 0;\n settings.objectScale = 1.27;\n } else {\n if (settings.skinMode === 'OFF') {\n settings.cameraX = 0;\n settings.cameraY = 0;\n settings.cameraZ = -11;\n } else {\n settings.cameraX = 0;\n settings.cameraY = -5.1;\n settings.cameraZ = -14.6;\n }\n }\n});\n\n// Output the mesh normals, its joints, or the weights that influence the movement of the joints\ngui\n .add(settings, 'renderMode', ['NORMAL', 'JOINTS', 'WEIGHTS'])\n .onChange(() => {\n device.queue.writeBuffer(\n generalUniformsBuffer,\n 0,\n new Uint32Array([RenderMode[settings.renderMode]])\n );\n });\n// Determine whether the mesh is static or whether skinning is activated\ngui.add(settings, 'skinMode', ['ON', 'OFF']).onChange(() => {\n if (settings.object === 'Whale') {\n if (settings.skinMode === 'OFF') {\n settings.cameraX = 0;\n settings.cameraY = 0;\n settings.cameraZ = -11;\n } else {\n settings.cameraX = 0;\n settings.cameraY = -5.1;\n settings.cameraZ = -14.6;\n }\n }\n device.queue.writeBuffer(\n generalUniformsBuffer,\n 4,\n new Uint32Array([SkinMode[settings.skinMode]])\n );\n});\nconst animFolder = gui.addFolder('Animation Settings');\nanimFolder.add(settings, 'angle', 0.05, 0.5).step(0.05);\nanimFolder.add(settings, 'speed', 10, 100).step(10);\n\nconst depthTexture = device.createTexture({\n size: [canvas.width, canvas.height],\n format: 'depth24plus',\n usage: GPUTextureUsage.RENDER_ATTACHMENT,\n});\n\nconst cameraBuffer = device.createBuffer({\n size: MAT4X4_BYTES * 3,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n});\n\nconst cameraBGCluster = createBindGroupCluster(\n [0],\n [GPUShaderStage.VERTEX],\n ['buffer'],\n [{ type: 'uniform' }],\n [[{ buffer: cameraBuffer }]],\n 'Camera',\n device\n);\n\nconst generalUniformsBuffer = device.createBuffer({\n size: Uint32Array.BYTES_PER_ELEMENT * 2,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n});\n\nconst generalUniformsBGCLuster = createBindGroupCluster(\n [0],\n [GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT],\n ['buffer'],\n [{ type: 'uniform' }],\n [[{ buffer: generalUniformsBuffer }]],\n 'General',\n device\n);\n\n// Same bindGroupLayout as in main file.\nconst nodeUniformsBindGroupLayout = device.createBindGroupLayout({\n label: 'NodeUniforms.bindGroupLayout',\n entries: [\n {\n binding: 0,\n buffer: {\n type: 'uniform',\n },\n visibility: GPUShaderStage.VERTEX,\n },\n ],\n});\n\n// Fetch whale resources from the glb file\nconst whaleScene = await fetch('../../assets/gltf/whale.glb')\n .then((res) => res.arrayBuffer())\n .then((buffer) => convertGLBToJSONAndBinary(buffer, device));\n\n// Builds a render pipeline for our whale mesh\n// Since we are building a lightweight gltf parser around a gltf scene with a known\n// quantity of meshes, we only build a renderPipeline for the singular mesh present\n// within our scene. A more robust gltf parser would loop through all the meshes,\n// cache replicated pipelines, and perform other optimizations.\nwhaleScene.meshes[0].buildRenderPipeline(\n device,\n gltfWGSL,\n gltfWGSL,\n presentationFormat,\n depthTexture.format,\n [\n cameraBGCluster.bindGroupLayout,\n generalUniformsBGCLuster.bindGroupLayout,\n nodeUniformsBindGroupLayout,\n GLTFSkin.skinBindGroupLayout,\n ]\n);\n\n// Create skinned grid resources\nconst skinnedGridVertexBuffers = createSkinnedGridBuffers(device);\n// Buffer for our uniforms, joints, and inverse bind matrices\nconst skinnedGridUniformBufferUsage: GPUBufferDescriptor = {\n // 5 4x4 matrices, one for each bone\n size: MAT4X4_BYTES * 5,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n};\nconst skinnedGridJointUniformBuffer = device.createBuffer(\n skinnedGridUniformBufferUsage\n);\nconst skinnedGridInverseBindUniformBuffer = device.createBuffer(\n skinnedGridUniformBufferUsage\n);\nconst skinnedGridBoneBGCluster = createBindGroupCluster(\n [0, 1],\n [GPUShaderStage.VERTEX, GPUShaderStage.VERTEX],\n ['buffer', 'buffer'],\n [{ type: 'read-only-storage' }, { type: 'read-only-storage' }],\n [\n [\n { buffer: skinnedGridJointUniformBuffer },\n { buffer: skinnedGridInverseBindUniformBuffer },\n ],\n ],\n 'SkinnedGridJointUniforms',\n device\n);\nconst skinnedGridPipeline = createSkinnedGridRenderPipeline(\n device,\n presentationFormat,\n gridWGSL,\n gridWGSL,\n [\n cameraBGCluster.bindGroupLayout,\n generalUniformsBGCLuster.bindGroupLayout,\n skinnedGridBoneBGCluster.bindGroupLayout,\n ]\n);\n\n// Global Calc\nconst aspect = canvas.width / canvas.height;\nconst perspectiveProjection = mat4.perspective(\n (2 * Math.PI) / 5,\n aspect,\n 0.1,\n 100.0\n);\n\nconst orthographicProjection = mat4.ortho(-20, 20, -10, 10, -100, 100);\n\nfunction getProjectionMatrix() {\n if (settings.object !== 'Skinned Grid') {\n return perspectiveProjection as Float32Array;\n }\n return orthographicProjection as Float32Array;\n}\n\nfunction getViewMatrix() {\n const viewMatrix = mat4.identity();\n if (settings.object === 'Skinned Grid') {\n mat4.translate(\n viewMatrix,\n vec3.fromValues(\n settings.cameraX * settings.objectScale,\n settings.cameraY * settings.objectScale,\n settings.cameraZ\n ),\n viewMatrix\n );\n } else {\n mat4.translate(\n viewMatrix,\n vec3.fromValues(settings.cameraX, settings.cameraY, settings.cameraZ),\n viewMatrix\n );\n }\n return viewMatrix as Float32Array;\n}\n\nfunction getModelMatrix() {\n const modelMatrix = mat4.identity();\n const scaleVector = vec3.fromValues(\n settings.objectScale,\n settings.objectScale,\n settings.objectScale\n );\n mat4.scale(modelMatrix, scaleVector, modelMatrix);\n if (settings.object === 'Whale') {\n mat4.rotateY(modelMatrix, (Date.now() / 1000) * 0.5, modelMatrix);\n }\n return modelMatrix as Float32Array;\n}\n\n// Pass Descriptor for GLTFs\nconst gltfRenderPassDescriptor: GPURenderPassDescriptor = {\n colorAttachments: [\n {\n view: undefined, // Assigned later\n\n clearValue: { r: 0.3, g: 0.3, b: 0.3, a: 1.0 },\n loadOp: 'clear',\n storeOp: 'store',\n },\n ],\n depthStencilAttachment: {\n view: depthTexture.createView(),\n depthLoadOp: 'clear',\n depthClearValue: 1.0,\n depthStoreOp: 'store',\n },\n};\n\n// Pass descriptor for grid with no depth testing\nconst skinnedGridRenderPassDescriptor: GPURenderPassDescriptor = {\n colorAttachments: [\n {\n view: undefined, // Assigned later\n\n clearValue: { r: 0.3, g: 0.3, b: 0.3, a: 1.0 },\n loadOp: 'clear',\n storeOp: 'store',\n },\n ],\n};\n\nconst animSkinnedGrid = (boneTransforms: Mat4[], angle: number) => {\n const m = mat4.identity();\n mat4.rotateZ(m, angle, boneTransforms[0]);\n mat4.translate(boneTransforms[0], vec3.create(4, 0, 0), m);\n mat4.rotateZ(m, angle, boneTransforms[1]);\n mat4.translate(boneTransforms[1], vec3.create(4, 0, 0), m);\n mat4.rotateZ(m, angle, boneTransforms[2]);\n};\n\n// Create a group of bones\n// Each index associates an actual bone to its transforms, bindPoses, uniforms, etc\nconst createBoneCollection = (numBones: number): BoneObject => {\n // Initial bone transformation\n const transforms: Mat4[] = [];\n // Bone bind poses, an extra matrix per joint/bone that represents the starting point\n // of the bone before any transformations are applied\n const bindPoses: Mat4[] = [];\n // Create a transform, bind pose, and inverse bind pose for each bone\n for (let i = 0; i < numBones; i++) {\n transforms.push(mat4.identity());\n bindPoses.push(mat4.identity());\n }\n\n // Get initial bind pose positions\n animSkinnedGrid(bindPoses, 0);\n const bindPosesInv = bindPoses.map((bindPose) => {\n return mat4.inverse(bindPose);\n });\n\n return {\n transforms,\n bindPoses,\n bindPosesInv,\n };\n};\n\n// Create bones of the skinned grid and write the inverse bind positions to\n// the skinned grid's inverse bind matrix array\nconst gridBoneCollection = createBoneCollection(5);\nfor (let i = 0; i < gridBoneCollection.bindPosesInv.length; i++) {\n device.queue.writeBuffer(\n skinnedGridInverseBindUniformBuffer,\n i * 64,\n gridBoneCollection.bindPosesInv[i] as Float32Array\n );\n}\n\n// A map that maps a joint index to the original matrix transformation of a bone\nconst origMatrices = new Map();\nconst animWhaleSkin = (skin: GLTFSkin, angle: number) => {\n for (let i = 0; i < skin.joints.length; i++) {\n // Index into the current joint\n const joint = skin.joints[i];\n // If our map does\n if (!origMatrices.has(joint)) {\n origMatrices.set(joint, whaleScene.nodes[joint].source.getMatrix());\n }\n // Get the original position, rotation, and scale of the current joint\n const origMatrix = origMatrices.get(joint);\n let m = mat4.create();\n // Depending on which bone we are accessing, apply a specific rotation to the bone's original\n // transformation to animate it\n if (joint === 1 || joint === 0) {\n m = mat4.rotateY(origMatrix, -angle);\n } else if (joint === 3 || joint === 4) {\n m = mat4.rotateX(origMatrix, joint === 3 ? angle : -angle);\n } else {\n m = mat4.rotateZ(origMatrix, angle);\n }\n // Apply the current transformation to the transform values within the relevant nodes\n // (these nodes, of course, each being nodes that represent joints/bones)\n whaleScene.nodes[joint].source.position = mat4.getTranslation(m);\n whaleScene.nodes[joint].source.scale = mat4.getScaling(m);\n whaleScene.nodes[joint].source.rotation = getRotation(m);\n }\n};\n\nfunction frame() {\n // Calculate camera matrices\n const projectionMatrix = getProjectionMatrix();\n const viewMatrix = getViewMatrix();\n const modelMatrix = getModelMatrix();\n\n // Calculate bone transformation\n const t = (Date.now() / 20000) * settings.speed;\n const angle = Math.sin(t) * settings.angle;\n // Compute Transforms when angle is applied\n animSkinnedGrid(gridBoneCollection.transforms, angle);\n\n // Write to mvp to camera buffer\n device.queue.writeBuffer(\n cameraBuffer,\n 0,\n projectionMatrix.buffer,\n projectionMatrix.byteOffset,\n projectionMatrix.byteLength\n );\n\n device.queue.writeBuffer(\n cameraBuffer,\n 64,\n viewMatrix.buffer,\n viewMatrix.byteOffset,\n viewMatrix.byteLength\n );\n\n device.queue.writeBuffer(\n cameraBuffer,\n 128,\n modelMatrix.buffer,\n modelMatrix.byteOffset,\n modelMatrix.byteLength\n );\n\n // Write to skinned grid bone uniform buffer\n for (let i = 0; i < gridBoneCollection.transforms.length; i++) {\n device.queue.writeBuffer(\n skinnedGridJointUniformBuffer,\n i * 64,\n gridBoneCollection.transforms[i] as Float32Array\n );\n }\n\n // Difference between these two render passes is just the presence of depthTexture\n gltfRenderPassDescriptor.colorAttachments[0].view = context\n .getCurrentTexture()\n .createView();\n\n skinnedGridRenderPassDescriptor.colorAttachments[0].view = context\n .getCurrentTexture()\n .createView();\n\n // Update node matrixes\n for (const scene of whaleScene.scenes) {\n scene.root.updateWorldMatrix(device);\n }\n\n // Updates skins (we index into skins in the renderer, which is not the best approach but hey)\n animWhaleSkin(whaleScene.skins[0], Math.sin(t) * settings.angle);\n // Node 6 should be the only node with a drawable mesh so hopefully this works fine\n whaleScene.skins[0].update(device, 6, whaleScene.nodes);\n\n const commandEncoder = device.createCommandEncoder();\n if (settings.object === 'Whale') {\n const passEncoder = commandEncoder.beginRenderPass(\n gltfRenderPassDescriptor\n );\n for (const scene of whaleScene.scenes) {\n scene.root.renderDrawables(passEncoder, [\n cameraBGCluster.bindGroups[0],\n generalUniformsBGCLuster.bindGroups[0],\n ]);\n }\n passEncoder.end();\n } else {\n // Our skinned grid isn't checking for depth, so we pass it\n // a separate render descriptor that does not take in a depth texture\n const passEncoder = commandEncoder.beginRenderPass(\n skinnedGridRenderPassDescriptor\n );\n passEncoder.setPipeline(skinnedGridPipeline);\n passEncoder.setBindGroup(0, cameraBGCluster.bindGroups[0]);\n passEncoder.setBindGroup(1, generalUniformsBGCLuster.bindGroups[0]);\n passEncoder.setBindGroup(2, skinnedGridBoneBGCluster.bindGroups[0]);\n // Pass in vertex and index buffers generated from our static skinned grid\n // data at ./gridData.ts\n passEncoder.setVertexBuffer(0, skinnedGridVertexBuffers.positions);\n passEncoder.setVertexBuffer(1, skinnedGridVertexBuffers.joints);\n passEncoder.setVertexBuffer(2, skinnedGridVertexBuffers.weights);\n passEncoder.setIndexBuffer(skinnedGridVertexBuffers.indices, 'uint16');\n passEncoder.drawIndexed(gridIndices.length, 1);\n passEncoder.end();\n }\n\n device.queue.submit([commandEncoder.finish()]);\n\n requestAnimationFrame(frame);\n}\nrequestAnimationFrame(frame);\n"],"names":["requestAnimationFrame","requestAnimationFrame$1","mat4","GUI","vec3"],"mappings":"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CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GA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AC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5B,IAAI,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG;AACpD,SAAS,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;AAC/C,IAAI,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG;AACpD,SAAS,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;AAC/C,IAAI,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;AACrD,SAAS,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;AAChD,IAAI,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;AACrD,SAAS,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;AAChD,IAAI,OAAO,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;AACrD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,QAAQ,GAAG,SAAS,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE;AAC/B,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AACjC,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG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M,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACvC,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACvC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/B,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GA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","x_google_ignoreList":[0,1]} \ No newline at end of file diff --git a/sample/texturedCube/main.js b/sample/texturedCube/main.js index b67c0652..c72f97c4 100644 --- a/sample/texturedCube/main.js +++ b/sample/texturedCube/main.js @@ -2448,20 +2448,20 @@ const cubeVertexArray = new Float32Array([ ]); var basicVertWGSL = `struct Uniforms { - modelViewProjectionMatrix : mat4x4, + modelViewProjectionMatrix : mat4x4f, } @binding(0) @group(0) var uniforms : Uniforms; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) fragUV : vec2, - @location(1) fragPosition: vec4, + @builtin(position) Position : vec4f, + @location(0) fragUV : vec2f, + @location(1) fragPosition: vec4f, } @vertex fn main( - @location(0) position : vec4, - @location(1) uv : vec2 + @location(0) position : vec4f, + @location(1) uv : vec2f ) -> VertexOutput { var output : VertexOutput; output.Position = uniforms.modelViewProjectionMatrix * position; @@ -2476,9 +2476,9 @@ var sampleTextureMixColorWGSL = `@group(0) @binding(1) var mySampler: sampler; @fragment fn main( - @location(0) fragUV: vec2, - @location(1) fragPosition: vec4 -) -> @location(0) vec4 { + @location(0) fragUV: vec2f, + @location(1) fragPosition: vec4f +) -> @location(0) vec4f { return textureSample(myTexture, mySampler, fragUV) * fragPosition; } `; diff --git a/sample/texturedCube/sampleTextureMixColor.frag.wgsl b/sample/texturedCube/sampleTextureMixColor.frag.wgsl index 04e64a65..8f0165c3 100644 --- a/sample/texturedCube/sampleTextureMixColor.frag.wgsl +++ b/sample/texturedCube/sampleTextureMixColor.frag.wgsl @@ -3,8 +3,8 @@ @fragment fn main( - @location(0) fragUV: vec2, - @location(1) fragPosition: vec4 -) -> @location(0) vec4 { + @location(0) fragUV: vec2f, + @location(1) fragPosition: vec4f +) -> @location(0) vec4f { return textureSample(myTexture, mySampler, fragUV) * fragPosition; } diff --git a/sample/twoCubes/main.js b/sample/twoCubes/main.js index d0428f4a..8a508dd7 100644 --- a/sample/twoCubes/main.js +++ b/sample/twoCubes/main.js @@ -2448,20 +2448,20 @@ const cubeVertexArray = new Float32Array([ ]); var basicVertWGSL = `struct Uniforms { - modelViewProjectionMatrix : mat4x4, + modelViewProjectionMatrix : mat4x4f, } @binding(0) @group(0) var uniforms : Uniforms; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) fragUV : vec2, - @location(1) fragPosition: vec4, + @builtin(position) Position : vec4f, + @location(0) fragUV : vec2f, + @location(1) fragPosition: vec4f, } @vertex fn main( - @location(0) position : vec4, - @location(1) uv : vec2 + @location(0) position : vec4f, + @location(1) uv : vec2f ) -> VertexOutput { var output : VertexOutput; output.Position = uniforms.modelViewProjectionMatrix * position; @@ -2473,9 +2473,9 @@ fn main( var vertexPositionColorWGSL = `@fragment fn main( - @location(0) fragUV: vec2, - @location(1) fragPosition: vec4 -) -> @location(0) vec4 { + @location(0) fragUV: vec2f, + @location(1) fragPosition: vec4f +) -> @location(0) vec4f { return fragPosition; } `; diff --git a/sample/videoUploading/main.js b/sample/videoUploading/main.js index 78d49e06..3d95a934 100644 --- a/sample/videoUploading/main.js +++ b/sample/videoUploading/main.js @@ -2497,8 +2497,8 @@ var fullscreenTexturedQuadWGSL = `@group(0) @binding(0) var mySampler : sampler; @group(0) @binding(1) var myTexture : texture_2d; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) fragUV : vec2, + @builtin(position) Position : vec4f, + @location(0) fragUV : vec2f, } @vertex @@ -2528,7 +2528,7 @@ fn vert_main(@builtin(vertex_index) VertexIndex : u32) -> VertexOutput { } @fragment -fn frag_main(@location(0) fragUV : vec2) -> @location(0) vec4 { +fn frag_main(@location(0) fragUV : vec2f) -> @location(0) vec4f { return textureSample(myTexture, mySampler, fragUV); } `; @@ -2537,7 +2537,7 @@ var sampleExternalTextureWGSL = `@group(0) @binding(1) var mySampler: sampler; @group(0) @binding(2) var myTexture: texture_external; @fragment -fn main(@location(0) fragUV : vec2) -> @location(0) vec4 { +fn main(@location(0) fragUV : vec2f) -> @location(0) vec4f { return textureSampleBaseClampToEdge(myTexture, mySampler, fragUV); } `; diff --git a/sample/worker/worker.js b/sample/worker/worker.js index 92251d94..ea3cdf1c 100644 --- a/sample/worker/worker.js +++ b/sample/worker/worker.js @@ -2448,20 +2448,20 @@ const cubeVertexArray = new Float32Array([ ]); var basicVertWGSL = `struct Uniforms { - modelViewProjectionMatrix : mat4x4, + modelViewProjectionMatrix : mat4x4f, } @binding(0) @group(0) var uniforms : Uniforms; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) fragUV : vec2, - @location(1) fragPosition: vec4, + @builtin(position) Position : vec4f, + @location(0) fragUV : vec2f, + @location(1) fragPosition: vec4f, } @vertex fn main( - @location(0) position : vec4, - @location(1) uv : vec2 + @location(0) position : vec4f, + @location(1) uv : vec2f ) -> VertexOutput { var output : VertexOutput; output.Position = uniforms.modelViewProjectionMatrix * position; @@ -2473,9 +2473,9 @@ fn main( var vertexPositionColorWGSL = `@fragment fn main( - @location(0) fragUV: vec2, - @location(1) fragPosition: vec4 -) -> @location(0) vec4 { + @location(0) fragUV: vec2f, + @location(1) fragPosition: vec4f +) -> @location(0) vec4f { return fragPosition; } `; diff --git a/shaders/basic.vert.wgsl b/shaders/basic.vert.wgsl index 257c9276..64052407 100644 --- a/shaders/basic.vert.wgsl +++ b/shaders/basic.vert.wgsl @@ -1,18 +1,18 @@ struct Uniforms { - modelViewProjectionMatrix : mat4x4, + modelViewProjectionMatrix : mat4x4f, } @binding(0) @group(0) var uniforms : Uniforms; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) fragUV : vec2, - @location(1) fragPosition: vec4, + @builtin(position) Position : vec4f, + @location(0) fragUV : vec2f, + @location(1) fragPosition: vec4f, } @vertex fn main( - @location(0) position : vec4, - @location(1) uv : vec2 + @location(0) position : vec4f, + @location(1) uv : vec2f ) -> VertexOutput { var output : VertexOutput; output.Position = uniforms.modelViewProjectionMatrix * position; diff --git a/shaders/fullscreenTexturedQuad.wgsl b/shaders/fullscreenTexturedQuad.wgsl index 415dcfd7..b3656e23 100644 --- a/shaders/fullscreenTexturedQuad.wgsl +++ b/shaders/fullscreenTexturedQuad.wgsl @@ -2,8 +2,8 @@ @group(0) @binding(1) var myTexture : texture_2d; struct VertexOutput { - @builtin(position) Position : vec4, - @location(0) fragUV : vec2, + @builtin(position) Position : vec4f, + @location(0) fragUV : vec2f, } @vertex @@ -33,6 +33,6 @@ fn vert_main(@builtin(vertex_index) VertexIndex : u32) -> VertexOutput { } @fragment -fn frag_main(@location(0) fragUV : vec2) -> @location(0) vec4 { +fn frag_main(@location(0) fragUV : vec2f) -> @location(0) vec4f { return textureSample(myTexture, mySampler, fragUV); } diff --git a/shaders/red.frag.wgsl b/shaders/red.frag.wgsl index 69fb65b1..de720e85 100644 --- a/shaders/red.frag.wgsl +++ b/shaders/red.frag.wgsl @@ -1,4 +1,4 @@ @fragment -fn main() -> @location(0) vec4 { +fn main() -> @location(0) vec4f { return vec4(1.0, 0.0, 0.0, 1.0); } \ No newline at end of file diff --git a/shaders/sampleExternalTexture.frag.wgsl b/shaders/sampleExternalTexture.frag.wgsl index ac665293..e5ff5693 100644 --- a/shaders/sampleExternalTexture.frag.wgsl +++ b/shaders/sampleExternalTexture.frag.wgsl @@ -2,6 +2,6 @@ @group(0) @binding(2) var myTexture: texture_external; @fragment -fn main(@location(0) fragUV : vec2) -> @location(0) vec4 { +fn main(@location(0) fragUV : vec2f) -> @location(0) vec4f { return textureSampleBaseClampToEdge(myTexture, mySampler, fragUV); } diff --git a/shaders/triangle.vert.wgsl b/shaders/triangle.vert.wgsl index 9bac6bb7..0df4e5fc 100644 --- a/shaders/triangle.vert.wgsl +++ b/shaders/triangle.vert.wgsl @@ -1,12 +1,12 @@ @vertex fn main( @builtin(vertex_index) VertexIndex : u32 -) -> @builtin(position) vec4 { - var pos = array, 3>( +) -> @builtin(position) vec4f { + var pos = array( vec2(0.0, 0.5), vec2(-0.5, -0.5), vec2(0.5, -0.5) ); - return vec4(pos[VertexIndex], 0.0, 1.0); + return vec4f(pos[VertexIndex], 0.0, 1.0); } diff --git a/shaders/vertexPositionColor.frag.wgsl b/shaders/vertexPositionColor.frag.wgsl index 6f986128..a6032398 100644 --- a/shaders/vertexPositionColor.frag.wgsl +++ b/shaders/vertexPositionColor.frag.wgsl @@ -1,7 +1,7 @@ @fragment fn main( - @location(0) fragUV: vec2, - @location(1) fragPosition: vec4 -) -> @location(0) vec4 { + @location(0) fragUV: vec2f, + @location(1) fragPosition: vec4f +) -> @location(0) vec4f { return fragPosition; }