{"version":3,"file":"assets/js/webxr-polyfill-64a30af1149ccd925275.js","mappings":"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","sources":["webpack://@aptero/aptero-meet/webpack/bootstrap","webpack://@aptero/aptero-meet/webpack/runtime/global","webpack://@aptero/aptero-meet/./node_modules/webxr-polyfill/build/webxr-polyfill.module.js","webpack://@aptero/aptero-meet/./src/webxr-polyfill.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","/**\n * @license\n * webxr-polyfill\n * Copyright (c) 2017 Google\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @license\n * cardboard-vr-display\n * Copyright (c) 2015-2017 Google\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @license\n * webvr-polyfill-dpdb \n * Copyright (c) 2017 Google\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @license\n * wglu-preserve-state\n * Copyright (c) 2016, Brandon Jones.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * 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 THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/**\n * @license\n * nosleep.js\n * Copyright (c) 2017, Rich Tibbett\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * 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 THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nconst _global = typeof global !== 'undefined' ? global :\n typeof self !== 'undefined' ? self :\n typeof window !== 'undefined' ? window : {};\n\nconst PRIVATE = Symbol('@@webxr-polyfill/EventTarget');\nclass EventTarget {\n constructor() {\n this[PRIVATE] = {\n listeners: new Map(),\n };\n }\n addEventListener(type, listener) {\n if (typeof type !== 'string') { throw new Error('`type` must be a string'); }\n if (typeof listener !== 'function') { throw new Error('`listener` must be a function'); }\n const typedListeners = this[PRIVATE].listeners.get(type) || [];\n typedListeners.push(listener);\n this[PRIVATE].listeners.set(type, typedListeners);\n }\n removeEventListener(type, listener) {\n if (typeof type !== 'string') { throw new Error('`type` must be a string'); }\n if (typeof listener !== 'function') { throw new Error('`listener` must be a function'); }\n const typedListeners = this[PRIVATE].listeners.get(type) || [];\n for (let i = typedListeners.length; i >= 0; i--) {\n if (typedListeners[i] === listener) {\n typedListeners.pop();\n }\n }\n }\n dispatchEvent(type, event) {\n const typedListeners = this[PRIVATE].listeners.get(type) || [];\n const queue = [];\n for (let i = 0; i < typedListeners.length; i++) {\n queue[i] = typedListeners[i];\n }\n for (let listener of queue) {\n listener(event);\n }\n if (typeof this[`on${type}`] === 'function') {\n this[`on${type}`](event);\n }\n }\n}\n\nconst EPSILON = 0.000001;\nlet ARRAY_TYPE = (typeof Float32Array !== 'undefined') ? Float32Array : Array;\n\n\nconst degree = Math.PI / 180;\n\nfunction create() {\n let out = new ARRAY_TYPE(16);\n if(ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n }\n out[0] = 1;\n out[5] = 1;\n out[10] = 1;\n out[15] = 1;\n return out;\n}\n\nfunction copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n\n\nfunction identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\nfunction invert(out, a) {\n let a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];\n let a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];\n let a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];\n let a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n let b00 = a00 * a11 - a01 * a10;\n let b01 = a00 * a12 - a02 * a10;\n let b02 = a00 * a13 - a03 * a10;\n let b03 = a01 * a12 - a02 * a11;\n let b04 = a01 * a13 - a03 * a11;\n let b05 = a02 * a13 - a03 * a12;\n let b06 = a20 * a31 - a21 * a30;\n let b07 = a20 * a32 - a22 * a30;\n let b08 = a20 * a33 - a23 * a30;\n let b09 = a21 * a32 - a22 * a31;\n let b10 = a21 * a33 - a23 * a31;\n let b11 = a22 * a33 - a23 * a32;\n let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n return out;\n}\n\n\nfunction multiply(out, a, b) {\n let a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];\n let a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];\n let a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];\n let a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n let b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3];\n out[0] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[1] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[2] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[3] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n b0 = b[4]; b1 = b[5]; b2 = b[6]; b3 = b[7];\n out[4] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[5] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[6] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[7] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n b0 = b[8]; b1 = b[9]; b2 = b[10]; b3 = b[11];\n out[8] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[9] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[10] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[11] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n b0 = b[12]; b1 = b[13]; b2 = b[14]; b3 = b[15];\n out[12] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[13] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[14] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[15] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n return out;\n}\n\n\n\n\n\n\n\n\n\n\n\n\nfunction fromRotationTranslation(out, q, v) {\n let x = q[0], y = q[1], z = q[2], w = q[3];\n let x2 = x + x;\n let y2 = y + y;\n let z2 = z + z;\n let xx = x * x2;\n let xy = x * y2;\n let xz = x * z2;\n let yy = y * y2;\n let yz = y * z2;\n let zz = z * z2;\n let wx = w * x2;\n let wy = w * y2;\n let wz = w * z2;\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n\nfunction getTranslation(out, mat) {\n out[0] = mat[12];\n out[1] = mat[13];\n out[2] = mat[14];\n return out;\n}\n\nfunction getRotation(out, mat) {\n let trace = mat[0] + mat[5] + mat[10];\n let S = 0;\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out[3] = 0.25 * S;\n out[0] = (mat[6] - mat[9]) / S;\n out[1] = (mat[8] - mat[2]) / S;\n out[2] = (mat[1] - mat[4]) / S;\n } else if ((mat[0] > mat[5]) && (mat[0] > mat[10])) {\n S = Math.sqrt(1.0 + mat[0] - mat[5] - mat[10]) * 2;\n out[3] = (mat[6] - mat[9]) / S;\n out[0] = 0.25 * S;\n out[1] = (mat[1] + mat[4]) / S;\n out[2] = (mat[8] + mat[2]) / S;\n } else if (mat[5] > mat[10]) {\n S = Math.sqrt(1.0 + mat[5] - mat[0] - mat[10]) * 2;\n out[3] = (mat[8] - mat[2]) / S;\n out[0] = (mat[1] + mat[4]) / S;\n out[1] = 0.25 * S;\n out[2] = (mat[6] + mat[9]) / S;\n } else {\n S = Math.sqrt(1.0 + mat[10] - mat[0] - mat[5]) * 2;\n out[3] = (mat[1] - mat[4]) / S;\n out[0] = (mat[8] + mat[2]) / S;\n out[1] = (mat[6] + mat[9]) / S;\n out[2] = 0.25 * S;\n }\n return out;\n}\n\n\n\n\nfunction perspective(out, fovy, aspect, near, far) {\n let f = 1.0 / Math.tan(fovy / 2), nf;\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n if (far != null && far !== Infinity) {\n nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = (2 * far * near) * nf;\n } else {\n out[10] = -1;\n out[14] = -2 * near;\n }\n return out;\n}\n\nfunction create$1() {\n let out = new ARRAY_TYPE(3);\n if(ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n return out;\n}\nfunction clone$1(a) {\n var out = new ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\nfunction length(a) {\n let x = a[0];\n let y = a[1];\n let z = a[2];\n return Math.sqrt(x*x + y*y + z*z);\n}\nfunction fromValues$1(x, y, z) {\n let out = new ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\nfunction copy$1(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n\nfunction add$1(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n}\n\n\n\n\n\n\n\n\nfunction scale$1(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n}\n\n\n\n\n\n\nfunction normalize(out, a) {\n let x = a[0];\n let y = a[1];\n let z = a[2];\n let len = x*x + y*y + z*z;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n }\n return out;\n}\nfunction dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\nfunction cross(out, a, b) {\n let ax = a[0], ay = a[1], az = a[2];\n let bx = b[0], by = b[1], bz = b[2];\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n\n\n\n\n\n\nfunction transformQuat(out, a, q) {\n let qx = q[0], qy = q[1], qz = q[2], qw = q[3];\n let x = a[0], y = a[1], z = a[2];\n let uvx = qy * z - qz * y,\n uvy = qz * x - qx * z,\n uvz = qx * y - qy * x;\n let uuvx = qy * uvz - qz * uvy,\n uuvy = qz * uvx - qx * uvz,\n uuvz = qx * uvy - qy * uvx;\n let w2 = qw * 2;\n uvx *= w2;\n uvy *= w2;\n uvz *= w2;\n uuvx *= 2;\n uuvy *= 2;\n uuvz *= 2;\n out[0] = x + uvx + uuvx;\n out[1] = y + uvy + uuvy;\n out[2] = z + uvz + uuvz;\n return out;\n}\n\n\n\nfunction angle(a, b) {\n let tempA = fromValues$1(a[0], a[1], a[2]);\n let tempB = fromValues$1(b[0], b[1], b[2]);\n normalize(tempA, tempA);\n normalize(tempB, tempB);\n let cosine = dot(tempA, tempB);\n if(cosine > 1.0) {\n return 0;\n }\n else if(cosine < -1.0) {\n return Math.PI;\n } else {\n return Math.acos(cosine);\n }\n}\n\n\n\n\n\n\n\n\nconst len = length;\n\nconst forEach = (function() {\n let vec = create$1();\n return function(a, stride, offset, count, fn, arg) {\n let i, l;\n if(!stride) {\n stride = 3;\n }\n if(!offset) {\n offset = 0;\n }\n if(count) {\n l = Math.min((count * stride) + offset, a.length);\n } else {\n l = a.length;\n }\n for(i = offset; i < l; i += stride) {\n vec[0] = a[i]; vec[1] = a[i+1]; vec[2] = a[i+2];\n fn(vec, vec, arg);\n a[i] = vec[0]; a[i+1] = vec[1]; a[i+2] = vec[2];\n }\n return a;\n };\n})();\n\nfunction create$2() {\n let out = new ARRAY_TYPE(9);\n if(ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n }\n out[0] = 1;\n out[4] = 1;\n out[8] = 1;\n return out;\n}\n\nfunction create$3() {\n let out = new ARRAY_TYPE(4);\n if(ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n }\n return out;\n}\nfunction clone$3(a) {\n let out = new ARRAY_TYPE(4);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\nfunction fromValues$3(x, y, z, w) {\n let out = new ARRAY_TYPE(4);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\nfunction copy$3(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction normalize$1(out, a) {\n let x = a[0];\n let y = a[1];\n let z = a[2];\n let w = a[3];\n let len = x*x + y*y + z*z + w*w;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n out[0] = x * len;\n out[1] = y * len;\n out[2] = z * len;\n out[3] = w * len;\n }\n return out;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst forEach$1 = (function() {\n let vec = create$3();\n return function(a, stride, offset, count, fn, arg) {\n let i, l;\n if(!stride) {\n stride = 4;\n }\n if(!offset) {\n offset = 0;\n }\n if(count) {\n l = Math.min((count * stride) + offset, a.length);\n } else {\n l = a.length;\n }\n for(i = offset; i < l; i += stride) {\n vec[0] = a[i]; vec[1] = a[i+1]; vec[2] = a[i+2]; vec[3] = a[i+3];\n fn(vec, vec, arg);\n a[i] = vec[0]; a[i+1] = vec[1]; a[i+2] = vec[2]; a[i+3] = vec[3];\n }\n return a;\n };\n})();\n\nfunction create$4() {\n let out = new ARRAY_TYPE(4);\n if(ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n out[3] = 1;\n return out;\n}\n\nfunction setAxisAngle(out, axis, rad) {\n rad = rad * 0.5;\n let s = Math.sin(rad);\n out[0] = s * axis[0];\n out[1] = s * axis[1];\n out[2] = s * axis[2];\n out[3] = Math.cos(rad);\n return out;\n}\n\nfunction multiply$4(out, a, b) {\n let ax = a[0], ay = a[1], az = a[2], aw = a[3];\n let bx = b[0], by = b[1], bz = b[2], bw = b[3];\n out[0] = ax * bw + aw * bx + ay * bz - az * by;\n out[1] = ay * bw + aw * by + az * bx - ax * bz;\n out[2] = az * bw + aw * bz + ax * by - ay * bx;\n out[3] = aw * bw - ax * bx - ay * by - az * bz;\n return out;\n}\n\n\n\n\nfunction slerp(out, a, b, t) {\n let ax = a[0], ay = a[1], az = a[2], aw = a[3];\n let bx = b[0], by = b[1], bz = b[2], bw = b[3];\n let omega, cosom, sinom, scale0, scale1;\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n if ( cosom < 0.0 ) {\n cosom = -cosom;\n bx = - bx;\n by = - by;\n bz = - bz;\n bw = - bw;\n }\n if ( (1.0 - cosom) > EPSILON ) {\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n}\n\nfunction invert$2(out, a) {\n let a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3];\n let dot$$1 = a0*a0 + a1*a1 + a2*a2 + a3*a3;\n let invDot = dot$$1 ? 1.0/dot$$1 : 0;\n out[0] = -a0*invDot;\n out[1] = -a1*invDot;\n out[2] = -a2*invDot;\n out[3] = a3*invDot;\n return out;\n}\n\nfunction fromMat3(out, m) {\n let fTrace = m[0] + m[4] + m[8];\n let fRoot;\n if ( fTrace > 0.0 ) {\n fRoot = Math.sqrt(fTrace + 1.0);\n out[3] = 0.5 * fRoot;\n fRoot = 0.5/fRoot;\n out[0] = (m[5]-m[7])*fRoot;\n out[1] = (m[6]-m[2])*fRoot;\n out[2] = (m[1]-m[3])*fRoot;\n } else {\n let i = 0;\n if ( m[4] > m[0] )\n i = 1;\n if ( m[8] > m[i*3+i] )\n i = 2;\n let j = (i+1)%3;\n let k = (i+2)%3;\n fRoot = Math.sqrt(m[i*3+i]-m[j*3+j]-m[k*3+k] + 1.0);\n out[i] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot;\n out[3] = (m[j*3+k] - m[k*3+j]) * fRoot;\n out[j] = (m[j*3+i] + m[i*3+j]) * fRoot;\n out[k] = (m[k*3+i] + m[i*3+k]) * fRoot;\n }\n return out;\n}\nfunction fromEuler(out, x, y, z) {\n let halfToRad = 0.5 * Math.PI / 180.0;\n x *= halfToRad;\n y *= halfToRad;\n z *= halfToRad;\n let sx = Math.sin(x);\n let cx = Math.cos(x);\n let sy = Math.sin(y);\n let cy = Math.cos(y);\n let sz = Math.sin(z);\n let cz = Math.cos(z);\n out[0] = sx * cy * cz - cx * sy * sz;\n out[1] = cx * sy * cz + sx * cy * sz;\n out[2] = cx * cy * sz - sx * sy * cz;\n out[3] = cx * cy * cz + sx * sy * sz;\n return out;\n}\n\nconst clone$4 = clone$3;\nconst fromValues$4 = fromValues$3;\nconst copy$4 = copy$3;\n\n\n\n\n\n\n\n\n\n\nconst normalize$2 = normalize$1;\n\n\nconst rotationTo = (function() {\n let tmpvec3 = create$1();\n let xUnitVec3 = fromValues$1(1,0,0);\n let yUnitVec3 = fromValues$1(0,1,0);\n return function(out, a, b) {\n let dot$$1 = dot(a, b);\n if (dot$$1 < -0.999999) {\n cross(tmpvec3, xUnitVec3, a);\n if (len(tmpvec3) < 0.000001)\n cross(tmpvec3, yUnitVec3, a);\n normalize(tmpvec3, tmpvec3);\n setAxisAngle(out, tmpvec3, Math.PI);\n return out;\n } else if (dot$$1 > 0.999999) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n } else {\n cross(tmpvec3, a, b);\n out[0] = tmpvec3[0];\n out[1] = tmpvec3[1];\n out[2] = tmpvec3[2];\n out[3] = 1 + dot$$1;\n return normalize$2(out, out);\n }\n };\n})();\nconst sqlerp = (function () {\n let temp1 = create$4();\n let temp2 = create$4();\n return function (out, a, b, c, d, t) {\n slerp(temp1, a, d, t);\n slerp(temp2, b, c, t);\n slerp(out, temp1, temp2, 2 * t * (1 - t));\n return out;\n };\n}());\nconst setAxes = (function() {\n let matr = create$2();\n return function(out, view, right, up) {\n matr[0] = right[0];\n matr[3] = right[1];\n matr[6] = right[2];\n matr[1] = up[0];\n matr[4] = up[1];\n matr[7] = up[2];\n matr[2] = -view[0];\n matr[5] = -view[1];\n matr[8] = -view[2];\n return normalize$2(out, fromMat3(out, matr));\n };\n})();\n\nconst PRIVATE$1 = Symbol('@@webxr-polyfill/XRRigidTransform');\nclass XRRigidTransform$1 {\n constructor() {\n this[PRIVATE$1] = {\n matrix: null,\n position: null,\n orientation: null,\n inverse: null,\n };\n if (arguments.length === 0) {\n this[PRIVATE$1].matrix = identity(new Float32Array(16));\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Float32Array) {\n this[PRIVATE$1].matrix = arguments[0];\n } else {\n this[PRIVATE$1].position = this._getPoint(arguments[0]);\n this[PRIVATE$1].orientation = DOMPointReadOnly.fromPoint({\n x: 0, y: 0, z: 0, w: 1\n });\n }\n } else if (arguments.length === 2) {\n this[PRIVATE$1].position = this._getPoint(arguments[0]);\n this[PRIVATE$1].orientation = this._getPoint(arguments[1]);\n } else {\n throw new Error(\"Too many arguments!\");\n }\n if (this[PRIVATE$1].matrix) {\n let position = create$1();\n getTranslation(position, this[PRIVATE$1].matrix);\n this[PRIVATE$1].position = DOMPointReadOnly.fromPoint({\n x: position[0],\n y: position[1],\n z: position[2]\n });\n let orientation = create$4();\n getRotation(orientation, this[PRIVATE$1].matrix);\n this[PRIVATE$1].orientation = DOMPointReadOnly.fromPoint({\n x: orientation[0],\n y: orientation[1],\n z: orientation[2],\n w: orientation[3]\n });\n } else {\n this[PRIVATE$1].matrix = identity(new Float32Array(16));\n fromRotationTranslation(\n this[PRIVATE$1].matrix,\n fromValues$4(\n this[PRIVATE$1].orientation.x,\n this[PRIVATE$1].orientation.y,\n this[PRIVATE$1].orientation.z,\n this[PRIVATE$1].orientation.w),\n fromValues$1(\n this[PRIVATE$1].position.x,\n this[PRIVATE$1].position.y,\n this[PRIVATE$1].position.z)\n );\n }\n }\n _getPoint(arg) {\n if (arg instanceof DOMPointReadOnly) {\n return arg;\n }\n return DOMPointReadOnly.fromPoint(arg);\n }\n get matrix() { return this[PRIVATE$1].matrix; }\n get position() { return this[PRIVATE$1].position; }\n get orientation() { return this[PRIVATE$1].orientation; }\n get inverse() {\n if (this[PRIVATE$1].inverse === null) {\n let invMatrix = identity(new Float32Array(16));\n invert(invMatrix, this[PRIVATE$1].matrix);\n this[PRIVATE$1].inverse = new XRRigidTransform$1(invMatrix);\n this[PRIVATE$1].inverse[PRIVATE$1].inverse = this;\n }\n return this[PRIVATE$1].inverse;\n }\n}\n\nconst PRIVATE$2 = Symbol('@@webxr-polyfill/XRSpace');\n\nclass XRSpace {\n constructor(specialType = null, inputSource = null) {\n this[PRIVATE$2] = {\n specialType,\n inputSource,\n baseMatrix: null,\n inverseBaseMatrix: null,\n lastFrameId: -1\n };\n }\n get _specialType() {\n return this[PRIVATE$2].specialType;\n }\n get _inputSource() {\n return this[PRIVATE$2].inputSource;\n }\n _ensurePoseUpdated(device, frameId) {\n if (frameId == this[PRIVATE$2].lastFrameId) return;\n this[PRIVATE$2].lastFrameId = frameId;\n this._onPoseUpdate(device);\n }\n _onPoseUpdate(device) {\n if (this[PRIVATE$2].specialType == 'viewer') {\n this._baseMatrix = device.getBasePoseMatrix();\n }\n }\n set _baseMatrix(matrix) {\n this[PRIVATE$2].baseMatrix = matrix;\n this[PRIVATE$2].inverseBaseMatrix = null;\n }\n get _baseMatrix() {\n if (!this[PRIVATE$2].baseMatrix) {\n if (this[PRIVATE$2].inverseBaseMatrix) {\n this[PRIVATE$2].baseMatrix = new Float32Array(16);\n invert(this[PRIVATE$2].baseMatrix, this[PRIVATE$2].inverseBaseMatrix);\n }\n }\n return this[PRIVATE$2].baseMatrix;\n }\n set _inverseBaseMatrix(matrix) {\n this[PRIVATE$2].inverseBaseMatrix = matrix;\n this[PRIVATE$2].baseMatrix = null;\n }\n get _inverseBaseMatrix() {\n if (!this[PRIVATE$2].inverseBaseMatrix) {\n if (this[PRIVATE$2].baseMatrix) {\n this[PRIVATE$2].inverseBaseMatrix = new Float32Array(16);\n invert(this[PRIVATE$2].inverseBaseMatrix, this[PRIVATE$2].baseMatrix);\n }\n }\n return this[PRIVATE$2].inverseBaseMatrix;\n }\n _getSpaceRelativeTransform(space) {\n if (!this._inverseBaseMatrix || !space._baseMatrix) {\n return null;\n }\n let out = new Float32Array(16);\n multiply(out, this._inverseBaseMatrix, space._baseMatrix);\n return new XRRigidTransform$1(out);\n }\n}\n\nconst DEFAULT_EMULATION_HEIGHT = 1.6;\nconst PRIVATE$3 = Symbol('@@webxr-polyfill/XRReferenceSpace');\nconst XRReferenceSpaceTypes = [\n 'viewer',\n 'local',\n 'local-floor',\n 'bounded-floor',\n 'unbounded'\n];\nfunction isFloor(type) {\n return type === 'bounded-floor' || type === 'local-floor';\n}\nclass XRReferenceSpace extends XRSpace {\n constructor(type, transform = null) {\n if (!XRReferenceSpaceTypes.includes(type)) {\n throw new Error(`XRReferenceSpaceType must be one of ${XRReferenceSpaceTypes}`);\n }\n super(type);\n if (type === 'bounded-floor' && !transform) {\n throw new Error(`XRReferenceSpace cannot use 'bounded-floor' type if the platform does not provide the floor level`);\n }\n if (isFloor(type) && !transform) {\n transform = identity(new Float32Array(16));\n transform[13] = DEFAULT_EMULATION_HEIGHT;\n }\n this._inverseBaseMatrix = transform || identity(new Float32Array(16));\n this[PRIVATE$3] = {\n type,\n transform,\n originOffset : identity(new Float32Array(16)),\n };\n }\n _transformBasePoseMatrix(out, pose) {\n multiply(out, this._inverseBaseMatrix, pose);\n }\n _originOffsetMatrix() {\n return this[PRIVATE$3].originOffset;\n }\n _adjustForOriginOffset(transformMatrix) {\n let inverseOriginOffsetMatrix = new Float32Array(16);\n invert(inverseOriginOffsetMatrix, this[PRIVATE$3].originOffset);\n multiply(transformMatrix, inverseOriginOffsetMatrix, transformMatrix);\n }\n _getSpaceRelativeTransform(space) {\n let transform = super._getSpaceRelativeTransform(space);\n this._adjustForOriginOffset(transform.matrix);\n return new XRRigidTransform(transform.matrix);\n }\n getOffsetReferenceSpace(additionalOffset) {\n let newSpace = new XRReferenceSpace(\n this[PRIVATE$3].type,\n this[PRIVATE$3].transform,\n this[PRIVATE$3].bounds);\n multiply(newSpace[PRIVATE$3].originOffset, this[PRIVATE$3].originOffset, additionalOffset.matrix);\n return newSpace;\n }\n}\n\nconst PRIVATE$4 = Symbol('@@webxr-polyfill/XR');\nconst XRSessionModes = ['inline', 'immersive-vr', 'immersive-ar'];\nconst DEFAULT_SESSION_OPTIONS = {\n 'inline': {\n requiredFeatures: ['viewer'],\n optionalFeatures: [],\n },\n 'immersive-vr': {\n requiredFeatures: ['viewer', 'local'],\n optionalFeatures: [],\n },\n 'immersive-ar': {\n requiredFeatures: ['viewer', 'local'],\n optionalFeatures: [],\n }\n};\nconst POLYFILL_REQUEST_SESSION_ERROR =\n`Polyfill Error: Must call navigator.xr.isSessionSupported() with any XRSessionMode\nor navigator.xr.requestSession('inline') prior to requesting an immersive\nsession. This is a limitation specific to the WebXR Polyfill and does not apply\nto native implementations of the API.`;\nclass XRSystem extends EventTarget {\n constructor(devicePromise) {\n super();\n this[PRIVATE$4] = {\n device: null,\n devicePromise,\n immersiveSession: null,\n inlineSessions: new Set(),\n };\n devicePromise.then((device) => { this[PRIVATE$4].device = device; });\n }\n async isSessionSupported(mode) {\n if (!this[PRIVATE$4].device) {\n await this[PRIVATE$4].devicePromise;\n }\n if (mode != 'inline') {\n return Promise.resolve(this[PRIVATE$4].device.isSessionSupported(mode));\n }\n return Promise.resolve(true);\n }\n async requestSession(mode, options) {\n if (!this[PRIVATE$4].device) {\n if (mode != 'inline') {\n throw new Error(POLYFILL_REQUEST_SESSION_ERROR);\n } else {\n await this[PRIVATE$4].devicePromise;\n }\n }\n if (!XRSessionModes.includes(mode)) {\n throw new TypeError(\n `The provided value '${mode}' is not a valid enum value of type XRSessionMode`);\n }\n const defaultOptions = DEFAULT_SESSION_OPTIONS[mode];\n const requiredFeatures = defaultOptions.requiredFeatures.concat(\n options && options.requiredFeatures ? options.requiredFeatures : []);\n const optionalFeatures = defaultOptions.optionalFeatures.concat(\n options && options.optionalFeatures ? options.optionalFeatures : []);\n const enabledFeatures = new Set();\n let requirementsFailed = false;\n for (let feature of requiredFeatures) {\n if (!this[PRIVATE$4].device.isFeatureSupported(feature)) {\n console.error(`The required feature '${feature}' is not supported`);\n requirementsFailed = true;\n } else {\n enabledFeatures.add(feature);\n }\n }\n if (requirementsFailed) {\n throw new DOMException('Session does not support some required features', 'NotSupportedError');\n }\n for (let feature of optionalFeatures) {\n if (!this[PRIVATE$4].device.isFeatureSupported(feature)) {\n console.log(`The optional feature '${feature}' is not supported`);\n } else {\n enabledFeatures.add(feature);\n }\n }\n const sessionId = await this[PRIVATE$4].device.requestSession(mode, enabledFeatures);\n const session = new XRSession(this[PRIVATE$4].device, mode, sessionId);\n if (mode == 'inline') {\n this[PRIVATE$4].inlineSessions.add(session);\n } else {\n this[PRIVATE$4].immersiveSession = session;\n }\n const onSessionEnd = () => {\n if (mode == 'inline') {\n this[PRIVATE$4].inlineSessions.delete(session);\n } else {\n this[PRIVATE$4].immersiveSession = null;\n }\n session.removeEventListener('end', onSessionEnd);\n };\n session.addEventListener('end', onSessionEnd);\n return session;\n }\n}\n\nlet now;\nif ('performance' in _global === false) {\n let startTime = Date.now();\n now = () => Date.now() - startTime;\n} else {\n now = () => performance.now();\n}\nvar now$1 = now;\n\nconst PRIVATE$5 = Symbol('@@webxr-polyfill/XRPose');\nclass XRPose$1 {\n constructor(transform, emulatedPosition) {\n this[PRIVATE$5] = {\n transform,\n emulatedPosition,\n };\n }\n get transform() { return this[PRIVATE$5].transform; }\n get emulatedPosition() { return this[PRIVATE$5].emulatedPosition; }\n}\n\nconst PRIVATE$6 = Symbol('@@webxr-polyfill/XRViewerPose');\nclass XRViewerPose extends XRPose$1 {\n constructor(transform, views, emulatedPosition = false) {\n super(transform, emulatedPosition);\n this[PRIVATE$6] = {\n views\n };\n }\n get views() {\n return this[PRIVATE$6].views;\n }\n}\n\nconst PRIVATE$7 = Symbol('@@webxr-polyfill/XRViewport');\nclass XRViewport {\n constructor(target) {\n this[PRIVATE$7] = { target };\n }\n get x() { return this[PRIVATE$7].target.x; }\n get y() { return this[PRIVATE$7].target.y; }\n get width() { return this[PRIVATE$7].target.width; }\n get height() { return this[PRIVATE$7].target.height; }\n}\n\nconst XREyes = ['left', 'right', 'none'];\nconst PRIVATE$8 = Symbol('@@webxr-polyfill/XRView');\nclass XRView {\n constructor(device, transform, eye, sessionId) {\n if (!XREyes.includes(eye)) {\n throw new Error(`XREye must be one of: ${XREyes}`);\n }\n const temp = Object.create(null);\n const viewport = new XRViewport(temp);\n this[PRIVATE$8] = {\n device,\n eye,\n viewport,\n temp,\n sessionId,\n transform,\n };\n }\n get eye() { return this[PRIVATE$8].eye; }\n get projectionMatrix() { return this[PRIVATE$8].device.getProjectionMatrix(this.eye); }\n get transform() { return this[PRIVATE$8].transform; }\n _getViewport(layer) {\n if (this[PRIVATE$8].device.getViewport(this[PRIVATE$8].sessionId,\n this.eye,\n layer,\n this[PRIVATE$8].temp)) {\n return this[PRIVATE$8].viewport;\n }\n return undefined;\n }\n}\n\nconst PRIVATE$9 = Symbol('@@webxr-polyfill/XRFrame');\nconst NON_ACTIVE_MSG = \"XRFrame access outside the callback that produced it is invalid.\";\nconst NON_ANIMFRAME_MSG = \"getViewerPose can only be called on XRFrame objects passed to XRSession.requestAnimationFrame callbacks.\";\nlet NEXT_FRAME_ID = 0;\nclass XRFrame {\n constructor(device, session, sessionId) {\n this[PRIVATE$9] = {\n id: ++NEXT_FRAME_ID,\n active: false,\n animationFrame: false,\n device,\n session,\n sessionId\n };\n }\n get session() { return this[PRIVATE$9].session; }\n getViewerPose(referenceSpace) {\n if (!this[PRIVATE$9].animationFrame) {\n throw new DOMException(NON_ANIMFRAME_MSG, 'InvalidStateError');\n }\n if (!this[PRIVATE$9].active) {\n throw new DOMException(NON_ACTIVE_MSG, 'InvalidStateError');\n }\n const device = this[PRIVATE$9].device;\n const session = this[PRIVATE$9].session;\n session[PRIVATE$15].viewerSpace._ensurePoseUpdated(device, this[PRIVATE$9].id);\n referenceSpace._ensurePoseUpdated(device, this[PRIVATE$9].id);\n let viewerTransform = referenceSpace._getSpaceRelativeTransform(session[PRIVATE$15].viewerSpace);\n const views = [];\n for (let viewSpace of session[PRIVATE$15].viewSpaces) {\n viewSpace._ensurePoseUpdated(device, this[PRIVATE$9].id);\n let viewTransform = referenceSpace._getSpaceRelativeTransform(viewSpace);\n let view = new XRView(device, viewTransform, viewSpace.eye, this[PRIVATE$9].sessionId);\n views.push(view);\n }\n let viewerPose = new XRViewerPose(viewerTransform, views, false );\n return viewerPose;\n }\n getPose(space, baseSpace) {\n if (!this[PRIVATE$9].active) {\n throw new DOMException(NON_ACTIVE_MSG, 'InvalidStateError');\n }\n const device = this[PRIVATE$9].device;\n if (space._specialType === \"target-ray\" || space._specialType === \"grip\") {\n return device.getInputPose(\n space._inputSource, baseSpace, space._specialType);\n } else {\n space._ensurePoseUpdated(device, this[PRIVATE$9].id);\n baseSpace._ensurePoseUpdated(device, this[PRIVATE$9].id);\n let transform = baseSpace._getSpaceRelativeTransform(space);\n if (!transform) { return null; }\n return new XRPose(transform, false );\n }\n return null;\n }\n}\n\nconst PRIVATE$10 = Symbol('@@webxr-polyfill/XRRenderState');\nconst XRRenderStateInit = Object.freeze({\n depthNear: 0.1,\n depthFar: 1000.0,\n inlineVerticalFieldOfView: null,\n baseLayer: null\n});\nclass XRRenderState {\n constructor(stateInit = {}) {\n const config = Object.assign({}, XRRenderStateInit, stateInit);\n this[PRIVATE$10] = { config };\n }\n get depthNear() { return this[PRIVATE$10].config.depthNear; }\n get depthFar() { return this[PRIVATE$10].config.depthFar; }\n get inlineVerticalFieldOfView() { return this[PRIVATE$10].config.inlineVerticalFieldOfView; }\n get baseLayer() { return this[PRIVATE$10].config.baseLayer; }\n}\n\nconst POLYFILLED_XR_COMPATIBLE = Symbol('@@webxr-polyfill/polyfilled-xr-compatible');\nconst XR_COMPATIBLE = Symbol('@@webxr-polyfill/xr-compatible');\n\nconst PRIVATE$11 = Symbol('@@webxr-polyfill/XRWebGLLayer');\nconst XRWebGLLayerInit = Object.freeze({\n antialias: true,\n depth: false,\n stencil: false,\n alpha: true,\n multiview: false,\n ignoreDepthValues: false,\n framebufferScaleFactor: 1.0,\n});\nclass XRWebGLLayer {\n constructor(session, context, layerInit={}) {\n const config = Object.assign({}, XRWebGLLayerInit, layerInit);\n if (!(session instanceof XRSession$1)) {\n throw new Error('session must be a XRSession');\n }\n if (session.ended) {\n throw new Error(`InvalidStateError`);\n }\n if (context[POLYFILLED_XR_COMPATIBLE]) {\n if (context[XR_COMPATIBLE] !== true) {\n throw new Error(`InvalidStateError`);\n }\n }\n const framebuffer = context.getParameter(context.FRAMEBUFFER_BINDING);\n this[PRIVATE$11] = {\n context,\n config,\n framebuffer,\n session,\n };\n }\n get context() { return this[PRIVATE$11].context; }\n get antialias() { return this[PRIVATE$11].config.antialias; }\n get ignoreDepthValues() { return true; }\n get framebuffer() { return this[PRIVATE$11].framebuffer; }\n get framebufferWidth() { return this[PRIVATE$11].context.drawingBufferWidth; }\n get framebufferHeight() { return this[PRIVATE$11].context.drawingBufferHeight; }\n get _session() { return this[PRIVATE$11].session; }\n getViewport(view) {\n return view._getViewport(this);\n }\n static getNativeFramebufferScaleFactor(session) {\n if (!session) {\n throw new TypeError('getNativeFramebufferScaleFactor must be passed a session.')\n }\n if (session[PRIVATE$15].ended) { return 0.0; }\n return 1.0;\n }\n}\n\nconst PRIVATE$12 = Symbol('@@webxr-polyfill/XRInputSourceEvent');\nclass XRInputSourceEvent extends Event {\n constructor(type, eventInitDict) {\n super(type, eventInitDict);\n this[PRIVATE$12] = {\n frame: eventInitDict.frame,\n inputSource: eventInitDict.inputSource\n };\n Object.setPrototypeOf(this, XRInputSourceEvent.prototype);\n }\n get frame() { return this[PRIVATE$12].frame; }\n get inputSource() { return this[PRIVATE$12].inputSource; }\n}\n\nconst PRIVATE$13 = Symbol('@@webxr-polyfill/XRSessionEvent');\nclass XRSessionEvent extends Event {\n constructor(type, eventInitDict) {\n super(type, eventInitDict);\n this[PRIVATE$13] = {\n session: eventInitDict.session\n };\n Object.setPrototypeOf(this, XRSessionEvent.prototype);\n }\n get session() { return this[PRIVATE$13].session; }\n}\n\nconst PRIVATE$14 = Symbol('@@webxr-polyfill/XRInputSourcesChangeEvent');\nclass XRInputSourcesChangeEvent extends Event {\n constructor(type, eventInitDict) {\n super(type, eventInitDict);\n this[PRIVATE$14] = {\n session: eventInitDict.session,\n added: eventInitDict.added,\n removed: eventInitDict.removed\n };\n Object.setPrototypeOf(this, XRInputSourcesChangeEvent.prototype);\n }\n get session() { return this[PRIVATE$14].session; }\n get added() { return this[PRIVATE$14].added; }\n get removed() { return this[PRIVATE$14].removed; }\n}\n\nconst PRIVATE$15 = Symbol('@@webxr-polyfill/XRSession');\nclass XRViewSpace extends XRSpace {\n constructor(eye) {\n super(eye);\n }\n get eye() {\n return this._specialType;\n }\n _onPoseUpdate(device) {\n this._inverseBaseMatrix = device.getBaseViewMatrix(this._specialType);\n }\n}\nclass XRSession$1 extends EventTarget {\n constructor(device, mode, id) {\n super();\n let immersive = mode != 'inline';\n let initialRenderState = new XRRenderState({\n inlineVerticalFieldOfView: immersive ? null : Math.PI * 0.5\n });\n this[PRIVATE$15] = {\n device,\n mode,\n immersive,\n ended: false,\n suspended: false,\n frameCallbacks: [],\n currentFrameCallbacks: null,\n frameHandle: 0,\n deviceFrameHandle: null,\n id,\n activeRenderState: initialRenderState,\n pendingRenderState: null,\n viewerSpace: new XRReferenceSpace(\"viewer\"),\n viewSpaces: [],\n currentInputSources: []\n };\n if (immersive) {\n this[PRIVATE$15].viewSpaces.push(new XRViewSpace('left'),\n new XRViewSpace('right'));\n } else {\n this[PRIVATE$15].viewSpaces.push(new XRViewSpace('none'));\n }\n this[PRIVATE$15].onDeviceFrame = () => {\n if (this[PRIVATE$15].ended || this[PRIVATE$15].suspended) {\n return;\n }\n this[PRIVATE$15].deviceFrameHandle = null;\n this[PRIVATE$15].startDeviceFrameLoop();\n if (this[PRIVATE$15].pendingRenderState !== null) {\n this[PRIVATE$15].activeRenderState = new XRRenderState(this[PRIVATE$15].pendingRenderState);\n this[PRIVATE$15].pendingRenderState = null;\n if (this[PRIVATE$15].activeRenderState.baseLayer) {\n this[PRIVATE$15].device.onBaseLayerSet(\n this[PRIVATE$15].id,\n this[PRIVATE$15].activeRenderState.baseLayer);\n }\n }\n if (this[PRIVATE$15].activeRenderState.baseLayer === null) {\n return;\n }\n const frame = new XRFrame(device, this, this[PRIVATE$15].id);\n const callbacks = this[PRIVATE$15].currentFrameCallbacks = this[PRIVATE$15].frameCallbacks;\n this[PRIVATE$15].frameCallbacks = [];\n frame[PRIVATE$9].active = true;\n frame[PRIVATE$9].animationFrame = true;\n this[PRIVATE$15].device.onFrameStart(this[PRIVATE$15].id, this[PRIVATE$15].activeRenderState);\n this._checkInputSourcesChange();\n const rightNow = now$1();\n for (let i = 0; i < callbacks.length; i++) {\n try {\n if (!callbacks[i].cancelled && typeof callbacks[i].callback === 'function') {\n callbacks[i].callback(rightNow, frame);\n }\n } catch(err) {\n console.error(err);\n }\n }\n this[PRIVATE$15].currentFrameCallbacks = null;\n frame[PRIVATE$9].active = false;\n this[PRIVATE$15].device.onFrameEnd(this[PRIVATE$15].id);\n };\n this[PRIVATE$15].startDeviceFrameLoop = () => {\n if (this[PRIVATE$15].deviceFrameHandle === null) {\n this[PRIVATE$15].deviceFrameHandle = this[PRIVATE$15].device.requestAnimationFrame(\n this[PRIVATE$15].onDeviceFrame\n );\n }\n };\n this[PRIVATE$15].stopDeviceFrameLoop = () => {\n const handle = this[PRIVATE$15].deviceFrameHandle;\n if (handle !== null) {\n this[PRIVATE$15].device.cancelAnimationFrame(handle);\n this[PRIVATE$15].deviceFrameHandle = null;\n }\n };\n this[PRIVATE$15].onPresentationEnd = sessionId => {\n if (sessionId !== this[PRIVATE$15].id) {\n this[PRIVATE$15].suspended = false;\n this[PRIVATE$15].startDeviceFrameLoop();\n this.dispatchEvent('focus', { session: this });\n return;\n }\n this[PRIVATE$15].ended = true;\n this[PRIVATE$15].stopDeviceFrameLoop();\n device.removeEventListener('@@webxr-polyfill/vr-present-end', this[PRIVATE$15].onPresentationEnd);\n device.removeEventListener('@@webxr-polyfill/vr-present-start', this[PRIVATE$15].onPresentationStart);\n device.removeEventListener('@@webxr-polyfill/input-select-start', this[PRIVATE$15].onSelectStart);\n device.removeEventListener('@@webxr-polyfill/input-select-end', this[PRIVATE$15].onSelectEnd);\n this.dispatchEvent('end', new XRSessionEvent('end', { session: this }));\n };\n device.addEventListener('@@webxr-polyfill/vr-present-end', this[PRIVATE$15].onPresentationEnd);\n this[PRIVATE$15].onPresentationStart = sessionId => {\n if (sessionId === this[PRIVATE$15].id) {\n return;\n }\n this[PRIVATE$15].suspended = true;\n this[PRIVATE$15].stopDeviceFrameLoop();\n this.dispatchEvent('blur', { session: this });\n };\n device.addEventListener('@@webxr-polyfill/vr-present-start', this[PRIVATE$15].onPresentationStart);\n this[PRIVATE$15].onSelectStart = evt => {\n if (evt.sessionId !== this[PRIVATE$15].id) {\n return;\n }\n this[PRIVATE$15].dispatchInputSourceEvent('selectstart', evt.inputSource);\n };\n device.addEventListener('@@webxr-polyfill/input-select-start', this[PRIVATE$15].onSelectStart);\n this[PRIVATE$15].onSelectEnd = evt => {\n if (evt.sessionId !== this[PRIVATE$15].id) {\n return;\n }\n this[PRIVATE$15].dispatchInputSourceEvent('selectend', evt.inputSource);\n this[PRIVATE$15].dispatchInputSourceEvent('select', evt.inputSource);\n };\n device.addEventListener('@@webxr-polyfill/input-select-end', this[PRIVATE$15].onSelectEnd);\n this[PRIVATE$15].onSqueezeStart = evt => {\n if (evt.sessionId !== this[PRIVATE$15].id) {\n return;\n }\n this[PRIVATE$15].dispatchInputSourceEvent('squeezestart', evt.inputSource);\n };\n device.addEventListener('@@webxr-polyfill/input-squeeze-start', this[PRIVATE$15].onSqueezeStart);\n this[PRIVATE$15].onSqueezeEnd = evt => {\n if (evt.sessionId !== this[PRIVATE$15].id) {\n return;\n }\n this[PRIVATE$15].dispatchInputSourceEvent('squeezeend', evt.inputSource);\n this[PRIVATE$15].dispatchInputSourceEvent('squeeze', evt.inputSource);\n };\n device.addEventListener('@@webxr-polyfill/input-squeeze-end', this[PRIVATE$15].onSqueezeEnd);\n this[PRIVATE$15].dispatchInputSourceEvent = (type, inputSource) => {\n const frame = new XRFrame(device, this, this[PRIVATE$15].id);\n const event = new XRInputSourceEvent(type, { frame, inputSource });\n frame[PRIVATE$9].active = true;\n this.dispatchEvent(type, event);\n frame[PRIVATE$9].active = false;\n };\n this[PRIVATE$15].startDeviceFrameLoop();\n this.onblur = undefined;\n this.onfocus = undefined;\n this.onresetpose = undefined;\n this.onend = undefined;\n this.onselect = undefined;\n this.onselectstart = undefined;\n this.onselectend = undefined;\n }\n get renderState() { return this[PRIVATE$15].activeRenderState; }\n get environmentBlendMode() {\n return this[PRIVATE$15].device.environmentBlendMode || 'opaque';\n }\n async requestReferenceSpace(type) {\n if (this[PRIVATE$15].ended) {\n return;\n }\n if (!XRReferenceSpaceTypes.includes(type)) {\n throw new TypeError(`XRReferenceSpaceType must be one of ${XRReferenceSpaceTypes}`);\n }\n if (!this[PRIVATE$15].device.doesSessionSupportReferenceSpace(this[PRIVATE$15].id, type)) {\n throw new DOMException(`The ${type} reference space is not supported by this session.`, 'NotSupportedError');\n }\n if (type === 'viewer') {\n return this[PRIVATE$15].viewerSpace;\n }\n let transform = await this[PRIVATE$15].device.requestFrameOfReferenceTransform(type);\n if (type === 'bounded-floor') {\n if (!transform) {\n throw new DOMException(`${type} XRReferenceSpace not supported by this device.`, 'NotSupportedError');\n }\n let bounds = this[PRIVATE$15].device.requestStageBounds();\n if (!bounds) {\n throw new DOMException(`${type} XRReferenceSpace not supported by this device.`, 'NotSupportedError');\n }\n throw new DOMException(`The WebXR polyfill does not support the ${type} reference space yet.`, 'NotSupportedError');\n }\n return new XRReferenceSpace(type, transform);\n }\n requestAnimationFrame(callback) {\n if (this[PRIVATE$15].ended) {\n return;\n }\n const handle = ++this[PRIVATE$15].frameHandle;\n this[PRIVATE$15].frameCallbacks.push({\n handle,\n callback,\n cancelled: false\n });\n return handle;\n }\n cancelAnimationFrame(handle) {\n let callbacks = this[PRIVATE$15].frameCallbacks;\n let index = callbacks.findIndex(d => d && d.handle === handle);\n if (index > -1) {\n callbacks[index].cancelled = true;\n callbacks.splice(index, 1);\n }\n callbacks = this[PRIVATE$15].currentFrameCallbacks;\n if (callbacks) {\n index = callbacks.findIndex(d => d && d.handle === handle);\n if (index > -1) {\n callbacks[index].cancelled = true;\n }\n }\n }\n get inputSources() {\n return this[PRIVATE$15].device.getInputSources();\n }\n async end() {\n if (this[PRIVATE$15].ended) {\n return;\n }\n if (this[PRIVATE$15].immersive) {\n this[PRIVATE$15].ended = true;\n this[PRIVATE$15].device.removeEventListener('@@webxr-polyfill/vr-present-start',\n this[PRIVATE$15].onPresentationStart);\n this[PRIVATE$15].device.removeEventListener('@@webxr-polyfill/vr-present-end',\n this[PRIVATE$15].onPresentationEnd);\n this[PRIVATE$15].device.removeEventListener('@@webxr-polyfill/input-select-start',\n this[PRIVATE$15].onSelectStart);\n this[PRIVATE$15].device.removeEventListener('@@webxr-polyfill/input-select-end',\n this[PRIVATE$15].onSelectEnd);\n this.dispatchEvent('end', new XRSessionEvent('end', { session: this }));\n }\n this[PRIVATE$15].stopDeviceFrameLoop();\n return this[PRIVATE$15].device.endSession(this[PRIVATE$15].id);\n }\n updateRenderState(newState) {\n if (this[PRIVATE$15].ended) {\n const message = \"Can't call updateRenderState on an XRSession \" +\n \"that has already ended.\";\n throw new Error(message);\n }\n if (newState.baseLayer && (newState.baseLayer._session !== this)) {\n const message = \"Called updateRenderState with a base layer that was \" +\n \"created by a different session.\";\n throw new Error(message);\n }\n const fovSet = (newState.inlineVerticalFieldOfView !== null) &&\n (newState.inlineVerticalFieldOfView !== undefined);\n if (fovSet) {\n if (this[PRIVATE$15].immersive) {\n const message = \"inlineVerticalFieldOfView must not be set for an \" +\n \"XRRenderState passed to updateRenderState for an \" +\n \"immersive session.\";\n throw new Error(message);\n } else {\n newState.inlineVerticalFieldOfView = Math.min(\n 3.13, Math.max(0.01, newState.inlineVerticalFieldOfView));\n }\n }\n if (this[PRIVATE$15].pendingRenderState === null) {\n const activeRenderState = this[PRIVATE$15].activeRenderState;\n this[PRIVATE$15].pendingRenderState = {\n depthNear: activeRenderState.depthNear,\n depthFar: activeRenderState.depthFar,\n inlineVerticalFieldOfView: activeRenderState.inlineVerticalFieldOfView,\n baseLayer: activeRenderState.baseLayer\n };\n }\n Object.assign(this[PRIVATE$15].pendingRenderState, newState);\n }\n _checkInputSourcesChange() {\n const added = [];\n const removed = [];\n const newInputSources = this.inputSources;\n const oldInputSources = this[PRIVATE$15].currentInputSources;\n for (const newInputSource of newInputSources) {\n if (!oldInputSources.includes(newInputSource)) {\n added.push(newInputSource);\n }\n }\n for (const oldInputSource of oldInputSources) {\n if (!newInputSources.includes(oldInputSource)) {\n removed.push(oldInputSource);\n }\n }\n if (added.length > 0 || removed.length > 0) {\n this.dispatchEvent('inputsourceschange', new XRInputSourcesChangeEvent('inputsourceschange', {\n session: this,\n added: added,\n removed: removed\n }));\n }\n this[PRIVATE$15].currentInputSources.length = 0;\n for (const newInputSource of newInputSources) {\n this[PRIVATE$15].currentInputSources.push(newInputSource);\n }\n }\n}\n\nconst PRIVATE$16 = Symbol('@@webxr-polyfill/XRInputSource');\nclass XRInputSource {\n constructor(impl) {\n this[PRIVATE$16] = {\n impl,\n gripSpace: new XRSpace(\"grip\", this),\n targetRaySpace: new XRSpace(\"target-ray\", this)\n };\n }\n get handedness() { return this[PRIVATE$16].impl.handedness; }\n get targetRayMode() { return this[PRIVATE$16].impl.targetRayMode; }\n get gripSpace() {\n let mode = this[PRIVATE$16].impl.targetRayMode;\n if (mode === \"gaze\" || mode === \"screen\") {\n return null;\n }\n return this[PRIVATE$16].gripSpace;\n }\n get targetRaySpace() { return this[PRIVATE$16].targetRaySpace; }\n get profiles() { return this[PRIVATE$16].impl.profiles; }\n get gamepad() { return this[PRIVATE$16].impl.gamepad; }\n}\n\nconst PRIVATE$17 = Symbol('@@webxr-polyfill/XRReferenceSpaceEvent');\nclass XRReferenceSpaceEvent extends Event {\n constructor(type, eventInitDict) {\n super(type, eventInitDict);\n this[PRIVATE$17] = {\n referenceSpace: eventInitDict.referenceSpace,\n transform: eventInitDict.transform || null\n };\n Object.setPrototypeOf(this, XRReferenceSpaceEvent.prototype);\n }\n get referenceSpace() { return this[PRIVATE$17].referenceSpace; }\n get transform() { return this[PRIVATE$17].transform; }\n}\n\nvar API = {\n XRSystem,\n XRSession: XRSession$1,\n XRSessionEvent,\n XRFrame,\n XRView,\n XRViewport,\n XRViewerPose,\n XRWebGLLayer,\n XRSpace,\n XRReferenceSpace,\n XRReferenceSpaceEvent,\n XRInputSource,\n XRInputSourceEvent,\n XRInputSourcesChangeEvent,\n XRRenderState,\n XRRigidTransform: XRRigidTransform$1,\n XRPose: XRPose$1,\n};\n\nconst polyfillMakeXRCompatible = Context => {\n if (typeof Context.prototype.makeXRCompatible === 'function') {\n return false;\n }\n Context.prototype.makeXRCompatible = function () {\n this[XR_COMPATIBLE] = true;\n return Promise.resolve();\n };\n return true;\n};\nconst polyfillGetContext = (Canvas) => {\n const getContext = Canvas.prototype.getContext;\n Canvas.prototype.getContext = function (contextType, glAttribs) {\n const ctx = getContext.call(this, contextType, glAttribs);\n if (ctx) {\n ctx[POLYFILLED_XR_COMPATIBLE] = true;\n if (glAttribs && ('xrCompatible' in glAttribs)) {\n ctx[XR_COMPATIBLE] = glAttribs.xrCompatible;\n }\n }\n return ctx;\n };\n};\n\nconst isImageBitmapSupported = global =>\n !!(global.ImageBitmapRenderingContext &&\n global.createImageBitmap);\nconst isMobile = global => {\n var check = false;\n (function(a){if(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0,4)))check = true;})(global.navigator.userAgent||global.navigator.vendor||global.opera);\n return check;\n};\nconst applyCanvasStylesForMinimalRendering = canvas => {\n canvas.style.display = 'block';\n canvas.style.position = 'absolute';\n canvas.style.width = canvas.style.height = '1px';\n canvas.style.top = canvas.style.left = '0px';\n};\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n\n\nfunction unwrapExports (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar cardboardVrDisplay = createCommonjsModule(function (module, exports) {\n(function (global, factory) {\n\tmodule.exports = factory();\n}(commonjsGlobal, (function () { var classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\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 return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n }\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\nvar MIN_TIMESTEP = 0.001;\nvar MAX_TIMESTEP = 1;\nvar dataUri = function dataUri(mimeType, svg) {\n return 'data:' + mimeType + ',' + encodeURIComponent(svg);\n};\nvar lerp = function lerp(a, b, t) {\n return a + (b - a) * t;\n};\nvar isIOS = function () {\n var isIOS = /iPad|iPhone|iPod/.test(navigator.platform);\n return function () {\n return isIOS;\n };\n}();\nvar isWebViewAndroid = function () {\n var isWebViewAndroid = navigator.userAgent.indexOf('Version') !== -1 && navigator.userAgent.indexOf('Android') !== -1 && navigator.userAgent.indexOf('Chrome') !== -1;\n return function () {\n return isWebViewAndroid;\n };\n}();\nvar isSafari = function () {\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n return function () {\n return isSafari;\n };\n}();\nvar isFirefoxAndroid = function () {\n var isFirefoxAndroid = navigator.userAgent.indexOf('Firefox') !== -1 && navigator.userAgent.indexOf('Android') !== -1;\n return function () {\n return isFirefoxAndroid;\n };\n}();\nvar getChromeVersion = function () {\n var match = navigator.userAgent.match(/.*Chrome\\/([0-9]+)/);\n var value = match ? parseInt(match[1], 10) : null;\n return function () {\n return value;\n };\n}();\nvar isSafariWithoutDeviceMotion = function () {\n var value = false;\n value = isIOS() && isSafari() && navigator.userAgent.indexOf('13_4') !== -1;\n return function () {\n return value;\n };\n}();\nvar isChromeWithoutDeviceMotion = function () {\n var value = false;\n if (getChromeVersion() === 65) {\n var match = navigator.userAgent.match(/.*Chrome\\/([0-9\\.]*)/);\n if (match) {\n var _match$1$split = match[1].split('.'),\n _match$1$split2 = slicedToArray(_match$1$split, 4),\n major = _match$1$split2[0],\n minor = _match$1$split2[1],\n branch = _match$1$split2[2],\n build = _match$1$split2[3];\n value = parseInt(branch, 10) === 3325 && parseInt(build, 10) < 148;\n }\n }\n return function () {\n return value;\n };\n}();\nvar isR7 = function () {\n var isR7 = navigator.userAgent.indexOf('R7 Build') !== -1;\n return function () {\n return isR7;\n };\n}();\nvar isLandscapeMode = function isLandscapeMode() {\n var rtn = window.orientation == 90 || window.orientation == -90;\n return isR7() ? !rtn : rtn;\n};\nvar isTimestampDeltaValid = function isTimestampDeltaValid(timestampDeltaS) {\n if (isNaN(timestampDeltaS)) {\n return false;\n }\n if (timestampDeltaS <= MIN_TIMESTEP) {\n return false;\n }\n if (timestampDeltaS > MAX_TIMESTEP) {\n return false;\n }\n return true;\n};\nvar getScreenWidth = function getScreenWidth() {\n return Math.max(window.screen.width, window.screen.height) * window.devicePixelRatio;\n};\nvar getScreenHeight = function getScreenHeight() {\n return Math.min(window.screen.width, window.screen.height) * window.devicePixelRatio;\n};\nvar requestFullscreen = function requestFullscreen(element) {\n if (isWebViewAndroid()) {\n return false;\n }\n if (element.requestFullscreen) {\n element.requestFullscreen();\n } else if (element.webkitRequestFullscreen) {\n element.webkitRequestFullscreen();\n } else if (element.mozRequestFullScreen) {\n element.mozRequestFullScreen();\n } else if (element.msRequestFullscreen) {\n element.msRequestFullscreen();\n } else {\n return false;\n }\n return true;\n};\nvar exitFullscreen = function exitFullscreen() {\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.msExitFullscreen) {\n document.msExitFullscreen();\n } else {\n return false;\n }\n return true;\n};\nvar getFullscreenElement = function getFullscreenElement() {\n return document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement;\n};\nvar linkProgram = function linkProgram(gl, vertexSource, fragmentSource, attribLocationMap) {\n var vertexShader = gl.createShader(gl.VERTEX_SHADER);\n gl.shaderSource(vertexShader, vertexSource);\n gl.compileShader(vertexShader);\n var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n gl.shaderSource(fragmentShader, fragmentSource);\n gl.compileShader(fragmentShader);\n var program = gl.createProgram();\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n for (var attribName in attribLocationMap) {\n gl.bindAttribLocation(program, attribLocationMap[attribName], attribName);\n }gl.linkProgram(program);\n gl.deleteShader(vertexShader);\n gl.deleteShader(fragmentShader);\n return program;\n};\nvar getProgramUniforms = function getProgramUniforms(gl, program) {\n var uniforms = {};\n var uniformCount = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);\n var uniformName = '';\n for (var i = 0; i < uniformCount; i++) {\n var uniformInfo = gl.getActiveUniform(program, i);\n uniformName = uniformInfo.name.replace('[0]', '');\n uniforms[uniformName] = gl.getUniformLocation(program, uniformName);\n }\n return uniforms;\n};\nvar orthoMatrix = function orthoMatrix(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right),\n bt = 1 / (bottom - top),\n nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n};\nvar isMobile = function isMobile() {\n var check = false;\n (function (a) {\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4))) check = true;\n })(navigator.userAgent || navigator.vendor || window.opera);\n return check;\n};\nvar extend = function extend(dest, src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dest[key] = src[key];\n }\n }\n return dest;\n};\nvar safariCssSizeWorkaround = function safariCssSizeWorkaround(canvas) {\n if (isIOS()) {\n var width = canvas.style.width;\n var height = canvas.style.height;\n canvas.style.width = parseInt(width) + 1 + 'px';\n canvas.style.height = parseInt(height) + 'px';\n setTimeout(function () {\n canvas.style.width = width;\n canvas.style.height = height;\n }, 100);\n }\n window.canvas = canvas;\n};\nvar frameDataFromPose = function () {\n var piOver180 = Math.PI / 180.0;\n var rad45 = Math.PI * 0.25;\n function mat4_perspectiveFromFieldOfView(out, fov, near, far) {\n var upTan = Math.tan(fov ? fov.upDegrees * piOver180 : rad45),\n downTan = Math.tan(fov ? fov.downDegrees * piOver180 : rad45),\n leftTan = Math.tan(fov ? fov.leftDegrees * piOver180 : rad45),\n rightTan = Math.tan(fov ? fov.rightDegrees * piOver180 : rad45),\n xScale = 2.0 / (leftTan + rightTan),\n yScale = 2.0 / (upTan + downTan);\n out[0] = xScale;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n out[4] = 0.0;\n out[5] = yScale;\n out[6] = 0.0;\n out[7] = 0.0;\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\n out[9] = (upTan - downTan) * yScale * 0.5;\n out[10] = far / (near - far);\n out[11] = -1.0;\n out[12] = 0.0;\n out[13] = 0.0;\n out[14] = far * near / (near - far);\n out[15] = 0.0;\n return out;\n }\n function mat4_fromRotationTranslation(out, q, v) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3],\n x2 = x + x,\n y2 = y + y,\n z2 = z + z,\n xx = x * x2,\n xy = x * y2,\n xz = x * z2,\n yy = y * y2,\n yz = y * z2,\n zz = z * z2,\n wx = w * x2,\n wy = w * y2,\n wz = w * z2;\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n }\n function mat4_translate(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2],\n a00,\n a01,\n a02,\n a03,\n a10,\n a11,\n a12,\n a13,\n a20,\n a21,\n a22,\n a23;\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0];a01 = a[1];a02 = a[2];a03 = a[3];\n a10 = a[4];a11 = a[5];a12 = a[6];a13 = a[7];\n a20 = a[8];a21 = a[9];a22 = a[10];a23 = a[11];\n out[0] = a00;out[1] = a01;out[2] = a02;out[3] = a03;\n out[4] = a10;out[5] = a11;out[6] = a12;out[7] = a13;\n out[8] = a20;out[9] = a21;out[10] = a22;out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n return out;\n }\n function mat4_invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3],\n a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7],\n a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11],\n a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15],\n b00 = a00 * a11 - a01 * a10,\n b01 = a00 * a12 - a02 * a10,\n b02 = a00 * a13 - a03 * a10,\n b03 = a01 * a12 - a02 * a11,\n b04 = a01 * a13 - a03 * a11,\n b05 = a02 * a13 - a03 * a12,\n b06 = a20 * a31 - a21 * a30,\n b07 = a20 * a32 - a22 * a30,\n b08 = a20 * a33 - a23 * a30,\n b09 = a21 * a32 - a22 * a31,\n b10 = a21 * a33 - a23 * a31,\n b11 = a22 * a33 - a23 * a32,\n det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n return out;\n }\n var defaultOrientation = new Float32Array([0, 0, 0, 1]);\n var defaultPosition = new Float32Array([0, 0, 0]);\n function updateEyeMatrices(projection, view, pose, fov, offset, vrDisplay) {\n mat4_perspectiveFromFieldOfView(projection, fov || null, vrDisplay.depthNear, vrDisplay.depthFar);\n var orientation = pose.orientation || defaultOrientation;\n var position = pose.position || defaultPosition;\n mat4_fromRotationTranslation(view, orientation, position);\n if (offset) mat4_translate(view, view, offset);\n mat4_invert(view, view);\n }\n return function (frameData, pose, vrDisplay) {\n if (!frameData || !pose) return false;\n frameData.pose = pose;\n frameData.timestamp = pose.timestamp;\n updateEyeMatrices(frameData.leftProjectionMatrix, frameData.leftViewMatrix, pose, vrDisplay._getFieldOfView(\"left\"), vrDisplay._getEyeOffset(\"left\"), vrDisplay);\n updateEyeMatrices(frameData.rightProjectionMatrix, frameData.rightViewMatrix, pose, vrDisplay._getFieldOfView(\"right\"), vrDisplay._getEyeOffset(\"right\"), vrDisplay);\n return true;\n };\n}();\nvar isInsideCrossOriginIFrame = function isInsideCrossOriginIFrame() {\n var isFramed = window.self !== window.top;\n var refOrigin = getOriginFromUrl(document.referrer);\n var thisOrigin = getOriginFromUrl(window.location.href);\n return isFramed && refOrigin !== thisOrigin;\n};\nvar getOriginFromUrl = function getOriginFromUrl(url) {\n var domainIdx;\n var protoSepIdx = url.indexOf(\"://\");\n if (protoSepIdx !== -1) {\n domainIdx = protoSepIdx + 3;\n } else {\n domainIdx = 0;\n }\n var domainEndIdx = url.indexOf('/', domainIdx);\n if (domainEndIdx === -1) {\n domainEndIdx = url.length;\n }\n return url.substring(0, domainEndIdx);\n};\nvar getQuaternionAngle = function getQuaternionAngle(quat) {\n if (quat.w > 1) {\n console.warn('getQuaternionAngle: w > 1');\n return 0;\n }\n var angle = 2 * Math.acos(quat.w);\n return angle;\n};\nvar warnOnce = function () {\n var observedWarnings = {};\n return function (key, message) {\n if (observedWarnings[key] === undefined) {\n console.warn('webvr-polyfill: ' + message);\n observedWarnings[key] = true;\n }\n };\n}();\nvar deprecateWarning = function deprecateWarning(deprecated, suggested) {\n var alternative = suggested ? 'Please use ' + suggested + ' instead.' : '';\n warnOnce(deprecated, deprecated + ' has been deprecated. ' + 'This may not work on native WebVR displays. ' + alternative);\n};\nfunction WGLUPreserveGLState(gl, bindings, callback) {\n if (!bindings) {\n callback(gl);\n return;\n }\n var boundValues = [];\n var activeTexture = null;\n for (var i = 0; i < bindings.length; ++i) {\n var binding = bindings[i];\n switch (binding) {\n case gl.TEXTURE_BINDING_2D:\n case gl.TEXTURE_BINDING_CUBE_MAP:\n var textureUnit = bindings[++i];\n if (textureUnit < gl.TEXTURE0 || textureUnit > gl.TEXTURE31) {\n console.error(\"TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit\");\n boundValues.push(null, null);\n break;\n }\n if (!activeTexture) {\n activeTexture = gl.getParameter(gl.ACTIVE_TEXTURE);\n }\n gl.activeTexture(textureUnit);\n boundValues.push(gl.getParameter(binding), null);\n break;\n case gl.ACTIVE_TEXTURE:\n activeTexture = gl.getParameter(gl.ACTIVE_TEXTURE);\n boundValues.push(null);\n break;\n default:\n boundValues.push(gl.getParameter(binding));\n break;\n }\n }\n callback(gl);\n for (var i = 0; i < bindings.length; ++i) {\n var binding = bindings[i];\n var boundValue = boundValues[i];\n switch (binding) {\n case gl.ACTIVE_TEXTURE:\n break;\n case gl.ARRAY_BUFFER_BINDING:\n gl.bindBuffer(gl.ARRAY_BUFFER, boundValue);\n break;\n case gl.COLOR_CLEAR_VALUE:\n gl.clearColor(boundValue[0], boundValue[1], boundValue[2], boundValue[3]);\n break;\n case gl.COLOR_WRITEMASK:\n gl.colorMask(boundValue[0], boundValue[1], boundValue[2], boundValue[3]);\n break;\n case gl.CURRENT_PROGRAM:\n gl.useProgram(boundValue);\n break;\n case gl.ELEMENT_ARRAY_BUFFER_BINDING:\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, boundValue);\n break;\n case gl.FRAMEBUFFER_BINDING:\n gl.bindFramebuffer(gl.FRAMEBUFFER, boundValue);\n break;\n case gl.RENDERBUFFER_BINDING:\n gl.bindRenderbuffer(gl.RENDERBUFFER, boundValue);\n break;\n case gl.TEXTURE_BINDING_2D:\n var textureUnit = bindings[++i];\n if (textureUnit < gl.TEXTURE0 || textureUnit > gl.TEXTURE31)\n break;\n gl.activeTexture(textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, boundValue);\n break;\n case gl.TEXTURE_BINDING_CUBE_MAP:\n var textureUnit = bindings[++i];\n if (textureUnit < gl.TEXTURE0 || textureUnit > gl.TEXTURE31)\n break;\n gl.activeTexture(textureUnit);\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, boundValue);\n break;\n case gl.VIEWPORT:\n gl.viewport(boundValue[0], boundValue[1], boundValue[2], boundValue[3]);\n break;\n case gl.BLEND:\n case gl.CULL_FACE:\n case gl.DEPTH_TEST:\n case gl.SCISSOR_TEST:\n case gl.STENCIL_TEST:\n if (boundValue) {\n gl.enable(binding);\n } else {\n gl.disable(binding);\n }\n break;\n default:\n console.log(\"No GL restore behavior for 0x\" + binding.toString(16));\n break;\n }\n if (activeTexture) {\n gl.activeTexture(activeTexture);\n }\n }\n}\nvar glPreserveState = WGLUPreserveGLState;\nvar distortionVS = ['attribute vec2 position;', 'attribute vec3 texCoord;', 'varying vec2 vTexCoord;', 'uniform vec4 viewportOffsetScale[2];', 'void main() {', ' vec4 viewport = viewportOffsetScale[int(texCoord.z)];', ' vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;', ' gl_Position = vec4( position, 1.0, 1.0 );', '}'].join('\\n');\nvar distortionFS = ['precision mediump float;', 'uniform sampler2D diffuse;', 'varying vec2 vTexCoord;', 'void main() {', ' gl_FragColor = texture2D(diffuse, vTexCoord);', '}'].join('\\n');\nfunction CardboardDistorter(gl, cardboardUI, bufferScale, dirtySubmitFrameBindings) {\n this.gl = gl;\n this.cardboardUI = cardboardUI;\n this.bufferScale = bufferScale;\n this.dirtySubmitFrameBindings = dirtySubmitFrameBindings;\n this.ctxAttribs = gl.getContextAttributes();\n this.instanceExt = gl.getExtension('ANGLE_instanced_arrays');\n this.meshWidth = 20;\n this.meshHeight = 20;\n this.bufferWidth = gl.drawingBufferWidth;\n this.bufferHeight = gl.drawingBufferHeight;\n this.realBindFramebuffer = gl.bindFramebuffer;\n this.realEnable = gl.enable;\n this.realDisable = gl.disable;\n this.realColorMask = gl.colorMask;\n this.realClearColor = gl.clearColor;\n this.realViewport = gl.viewport;\n if (!isIOS()) {\n this.realCanvasWidth = Object.getOwnPropertyDescriptor(gl.canvas.__proto__, 'width');\n this.realCanvasHeight = Object.getOwnPropertyDescriptor(gl.canvas.__proto__, 'height');\n }\n this.isPatched = false;\n this.lastBoundFramebuffer = null;\n this.cullFace = false;\n this.depthTest = false;\n this.blend = false;\n this.scissorTest = false;\n this.stencilTest = false;\n this.viewport = [0, 0, 0, 0];\n this.colorMask = [true, true, true, true];\n this.clearColor = [0, 0, 0, 0];\n this.attribs = {\n position: 0,\n texCoord: 1\n };\n this.program = linkProgram(gl, distortionVS, distortionFS, this.attribs);\n this.uniforms = getProgramUniforms(gl, this.program);\n this.viewportOffsetScale = new Float32Array(8);\n this.setTextureBounds();\n this.vertexBuffer = gl.createBuffer();\n this.indexBuffer = gl.createBuffer();\n this.indexCount = 0;\n this.renderTarget = gl.createTexture();\n this.framebuffer = gl.createFramebuffer();\n this.depthStencilBuffer = null;\n this.depthBuffer = null;\n this.stencilBuffer = null;\n if (this.ctxAttribs.depth && this.ctxAttribs.stencil) {\n this.depthStencilBuffer = gl.createRenderbuffer();\n } else if (this.ctxAttribs.depth) {\n this.depthBuffer = gl.createRenderbuffer();\n } else if (this.ctxAttribs.stencil) {\n this.stencilBuffer = gl.createRenderbuffer();\n }\n this.patch();\n this.onResize();\n}\nCardboardDistorter.prototype.destroy = function () {\n var gl = this.gl;\n this.unpatch();\n gl.deleteProgram(this.program);\n gl.deleteBuffer(this.vertexBuffer);\n gl.deleteBuffer(this.indexBuffer);\n gl.deleteTexture(this.renderTarget);\n gl.deleteFramebuffer(this.framebuffer);\n if (this.depthStencilBuffer) {\n gl.deleteRenderbuffer(this.depthStencilBuffer);\n }\n if (this.depthBuffer) {\n gl.deleteRenderbuffer(this.depthBuffer);\n }\n if (this.stencilBuffer) {\n gl.deleteRenderbuffer(this.stencilBuffer);\n }\n if (this.cardboardUI) {\n this.cardboardUI.destroy();\n }\n};\nCardboardDistorter.prototype.onResize = function () {\n var gl = this.gl;\n var self = this;\n var glState = [gl.RENDERBUFFER_BINDING, gl.TEXTURE_BINDING_2D, gl.TEXTURE0];\n glPreserveState(gl, glState, function (gl) {\n self.realBindFramebuffer.call(gl, gl.FRAMEBUFFER, null);\n if (self.scissorTest) {\n self.realDisable.call(gl, gl.SCISSOR_TEST);\n }\n self.realColorMask.call(gl, true, true, true, true);\n self.realViewport.call(gl, 0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);\n self.realClearColor.call(gl, 0, 0, 0, 1);\n gl.clear(gl.COLOR_BUFFER_BIT);\n self.realBindFramebuffer.call(gl, gl.FRAMEBUFFER, self.framebuffer);\n gl.bindTexture(gl.TEXTURE_2D, self.renderTarget);\n gl.texImage2D(gl.TEXTURE_2D, 0, self.ctxAttribs.alpha ? gl.RGBA : gl.RGB, self.bufferWidth, self.bufferHeight, 0, self.ctxAttribs.alpha ? gl.RGBA : gl.RGB, gl.UNSIGNED_BYTE, null);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, self.renderTarget, 0);\n if (self.ctxAttribs.depth && self.ctxAttribs.stencil) {\n gl.bindRenderbuffer(gl.RENDERBUFFER, self.depthStencilBuffer);\n gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, self.bufferWidth, self.bufferHeight);\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.RENDERBUFFER, self.depthStencilBuffer);\n } else if (self.ctxAttribs.depth) {\n gl.bindRenderbuffer(gl.RENDERBUFFER, self.depthBuffer);\n gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, self.bufferWidth, self.bufferHeight);\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, self.depthBuffer);\n } else if (self.ctxAttribs.stencil) {\n gl.bindRenderbuffer(gl.RENDERBUFFER, self.stencilBuffer);\n gl.renderbufferStorage(gl.RENDERBUFFER, gl.STENCIL_INDEX8, self.bufferWidth, self.bufferHeight);\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.STENCIL_ATTACHMENT, gl.RENDERBUFFER, self.stencilBuffer);\n }\n if (!gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE) {\n console.error('Framebuffer incomplete!');\n }\n self.realBindFramebuffer.call(gl, gl.FRAMEBUFFER, self.lastBoundFramebuffer);\n if (self.scissorTest) {\n self.realEnable.call(gl, gl.SCISSOR_TEST);\n }\n self.realColorMask.apply(gl, self.colorMask);\n self.realViewport.apply(gl, self.viewport);\n self.realClearColor.apply(gl, self.clearColor);\n });\n if (this.cardboardUI) {\n this.cardboardUI.onResize();\n }\n};\nCardboardDistorter.prototype.patch = function () {\n if (this.isPatched) {\n return;\n }\n var self = this;\n var canvas = this.gl.canvas;\n var gl = this.gl;\n if (!isIOS()) {\n canvas.width = getScreenWidth() * this.bufferScale;\n canvas.height = getScreenHeight() * this.bufferScale;\n Object.defineProperty(canvas, 'width', {\n configurable: true,\n enumerable: true,\n get: function get() {\n return self.bufferWidth;\n },\n set: function set(value) {\n self.bufferWidth = value;\n self.realCanvasWidth.set.call(canvas, value);\n self.onResize();\n }\n });\n Object.defineProperty(canvas, 'height', {\n configurable: true,\n enumerable: true,\n get: function get() {\n return self.bufferHeight;\n },\n set: function set(value) {\n self.bufferHeight = value;\n self.realCanvasHeight.set.call(canvas, value);\n self.onResize();\n }\n });\n }\n this.lastBoundFramebuffer = gl.getParameter(gl.FRAMEBUFFER_BINDING);\n if (this.lastBoundFramebuffer == null) {\n this.lastBoundFramebuffer = this.framebuffer;\n this.gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);\n }\n this.gl.bindFramebuffer = function (target, framebuffer) {\n self.lastBoundFramebuffer = framebuffer ? framebuffer : self.framebuffer;\n self.realBindFramebuffer.call(gl, target, self.lastBoundFramebuffer);\n };\n this.cullFace = gl.getParameter(gl.CULL_FACE);\n this.depthTest = gl.getParameter(gl.DEPTH_TEST);\n this.blend = gl.getParameter(gl.BLEND);\n this.scissorTest = gl.getParameter(gl.SCISSOR_TEST);\n this.stencilTest = gl.getParameter(gl.STENCIL_TEST);\n gl.enable = function (pname) {\n switch (pname) {\n case gl.CULL_FACE:\n self.cullFace = true;break;\n case gl.DEPTH_TEST:\n self.depthTest = true;break;\n case gl.BLEND:\n self.blend = true;break;\n case gl.SCISSOR_TEST:\n self.scissorTest = true;break;\n case gl.STENCIL_TEST:\n self.stencilTest = true;break;\n }\n self.realEnable.call(gl, pname);\n };\n gl.disable = function (pname) {\n switch (pname) {\n case gl.CULL_FACE:\n self.cullFace = false;break;\n case gl.DEPTH_TEST:\n self.depthTest = false;break;\n case gl.BLEND:\n self.blend = false;break;\n case gl.SCISSOR_TEST:\n self.scissorTest = false;break;\n case gl.STENCIL_TEST:\n self.stencilTest = false;break;\n }\n self.realDisable.call(gl, pname);\n };\n this.colorMask = gl.getParameter(gl.COLOR_WRITEMASK);\n gl.colorMask = function (r, g, b, a) {\n self.colorMask[0] = r;\n self.colorMask[1] = g;\n self.colorMask[2] = b;\n self.colorMask[3] = a;\n self.realColorMask.call(gl, r, g, b, a);\n };\n this.clearColor = gl.getParameter(gl.COLOR_CLEAR_VALUE);\n gl.clearColor = function (r, g, b, a) {\n self.clearColor[0] = r;\n self.clearColor[1] = g;\n self.clearColor[2] = b;\n self.clearColor[3] = a;\n self.realClearColor.call(gl, r, g, b, a);\n };\n this.viewport = gl.getParameter(gl.VIEWPORT);\n gl.viewport = function (x, y, w, h) {\n self.viewport[0] = x;\n self.viewport[1] = y;\n self.viewport[2] = w;\n self.viewport[3] = h;\n self.realViewport.call(gl, x, y, w, h);\n };\n this.isPatched = true;\n safariCssSizeWorkaround(canvas);\n};\nCardboardDistorter.prototype.unpatch = function () {\n if (!this.isPatched) {\n return;\n }\n var gl = this.gl;\n var canvas = this.gl.canvas;\n if (!isIOS()) {\n Object.defineProperty(canvas, 'width', this.realCanvasWidth);\n Object.defineProperty(canvas, 'height', this.realCanvasHeight);\n }\n canvas.width = this.bufferWidth;\n canvas.height = this.bufferHeight;\n gl.bindFramebuffer = this.realBindFramebuffer;\n gl.enable = this.realEnable;\n gl.disable = this.realDisable;\n gl.colorMask = this.realColorMask;\n gl.clearColor = this.realClearColor;\n gl.viewport = this.realViewport;\n if (this.lastBoundFramebuffer == this.framebuffer) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n }\n this.isPatched = false;\n setTimeout(function () {\n safariCssSizeWorkaround(canvas);\n }, 1);\n};\nCardboardDistorter.prototype.setTextureBounds = function (leftBounds, rightBounds) {\n if (!leftBounds) {\n leftBounds = [0, 0, 0.5, 1];\n }\n if (!rightBounds) {\n rightBounds = [0.5, 0, 0.5, 1];\n }\n this.viewportOffsetScale[0] = leftBounds[0];\n this.viewportOffsetScale[1] = leftBounds[1];\n this.viewportOffsetScale[2] = leftBounds[2];\n this.viewportOffsetScale[3] = leftBounds[3];\n this.viewportOffsetScale[4] = rightBounds[0];\n this.viewportOffsetScale[5] = rightBounds[1];\n this.viewportOffsetScale[6] = rightBounds[2];\n this.viewportOffsetScale[7] = rightBounds[3];\n};\nCardboardDistorter.prototype.submitFrame = function () {\n var gl = this.gl;\n var self = this;\n var glState = [];\n if (!this.dirtySubmitFrameBindings) {\n glState.push(gl.CURRENT_PROGRAM, gl.ARRAY_BUFFER_BINDING, gl.ELEMENT_ARRAY_BUFFER_BINDING, gl.TEXTURE_BINDING_2D, gl.TEXTURE0);\n }\n glPreserveState(gl, glState, function (gl) {\n self.realBindFramebuffer.call(gl, gl.FRAMEBUFFER, null);\n var positionDivisor = 0;\n var texCoordDivisor = 0;\n if (self.instanceExt) {\n positionDivisor = gl.getVertexAttrib(self.attribs.position, self.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE);\n texCoordDivisor = gl.getVertexAttrib(self.attribs.texCoord, self.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE);\n }\n if (self.cullFace) {\n self.realDisable.call(gl, gl.CULL_FACE);\n }\n if (self.depthTest) {\n self.realDisable.call(gl, gl.DEPTH_TEST);\n }\n if (self.blend) {\n self.realDisable.call(gl, gl.BLEND);\n }\n if (self.scissorTest) {\n self.realDisable.call(gl, gl.SCISSOR_TEST);\n }\n if (self.stencilTest) {\n self.realDisable.call(gl, gl.STENCIL_TEST);\n }\n self.realColorMask.call(gl, true, true, true, true);\n self.realViewport.call(gl, 0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);\n if (self.ctxAttribs.alpha || isIOS()) {\n self.realClearColor.call(gl, 0, 0, 0, 1);\n gl.clear(gl.COLOR_BUFFER_BIT);\n }\n gl.useProgram(self.program);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, self.indexBuffer);\n gl.bindBuffer(gl.ARRAY_BUFFER, self.vertexBuffer);\n gl.enableVertexAttribArray(self.attribs.position);\n gl.enableVertexAttribArray(self.attribs.texCoord);\n gl.vertexAttribPointer(self.attribs.position, 2, gl.FLOAT, false, 20, 0);\n gl.vertexAttribPointer(self.attribs.texCoord, 3, gl.FLOAT, false, 20, 8);\n if (self.instanceExt) {\n if (positionDivisor != 0) {\n self.instanceExt.vertexAttribDivisorANGLE(self.attribs.position, 0);\n }\n if (texCoordDivisor != 0) {\n self.instanceExt.vertexAttribDivisorANGLE(self.attribs.texCoord, 0);\n }\n }\n gl.activeTexture(gl.TEXTURE0);\n gl.uniform1i(self.uniforms.diffuse, 0);\n gl.bindTexture(gl.TEXTURE_2D, self.renderTarget);\n gl.uniform4fv(self.uniforms.viewportOffsetScale, self.viewportOffsetScale);\n gl.drawElements(gl.TRIANGLES, self.indexCount, gl.UNSIGNED_SHORT, 0);\n if (self.cardboardUI) {\n self.cardboardUI.renderNoState();\n }\n self.realBindFramebuffer.call(self.gl, gl.FRAMEBUFFER, self.framebuffer);\n if (!self.ctxAttribs.preserveDrawingBuffer) {\n self.realClearColor.call(gl, 0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n }\n if (!self.dirtySubmitFrameBindings) {\n self.realBindFramebuffer.call(gl, gl.FRAMEBUFFER, self.lastBoundFramebuffer);\n }\n if (self.cullFace) {\n self.realEnable.call(gl, gl.CULL_FACE);\n }\n if (self.depthTest) {\n self.realEnable.call(gl, gl.DEPTH_TEST);\n }\n if (self.blend) {\n self.realEnable.call(gl, gl.BLEND);\n }\n if (self.scissorTest) {\n self.realEnable.call(gl, gl.SCISSOR_TEST);\n }\n if (self.stencilTest) {\n self.realEnable.call(gl, gl.STENCIL_TEST);\n }\n self.realColorMask.apply(gl, self.colorMask);\n self.realViewport.apply(gl, self.viewport);\n if (self.ctxAttribs.alpha || !self.ctxAttribs.preserveDrawingBuffer) {\n self.realClearColor.apply(gl, self.clearColor);\n }\n if (self.instanceExt) {\n if (positionDivisor != 0) {\n self.instanceExt.vertexAttribDivisorANGLE(self.attribs.position, positionDivisor);\n }\n if (texCoordDivisor != 0) {\n self.instanceExt.vertexAttribDivisorANGLE(self.attribs.texCoord, texCoordDivisor);\n }\n }\n });\n if (isIOS()) {\n var canvas = gl.canvas;\n if (canvas.width != self.bufferWidth || canvas.height != self.bufferHeight) {\n self.bufferWidth = canvas.width;\n self.bufferHeight = canvas.height;\n self.onResize();\n }\n }\n};\nCardboardDistorter.prototype.updateDeviceInfo = function (deviceInfo) {\n var gl = this.gl;\n var self = this;\n var glState = [gl.ARRAY_BUFFER_BINDING, gl.ELEMENT_ARRAY_BUFFER_BINDING];\n glPreserveState(gl, glState, function (gl) {\n var vertices = self.computeMeshVertices_(self.meshWidth, self.meshHeight, deviceInfo);\n gl.bindBuffer(gl.ARRAY_BUFFER, self.vertexBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);\n if (!self.indexCount) {\n var indices = self.computeMeshIndices_(self.meshWidth, self.meshHeight);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, self.indexBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW);\n self.indexCount = indices.length;\n }\n });\n};\nCardboardDistorter.prototype.computeMeshVertices_ = function (width, height, deviceInfo) {\n var vertices = new Float32Array(2 * width * height * 5);\n var lensFrustum = deviceInfo.getLeftEyeVisibleTanAngles();\n var noLensFrustum = deviceInfo.getLeftEyeNoLensTanAngles();\n var viewport = deviceInfo.getLeftEyeVisibleScreenRect(noLensFrustum);\n var vidx = 0;\n for (var e = 0; e < 2; e++) {\n for (var j = 0; j < height; j++) {\n for (var i = 0; i < width; i++, vidx++) {\n var u = i / (width - 1);\n var v = j / (height - 1);\n var s = u;\n var t = v;\n var x = lerp(lensFrustum[0], lensFrustum[2], u);\n var y = lerp(lensFrustum[3], lensFrustum[1], v);\n var d = Math.sqrt(x * x + y * y);\n var r = deviceInfo.distortion.distortInverse(d);\n var p = x * r / d;\n var q = y * r / d;\n u = (p - noLensFrustum[0]) / (noLensFrustum[2] - noLensFrustum[0]);\n v = (q - noLensFrustum[3]) / (noLensFrustum[1] - noLensFrustum[3]);\n u = (viewport.x + u * viewport.width - 0.5) * 2.0;\n v = (viewport.y + v * viewport.height - 0.5) * 2.0;\n vertices[vidx * 5 + 0] = u;\n vertices[vidx * 5 + 1] = v;\n vertices[vidx * 5 + 2] = s;\n vertices[vidx * 5 + 3] = t;\n vertices[vidx * 5 + 4] = e;\n }\n }\n var w = lensFrustum[2] - lensFrustum[0];\n lensFrustum[0] = -(w + lensFrustum[0]);\n lensFrustum[2] = w - lensFrustum[2];\n w = noLensFrustum[2] - noLensFrustum[0];\n noLensFrustum[0] = -(w + noLensFrustum[0]);\n noLensFrustum[2] = w - noLensFrustum[2];\n viewport.x = 1 - (viewport.x + viewport.width);\n }\n return vertices;\n};\nCardboardDistorter.prototype.computeMeshIndices_ = function (width, height) {\n var indices = new Uint16Array(2 * (width - 1) * (height - 1) * 6);\n var halfwidth = width / 2;\n var halfheight = height / 2;\n var vidx = 0;\n var iidx = 0;\n for (var e = 0; e < 2; e++) {\n for (var j = 0; j < height; j++) {\n for (var i = 0; i < width; i++, vidx++) {\n if (i == 0 || j == 0) continue;\n if (i <= halfwidth == j <= halfheight) {\n indices[iidx++] = vidx;\n indices[iidx++] = vidx - width - 1;\n indices[iidx++] = vidx - width;\n indices[iidx++] = vidx - width - 1;\n indices[iidx++] = vidx;\n indices[iidx++] = vidx - 1;\n } else {\n indices[iidx++] = vidx - 1;\n indices[iidx++] = vidx - width;\n indices[iidx++] = vidx;\n indices[iidx++] = vidx - width;\n indices[iidx++] = vidx - 1;\n indices[iidx++] = vidx - width - 1;\n }\n }\n }\n }\n return indices;\n};\nCardboardDistorter.prototype.getOwnPropertyDescriptor_ = function (proto, attrName) {\n var descriptor = Object.getOwnPropertyDescriptor(proto, attrName);\n if (descriptor.get === undefined || descriptor.set === undefined) {\n descriptor.configurable = true;\n descriptor.enumerable = true;\n descriptor.get = function () {\n return this.getAttribute(attrName);\n };\n descriptor.set = function (val) {\n this.setAttribute(attrName, val);\n };\n }\n return descriptor;\n};\nvar uiVS = ['attribute vec2 position;', 'uniform mat4 projectionMat;', 'void main() {', ' gl_Position = projectionMat * vec4( position, -1.0, 1.0 );', '}'].join('\\n');\nvar uiFS = ['precision mediump float;', 'uniform vec4 color;', 'void main() {', ' gl_FragColor = color;', '}'].join('\\n');\nvar DEG2RAD = Math.PI / 180.0;\nvar kAnglePerGearSection = 60;\nvar kOuterRimEndAngle = 12;\nvar kInnerRimBeginAngle = 20;\nvar kOuterRadius = 1;\nvar kMiddleRadius = 0.75;\nvar kInnerRadius = 0.3125;\nvar kCenterLineThicknessDp = 4;\nvar kButtonWidthDp = 28;\nvar kTouchSlopFactor = 1.5;\nfunction CardboardUI(gl) {\n this.gl = gl;\n this.attribs = {\n position: 0\n };\n this.program = linkProgram(gl, uiVS, uiFS, this.attribs);\n this.uniforms = getProgramUniforms(gl, this.program);\n this.vertexBuffer = gl.createBuffer();\n this.gearOffset = 0;\n this.gearVertexCount = 0;\n this.arrowOffset = 0;\n this.arrowVertexCount = 0;\n this.projMat = new Float32Array(16);\n this.listener = null;\n this.onResize();\n}\nCardboardUI.prototype.destroy = function () {\n var gl = this.gl;\n if (this.listener) {\n gl.canvas.removeEventListener('click', this.listener, false);\n }\n gl.deleteProgram(this.program);\n gl.deleteBuffer(this.vertexBuffer);\n};\nCardboardUI.prototype.listen = function (optionsCallback, backCallback) {\n var canvas = this.gl.canvas;\n this.listener = function (event) {\n var midline = canvas.clientWidth / 2;\n var buttonSize = kButtonWidthDp * kTouchSlopFactor;\n if (event.clientX > midline - buttonSize && event.clientX < midline + buttonSize && event.clientY > canvas.clientHeight - buttonSize) {\n optionsCallback(event);\n }\n else if (event.clientX < buttonSize && event.clientY < buttonSize) {\n backCallback(event);\n }\n };\n canvas.addEventListener('click', this.listener, false);\n};\nCardboardUI.prototype.onResize = function () {\n var gl = this.gl;\n var self = this;\n var glState = [gl.ARRAY_BUFFER_BINDING];\n glPreserveState(gl, glState, function (gl) {\n var vertices = [];\n var midline = gl.drawingBufferWidth / 2;\n var physicalPixels = Math.max(screen.width, screen.height) * window.devicePixelRatio;\n var scalingRatio = gl.drawingBufferWidth / physicalPixels;\n var dps = scalingRatio * window.devicePixelRatio;\n var lineWidth = kCenterLineThicknessDp * dps / 2;\n var buttonSize = kButtonWidthDp * kTouchSlopFactor * dps;\n var buttonScale = kButtonWidthDp * dps / 2;\n var buttonBorder = (kButtonWidthDp * kTouchSlopFactor - kButtonWidthDp) * dps;\n vertices.push(midline - lineWidth, buttonSize);\n vertices.push(midline - lineWidth, gl.drawingBufferHeight);\n vertices.push(midline + lineWidth, buttonSize);\n vertices.push(midline + lineWidth, gl.drawingBufferHeight);\n self.gearOffset = vertices.length / 2;\n function addGearSegment(theta, r) {\n var angle = (90 - theta) * DEG2RAD;\n var x = Math.cos(angle);\n var y = Math.sin(angle);\n vertices.push(kInnerRadius * x * buttonScale + midline, kInnerRadius * y * buttonScale + buttonScale);\n vertices.push(r * x * buttonScale + midline, r * y * buttonScale + buttonScale);\n }\n for (var i = 0; i <= 6; i++) {\n var segmentTheta = i * kAnglePerGearSection;\n addGearSegment(segmentTheta, kOuterRadius);\n addGearSegment(segmentTheta + kOuterRimEndAngle, kOuterRadius);\n addGearSegment(segmentTheta + kInnerRimBeginAngle, kMiddleRadius);\n addGearSegment(segmentTheta + (kAnglePerGearSection - kInnerRimBeginAngle), kMiddleRadius);\n addGearSegment(segmentTheta + (kAnglePerGearSection - kOuterRimEndAngle), kOuterRadius);\n }\n self.gearVertexCount = vertices.length / 2 - self.gearOffset;\n self.arrowOffset = vertices.length / 2;\n function addArrowVertex(x, y) {\n vertices.push(buttonBorder + x, gl.drawingBufferHeight - buttonBorder - y);\n }\n var angledLineWidth = lineWidth / Math.sin(45 * DEG2RAD);\n addArrowVertex(0, buttonScale);\n addArrowVertex(buttonScale, 0);\n addArrowVertex(buttonScale + angledLineWidth, angledLineWidth);\n addArrowVertex(angledLineWidth, buttonScale + angledLineWidth);\n addArrowVertex(angledLineWidth, buttonScale - angledLineWidth);\n addArrowVertex(0, buttonScale);\n addArrowVertex(buttonScale, buttonScale * 2);\n addArrowVertex(buttonScale + angledLineWidth, buttonScale * 2 - angledLineWidth);\n addArrowVertex(angledLineWidth, buttonScale - angledLineWidth);\n addArrowVertex(0, buttonScale);\n addArrowVertex(angledLineWidth, buttonScale - lineWidth);\n addArrowVertex(kButtonWidthDp * dps, buttonScale - lineWidth);\n addArrowVertex(angledLineWidth, buttonScale + lineWidth);\n addArrowVertex(kButtonWidthDp * dps, buttonScale + lineWidth);\n self.arrowVertexCount = vertices.length / 2 - self.arrowOffset;\n gl.bindBuffer(gl.ARRAY_BUFFER, self.vertexBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);\n });\n};\nCardboardUI.prototype.render = function () {\n var gl = this.gl;\n var self = this;\n var glState = [gl.CULL_FACE, gl.DEPTH_TEST, gl.BLEND, gl.SCISSOR_TEST, gl.STENCIL_TEST, gl.COLOR_WRITEMASK, gl.VIEWPORT, gl.CURRENT_PROGRAM, gl.ARRAY_BUFFER_BINDING];\n glPreserveState(gl, glState, function (gl) {\n gl.disable(gl.CULL_FACE);\n gl.disable(gl.DEPTH_TEST);\n gl.disable(gl.BLEND);\n gl.disable(gl.SCISSOR_TEST);\n gl.disable(gl.STENCIL_TEST);\n gl.colorMask(true, true, true, true);\n gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);\n self.renderNoState();\n });\n};\nCardboardUI.prototype.renderNoState = function () {\n var gl = this.gl;\n gl.useProgram(this.program);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);\n gl.enableVertexAttribArray(this.attribs.position);\n gl.vertexAttribPointer(this.attribs.position, 2, gl.FLOAT, false, 8, 0);\n gl.uniform4f(this.uniforms.color, 1.0, 1.0, 1.0, 1.0);\n orthoMatrix(this.projMat, 0, gl.drawingBufferWidth, 0, gl.drawingBufferHeight, 0.1, 1024.0);\n gl.uniformMatrix4fv(this.uniforms.projectionMat, false, this.projMat);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n gl.drawArrays(gl.TRIANGLE_STRIP, this.gearOffset, this.gearVertexCount);\n gl.drawArrays(gl.TRIANGLE_STRIP, this.arrowOffset, this.arrowVertexCount);\n};\nfunction Distortion(coefficients) {\n this.coefficients = coefficients;\n}\nDistortion.prototype.distortInverse = function (radius) {\n var r0 = 0;\n var r1 = 1;\n var dr0 = radius - this.distort(r0);\n while (Math.abs(r1 - r0) > 0.0001 ) {\n var dr1 = radius - this.distort(r1);\n var r2 = r1 - dr1 * ((r1 - r0) / (dr1 - dr0));\n r0 = r1;\n r1 = r2;\n dr0 = dr1;\n }\n return r1;\n};\nDistortion.prototype.distort = function (radius) {\n var r2 = radius * radius;\n var ret = 0;\n for (var i = 0; i < this.coefficients.length; i++) {\n ret = r2 * (ret + this.coefficients[i]);\n }\n return (ret + 1) * radius;\n};\nvar degToRad = Math.PI / 180;\nvar radToDeg = 180 / Math.PI;\nvar Vector3 = function Vector3(x, y, z) {\n this.x = x || 0;\n this.y = y || 0;\n this.z = z || 0;\n};\nVector3.prototype = {\n constructor: Vector3,\n set: function set(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n },\n copy: function copy(v) {\n this.x = v.x;\n this.y = v.y;\n this.z = v.z;\n return this;\n },\n length: function length() {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n },\n normalize: function normalize() {\n var scalar = this.length();\n if (scalar !== 0) {\n var invScalar = 1 / scalar;\n this.multiplyScalar(invScalar);\n } else {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n }\n return this;\n },\n multiplyScalar: function multiplyScalar(scalar) {\n this.x *= scalar;\n this.y *= scalar;\n this.z *= scalar;\n },\n applyQuaternion: function applyQuaternion(q) {\n var x = this.x;\n var y = this.y;\n var z = this.z;\n var qx = q.x;\n var qy = q.y;\n var qz = q.z;\n var qw = q.w;\n var ix = qw * x + qy * z - qz * y;\n var iy = qw * y + qz * x - qx * z;\n var iz = qw * z + qx * y - qy * x;\n var iw = -qx * x - qy * y - qz * z;\n this.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n this.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n this.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n return this;\n },\n dot: function dot(v) {\n return this.x * v.x + this.y * v.y + this.z * v.z;\n },\n crossVectors: function crossVectors(a, b) {\n var ax = a.x,\n ay = a.y,\n az = a.z;\n var bx = b.x,\n by = b.y,\n bz = b.z;\n this.x = ay * bz - az * by;\n this.y = az * bx - ax * bz;\n this.z = ax * by - ay * bx;\n return this;\n }\n};\nvar Quaternion = function Quaternion(x, y, z, w) {\n this.x = x || 0;\n this.y = y || 0;\n this.z = z || 0;\n this.w = w !== undefined ? w : 1;\n};\nQuaternion.prototype = {\n constructor: Quaternion,\n set: function set(x, y, z, w) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.w = w;\n return this;\n },\n copy: function copy(quaternion) {\n this.x = quaternion.x;\n this.y = quaternion.y;\n this.z = quaternion.z;\n this.w = quaternion.w;\n return this;\n },\n setFromEulerXYZ: function setFromEulerXYZ(x, y, z) {\n var c1 = Math.cos(x / 2);\n var c2 = Math.cos(y / 2);\n var c3 = Math.cos(z / 2);\n var s1 = Math.sin(x / 2);\n var s2 = Math.sin(y / 2);\n var s3 = Math.sin(z / 2);\n this.x = s1 * c2 * c3 + c1 * s2 * s3;\n this.y = c1 * s2 * c3 - s1 * c2 * s3;\n this.z = c1 * c2 * s3 + s1 * s2 * c3;\n this.w = c1 * c2 * c3 - s1 * s2 * s3;\n return this;\n },\n setFromEulerYXZ: function setFromEulerYXZ(x, y, z) {\n var c1 = Math.cos(x / 2);\n var c2 = Math.cos(y / 2);\n var c3 = Math.cos(z / 2);\n var s1 = Math.sin(x / 2);\n var s2 = Math.sin(y / 2);\n var s3 = Math.sin(z / 2);\n this.x = s1 * c2 * c3 + c1 * s2 * s3;\n this.y = c1 * s2 * c3 - s1 * c2 * s3;\n this.z = c1 * c2 * s3 - s1 * s2 * c3;\n this.w = c1 * c2 * c3 + s1 * s2 * s3;\n return this;\n },\n setFromAxisAngle: function setFromAxisAngle(axis, angle) {\n var halfAngle = angle / 2,\n s = Math.sin(halfAngle);\n this.x = axis.x * s;\n this.y = axis.y * s;\n this.z = axis.z * s;\n this.w = Math.cos(halfAngle);\n return this;\n },\n multiply: function multiply(q) {\n return this.multiplyQuaternions(this, q);\n },\n multiplyQuaternions: function multiplyQuaternions(a, b) {\n var qax = a.x,\n qay = a.y,\n qaz = a.z,\n qaw = a.w;\n var qbx = b.x,\n qby = b.y,\n qbz = b.z,\n qbw = b.w;\n this.x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n this.y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n this.z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n this.w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n return this;\n },\n inverse: function inverse() {\n this.x *= -1;\n this.y *= -1;\n this.z *= -1;\n this.normalize();\n return this;\n },\n normalize: function normalize() {\n var l = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);\n if (l === 0) {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n this.w = 1;\n } else {\n l = 1 / l;\n this.x = this.x * l;\n this.y = this.y * l;\n this.z = this.z * l;\n this.w = this.w * l;\n }\n return this;\n },\n slerp: function slerp(qb, t) {\n if (t === 0) return this;\n if (t === 1) return this.copy(qb);\n var x = this.x,\n y = this.y,\n z = this.z,\n w = this.w;\n var cosHalfTheta = w * qb.w + x * qb.x + y * qb.y + z * qb.z;\n if (cosHalfTheta < 0) {\n this.w = -qb.w;\n this.x = -qb.x;\n this.y = -qb.y;\n this.z = -qb.z;\n cosHalfTheta = -cosHalfTheta;\n } else {\n this.copy(qb);\n }\n if (cosHalfTheta >= 1.0) {\n this.w = w;\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n }\n var halfTheta = Math.acos(cosHalfTheta);\n var sinHalfTheta = Math.sqrt(1.0 - cosHalfTheta * cosHalfTheta);\n if (Math.abs(sinHalfTheta) < 0.001) {\n this.w = 0.5 * (w + this.w);\n this.x = 0.5 * (x + this.x);\n this.y = 0.5 * (y + this.y);\n this.z = 0.5 * (z + this.z);\n return this;\n }\n var ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta,\n ratioB = Math.sin(t * halfTheta) / sinHalfTheta;\n this.w = w * ratioA + this.w * ratioB;\n this.x = x * ratioA + this.x * ratioB;\n this.y = y * ratioA + this.y * ratioB;\n this.z = z * ratioA + this.z * ratioB;\n return this;\n },\n setFromUnitVectors: function () {\n var v1, r;\n var EPS = 0.000001;\n return function (vFrom, vTo) {\n if (v1 === undefined) v1 = new Vector3();\n r = vFrom.dot(vTo) + 1;\n if (r < EPS) {\n r = 0;\n if (Math.abs(vFrom.x) > Math.abs(vFrom.z)) {\n v1.set(-vFrom.y, vFrom.x, 0);\n } else {\n v1.set(0, -vFrom.z, vFrom.y);\n }\n } else {\n v1.crossVectors(vFrom, vTo);\n }\n this.x = v1.x;\n this.y = v1.y;\n this.z = v1.z;\n this.w = r;\n this.normalize();\n return this;\n };\n }()\n};\nfunction Device(params) {\n this.width = params.width || getScreenWidth();\n this.height = params.height || getScreenHeight();\n this.widthMeters = params.widthMeters;\n this.heightMeters = params.heightMeters;\n this.bevelMeters = params.bevelMeters;\n}\nvar DEFAULT_ANDROID = new Device({\n widthMeters: 0.110,\n heightMeters: 0.062,\n bevelMeters: 0.004\n});\nvar DEFAULT_IOS = new Device({\n widthMeters: 0.1038,\n heightMeters: 0.0584,\n bevelMeters: 0.004\n});\nvar Viewers = {\n CardboardV1: new CardboardViewer({\n id: 'CardboardV1',\n label: 'Cardboard I/O 2014',\n fov: 40,\n interLensDistance: 0.060,\n baselineLensDistance: 0.035,\n screenLensDistance: 0.042,\n distortionCoefficients: [0.441, 0.156],\n inverseCoefficients: [-0.4410035, 0.42756155, -0.4804439, 0.5460139, -0.58821183, 0.5733938, -0.48303202, 0.33299083, -0.17573841, 0.0651772, -0.01488963, 0.001559834]\n }),\n CardboardV2: new CardboardViewer({\n id: 'CardboardV2',\n label: 'Cardboard I/O 2015',\n fov: 60,\n interLensDistance: 0.064,\n baselineLensDistance: 0.035,\n screenLensDistance: 0.039,\n distortionCoefficients: [0.34, 0.55],\n inverseCoefficients: [-0.33836704, -0.18162185, 0.862655, -1.2462051, 1.0560602, -0.58208317, 0.21609078, -0.05444823, 0.009177956, -9.904169E-4, 6.183535E-5, -1.6981803E-6]\n })\n};\nfunction DeviceInfo(deviceParams, additionalViewers) {\n this.viewer = Viewers.CardboardV2;\n this.updateDeviceParams(deviceParams);\n this.distortion = new Distortion(this.viewer.distortionCoefficients);\n for (var i = 0; i < additionalViewers.length; i++) {\n var viewer = additionalViewers[i];\n Viewers[viewer.id] = new CardboardViewer(viewer);\n }\n}\nDeviceInfo.prototype.updateDeviceParams = function (deviceParams) {\n this.device = this.determineDevice_(deviceParams) || this.device;\n};\nDeviceInfo.prototype.getDevice = function () {\n return this.device;\n};\nDeviceInfo.prototype.setViewer = function (viewer) {\n this.viewer = viewer;\n this.distortion = new Distortion(this.viewer.distortionCoefficients);\n};\nDeviceInfo.prototype.determineDevice_ = function (deviceParams) {\n if (!deviceParams) {\n if (isIOS()) {\n console.warn('Using fallback iOS device measurements.');\n return DEFAULT_IOS;\n } else {\n console.warn('Using fallback Android device measurements.');\n return DEFAULT_ANDROID;\n }\n }\n var METERS_PER_INCH = 0.0254;\n var metersPerPixelX = METERS_PER_INCH / deviceParams.xdpi;\n var metersPerPixelY = METERS_PER_INCH / deviceParams.ydpi;\n var width = getScreenWidth();\n var height = getScreenHeight();\n return new Device({\n widthMeters: metersPerPixelX * width,\n heightMeters: metersPerPixelY * height,\n bevelMeters: deviceParams.bevelMm * 0.001\n });\n};\nDeviceInfo.prototype.getDistortedFieldOfViewLeftEye = function () {\n var viewer = this.viewer;\n var device = this.device;\n var distortion = this.distortion;\n var eyeToScreenDistance = viewer.screenLensDistance;\n var outerDist = (device.widthMeters - viewer.interLensDistance) / 2;\n var innerDist = viewer.interLensDistance / 2;\n var bottomDist = viewer.baselineLensDistance - device.bevelMeters;\n var topDist = device.heightMeters - bottomDist;\n var outerAngle = radToDeg * Math.atan(distortion.distort(outerDist / eyeToScreenDistance));\n var innerAngle = radToDeg * Math.atan(distortion.distort(innerDist / eyeToScreenDistance));\n var bottomAngle = radToDeg * Math.atan(distortion.distort(bottomDist / eyeToScreenDistance));\n var topAngle = radToDeg * Math.atan(distortion.distort(topDist / eyeToScreenDistance));\n return {\n leftDegrees: Math.min(outerAngle, viewer.fov),\n rightDegrees: Math.min(innerAngle, viewer.fov),\n downDegrees: Math.min(bottomAngle, viewer.fov),\n upDegrees: Math.min(topAngle, viewer.fov)\n };\n};\nDeviceInfo.prototype.getLeftEyeVisibleTanAngles = function () {\n var viewer = this.viewer;\n var device = this.device;\n var distortion = this.distortion;\n var fovLeft = Math.tan(-degToRad * viewer.fov);\n var fovTop = Math.tan(degToRad * viewer.fov);\n var fovRight = Math.tan(degToRad * viewer.fov);\n var fovBottom = Math.tan(-degToRad * viewer.fov);\n var halfWidth = device.widthMeters / 4;\n var halfHeight = device.heightMeters / 2;\n var verticalLensOffset = viewer.baselineLensDistance - device.bevelMeters - halfHeight;\n var centerX = viewer.interLensDistance / 2 - halfWidth;\n var centerY = -verticalLensOffset;\n var centerZ = viewer.screenLensDistance;\n var screenLeft = distortion.distort((centerX - halfWidth) / centerZ);\n var screenTop = distortion.distort((centerY + halfHeight) / centerZ);\n var screenRight = distortion.distort((centerX + halfWidth) / centerZ);\n var screenBottom = distortion.distort((centerY - halfHeight) / centerZ);\n var result = new Float32Array(4);\n result[0] = Math.max(fovLeft, screenLeft);\n result[1] = Math.min(fovTop, screenTop);\n result[2] = Math.min(fovRight, screenRight);\n result[3] = Math.max(fovBottom, screenBottom);\n return result;\n};\nDeviceInfo.prototype.getLeftEyeNoLensTanAngles = function () {\n var viewer = this.viewer;\n var device = this.device;\n var distortion = this.distortion;\n var result = new Float32Array(4);\n var fovLeft = distortion.distortInverse(Math.tan(-degToRad * viewer.fov));\n var fovTop = distortion.distortInverse(Math.tan(degToRad * viewer.fov));\n var fovRight = distortion.distortInverse(Math.tan(degToRad * viewer.fov));\n var fovBottom = distortion.distortInverse(Math.tan(-degToRad * viewer.fov));\n var halfWidth = device.widthMeters / 4;\n var halfHeight = device.heightMeters / 2;\n var verticalLensOffset = viewer.baselineLensDistance - device.bevelMeters - halfHeight;\n var centerX = viewer.interLensDistance / 2 - halfWidth;\n var centerY = -verticalLensOffset;\n var centerZ = viewer.screenLensDistance;\n var screenLeft = (centerX - halfWidth) / centerZ;\n var screenTop = (centerY + halfHeight) / centerZ;\n var screenRight = (centerX + halfWidth) / centerZ;\n var screenBottom = (centerY - halfHeight) / centerZ;\n result[0] = Math.max(fovLeft, screenLeft);\n result[1] = Math.min(fovTop, screenTop);\n result[2] = Math.min(fovRight, screenRight);\n result[3] = Math.max(fovBottom, screenBottom);\n return result;\n};\nDeviceInfo.prototype.getLeftEyeVisibleScreenRect = function (undistortedFrustum) {\n var viewer = this.viewer;\n var device = this.device;\n var dist = viewer.screenLensDistance;\n var eyeX = (device.widthMeters - viewer.interLensDistance) / 2;\n var eyeY = viewer.baselineLensDistance - device.bevelMeters;\n var left = (undistortedFrustum[0] * dist + eyeX) / device.widthMeters;\n var top = (undistortedFrustum[1] * dist + eyeY) / device.heightMeters;\n var right = (undistortedFrustum[2] * dist + eyeX) / device.widthMeters;\n var bottom = (undistortedFrustum[3] * dist + eyeY) / device.heightMeters;\n return {\n x: left,\n y: bottom,\n width: right - left,\n height: top - bottom\n };\n};\nDeviceInfo.prototype.getFieldOfViewLeftEye = function (opt_isUndistorted) {\n return opt_isUndistorted ? this.getUndistortedFieldOfViewLeftEye() : this.getDistortedFieldOfViewLeftEye();\n};\nDeviceInfo.prototype.getFieldOfViewRightEye = function (opt_isUndistorted) {\n var fov = this.getFieldOfViewLeftEye(opt_isUndistorted);\n return {\n leftDegrees: fov.rightDegrees,\n rightDegrees: fov.leftDegrees,\n upDegrees: fov.upDegrees,\n downDegrees: fov.downDegrees\n };\n};\nDeviceInfo.prototype.getUndistortedFieldOfViewLeftEye = function () {\n var p = this.getUndistortedParams_();\n return {\n leftDegrees: radToDeg * Math.atan(p.outerDist),\n rightDegrees: radToDeg * Math.atan(p.innerDist),\n downDegrees: radToDeg * Math.atan(p.bottomDist),\n upDegrees: radToDeg * Math.atan(p.topDist)\n };\n};\nDeviceInfo.prototype.getUndistortedViewportLeftEye = function () {\n var p = this.getUndistortedParams_();\n var viewer = this.viewer;\n var device = this.device;\n var eyeToScreenDistance = viewer.screenLensDistance;\n var screenWidth = device.widthMeters / eyeToScreenDistance;\n var screenHeight = device.heightMeters / eyeToScreenDistance;\n var xPxPerTanAngle = device.width / screenWidth;\n var yPxPerTanAngle = device.height / screenHeight;\n var x = Math.round((p.eyePosX - p.outerDist) * xPxPerTanAngle);\n var y = Math.round((p.eyePosY - p.bottomDist) * yPxPerTanAngle);\n return {\n x: x,\n y: y,\n width: Math.round((p.eyePosX + p.innerDist) * xPxPerTanAngle) - x,\n height: Math.round((p.eyePosY + p.topDist) * yPxPerTanAngle) - y\n };\n};\nDeviceInfo.prototype.getUndistortedParams_ = function () {\n var viewer = this.viewer;\n var device = this.device;\n var distortion = this.distortion;\n var eyeToScreenDistance = viewer.screenLensDistance;\n var halfLensDistance = viewer.interLensDistance / 2 / eyeToScreenDistance;\n var screenWidth = device.widthMeters / eyeToScreenDistance;\n var screenHeight = device.heightMeters / eyeToScreenDistance;\n var eyePosX = screenWidth / 2 - halfLensDistance;\n var eyePosY = (viewer.baselineLensDistance - device.bevelMeters) / eyeToScreenDistance;\n var maxFov = viewer.fov;\n var viewerMax = distortion.distortInverse(Math.tan(degToRad * maxFov));\n var outerDist = Math.min(eyePosX, viewerMax);\n var innerDist = Math.min(halfLensDistance, viewerMax);\n var bottomDist = Math.min(eyePosY, viewerMax);\n var topDist = Math.min(screenHeight - eyePosY, viewerMax);\n return {\n outerDist: outerDist,\n innerDist: innerDist,\n topDist: topDist,\n bottomDist: bottomDist,\n eyePosX: eyePosX,\n eyePosY: eyePosY\n };\n};\nfunction CardboardViewer(params) {\n this.id = params.id;\n this.label = params.label;\n this.fov = params.fov;\n this.interLensDistance = params.interLensDistance;\n this.baselineLensDistance = params.baselineLensDistance;\n this.screenLensDistance = params.screenLensDistance;\n this.distortionCoefficients = params.distortionCoefficients;\n this.inverseCoefficients = params.inverseCoefficients;\n}\nDeviceInfo.Viewers = Viewers;\nvar format = 1;\nvar last_updated = \"2019-11-09T17:36:14Z\";\nvar devices = [{\"type\":\"android\",\"rules\":[{\"mdmh\":\"asus/*/Nexus 7/*\"},{\"ua\":\"Nexus 7\"}],\"dpi\":[320.8,323],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"asus/*/ASUS_X00PD/*\"},{\"ua\":\"ASUS_X00PD\"}],\"dpi\":245,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"asus/*/ASUS_X008D/*\"},{\"ua\":\"ASUS_X008D\"}],\"dpi\":282,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"asus/*/ASUS_Z00AD/*\"},{\"ua\":\"ASUS_Z00AD\"}],\"dpi\":[403,404.6],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Google/*/Pixel 2 XL/*\"},{\"ua\":\"Pixel 2 XL\"}],\"dpi\":537.9,\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Google/*/Pixel 3 XL/*\"},{\"ua\":\"Pixel 3 XL\"}],\"dpi\":[558.5,553.8],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Google/*/Pixel XL/*\"},{\"ua\":\"Pixel XL\"}],\"dpi\":[537.9,533],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Google/*/Pixel 3/*\"},{\"ua\":\"Pixel 3\"}],\"dpi\":442.4,\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Google/*/Pixel 2/*\"},{\"ua\":\"Pixel 2\"}],\"dpi\":441,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Google/*/Pixel/*\"},{\"ua\":\"Pixel\"}],\"dpi\":[432.6,436.7],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"HTC/*/HTC6435LVW/*\"},{\"ua\":\"HTC6435LVW\"}],\"dpi\":[449.7,443.3],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"HTC/*/HTC One XL/*\"},{\"ua\":\"HTC One XL\"}],\"dpi\":[315.3,314.6],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"htc/*/Nexus 9/*\"},{\"ua\":\"Nexus 9\"}],\"dpi\":289,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"HTC/*/HTC One M9/*\"},{\"ua\":\"HTC One M9\"}],\"dpi\":[442.5,443.3],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"HTC/*/HTC One_M8/*\"},{\"ua\":\"HTC One_M8\"}],\"dpi\":[449.7,447.4],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"HTC/*/HTC One/*\"},{\"ua\":\"HTC One\"}],\"dpi\":472.8,\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Huawei/*/Nexus 6P/*\"},{\"ua\":\"Nexus 6P\"}],\"dpi\":[515.1,518],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Huawei/*/BLN-L24/*\"},{\"ua\":\"HONORBLN-L24\"}],\"dpi\":480,\"bw\":4,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Huawei/*/BKL-L09/*\"},{\"ua\":\"BKL-L09\"}],\"dpi\":403,\"bw\":3.47,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LENOVO/*/Lenovo PB2-690Y/*\"},{\"ua\":\"Lenovo PB2-690Y\"}],\"dpi\":[457.2,454.713],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/Nexus 5X/*\"},{\"ua\":\"Nexus 5X\"}],\"dpi\":[422,419.9],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/LGMS345/*\"},{\"ua\":\"LGMS345\"}],\"dpi\":[221.7,219.1],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/LG-D800/*\"},{\"ua\":\"LG-D800\"}],\"dpi\":[422,424.1],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/LG-D850/*\"},{\"ua\":\"LG-D850\"}],\"dpi\":[537.9,541.9],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/VS985 4G/*\"},{\"ua\":\"VS985 4G\"}],\"dpi\":[537.9,535.6],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/Nexus 5/*\"},{\"ua\":\"Nexus 5 B\"}],\"dpi\":[442.4,444.8],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/Nexus 4/*\"},{\"ua\":\"Nexus 4\"}],\"dpi\":[319.8,318.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/LG-P769/*\"},{\"ua\":\"LG-P769\"}],\"dpi\":[240.6,247.5],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/LGMS323/*\"},{\"ua\":\"LGMS323\"}],\"dpi\":[206.6,204.6],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"LGE/*/LGLS996/*\"},{\"ua\":\"LGLS996\"}],\"dpi\":[403.4,401.5],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Micromax/*/4560MMX/*\"},{\"ua\":\"4560MMX\"}],\"dpi\":[240,219.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Micromax/*/A250/*\"},{\"ua\":\"Micromax A250\"}],\"dpi\":[480,446.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Micromax/*/Micromax AQ4501/*\"},{\"ua\":\"Micromax AQ4501\"}],\"dpi\":240,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/G5/*\"},{\"ua\":\"Moto G (5) Plus\"}],\"dpi\":[403.4,403],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/DROID RAZR/*\"},{\"ua\":\"DROID RAZR\"}],\"dpi\":[368.1,256.7],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT830C/*\"},{\"ua\":\"XT830C\"}],\"dpi\":[254,255.9],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1021/*\"},{\"ua\":\"XT1021\"}],\"dpi\":[254,256.7],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1023/*\"},{\"ua\":\"XT1023\"}],\"dpi\":[254,256.7],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1028/*\"},{\"ua\":\"XT1028\"}],\"dpi\":[326.6,327.6],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1034/*\"},{\"ua\":\"XT1034\"}],\"dpi\":[326.6,328.4],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1053/*\"},{\"ua\":\"XT1053\"}],\"dpi\":[315.3,316.1],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1562/*\"},{\"ua\":\"XT1562\"}],\"dpi\":[403.4,402.7],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/Nexus 6/*\"},{\"ua\":\"Nexus 6 B\"}],\"dpi\":[494.3,489.7],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1063/*\"},{\"ua\":\"XT1063\"}],\"dpi\":[295,296.6],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1064/*\"},{\"ua\":\"XT1064\"}],\"dpi\":[295,295.6],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1092/*\"},{\"ua\":\"XT1092\"}],\"dpi\":[422,424.1],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/XT1095/*\"},{\"ua\":\"XT1095\"}],\"dpi\":[422,423.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"motorola/*/G4/*\"},{\"ua\":\"Moto G (4)\"}],\"dpi\":401,\"bw\":4,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/A0001/*\"},{\"ua\":\"A0001\"}],\"dpi\":[403.4,401],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/ONE E1001/*\"},{\"ua\":\"ONE E1001\"}],\"dpi\":[442.4,441.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/ONE E1003/*\"},{\"ua\":\"ONE E1003\"}],\"dpi\":[442.4,441.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/ONE E1005/*\"},{\"ua\":\"ONE E1005\"}],\"dpi\":[442.4,441.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/ONE A2001/*\"},{\"ua\":\"ONE A2001\"}],\"dpi\":[391.9,405.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/ONE A2003/*\"},{\"ua\":\"ONE A2003\"}],\"dpi\":[391.9,405.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/ONE A2005/*\"},{\"ua\":\"ONE A2005\"}],\"dpi\":[391.9,405.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/ONEPLUS A3000/*\"},{\"ua\":\"ONEPLUS A3000\"}],\"dpi\":401,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/ONEPLUS A3003/*\"},{\"ua\":\"ONEPLUS A3003\"}],\"dpi\":401,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/ONEPLUS A3010/*\"},{\"ua\":\"ONEPLUS A3010\"}],\"dpi\":401,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/ONEPLUS A5000/*\"},{\"ua\":\"ONEPLUS A5000 \"}],\"dpi\":[403.411,399.737],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/ONE A5010/*\"},{\"ua\":\"ONEPLUS A5010\"}],\"dpi\":[403,400],\"bw\":2,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/ONEPLUS A6000/*\"},{\"ua\":\"ONEPLUS A6000\"}],\"dpi\":401,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/ONEPLUS A6003/*\"},{\"ua\":\"ONEPLUS A6003\"}],\"dpi\":401,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/ONEPLUS A6010/*\"},{\"ua\":\"ONEPLUS A6010\"}],\"dpi\":401,\"bw\":2,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OnePlus/*/ONEPLUS A6013/*\"},{\"ua\":\"ONEPLUS A6013\"}],\"dpi\":401,\"bw\":2,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"OPPO/*/X909/*\"},{\"ua\":\"X909\"}],\"dpi\":[442.4,444.1],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/GT-I9082/*\"},{\"ua\":\"GT-I9082\"}],\"dpi\":[184.7,185.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G360P/*\"},{\"ua\":\"SM-G360P\"}],\"dpi\":[196.7,205.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/Nexus S/*\"},{\"ua\":\"Nexus S\"}],\"dpi\":[234.5,229.8],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/GT-I9300/*\"},{\"ua\":\"GT-I9300\"}],\"dpi\":[304.8,303.9],\"bw\":5,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-T230NU/*\"},{\"ua\":\"SM-T230NU\"}],\"dpi\":216,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SGH-T399/*\"},{\"ua\":\"SGH-T399\"}],\"dpi\":[217.7,231.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SGH-M919/*\"},{\"ua\":\"SGH-M919\"}],\"dpi\":[440.8,437.7],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-N9005/*\"},{\"ua\":\"SM-N9005\"}],\"dpi\":[386.4,387],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SAMSUNG-SM-N900A/*\"},{\"ua\":\"SAMSUNG-SM-N900A\"}],\"dpi\":[386.4,387.7],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/GT-I9500/*\"},{\"ua\":\"GT-I9500\"}],\"dpi\":[442.5,443.3],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/GT-I9505/*\"},{\"ua\":\"GT-I9505\"}],\"dpi\":439.4,\"bw\":4,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G900F/*\"},{\"ua\":\"SM-G900F\"}],\"dpi\":[415.6,431.6],\"bw\":5,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G900M/*\"},{\"ua\":\"SM-G900M\"}],\"dpi\":[415.6,431.6],\"bw\":5,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G800F/*\"},{\"ua\":\"SM-G800F\"}],\"dpi\":326.8,\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G906S/*\"},{\"ua\":\"SM-G906S\"}],\"dpi\":[562.7,572.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/GT-I9300/*\"},{\"ua\":\"GT-I9300\"}],\"dpi\":[306.7,304.8],\"bw\":5,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-T535/*\"},{\"ua\":\"SM-T535\"}],\"dpi\":[142.6,136.4],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-N920C/*\"},{\"ua\":\"SM-N920C\"}],\"dpi\":[515.1,518.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-N920P/*\"},{\"ua\":\"SM-N920P\"}],\"dpi\":[386.3655,390.144],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-N920W8/*\"},{\"ua\":\"SM-N920W8\"}],\"dpi\":[515.1,518.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/GT-I9300I/*\"},{\"ua\":\"GT-I9300I\"}],\"dpi\":[304.8,305.8],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/GT-I9195/*\"},{\"ua\":\"GT-I9195\"}],\"dpi\":[249.4,256.7],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SPH-L520/*\"},{\"ua\":\"SPH-L520\"}],\"dpi\":[249.4,255.9],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SAMSUNG-SGH-I717/*\"},{\"ua\":\"SAMSUNG-SGH-I717\"}],\"dpi\":285.8,\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SPH-D710/*\"},{\"ua\":\"SPH-D710\"}],\"dpi\":[217.7,204.2],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/GT-N7100/*\"},{\"ua\":\"GT-N7100\"}],\"dpi\":265.1,\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SCH-I605/*\"},{\"ua\":\"SCH-I605\"}],\"dpi\":265.1,\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/Galaxy Nexus/*\"},{\"ua\":\"Galaxy Nexus\"}],\"dpi\":[315.3,314.2],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-N910H/*\"},{\"ua\":\"SM-N910H\"}],\"dpi\":[515.1,518],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-N910C/*\"},{\"ua\":\"SM-N910C\"}],\"dpi\":[515.2,520.2],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G130M/*\"},{\"ua\":\"SM-G130M\"}],\"dpi\":[165.9,164.8],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G928I/*\"},{\"ua\":\"SM-G928I\"}],\"dpi\":[515.1,518.4],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G920F/*\"},{\"ua\":\"SM-G920F\"}],\"dpi\":580.6,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G920P/*\"},{\"ua\":\"SM-G920P\"}],\"dpi\":[522.5,577],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G925F/*\"},{\"ua\":\"SM-G925F\"}],\"dpi\":580.6,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G925V/*\"},{\"ua\":\"SM-G925V\"}],\"dpi\":[522.5,576.6],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G930F/*\"},{\"ua\":\"SM-G930F\"}],\"dpi\":576.6,\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G935F/*\"},{\"ua\":\"SM-G935F\"}],\"dpi\":533,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G950F/*\"},{\"ua\":\"SM-G950F\"}],\"dpi\":[562.707,565.293],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G955U/*\"},{\"ua\":\"SM-G955U\"}],\"dpi\":[522.514,525.762],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G955F/*\"},{\"ua\":\"SM-G955F\"}],\"dpi\":[522.514,525.762],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G960F/*\"},{\"ua\":\"SM-G960F\"}],\"dpi\":[569.575,571.5],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G9600/*\"},{\"ua\":\"SM-G9600\"}],\"dpi\":[569.575,571.5],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G960T/*\"},{\"ua\":\"SM-G960T\"}],\"dpi\":[569.575,571.5],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G960N/*\"},{\"ua\":\"SM-G960N\"}],\"dpi\":[569.575,571.5],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G960U/*\"},{\"ua\":\"SM-G960U\"}],\"dpi\":[569.575,571.5],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G9608/*\"},{\"ua\":\"SM-G9608\"}],\"dpi\":[569.575,571.5],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G960FD/*\"},{\"ua\":\"SM-G960FD\"}],\"dpi\":[569.575,571.5],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G960W/*\"},{\"ua\":\"SM-G960W\"}],\"dpi\":[569.575,571.5],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G965F/*\"},{\"ua\":\"SM-G965F\"}],\"dpi\":529,\"bw\":2,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Sony/*/C6903/*\"},{\"ua\":\"C6903\"}],\"dpi\":[442.5,443.3],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Sony/*/D6653/*\"},{\"ua\":\"D6653\"}],\"dpi\":[428.6,427.6],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Sony/*/E6653/*\"},{\"ua\":\"E6653\"}],\"dpi\":[428.6,425.7],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Sony/*/E6853/*\"},{\"ua\":\"E6853\"}],\"dpi\":[403.4,401.9],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Sony/*/SGP321/*\"},{\"ua\":\"SGP321\"}],\"dpi\":[224.7,224.1],\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"TCT/*/ALCATEL ONE TOUCH Fierce/*\"},{\"ua\":\"ALCATEL ONE TOUCH Fierce\"}],\"dpi\":[240,247.5],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"THL/*/thl 5000/*\"},{\"ua\":\"thl 5000\"}],\"dpi\":[480,443.3],\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Fly/*/IQ4412/*\"},{\"ua\":\"IQ4412\"}],\"dpi\":307.9,\"bw\":3,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"ZTE/*/ZTE Blade L2/*\"},{\"ua\":\"ZTE Blade L2\"}],\"dpi\":240,\"bw\":3,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"BENEVE/*/VR518/*\"},{\"ua\":\"VR518\"}],\"dpi\":480,\"bw\":3,\"ac\":500},{\"type\":\"ios\",\"rules\":[{\"res\":[640,960]}],\"dpi\":[325.1,328.4],\"bw\":4,\"ac\":1000},{\"type\":\"ios\",\"rules\":[{\"res\":[640,1136]}],\"dpi\":[317.1,320.2],\"bw\":3,\"ac\":1000},{\"type\":\"ios\",\"rules\":[{\"res\":[750,1334]}],\"dpi\":326.4,\"bw\":4,\"ac\":1000},{\"type\":\"ios\",\"rules\":[{\"res\":[1242,2208]}],\"dpi\":[453.6,458.4],\"bw\":4,\"ac\":1000},{\"type\":\"ios\",\"rules\":[{\"res\":[1125,2001]}],\"dpi\":[410.9,415.4],\"bw\":4,\"ac\":1000},{\"type\":\"ios\",\"rules\":[{\"res\":[1125,2436]}],\"dpi\":458,\"bw\":4,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Huawei/*/EML-L29/*\"},{\"ua\":\"EML-L29\"}],\"dpi\":428,\"bw\":3.45,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"Nokia/*/Nokia 7.1/*\"},{\"ua\":\"Nokia 7.1\"}],\"dpi\":[432,431.9],\"bw\":3,\"ac\":500},{\"type\":\"ios\",\"rules\":[{\"res\":[1242,2688]}],\"dpi\":458,\"bw\":4,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G570M/*\"},{\"ua\":\"SM-G570M\"}],\"dpi\":320,\"bw\":3.684,\"ac\":1000},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G970F/*\"},{\"ua\":\"SM-G970F\"}],\"dpi\":438,\"bw\":2.281,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G973F/*\"},{\"ua\":\"SM-G973F\"}],\"dpi\":550,\"bw\":2.002,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G975F/*\"},{\"ua\":\"SM-G975F\"}],\"dpi\":522,\"bw\":2.054,\"ac\":500},{\"type\":\"android\",\"rules\":[{\"mdmh\":\"samsung/*/SM-G977F/*\"},{\"ua\":\"SM-G977F\"}],\"dpi\":505,\"bw\":2.334,\"ac\":500},{\"type\":\"ios\",\"rules\":[{\"res\":[828,1792]}],\"dpi\":326,\"bw\":5,\"ac\":500}];\nvar DPDB_CACHE = {\n\tformat: format,\n\tlast_updated: last_updated,\n\tdevices: devices\n};\nfunction Dpdb(url, onDeviceParamsUpdated) {\n this.dpdb = DPDB_CACHE;\n this.recalculateDeviceParams_();\n if (url) {\n this.onDeviceParamsUpdated = onDeviceParamsUpdated;\n var xhr = new XMLHttpRequest();\n var obj = this;\n xhr.open('GET', url, true);\n xhr.addEventListener('load', function () {\n obj.loading = false;\n if (xhr.status >= 200 && xhr.status <= 299) {\n obj.dpdb = JSON.parse(xhr.response);\n obj.recalculateDeviceParams_();\n } else {\n console.error('Error loading online DPDB!');\n }\n });\n xhr.send();\n }\n}\nDpdb.prototype.getDeviceParams = function () {\n return this.deviceParams;\n};\nDpdb.prototype.recalculateDeviceParams_ = function () {\n var newDeviceParams = this.calcDeviceParams_();\n if (newDeviceParams) {\n this.deviceParams = newDeviceParams;\n if (this.onDeviceParamsUpdated) {\n this.onDeviceParamsUpdated(this.deviceParams);\n }\n } else {\n console.error('Failed to recalculate device parameters.');\n }\n};\nDpdb.prototype.calcDeviceParams_ = function () {\n var db = this.dpdb;\n if (!db) {\n console.error('DPDB not available.');\n return null;\n }\n if (db.format != 1) {\n console.error('DPDB has unexpected format version.');\n return null;\n }\n if (!db.devices || !db.devices.length) {\n console.error('DPDB does not have a devices section.');\n return null;\n }\n var userAgent = navigator.userAgent || navigator.vendor || window.opera;\n var width = getScreenWidth();\n var height = getScreenHeight();\n if (!db.devices) {\n console.error('DPDB has no devices section.');\n return null;\n }\n for (var i = 0; i < db.devices.length; i++) {\n var device = db.devices[i];\n if (!device.rules) {\n console.warn('Device[' + i + '] has no rules section.');\n continue;\n }\n if (device.type != 'ios' && device.type != 'android') {\n console.warn('Device[' + i + '] has invalid type.');\n continue;\n }\n if (isIOS() != (device.type == 'ios')) continue;\n var matched = false;\n for (var j = 0; j < device.rules.length; j++) {\n var rule = device.rules[j];\n if (this.ruleMatches_(rule, userAgent, width, height)) {\n matched = true;\n break;\n }\n }\n if (!matched) continue;\n var xdpi = device.dpi[0] || device.dpi;\n var ydpi = device.dpi[1] || device.dpi;\n return new DeviceParams({ xdpi: xdpi, ydpi: ydpi, bevelMm: device.bw });\n }\n console.warn('No DPDB device match.');\n return null;\n};\nDpdb.prototype.ruleMatches_ = function (rule, ua, screenWidth, screenHeight) {\n if (!rule.ua && !rule.res) return false;\n if (rule.ua && rule.ua.substring(0, 2) === 'SM') rule.ua = rule.ua.substring(0, 7);\n if (rule.ua && ua.indexOf(rule.ua) < 0) return false;\n if (rule.res) {\n if (!rule.res[0] || !rule.res[1]) return false;\n var resX = rule.res[0];\n var resY = rule.res[1];\n if (Math.min(screenWidth, screenHeight) != Math.min(resX, resY) || Math.max(screenWidth, screenHeight) != Math.max(resX, resY)) {\n return false;\n }\n }\n return true;\n};\nfunction DeviceParams(params) {\n this.xdpi = params.xdpi;\n this.ydpi = params.ydpi;\n this.bevelMm = params.bevelMm;\n}\nfunction SensorSample(sample, timestampS) {\n this.set(sample, timestampS);\n}\nSensorSample.prototype.set = function (sample, timestampS) {\n this.sample = sample;\n this.timestampS = timestampS;\n};\nSensorSample.prototype.copy = function (sensorSample) {\n this.set(sensorSample.sample, sensorSample.timestampS);\n};\nfunction ComplementaryFilter(kFilter, isDebug) {\n this.kFilter = kFilter;\n this.isDebug = isDebug;\n this.currentAccelMeasurement = new SensorSample();\n this.currentGyroMeasurement = new SensorSample();\n this.previousGyroMeasurement = new SensorSample();\n if (isIOS()) {\n this.filterQ = new Quaternion(-1, 0, 0, 1);\n } else {\n this.filterQ = new Quaternion(1, 0, 0, 1);\n }\n this.previousFilterQ = new Quaternion();\n this.previousFilterQ.copy(this.filterQ);\n this.accelQ = new Quaternion();\n this.isOrientationInitialized = false;\n this.estimatedGravity = new Vector3();\n this.measuredGravity = new Vector3();\n this.gyroIntegralQ = new Quaternion();\n}\nComplementaryFilter.prototype.addAccelMeasurement = function (vector, timestampS) {\n this.currentAccelMeasurement.set(vector, timestampS);\n};\nComplementaryFilter.prototype.addGyroMeasurement = function (vector, timestampS) {\n this.currentGyroMeasurement.set(vector, timestampS);\n var deltaT = timestampS - this.previousGyroMeasurement.timestampS;\n if (isTimestampDeltaValid(deltaT)) {\n this.run_();\n }\n this.previousGyroMeasurement.copy(this.currentGyroMeasurement);\n};\nComplementaryFilter.prototype.run_ = function () {\n if (!this.isOrientationInitialized) {\n this.accelQ = this.accelToQuaternion_(this.currentAccelMeasurement.sample);\n this.previousFilterQ.copy(this.accelQ);\n this.isOrientationInitialized = true;\n return;\n }\n var deltaT = this.currentGyroMeasurement.timestampS - this.previousGyroMeasurement.timestampS;\n var gyroDeltaQ = this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample, deltaT);\n this.gyroIntegralQ.multiply(gyroDeltaQ);\n this.filterQ.copy(this.previousFilterQ);\n this.filterQ.multiply(gyroDeltaQ);\n var invFilterQ = new Quaternion();\n invFilterQ.copy(this.filterQ);\n invFilterQ.inverse();\n this.estimatedGravity.set(0, 0, -1);\n this.estimatedGravity.applyQuaternion(invFilterQ);\n this.estimatedGravity.normalize();\n this.measuredGravity.copy(this.currentAccelMeasurement.sample);\n this.measuredGravity.normalize();\n var deltaQ = new Quaternion();\n deltaQ.setFromUnitVectors(this.estimatedGravity, this.measuredGravity);\n deltaQ.inverse();\n if (this.isDebug) {\n console.log('Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)', radToDeg * getQuaternionAngle(deltaQ), this.estimatedGravity.x.toFixed(1), this.estimatedGravity.y.toFixed(1), this.estimatedGravity.z.toFixed(1), this.measuredGravity.x.toFixed(1), this.measuredGravity.y.toFixed(1), this.measuredGravity.z.toFixed(1));\n }\n var targetQ = new Quaternion();\n targetQ.copy(this.filterQ);\n targetQ.multiply(deltaQ);\n this.filterQ.slerp(targetQ, 1 - this.kFilter);\n this.previousFilterQ.copy(this.filterQ);\n};\nComplementaryFilter.prototype.getOrientation = function () {\n return this.filterQ;\n};\nComplementaryFilter.prototype.accelToQuaternion_ = function (accel) {\n var normAccel = new Vector3();\n normAccel.copy(accel);\n normAccel.normalize();\n var quat = new Quaternion();\n quat.setFromUnitVectors(new Vector3(0, 0, -1), normAccel);\n quat.inverse();\n return quat;\n};\nComplementaryFilter.prototype.gyroToQuaternionDelta_ = function (gyro, dt) {\n var quat = new Quaternion();\n var axis = new Vector3();\n axis.copy(gyro);\n axis.normalize();\n quat.setFromAxisAngle(axis, gyro.length() * dt);\n return quat;\n};\nfunction PosePredictor(predictionTimeS, isDebug) {\n this.predictionTimeS = predictionTimeS;\n this.isDebug = isDebug;\n this.previousQ = new Quaternion();\n this.previousTimestampS = null;\n this.deltaQ = new Quaternion();\n this.outQ = new Quaternion();\n}\nPosePredictor.prototype.getPrediction = function (currentQ, gyro, timestampS) {\n if (!this.previousTimestampS) {\n this.previousQ.copy(currentQ);\n this.previousTimestampS = timestampS;\n return currentQ;\n }\n var axis = new Vector3();\n axis.copy(gyro);\n axis.normalize();\n var angularSpeed = gyro.length();\n if (angularSpeed < degToRad * 20) {\n if (this.isDebug) {\n console.log('Moving slowly, at %s deg/s: no prediction', (radToDeg * angularSpeed).toFixed(1));\n }\n this.outQ.copy(currentQ);\n this.previousQ.copy(currentQ);\n return this.outQ;\n }\n var predictAngle = angularSpeed * this.predictionTimeS;\n this.deltaQ.setFromAxisAngle(axis, predictAngle);\n this.outQ.copy(this.previousQ);\n this.outQ.multiply(this.deltaQ);\n this.previousQ.copy(currentQ);\n this.previousTimestampS = timestampS;\n return this.outQ;\n};\nfunction FusionPoseSensor(kFilter, predictionTime, yawOnly, isDebug) {\n this.yawOnly = yawOnly;\n this.accelerometer = new Vector3();\n this.gyroscope = new Vector3();\n this.filter = new ComplementaryFilter(kFilter, isDebug);\n this.posePredictor = new PosePredictor(predictionTime, isDebug);\n this.isFirefoxAndroid = isFirefoxAndroid();\n this.isIOS = isIOS();\n var chromeVersion = getChromeVersion();\n this.isDeviceMotionInRadians = !this.isIOS && chromeVersion && chromeVersion < 66;\n this.isWithoutDeviceMotion = isChromeWithoutDeviceMotion() || isSafariWithoutDeviceMotion();\n this.filterToWorldQ = new Quaternion();\n if (isIOS()) {\n this.filterToWorldQ.setFromAxisAngle(new Vector3(1, 0, 0), Math.PI / 2);\n } else {\n this.filterToWorldQ.setFromAxisAngle(new Vector3(1, 0, 0), -Math.PI / 2);\n }\n this.inverseWorldToScreenQ = new Quaternion();\n this.worldToScreenQ = new Quaternion();\n this.originalPoseAdjustQ = new Quaternion();\n this.originalPoseAdjustQ.setFromAxisAngle(new Vector3(0, 0, 1), -window.orientation * Math.PI / 180);\n this.setScreenTransform_();\n if (isLandscapeMode()) {\n this.filterToWorldQ.multiply(this.inverseWorldToScreenQ);\n }\n this.resetQ = new Quaternion();\n this.orientationOut_ = new Float32Array(4);\n this.start();\n}\nFusionPoseSensor.prototype.getPosition = function () {\n return null;\n};\nFusionPoseSensor.prototype.getOrientation = function () {\n var orientation = void 0;\n if (this.isWithoutDeviceMotion && this._deviceOrientationQ) {\n this.deviceOrientationFixQ = this.deviceOrientationFixQ || function () {\n var z = new Quaternion().setFromAxisAngle(new Vector3(0, 0, -1), 0);\n var y = new Quaternion();\n if (window.orientation === -90) {\n y.setFromAxisAngle(new Vector3(0, 1, 0), Math.PI / -2);\n } else {\n y.setFromAxisAngle(new Vector3(0, 1, 0), Math.PI / 2);\n }\n return z.multiply(y);\n }();\n this.deviceOrientationFilterToWorldQ = this.deviceOrientationFilterToWorldQ || function () {\n var q = new Quaternion();\n q.setFromAxisAngle(new Vector3(1, 0, 0), -Math.PI / 2);\n return q;\n }();\n orientation = this._deviceOrientationQ;\n var out = new Quaternion();\n out.copy(orientation);\n out.multiply(this.deviceOrientationFilterToWorldQ);\n out.multiply(this.resetQ);\n out.multiply(this.worldToScreenQ);\n out.multiplyQuaternions(this.deviceOrientationFixQ, out);\n if (this.yawOnly) {\n out.x = 0;\n out.z = 0;\n out.normalize();\n }\n this.orientationOut_[0] = out.x;\n this.orientationOut_[1] = out.y;\n this.orientationOut_[2] = out.z;\n this.orientationOut_[3] = out.w;\n return this.orientationOut_;\n } else {\n var filterOrientation = this.filter.getOrientation();\n orientation = this.posePredictor.getPrediction(filterOrientation, this.gyroscope, this.previousTimestampS);\n }\n var out = new Quaternion();\n out.copy(this.filterToWorldQ);\n out.multiply(this.resetQ);\n out.multiply(orientation);\n out.multiply(this.worldToScreenQ);\n if (this.yawOnly) {\n out.x = 0;\n out.z = 0;\n out.normalize();\n }\n this.orientationOut_[0] = out.x;\n this.orientationOut_[1] = out.y;\n this.orientationOut_[2] = out.z;\n this.orientationOut_[3] = out.w;\n return this.orientationOut_;\n};\nFusionPoseSensor.prototype.resetPose = function () {\n this.resetQ.copy(this.filter.getOrientation());\n this.resetQ.x = 0;\n this.resetQ.y = 0;\n this.resetQ.z *= -1;\n this.resetQ.normalize();\n if (isLandscapeMode()) {\n this.resetQ.multiply(this.inverseWorldToScreenQ);\n }\n this.resetQ.multiply(this.originalPoseAdjustQ);\n};\nFusionPoseSensor.prototype.onDeviceOrientation_ = function (e) {\n this._deviceOrientationQ = this._deviceOrientationQ || new Quaternion();\n var alpha = e.alpha,\n beta = e.beta,\n gamma = e.gamma;\n alpha = (alpha || 0) * Math.PI / 180;\n beta = (beta || 0) * Math.PI / 180;\n gamma = (gamma || 0) * Math.PI / 180;\n this._deviceOrientationQ.setFromEulerYXZ(beta, alpha, -gamma);\n};\nFusionPoseSensor.prototype.onDeviceMotion_ = function (deviceMotion) {\n this.updateDeviceMotion_(deviceMotion);\n};\nFusionPoseSensor.prototype.updateDeviceMotion_ = function (deviceMotion) {\n var accGravity = deviceMotion.accelerationIncludingGravity;\n var rotRate = deviceMotion.rotationRate;\n var timestampS = deviceMotion.timeStamp / 1000;\n var deltaS = timestampS - this.previousTimestampS;\n if (deltaS < 0) {\n warnOnce('fusion-pose-sensor:invalid:non-monotonic', 'Invalid timestamps detected: non-monotonic timestamp from devicemotion');\n this.previousTimestampS = timestampS;\n return;\n } else if (deltaS <= MIN_TIMESTEP || deltaS > MAX_TIMESTEP) {\n warnOnce('fusion-pose-sensor:invalid:outside-threshold', 'Invalid timestamps detected: Timestamp from devicemotion outside expected range.');\n this.previousTimestampS = timestampS;\n return;\n }\n this.accelerometer.set(-accGravity.x, -accGravity.y, -accGravity.z);\n if (rotRate) {\n if (isR7()) {\n this.gyroscope.set(-rotRate.beta, rotRate.alpha, rotRate.gamma);\n } else {\n this.gyroscope.set(rotRate.alpha, rotRate.beta, rotRate.gamma);\n }\n if (!this.isDeviceMotionInRadians) {\n this.gyroscope.multiplyScalar(Math.PI / 180);\n }\n this.filter.addGyroMeasurement(this.gyroscope, timestampS);\n }\n this.filter.addAccelMeasurement(this.accelerometer, timestampS);\n this.previousTimestampS = timestampS;\n};\nFusionPoseSensor.prototype.onOrientationChange_ = function (screenOrientation) {\n this.setScreenTransform_();\n};\nFusionPoseSensor.prototype.onMessage_ = function (event) {\n var message = event.data;\n if (!message || !message.type) {\n return;\n }\n var type = message.type.toLowerCase();\n if (type !== 'devicemotion') {\n return;\n }\n this.updateDeviceMotion_(message.deviceMotionEvent);\n};\nFusionPoseSensor.prototype.setScreenTransform_ = function () {\n this.worldToScreenQ.set(0, 0, 0, 1);\n switch (window.orientation) {\n case 0:\n break;\n case 90:\n this.worldToScreenQ.setFromAxisAngle(new Vector3(0, 0, 1), -Math.PI / 2);\n break;\n case -90:\n this.worldToScreenQ.setFromAxisAngle(new Vector3(0, 0, 1), Math.PI / 2);\n break;\n case 180:\n break;\n }\n this.inverseWorldToScreenQ.copy(this.worldToScreenQ);\n this.inverseWorldToScreenQ.inverse();\n};\nFusionPoseSensor.prototype.start = function () {\n this.onDeviceMotionCallback_ = this.onDeviceMotion_.bind(this);\n this.onOrientationChangeCallback_ = this.onOrientationChange_.bind(this);\n this.onMessageCallback_ = this.onMessage_.bind(this);\n this.onDeviceOrientationCallback_ = this.onDeviceOrientation_.bind(this);\n if (isIOS() && isInsideCrossOriginIFrame()) {\n window.addEventListener('message', this.onMessageCallback_);\n }\n window.addEventListener('orientationchange', this.onOrientationChangeCallback_);\n if (this.isWithoutDeviceMotion) {\n window.addEventListener('deviceorientation', this.onDeviceOrientationCallback_);\n } else {\n window.addEventListener('devicemotion', this.onDeviceMotionCallback_);\n }\n};\nFusionPoseSensor.prototype.stop = function () {\n window.removeEventListener('devicemotion', this.onDeviceMotionCallback_);\n window.removeEventListener('deviceorientation', this.onDeviceOrientationCallback_);\n window.removeEventListener('orientationchange', this.onOrientationChangeCallback_);\n window.removeEventListener('message', this.onMessageCallback_);\n};\nvar SENSOR_FREQUENCY = 60;\nvar X_AXIS = new Vector3(1, 0, 0);\nvar Z_AXIS = new Vector3(0, 0, 1);\nvar SENSOR_TO_VR = new Quaternion();\nSENSOR_TO_VR.setFromAxisAngle(X_AXIS, -Math.PI / 2);\nSENSOR_TO_VR.multiply(new Quaternion().setFromAxisAngle(Z_AXIS, Math.PI / 2));\nvar PoseSensor = function () {\n function PoseSensor(config) {\n classCallCheck(this, PoseSensor);\n this.config = config;\n this.sensor = null;\n this.fusionSensor = null;\n this._out = new Float32Array(4);\n this.api = null;\n this.errors = [];\n this._sensorQ = new Quaternion();\n this._outQ = new Quaternion();\n this._onSensorRead = this._onSensorRead.bind(this);\n this._onSensorError = this._onSensorError.bind(this);\n this.init();\n }\n createClass(PoseSensor, [{\n key: 'init',\n value: function init() {\n var sensor = null;\n try {\n sensor = new RelativeOrientationSensor({\n frequency: SENSOR_FREQUENCY,\n referenceFrame: 'screen'\n });\n sensor.addEventListener('error', this._onSensorError);\n } catch (error) {\n this.errors.push(error);\n if (error.name === 'SecurityError') {\n console.error('Cannot construct sensors due to the Feature Policy');\n console.warn('Attempting to fall back using \"devicemotion\"; however this will ' + 'fail in the future without correct permissions.');\n this.useDeviceMotion();\n } else if (error.name === 'ReferenceError') {\n this.useDeviceMotion();\n } else {\n console.error(error);\n }\n }\n if (sensor) {\n this.api = 'sensor';\n this.sensor = sensor;\n this.sensor.addEventListener('reading', this._onSensorRead);\n this.sensor.start();\n }\n }\n }, {\n key: 'useDeviceMotion',\n value: function useDeviceMotion() {\n this.api = 'devicemotion';\n this.fusionSensor = new FusionPoseSensor(this.config.K_FILTER, this.config.PREDICTION_TIME_S, this.config.YAW_ONLY, this.config.DEBUG);\n if (this.sensor) {\n this.sensor.removeEventListener('reading', this._onSensorRead);\n this.sensor.removeEventListener('error', this._onSensorError);\n this.sensor = null;\n }\n }\n }, {\n key: 'getOrientation',\n value: function getOrientation() {\n if (this.fusionSensor) {\n return this.fusionSensor.getOrientation();\n }\n if (!this.sensor || !this.sensor.quaternion) {\n this._out[0] = this._out[1] = this._out[2] = 0;\n this._out[3] = 1;\n return this._out;\n }\n var q = this.sensor.quaternion;\n this._sensorQ.set(q[0], q[1], q[2], q[3]);\n var out = this._outQ;\n out.copy(SENSOR_TO_VR);\n out.multiply(this._sensorQ);\n if (this.config.YAW_ONLY) {\n out.x = out.z = 0;\n out.normalize();\n }\n this._out[0] = out.x;\n this._out[1] = out.y;\n this._out[2] = out.z;\n this._out[3] = out.w;\n return this._out;\n }\n }, {\n key: '_onSensorError',\n value: function _onSensorError(event) {\n this.errors.push(event.error);\n if (event.error.name === 'NotAllowedError') {\n console.error('Permission to access sensor was denied');\n } else if (event.error.name === 'NotReadableError') {\n console.error('Sensor could not be read');\n } else {\n console.error(event.error);\n }\n this.useDeviceMotion();\n }\n }, {\n key: '_onSensorRead',\n value: function _onSensorRead() {}\n }]);\n return PoseSensor;\n}();\nvar rotateInstructionsAsset = \"\";\nfunction RotateInstructions() {\n this.loadIcon_();\n var overlay = document.createElement('div');\n var s = overlay.style;\n s.position = 'fixed';\n s.top = 0;\n s.right = 0;\n s.bottom = 0;\n s.left = 0;\n s.backgroundColor = 'gray';\n s.fontFamily = 'sans-serif';\n s.zIndex = 1000000;\n var img = document.createElement('img');\n img.src = this.icon;\n var s = img.style;\n s.marginLeft = '25%';\n s.marginTop = '25%';\n s.width = '50%';\n overlay.appendChild(img);\n var text = document.createElement('div');\n var s = text.style;\n s.textAlign = 'center';\n s.fontSize = '16px';\n s.lineHeight = '24px';\n s.margin = '24px 25%';\n s.width = '50%';\n text.innerHTML = 'Place your phone into your Cardboard viewer.';\n overlay.appendChild(text);\n var snackbar = document.createElement('div');\n var s = snackbar.style;\n s.backgroundColor = '#CFD8DC';\n s.position = 'fixed';\n s.bottom = 0;\n s.width = '100%';\n s.height = '48px';\n s.padding = '14px 24px';\n s.boxSizing = 'border-box';\n s.color = '#656A6B';\n overlay.appendChild(snackbar);\n var snackbarText = document.createElement('div');\n snackbarText.style.float = 'left';\n snackbarText.innerHTML = 'No Cardboard viewer?';\n var snackbarButton = document.createElement('a');\n snackbarButton.href = 'https://www.google.com/get/cardboard/get-cardboard/';\n snackbarButton.innerHTML = 'get one';\n snackbarButton.target = '_blank';\n var s = snackbarButton.style;\n s.float = 'right';\n s.fontWeight = 600;\n s.textTransform = 'uppercase';\n s.borderLeft = '1px solid gray';\n s.paddingLeft = '24px';\n s.textDecoration = 'none';\n s.color = '#656A6B';\n snackbar.appendChild(snackbarText);\n snackbar.appendChild(snackbarButton);\n this.overlay = overlay;\n this.text = text;\n this.hide();\n}\nRotateInstructions.prototype.show = function (parent) {\n if (!parent && !this.overlay.parentElement) {\n document.body.appendChild(this.overlay);\n } else if (parent) {\n if (this.overlay.parentElement && this.overlay.parentElement != parent) this.overlay.parentElement.removeChild(this.overlay);\n parent.appendChild(this.overlay);\n }\n this.overlay.style.display = 'block';\n var img = this.overlay.querySelector('img');\n var s = img.style;\n if (isLandscapeMode()) {\n s.width = '20%';\n s.marginLeft = '40%';\n s.marginTop = '3%';\n } else {\n s.width = '50%';\n s.marginLeft = '25%';\n s.marginTop = '25%';\n }\n};\nRotateInstructions.prototype.hide = function () {\n this.overlay.style.display = 'none';\n};\nRotateInstructions.prototype.showTemporarily = function (ms, parent) {\n this.show(parent);\n this.timer = setTimeout(this.hide.bind(this), ms);\n};\nRotateInstructions.prototype.disableShowTemporarily = function () {\n clearTimeout(this.timer);\n};\nRotateInstructions.prototype.update = function () {\n this.disableShowTemporarily();\n if (!isLandscapeMode() && isMobile()) {\n this.show();\n } else {\n this.hide();\n }\n};\nRotateInstructions.prototype.loadIcon_ = function () {\n this.icon = dataUri('image/svg+xml', rotateInstructionsAsset);\n};\nvar DEFAULT_VIEWER = 'CardboardV1';\nvar VIEWER_KEY = 'WEBVR_CARDBOARD_VIEWER';\nvar CLASS_NAME = 'webvr-polyfill-viewer-selector';\nfunction ViewerSelector(defaultViewer) {\n try {\n this.selectedKey = localStorage.getItem(VIEWER_KEY);\n } catch (error) {\n console.error('Failed to load viewer profile: %s', error);\n }\n if (!this.selectedKey) {\n this.selectedKey = defaultViewer || DEFAULT_VIEWER;\n }\n this.dialog = this.createDialog_(DeviceInfo.Viewers);\n this.root = null;\n this.onChangeCallbacks_ = [];\n}\nViewerSelector.prototype.show = function (root) {\n this.root = root;\n root.appendChild(this.dialog);\n var selected = this.dialog.querySelector('#' + this.selectedKey);\n selected.checked = true;\n this.dialog.style.display = 'block';\n};\nViewerSelector.prototype.hide = function () {\n if (this.root && this.root.contains(this.dialog)) {\n this.root.removeChild(this.dialog);\n }\n this.dialog.style.display = 'none';\n};\nViewerSelector.prototype.getCurrentViewer = function () {\n return DeviceInfo.Viewers[this.selectedKey];\n};\nViewerSelector.prototype.getSelectedKey_ = function () {\n var input = this.dialog.querySelector('input[name=field]:checked');\n if (input) {\n return input.id;\n }\n return null;\n};\nViewerSelector.prototype.onChange = function (cb) {\n this.onChangeCallbacks_.push(cb);\n};\nViewerSelector.prototype.fireOnChange_ = function (viewer) {\n for (var i = 0; i < this.onChangeCallbacks_.length; i++) {\n this.onChangeCallbacks_[i](viewer);\n }\n};\nViewerSelector.prototype.onSave_ = function () {\n this.selectedKey = this.getSelectedKey_();\n if (!this.selectedKey || !DeviceInfo.Viewers[this.selectedKey]) {\n console.error('ViewerSelector.onSave_: this should never happen!');\n return;\n }\n this.fireOnChange_(DeviceInfo.Viewers[this.selectedKey]);\n try {\n localStorage.setItem(VIEWER_KEY, this.selectedKey);\n } catch (error) {\n console.error('Failed to save viewer profile: %s', error);\n }\n this.hide();\n};\nViewerSelector.prototype.createDialog_ = function (options) {\n var container = document.createElement('div');\n container.classList.add(CLASS_NAME);\n container.style.display = 'none';\n var overlay = document.createElement('div');\n var s = overlay.style;\n s.position = 'fixed';\n s.left = 0;\n s.top = 0;\n s.width = '100%';\n s.height = '100%';\n s.background = 'rgba(0, 0, 0, 0.3)';\n overlay.addEventListener('click', this.hide.bind(this));\n var width = 280;\n var dialog = document.createElement('div');\n var s = dialog.style;\n s.boxSizing = 'border-box';\n s.position = 'fixed';\n s.top = '24px';\n s.left = '50%';\n s.marginLeft = -width / 2 + 'px';\n s.width = width + 'px';\n s.padding = '24px';\n s.overflow = 'hidden';\n s.background = '#fafafa';\n s.fontFamily = \"'Roboto', sans-serif\";\n s.boxShadow = '0px 5px 20px #666';\n dialog.appendChild(this.createH1_('Select your viewer'));\n for (var id in options) {\n dialog.appendChild(this.createChoice_(id, options[id].label));\n }\n dialog.appendChild(this.createButton_('Save', this.onSave_.bind(this)));\n container.appendChild(overlay);\n container.appendChild(dialog);\n return container;\n};\nViewerSelector.prototype.createH1_ = function (name) {\n var h1 = document.createElement('h1');\n var s = h1.style;\n s.color = 'black';\n s.fontSize = '20px';\n s.fontWeight = 'bold';\n s.marginTop = 0;\n s.marginBottom = '24px';\n h1.innerHTML = name;\n return h1;\n};\nViewerSelector.prototype.createChoice_ = function (id, name) {\n var div = document.createElement('div');\n div.style.marginTop = '8px';\n div.style.color = 'black';\n var input = document.createElement('input');\n input.style.fontSize = '30px';\n input.setAttribute('id', id);\n input.setAttribute('type', 'radio');\n input.setAttribute('value', id);\n input.setAttribute('name', 'field');\n var label = document.createElement('label');\n label.style.marginLeft = '4px';\n label.setAttribute('for', id);\n label.innerHTML = name;\n div.appendChild(input);\n div.appendChild(label);\n return div;\n};\nViewerSelector.prototype.createButton_ = function (label, onclick) {\n var button = document.createElement('button');\n button.innerHTML = label;\n var s = button.style;\n s.float = 'right';\n s.textTransform = 'uppercase';\n s.color = '#1094f7';\n s.fontSize = '14px';\n s.letterSpacing = 0;\n s.border = 0;\n s.background = 'none';\n s.marginTop = '16px';\n button.addEventListener('click', onclick);\n return button;\n};\nvar commonjsGlobal$$1 = typeof window !== 'undefined' ? window : typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof self !== 'undefined' ? self : {};\nfunction unwrapExports$$1 (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\nfunction createCommonjsModule$$1(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\nvar NoSleep = createCommonjsModule$$1(function (module, exports) {\n(function webpackUniversalModuleDefinition(root, factory) {\n\tmodule.exports = factory();\n})(commonjsGlobal$$1, function() {\nreturn (function(modules) {\n \tvar installedModules = {};\n \tfunction __webpack_require__(moduleId) {\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n \t\tmodule.l = true;\n \t\treturn module.exports;\n \t}\n \t__webpack_require__.m = modules;\n \t__webpack_require__.c = installedModules;\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n \t__webpack_require__.p = \"\";\n \treturn __webpack_require__(__webpack_require__.s = 0);\n })\n ([\n (function(module, exports, __webpack_require__) {\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nvar mediaFile = __webpack_require__(1);\nvar oldIOS = typeof navigator !== 'undefined' && parseFloat(('' + (/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0, ''])[1]).replace('undefined', '3_2').replace('_', '.').replace('_', '')) < 10 && !window.MSStream;\nvar NoSleep = function () {\n function NoSleep() {\n _classCallCheck(this, NoSleep);\n if (oldIOS) {\n this.noSleepTimer = null;\n } else {\n this.noSleepVideo = document.createElement('video');\n this.noSleepVideo.setAttribute('playsinline', '');\n this.noSleepVideo.setAttribute('src', mediaFile);\n this.noSleepVideo.addEventListener('timeupdate', function (e) {\n if (this.noSleepVideo.currentTime > 0.5) {\n this.noSleepVideo.currentTime = Math.random();\n }\n }.bind(this));\n }\n }\n _createClass(NoSleep, [{\n key: 'enable',\n value: function enable() {\n if (oldIOS) {\n this.disable();\n this.noSleepTimer = window.setInterval(function () {\n window.location.href = '/';\n window.setTimeout(window.stop, 0);\n }, 15000);\n } else {\n this.noSleepVideo.play();\n }\n }\n }, {\n key: 'disable',\n value: function disable() {\n if (oldIOS) {\n if (this.noSleepTimer) {\n window.clearInterval(this.noSleepTimer);\n this.noSleepTimer = null;\n }\n } else {\n this.noSleepVideo.pause();\n }\n }\n }]);\n return NoSleep;\n}();\nmodule.exports = NoSleep;\n }),\n (function(module, exports, __webpack_require__) {\nmodule.exports = 'data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQAD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';\n })\n ]);\n});\n});\nvar NoSleep$1 = unwrapExports$$1(NoSleep);\nvar nextDisplayId = 1000;\nvar defaultLeftBounds = [0, 0, 0.5, 1];\nvar defaultRightBounds = [0.5, 0, 0.5, 1];\nvar raf = window.requestAnimationFrame;\nvar caf = window.cancelAnimationFrame;\nfunction VRFrameData() {\n this.leftProjectionMatrix = new Float32Array(16);\n this.leftViewMatrix = new Float32Array(16);\n this.rightProjectionMatrix = new Float32Array(16);\n this.rightViewMatrix = new Float32Array(16);\n this.pose = null;\n}\nfunction VRDisplayCapabilities(config) {\n Object.defineProperties(this, {\n hasPosition: {\n writable: false, enumerable: true, value: config.hasPosition\n },\n hasExternalDisplay: {\n writable: false, enumerable: true, value: config.hasExternalDisplay\n },\n canPresent: {\n writable: false, enumerable: true, value: config.canPresent\n },\n maxLayers: {\n writable: false, enumerable: true, value: config.maxLayers\n },\n hasOrientation: {\n enumerable: true, get: function get() {\n deprecateWarning('VRDisplayCapabilities.prototype.hasOrientation', 'VRDisplay.prototype.getFrameData');\n return config.hasOrientation;\n }\n }\n });\n}\nfunction VRDisplay(config) {\n config = config || {};\n var USE_WAKELOCK = 'wakelock' in config ? config.wakelock : true;\n this.isPolyfilled = true;\n this.displayId = nextDisplayId++;\n this.displayName = '';\n this.depthNear = 0.01;\n this.depthFar = 10000.0;\n this.isPresenting = false;\n Object.defineProperty(this, 'isConnected', {\n get: function get() {\n deprecateWarning('VRDisplay.prototype.isConnected', 'VRDisplayCapabilities.prototype.hasExternalDisplay');\n return false;\n }\n });\n this.capabilities = new VRDisplayCapabilities({\n hasPosition: false,\n hasOrientation: false,\n hasExternalDisplay: false,\n canPresent: false,\n maxLayers: 1\n });\n this.stageParameters = null;\n this.waitingForPresent_ = false;\n this.layer_ = null;\n this.originalParent_ = null;\n this.fullscreenElement_ = null;\n this.fullscreenWrapper_ = null;\n this.fullscreenElementCachedStyle_ = null;\n this.fullscreenEventTarget_ = null;\n this.fullscreenChangeHandler_ = null;\n this.fullscreenErrorHandler_ = null;\n if (USE_WAKELOCK && isMobile()) {\n this.wakelock_ = new NoSleep$1();\n }\n}\nVRDisplay.prototype.getFrameData = function (frameData) {\n return frameDataFromPose(frameData, this._getPose(), this);\n};\nVRDisplay.prototype.getPose = function () {\n deprecateWarning('VRDisplay.prototype.getPose', 'VRDisplay.prototype.getFrameData');\n return this._getPose();\n};\nVRDisplay.prototype.resetPose = function () {\n deprecateWarning('VRDisplay.prototype.resetPose');\n return this._resetPose();\n};\nVRDisplay.prototype.getImmediatePose = function () {\n deprecateWarning('VRDisplay.prototype.getImmediatePose', 'VRDisplay.prototype.getFrameData');\n return this._getPose();\n};\nVRDisplay.prototype.requestAnimationFrame = function (callback) {\n return raf(callback);\n};\nVRDisplay.prototype.cancelAnimationFrame = function (id) {\n return caf(id);\n};\nVRDisplay.prototype.wrapForFullscreen = function (element) {\n if (isIOS()) {\n return element;\n }\n if (!this.fullscreenWrapper_) {\n this.fullscreenWrapper_ = document.createElement('div');\n var cssProperties = ['height: ' + Math.min(screen.height, screen.width) + 'px !important', 'top: 0 !important', 'left: 0 !important', 'right: 0 !important', 'border: 0', 'margin: 0', 'padding: 0', 'z-index: 999999 !important', 'position: fixed'];\n this.fullscreenWrapper_.setAttribute('style', cssProperties.join('; ') + ';');\n this.fullscreenWrapper_.classList.add('webvr-polyfill-fullscreen-wrapper');\n }\n if (this.fullscreenElement_ == element) {\n return this.fullscreenWrapper_;\n }\n if (this.fullscreenElement_) {\n if (this.originalParent_) {\n this.originalParent_.appendChild(this.fullscreenElement_);\n } else {\n this.fullscreenElement_.parentElement.removeChild(this.fullscreenElement_);\n }\n }\n this.fullscreenElement_ = element;\n this.originalParent_ = element.parentElement;\n if (!this.originalParent_) {\n document.body.appendChild(element);\n }\n if (!this.fullscreenWrapper_.parentElement) {\n var parent = this.fullscreenElement_.parentElement;\n parent.insertBefore(this.fullscreenWrapper_, this.fullscreenElement_);\n parent.removeChild(this.fullscreenElement_);\n }\n this.fullscreenWrapper_.insertBefore(this.fullscreenElement_, this.fullscreenWrapper_.firstChild);\n this.fullscreenElementCachedStyle_ = this.fullscreenElement_.getAttribute('style');\n var self = this;\n function applyFullscreenElementStyle() {\n if (!self.fullscreenElement_) {\n return;\n }\n var cssProperties = ['position: absolute', 'top: 0', 'left: 0', 'width: ' + Math.max(screen.width, screen.height) + 'px', 'height: ' + Math.min(screen.height, screen.width) + 'px', 'border: 0', 'margin: 0', 'padding: 0'];\n self.fullscreenElement_.setAttribute('style', cssProperties.join('; ') + ';');\n }\n applyFullscreenElementStyle();\n return this.fullscreenWrapper_;\n};\nVRDisplay.prototype.removeFullscreenWrapper = function () {\n if (!this.fullscreenElement_) {\n return;\n }\n var element = this.fullscreenElement_;\n if (this.fullscreenElementCachedStyle_) {\n element.setAttribute('style', this.fullscreenElementCachedStyle_);\n } else {\n element.removeAttribute('style');\n }\n this.fullscreenElement_ = null;\n this.fullscreenElementCachedStyle_ = null;\n var parent = this.fullscreenWrapper_.parentElement;\n this.fullscreenWrapper_.removeChild(element);\n if (this.originalParent_ === parent) {\n parent.insertBefore(element, this.fullscreenWrapper_);\n }\n else if (this.originalParent_) {\n this.originalParent_.appendChild(element);\n }\n parent.removeChild(this.fullscreenWrapper_);\n return element;\n};\nVRDisplay.prototype.requestPresent = function (layers) {\n var wasPresenting = this.isPresenting;\n var self = this;\n if (!(layers instanceof Array)) {\n deprecateWarning('VRDisplay.prototype.requestPresent with non-array argument', 'an array of VRLayers as the first argument');\n layers = [layers];\n }\n return new Promise(function (resolve, reject) {\n if (!self.capabilities.canPresent) {\n reject(new Error('VRDisplay is not capable of presenting.'));\n return;\n }\n if (layers.length == 0 || layers.length > self.capabilities.maxLayers) {\n reject(new Error('Invalid number of layers.'));\n return;\n }\n var incomingLayer = layers[0];\n if (!incomingLayer.source) {\n resolve();\n return;\n }\n var leftBounds = incomingLayer.leftBounds || defaultLeftBounds;\n var rightBounds = incomingLayer.rightBounds || defaultRightBounds;\n if (wasPresenting) {\n var layer = self.layer_;\n if (layer.source !== incomingLayer.source) {\n layer.source = incomingLayer.source;\n }\n for (var i = 0; i < 4; i++) {\n layer.leftBounds[i] = leftBounds[i];\n layer.rightBounds[i] = rightBounds[i];\n }\n self.wrapForFullscreen(self.layer_.source);\n self.updatePresent_();\n resolve();\n return;\n }\n self.layer_ = {\n predistorted: incomingLayer.predistorted,\n source: incomingLayer.source,\n leftBounds: leftBounds.slice(0),\n rightBounds: rightBounds.slice(0)\n };\n self.waitingForPresent_ = false;\n if (self.layer_ && self.layer_.source) {\n var fullscreenElement = self.wrapForFullscreen(self.layer_.source);\n var onFullscreenChange = function onFullscreenChange() {\n var actualFullscreenElement = getFullscreenElement();\n self.isPresenting = fullscreenElement === actualFullscreenElement;\n if (self.isPresenting) {\n if (screen.orientation && screen.orientation.lock) {\n screen.orientation.lock('landscape-primary').catch(function (error) {\n console.error('screen.orientation.lock() failed due to', error.message);\n });\n }\n self.waitingForPresent_ = false;\n self.beginPresent_();\n resolve();\n } else {\n if (screen.orientation && screen.orientation.unlock) {\n screen.orientation.unlock();\n }\n self.removeFullscreenWrapper();\n self.disableWakeLock();\n self.endPresent_();\n self.removeFullscreenListeners_();\n }\n self.fireVRDisplayPresentChange_();\n };\n var onFullscreenError = function onFullscreenError() {\n if (!self.waitingForPresent_) {\n return;\n }\n self.removeFullscreenWrapper();\n self.removeFullscreenListeners_();\n self.disableWakeLock();\n self.waitingForPresent_ = false;\n self.isPresenting = false;\n reject(new Error('Unable to present.'));\n };\n self.addFullscreenListeners_(fullscreenElement, onFullscreenChange, onFullscreenError);\n if (requestFullscreen(fullscreenElement)) {\n self.enableWakeLock();\n self.waitingForPresent_ = true;\n } else if (isIOS() || isWebViewAndroid()) {\n self.enableWakeLock();\n self.isPresenting = true;\n self.beginPresent_();\n self.fireVRDisplayPresentChange_();\n resolve();\n }\n }\n if (!self.waitingForPresent_ && !isIOS()) {\n exitFullscreen();\n reject(new Error('Unable to present.'));\n }\n });\n};\nVRDisplay.prototype.exitPresent = function () {\n var wasPresenting = this.isPresenting;\n var self = this;\n this.isPresenting = false;\n this.layer_ = null;\n this.disableWakeLock();\n return new Promise(function (resolve, reject) {\n if (wasPresenting) {\n if (!exitFullscreen() && isIOS()) {\n self.endPresent_();\n self.fireVRDisplayPresentChange_();\n }\n if (isWebViewAndroid()) {\n self.removeFullscreenWrapper();\n self.removeFullscreenListeners_();\n self.endPresent_();\n self.fireVRDisplayPresentChange_();\n }\n resolve();\n } else {\n reject(new Error('Was not presenting to VRDisplay.'));\n }\n });\n};\nVRDisplay.prototype.getLayers = function () {\n if (this.layer_) {\n return [this.layer_];\n }\n return [];\n};\nVRDisplay.prototype.fireVRDisplayPresentChange_ = function () {\n var event = new CustomEvent('vrdisplaypresentchange', { detail: { display: this } });\n window.dispatchEvent(event);\n};\nVRDisplay.prototype.fireVRDisplayConnect_ = function () {\n var event = new CustomEvent('vrdisplayconnect', { detail: { display: this } });\n window.dispatchEvent(event);\n};\nVRDisplay.prototype.addFullscreenListeners_ = function (element, changeHandler, errorHandler) {\n this.removeFullscreenListeners_();\n this.fullscreenEventTarget_ = element;\n this.fullscreenChangeHandler_ = changeHandler;\n this.fullscreenErrorHandler_ = errorHandler;\n if (changeHandler) {\n if (document.fullscreenEnabled) {\n element.addEventListener('fullscreenchange', changeHandler, false);\n } else if (document.webkitFullscreenEnabled) {\n element.addEventListener('webkitfullscreenchange', changeHandler, false);\n } else if (document.mozFullScreenEnabled) {\n document.addEventListener('mozfullscreenchange', changeHandler, false);\n } else if (document.msFullscreenEnabled) {\n element.addEventListener('msfullscreenchange', changeHandler, false);\n }\n }\n if (errorHandler) {\n if (document.fullscreenEnabled) {\n element.addEventListener('fullscreenerror', errorHandler, false);\n } else if (document.webkitFullscreenEnabled) {\n element.addEventListener('webkitfullscreenerror', errorHandler, false);\n } else if (document.mozFullScreenEnabled) {\n document.addEventListener('mozfullscreenerror', errorHandler, false);\n } else if (document.msFullscreenEnabled) {\n element.addEventListener('msfullscreenerror', errorHandler, false);\n }\n }\n};\nVRDisplay.prototype.removeFullscreenListeners_ = function () {\n if (!this.fullscreenEventTarget_) return;\n var element = this.fullscreenEventTarget_;\n if (this.fullscreenChangeHandler_) {\n var changeHandler = this.fullscreenChangeHandler_;\n element.removeEventListener('fullscreenchange', changeHandler, false);\n element.removeEventListener('webkitfullscreenchange', changeHandler, false);\n document.removeEventListener('mozfullscreenchange', changeHandler, false);\n element.removeEventListener('msfullscreenchange', changeHandler, false);\n }\n if (this.fullscreenErrorHandler_) {\n var errorHandler = this.fullscreenErrorHandler_;\n element.removeEventListener('fullscreenerror', errorHandler, false);\n element.removeEventListener('webkitfullscreenerror', errorHandler, false);\n document.removeEventListener('mozfullscreenerror', errorHandler, false);\n element.removeEventListener('msfullscreenerror', errorHandler, false);\n }\n this.fullscreenEventTarget_ = null;\n this.fullscreenChangeHandler_ = null;\n this.fullscreenErrorHandler_ = null;\n};\nVRDisplay.prototype.enableWakeLock = function () {\n if (this.wakelock_) {\n this.wakelock_.enable();\n }\n};\nVRDisplay.prototype.disableWakeLock = function () {\n if (this.wakelock_) {\n this.wakelock_.disable();\n }\n};\nVRDisplay.prototype.beginPresent_ = function () {\n};\nVRDisplay.prototype.endPresent_ = function () {\n};\nVRDisplay.prototype.submitFrame = function (pose) {\n};\nVRDisplay.prototype.getEyeParameters = function (whichEye) {\n return null;\n};\nvar config = {\n ADDITIONAL_VIEWERS: [],\n DEFAULT_VIEWER: '',\n MOBILE_WAKE_LOCK: true,\n DEBUG: false,\n DPDB_URL: 'https://dpdb.webvr.rocks/dpdb.json',\n K_FILTER: 0.98,\n PREDICTION_TIME_S: 0.040,\n CARDBOARD_UI_DISABLED: false,\n ROTATE_INSTRUCTIONS_DISABLED: false,\n YAW_ONLY: false,\n BUFFER_SCALE: 0.5,\n DIRTY_SUBMIT_FRAME_BINDINGS: false\n};\nvar Eye = {\n LEFT: 'left',\n RIGHT: 'right'\n};\nfunction CardboardVRDisplay(config$$1) {\n var defaults = extend({}, config);\n config$$1 = extend(defaults, config$$1 || {});\n VRDisplay.call(this, {\n wakelock: config$$1.MOBILE_WAKE_LOCK\n });\n this.config = config$$1;\n this.displayName = 'Cardboard VRDisplay';\n this.capabilities = new VRDisplayCapabilities({\n hasPosition: false,\n hasOrientation: true,\n hasExternalDisplay: false,\n canPresent: true,\n maxLayers: 1\n });\n this.stageParameters = null;\n this.bufferScale_ = this.config.BUFFER_SCALE;\n this.poseSensor_ = new PoseSensor(this.config);\n this.distorter_ = null;\n this.cardboardUI_ = null;\n this.dpdb_ = new Dpdb(this.config.DPDB_URL, this.onDeviceParamsUpdated_.bind(this));\n this.deviceInfo_ = new DeviceInfo(this.dpdb_.getDeviceParams(), config$$1.ADDITIONAL_VIEWERS);\n this.viewerSelector_ = new ViewerSelector(config$$1.DEFAULT_VIEWER);\n this.viewerSelector_.onChange(this.onViewerChanged_.bind(this));\n this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer());\n if (!this.config.ROTATE_INSTRUCTIONS_DISABLED) {\n this.rotateInstructions_ = new RotateInstructions();\n }\n if (isIOS()) {\n window.addEventListener('resize', this.onResize_.bind(this));\n }\n}\nCardboardVRDisplay.prototype = Object.create(VRDisplay.prototype);\nCardboardVRDisplay.prototype._getPose = function () {\n return {\n position: null,\n orientation: this.poseSensor_.getOrientation(),\n linearVelocity: null,\n linearAcceleration: null,\n angularVelocity: null,\n angularAcceleration: null\n };\n};\nCardboardVRDisplay.prototype._resetPose = function () {\n if (this.poseSensor_.resetPose) {\n this.poseSensor_.resetPose();\n }\n};\nCardboardVRDisplay.prototype._getFieldOfView = function (whichEye) {\n var fieldOfView;\n if (whichEye == Eye.LEFT) {\n fieldOfView = this.deviceInfo_.getFieldOfViewLeftEye();\n } else if (whichEye == Eye.RIGHT) {\n fieldOfView = this.deviceInfo_.getFieldOfViewRightEye();\n } else {\n console.error('Invalid eye provided: %s', whichEye);\n return null;\n }\n return fieldOfView;\n};\nCardboardVRDisplay.prototype._getEyeOffset = function (whichEye) {\n var offset;\n if (whichEye == Eye.LEFT) {\n offset = [-this.deviceInfo_.viewer.interLensDistance * 0.5, 0.0, 0.0];\n } else if (whichEye == Eye.RIGHT) {\n offset = [this.deviceInfo_.viewer.interLensDistance * 0.5, 0.0, 0.0];\n } else {\n console.error('Invalid eye provided: %s', whichEye);\n return null;\n }\n return offset;\n};\nCardboardVRDisplay.prototype.getEyeParameters = function (whichEye) {\n var offset = this._getEyeOffset(whichEye);\n var fieldOfView = this._getFieldOfView(whichEye);\n var eyeParams = {\n offset: offset,\n renderWidth: this.deviceInfo_.device.width * 0.5 * this.bufferScale_,\n renderHeight: this.deviceInfo_.device.height * this.bufferScale_\n };\n Object.defineProperty(eyeParams, 'fieldOfView', {\n enumerable: true,\n get: function get() {\n deprecateWarning('VRFieldOfView', 'VRFrameData\\'s projection matrices');\n return fieldOfView;\n }\n });\n return eyeParams;\n};\nCardboardVRDisplay.prototype.onDeviceParamsUpdated_ = function (newParams) {\n if (this.config.DEBUG) {\n console.log('DPDB reported that device params were updated.');\n }\n this.deviceInfo_.updateDeviceParams(newParams);\n if (this.distorter_) {\n this.distorter_.updateDeviceInfo(this.deviceInfo_);\n }\n};\nCardboardVRDisplay.prototype.updateBounds_ = function () {\n if (this.layer_ && this.distorter_ && (this.layer_.leftBounds || this.layer_.rightBounds)) {\n this.distorter_.setTextureBounds(this.layer_.leftBounds, this.layer_.rightBounds);\n }\n};\nCardboardVRDisplay.prototype.beginPresent_ = function () {\n var gl = this.layer_.source.getContext('webgl');\n if (!gl) gl = this.layer_.source.getContext('experimental-webgl');\n if (!gl) gl = this.layer_.source.getContext('webgl2');\n if (!gl) return;\n if (this.layer_.predistorted) {\n if (!this.config.CARDBOARD_UI_DISABLED) {\n gl.canvas.width = getScreenWidth() * this.bufferScale_;\n gl.canvas.height = getScreenHeight() * this.bufferScale_;\n this.cardboardUI_ = new CardboardUI(gl);\n }\n } else {\n if (!this.config.CARDBOARD_UI_DISABLED) {\n this.cardboardUI_ = new CardboardUI(gl);\n }\n this.distorter_ = new CardboardDistorter(gl, this.cardboardUI_, this.config.BUFFER_SCALE, this.config.DIRTY_SUBMIT_FRAME_BINDINGS);\n this.distorter_.updateDeviceInfo(this.deviceInfo_);\n }\n if (this.cardboardUI_) {\n this.cardboardUI_.listen(function (e) {\n this.viewerSelector_.show(this.layer_.source.parentElement);\n e.stopPropagation();\n e.preventDefault();\n }.bind(this), function (e) {\n this.exitPresent();\n e.stopPropagation();\n e.preventDefault();\n }.bind(this));\n }\n if (this.rotateInstructions_) {\n if (isLandscapeMode() && isMobile()) {\n this.rotateInstructions_.showTemporarily(3000, this.layer_.source.parentElement);\n } else {\n this.rotateInstructions_.update();\n }\n }\n this.orientationHandler = this.onOrientationChange_.bind(this);\n window.addEventListener('orientationchange', this.orientationHandler);\n this.vrdisplaypresentchangeHandler = this.updateBounds_.bind(this);\n window.addEventListener('vrdisplaypresentchange', this.vrdisplaypresentchangeHandler);\n this.fireVRDisplayDeviceParamsChange_();\n};\nCardboardVRDisplay.prototype.endPresent_ = function () {\n if (this.distorter_) {\n this.distorter_.destroy();\n this.distorter_ = null;\n }\n if (this.cardboardUI_) {\n this.cardboardUI_.destroy();\n this.cardboardUI_ = null;\n }\n if (this.rotateInstructions_) {\n this.rotateInstructions_.hide();\n }\n this.viewerSelector_.hide();\n window.removeEventListener('orientationchange', this.orientationHandler);\n window.removeEventListener('vrdisplaypresentchange', this.vrdisplaypresentchangeHandler);\n};\nCardboardVRDisplay.prototype.updatePresent_ = function () {\n this.endPresent_();\n this.beginPresent_();\n};\nCardboardVRDisplay.prototype.submitFrame = function (pose) {\n if (this.distorter_) {\n this.updateBounds_();\n this.distorter_.submitFrame();\n } else if (this.cardboardUI_ && this.layer_) {\n var gl = this.layer_.source.getContext('webgl');\n if (!gl) gl = this.layer_.source.getContext('experimental-webgl');\n if (!gl) gl = this.layer_.source.getContext('webgl2');\n var canvas = gl.canvas;\n if (canvas.width != this.lastWidth || canvas.height != this.lastHeight) {\n this.cardboardUI_.onResize();\n }\n this.lastWidth = canvas.width;\n this.lastHeight = canvas.height;\n this.cardboardUI_.render();\n }\n};\nCardboardVRDisplay.prototype.onOrientationChange_ = function (e) {\n this.viewerSelector_.hide();\n if (this.rotateInstructions_) {\n this.rotateInstructions_.update();\n }\n this.onResize_();\n};\nCardboardVRDisplay.prototype.onResize_ = function (e) {\n if (this.layer_) {\n var gl = this.layer_.source.getContext('webgl');\n if (!gl) gl = this.layer_.source.getContext('experimental-webgl');\n if (!gl) gl = this.layer_.source.getContext('webgl2');\n var cssProperties = ['position: absolute', 'top: 0', 'left: 0',\n 'width: 100vw', 'height: 100vh', 'border: 0', 'margin: 0',\n 'padding: 0px', 'box-sizing: content-box'];\n gl.canvas.setAttribute('style', cssProperties.join('; ') + ';');\n safariCssSizeWorkaround(gl.canvas);\n }\n};\nCardboardVRDisplay.prototype.onViewerChanged_ = function (viewer) {\n this.deviceInfo_.setViewer(viewer);\n if (this.distorter_) {\n this.distorter_.updateDeviceInfo(this.deviceInfo_);\n }\n this.fireVRDisplayDeviceParamsChange_();\n};\nCardboardVRDisplay.prototype.fireVRDisplayDeviceParamsChange_ = function () {\n var event = new CustomEvent('vrdisplaydeviceparamschange', {\n detail: {\n vrdisplay: this,\n deviceInfo: this.deviceInfo_\n }\n });\n window.dispatchEvent(event);\n};\nCardboardVRDisplay.VRFrameData = VRFrameData;\nCardboardVRDisplay.VRDisplay = VRDisplay;\nreturn CardboardVRDisplay;\n})));\n});\nvar CardboardVRDisplay = unwrapExports(cardboardVrDisplay);\n\nclass XRDevice extends EventTarget {\n constructor(global) {\n super();\n this.global = global;\n this.onWindowResize = this.onWindowResize.bind(this);\n this.global.window.addEventListener('resize', this.onWindowResize);\n this.environmentBlendMode = 'opaque';\n }\n onBaseLayerSet(sessionId, layer) { throw new Error('Not implemented'); }\n isSessionSupported(mode) { throw new Error('Not implemented'); }\n isFeatureSupported(featureDescriptor) { throw new Error('Not implemented'); }\n async requestSession(mode, enabledFeatures) { throw new Error('Not implemented'); }\n requestAnimationFrame(callback) { throw new Error('Not implemented'); }\n onFrameStart(sessionId) { throw new Error('Not implemented'); }\n onFrameEnd(sessionId) { throw new Error('Not implemented'); }\n doesSessionSupportReferenceSpace(sessionId, type) { throw new Error('Not implemented'); }\n requestStageBounds() { throw new Error('Not implemented'); }\n async requestFrameOfReferenceTransform(type, options) {\n return undefined;\n }\n cancelAnimationFrame(handle) { throw new Error('Not implemented'); }\n endSession(sessionId) { throw new Error('Not implemented'); }\n getViewport(sessionId, eye, layer, target) { throw new Error('Not implemented'); }\n getProjectionMatrix(eye) { throw new Error('Not implemented'); }\n getBasePoseMatrix() { throw new Error('Not implemented'); }\n getBaseViewMatrix(eye) { throw new Error('Not implemented'); }\n getInputSources() { throw new Error('Not implemented'); }\n getInputPose(inputSource, coordinateSystem, poseType) { throw new Error('Not implemented'); }\n onWindowResize() {\n this.onWindowResize();\n }\n}\n\nlet daydream = {\n mapping: '',\n profiles: ['google-daydream', 'generic-trigger-touchpad'],\n buttons: {\n length: 3,\n 0: null,\n 1: null,\n 2: 0\n },\n};\nlet viveFocus = {\n mapping: 'xr-standard',\n profiles: ['htc-vive-focus', 'generic-trigger-touchpad'],\n buttons: {\n length: 3,\n 0: 1,\n 1: null,\n 2: 0\n },\n};\nlet oculusGo = {\n mapping: 'xr-standard',\n profiles: ['oculus-go', 'generic-trigger-touchpad'],\n buttons: {\n length: 3,\n 0: 1,\n 1: null,\n 2: 0\n },\n gripTransform: {\n orientation: [Math.PI * 0.11, 0, 0, 1]\n }\n};\nlet oculusTouch = {\n mapping: 'xr-standard',\n displayProfiles: {\n 'Oculus Quest': ['oculus-touch-v2', 'oculus-touch', 'generic-trigger-squeeze-thumbstick']\n },\n profiles: ['oculus-touch', 'generic-trigger-squeeze-thumbstick'],\n axes: {\n length: 4,\n 0: null,\n 1: null,\n 2: 0,\n 3: 1\n },\n buttons: {\n length: 7,\n 0: 1,\n 1: 2,\n 2: null,\n 3: 0,\n 4: 3,\n 5: 4,\n 6: null\n },\n gripTransform: {\n position: [0, -0.02, 0.04, 1],\n orientation: [Math.PI * 0.11, 0, 0, 1]\n }\n};\nlet openVr = {\n mapping: 'xr-standard',\n profiles: ['htc-vive', 'generic-trigger-squeeze-touchpad'],\n displayProfiles: {\n 'HTC Vive': ['htc-vive', 'generic-trigger-squeeze-touchpad'],\n 'HTC Vive DVT': ['htc-vive', 'generic-trigger-squeeze-touchpad'],\n 'Valve Index': ['valve-index', 'generic-trigger-squeeze-touchpad-thumbstick']\n },\n buttons: {\n length: 3,\n 0: 1,\n 1: 2,\n 2: 0\n },\n gripTransform: {\n position: [0, 0, 0.05, 1],\n },\n targetRayTransform: {\n orientation: [Math.PI * -0.08, 0, 0, 1]\n },\n userAgentOverrides: {\n \"Firefox\": {\n axes: {\n invert: [1, 3]\n }\n }\n }\n};\nlet samsungGearVR = {\n mapping: 'xr-standard',\n profiles: ['samsung-gearvr', 'generic-trigger-touchpad'],\n buttons: {\n length: 3,\n 0: 1,\n 1: null,\n 2: 0\n },\n gripTransform: {\n orientation: [Math.PI * 0.11, 0, 0, 1]\n }\n};\nlet samsungOdyssey = {\n mapping: 'xr-standard',\n profiles: ['samsung-odyssey', 'microsoft-mixed-reality', 'generic-trigger-squeeze-touchpad-thumbstick'],\n buttons: {\n length: 4,\n 0: 1,\n 1: 0,\n 2: 2,\n 3: 4,\n },\n gripTransform: {\n position: [0, -0.02, 0.04, 1],\n orientation: [Math.PI * 0.11, 0, 0, 1]\n }\n};\nlet windowsMixedReality = {\n mapping: 'xr-standard',\n profiles: ['microsoft-mixed-reality', 'generic-trigger-squeeze-touchpad-thumbstick'],\n buttons: {\n length: 4,\n 0: 1,\n 1: 0,\n 2: 2,\n 3: 4,\n },\n gripTransform: {\n position: [0, -0.02, 0.04, 1],\n orientation: [Math.PI * 0.11, 0, 0, 1]\n }\n};\nlet GamepadMappings = {\n 'Daydream Controller': daydream,\n 'Gear VR Controller': samsungGearVR,\n 'HTC Vive Focus Controller': viveFocus,\n 'Oculus Go Controller': oculusGo,\n 'Oculus Touch (Right)': oculusTouch,\n 'Oculus Touch (Left)': oculusTouch,\n 'OpenVR Gamepad': openVr,\n 'Spatial Controller (Spatial Interaction Source) 045E-065A': windowsMixedReality,\n 'Spatial Controller (Spatial Interaction Source) 045E-065D': samsungOdyssey,\n 'Windows Mixed Reality (Right)': windowsMixedReality,\n 'Windows Mixed Reality (Left)': windowsMixedReality,\n};\n\nconst HEAD_ELBOW_OFFSET_RIGHTHANDED = fromValues$1(0.155, -0.465, -0.15);\nconst HEAD_ELBOW_OFFSET_LEFTHANDED = fromValues$1(-0.155, -0.465, -0.15);\nconst ELBOW_WRIST_OFFSET = fromValues$1(0, 0, -0.25);\nconst WRIST_CONTROLLER_OFFSET = fromValues$1(0, 0, 0.05);\nconst ARM_EXTENSION_OFFSET = fromValues$1(-0.08, 0.14, 0.08);\nconst ELBOW_BEND_RATIO = 0.4;\nconst EXTENSION_RATIO_WEIGHT = 0.4;\nconst MIN_ANGULAR_SPEED = 0.61;\nconst MIN_ANGLE_DELTA = 0.175;\nconst MIN_EXTENSION_COS = 0.12;\nconst MAX_EXTENSION_COS = 0.87;\nconst RAD_TO_DEG = 180 / Math.PI;\nfunction eulerFromQuaternion(out, q, order) {\n function clamp(value, min$$1, max$$1) {\n return (value < min$$1 ? min$$1 : (value > max$$1 ? max$$1 : value));\n }\n var sqx = q[0] * q[0];\n var sqy = q[1] * q[1];\n var sqz = q[2] * q[2];\n var sqw = q[3] * q[3];\n if ( order === 'XYZ' ) {\n out[0] = Math.atan2( 2 * ( q[0] * q[3] - q[1] * q[2] ), ( sqw - sqx - sqy + sqz ) );\n out[1] = Math.asin( clamp( 2 * ( q[0] * q[2] + q[1] * q[3] ), -1, 1 ) );\n out[2] = Math.atan2( 2 * ( q[2] * q[3] - q[0] * q[1] ), ( sqw + sqx - sqy - sqz ) );\n } else if ( order === 'YXZ' ) {\n out[0] = Math.asin( clamp( 2 * ( q[0] * q[3] - q[1] * q[2] ), -1, 1 ) );\n out[1] = Math.atan2( 2 * ( q[0] * q[2] + q[1] * q[3] ), ( sqw - sqx - sqy + sqz ) );\n out[2] = Math.atan2( 2 * ( q[0] * q[1] + q[2] * q[3] ), ( sqw - sqx + sqy - sqz ) );\n } else if ( order === 'ZXY' ) {\n out[0] = Math.asin( clamp( 2 * ( q[0] * q[3] + q[1] * q[2] ), -1, 1 ) );\n out[1] = Math.atan2( 2 * ( q[1] * q[3] - q[2] * q[0] ), ( sqw - sqx - sqy + sqz ) );\n out[2] = Math.atan2( 2 * ( q[2] * q[3] - q[0] * q[1] ), ( sqw - sqx + sqy - sqz ) );\n } else if ( order === 'ZYX' ) {\n out[0] = Math.atan2( 2 * ( q[0] * q[3] + q[2] * q[1] ), ( sqw - sqx - sqy + sqz ) );\n out[1] = Math.asin( clamp( 2 * ( q[1] * q[3] - q[0] * q[2] ), -1, 1 ) );\n out[2] = Math.atan2( 2 * ( q[0] * q[1] + q[2] * q[3] ), ( sqw + sqx - sqy - sqz ) );\n } else if ( order === 'YZX' ) {\n out[0] = Math.atan2( 2 * ( q[0] * q[3] - q[2] * q[1] ), ( sqw - sqx + sqy - sqz ) );\n out[1] = Math.atan2( 2 * ( q[1] * q[3] - q[0] * q[2] ), ( sqw + sqx - sqy - sqz ) );\n out[2] = Math.asin( clamp( 2 * ( q[0] * q[1] + q[2] * q[3] ), -1, 1 ) );\n } else if ( order === 'XZY' ) {\n out[0] = Math.atan2( 2 * ( q[0] * q[3] + q[1] * q[2] ), ( sqw - sqx + sqy - sqz ) );\n out[1] = Math.atan2( 2 * ( q[0] * q[2] + q[1] * q[3] ), ( sqw + sqx - sqy - sqz ) );\n out[2] = Math.asin( clamp( 2 * ( q[2] * q[3] - q[0] * q[1] ), -1, 1 ) );\n } else {\n console.log('No order given for quaternion to euler conversion.');\n return;\n }\n}\nclass OrientationArmModel {\n constructor() {\n this.hand = 'right';\n this.headElbowOffset = HEAD_ELBOW_OFFSET_RIGHTHANDED;\n this.controllerQ = create$4();\n this.lastControllerQ = create$4();\n this.headQ = create$4();\n this.headPos = create$1();\n this.elbowPos = create$1();\n this.wristPos = create$1();\n this.time = null;\n this.lastTime = null;\n this.rootQ = create$4();\n this.position = create$1();\n }\n setHandedness(hand) {\n if (this.hand != hand) {\n this.hand = hand;\n if (this.hand == 'left') {\n this.headElbowOffset = HEAD_ELBOW_OFFSET_LEFTHANDED;\n } else {\n this.headElbowOffset = HEAD_ELBOW_OFFSET_RIGHTHANDED;\n }\n }\n }\n update(controllerOrientation, headPoseMatrix) {\n this.time = now$1();\n if (controllerOrientation) {\n copy$4(this.lastControllerQ, this.controllerQ);\n copy$4(this.controllerQ, controllerOrientation);\n }\n if (headPoseMatrix) {\n getTranslation(this.headPos, headPoseMatrix);\n getRotation(this.headQ, headPoseMatrix);\n }\n let headYawQ = this.getHeadYawOrientation_();\n let angleDelta = this.quatAngle_(this.lastControllerQ, this.controllerQ);\n let timeDelta = (this.time - this.lastTime) / 1000;\n let controllerAngularSpeed = angleDelta / timeDelta;\n if (controllerAngularSpeed > MIN_ANGULAR_SPEED) {\n slerp(this.rootQ, this.rootQ, headYawQ,\n Math.min(angleDelta / MIN_ANGLE_DELTA, 1.0));\n } else {\n copy$4(this.rootQ, headYawQ);\n }\n let controllerForward = fromValues$1(0, 0, -1.0);\n transformQuat(controllerForward, controllerForward, this.controllerQ);\n let controllerDotY = dot(controllerForward, [0, 1, 0]);\n let extensionRatio = this.clamp_(\n (controllerDotY - MIN_EXTENSION_COS) / MAX_EXTENSION_COS, 0.0, 1.0);\n let controllerCameraQ = clone$4(this.rootQ);\n invert$2(controllerCameraQ, controllerCameraQ);\n multiply$4(controllerCameraQ, controllerCameraQ, this.controllerQ);\n let elbowPos = this.elbowPos;\n copy$1(elbowPos, this.headPos);\n add$1(elbowPos, elbowPos, this.headElbowOffset);\n let elbowOffset = clone$1(ARM_EXTENSION_OFFSET);\n scale$1(elbowOffset, elbowOffset, extensionRatio);\n add$1(elbowPos, elbowPos, elbowOffset);\n let totalAngle = this.quatAngle_(controllerCameraQ, create$4());\n let totalAngleDeg = totalAngle * RAD_TO_DEG;\n let lerpSuppression = 1 - Math.pow(totalAngleDeg / 180, 4);let elbowRatio = ELBOW_BEND_RATIO;\n let wristRatio = 1 - ELBOW_BEND_RATIO;\n let lerpValue = lerpSuppression *\n (elbowRatio + wristRatio * extensionRatio * EXTENSION_RATIO_WEIGHT);\n let wristQ = create$4();\n slerp(wristQ, wristQ, controllerCameraQ, lerpValue);\n let invWristQ = invert$2(create$4(), wristQ);\n let elbowQ = clone$4(controllerCameraQ);\n multiply$4(elbowQ, elbowQ, invWristQ);\n let wristPos = this.wristPos;\n copy$1(wristPos, WRIST_CONTROLLER_OFFSET);\n transformQuat(wristPos, wristPos, wristQ);\n add$1(wristPos, wristPos, ELBOW_WRIST_OFFSET);\n transformQuat(wristPos, wristPos, elbowQ);\n add$1(wristPos, wristPos, elbowPos);\n let offset = clone$1(ARM_EXTENSION_OFFSET);\n scale$1(offset, offset, extensionRatio);\n add$1(this.position, this.wristPos, offset);\n transformQuat(this.position, this.position, this.rootQ);\n this.lastTime = this.time;\n }\n getPosition() {\n return this.position;\n }\n getHeadYawOrientation_() {\n let headEuler = create$1();\n eulerFromQuaternion(headEuler, this.headQ, 'YXZ');\n let destinationQ = fromEuler(create$4(), 0, headEuler[1] * RAD_TO_DEG, 0);\n return destinationQ;\n }\n clamp_(value, min$$1, max$$1) {\n return Math.min(Math.max(value, min$$1), max$$1);\n }\n quatAngle_(q1, q2) {\n let vec1 = [0, 0, -1];\n let vec2 = [0, 0, -1];\n transformQuat(vec1, vec1, q1);\n transformQuat(vec2, vec2, q2);\n return angle(vec1, vec2);\n }\n}\n\nconst PRIVATE$18 = Symbol('@@webxr-polyfill/XRRemappedGamepad');\nconst PLACEHOLDER_BUTTON = { pressed: false, touched: false, value: 0.0 };\nObject.freeze(PLACEHOLDER_BUTTON);\nclass XRRemappedGamepad {\n constructor(gamepad, display, map) {\n if (!map) {\n map = {};\n }\n if (map.userAgentOverrides) {\n for (let agent in map.userAgentOverrides) {\n if (navigator.userAgent.includes(agent)) {\n let override = map.userAgentOverrides[agent];\n for (let key in override) {\n if (key in map) {\n Object.assign(map[key], override[key]);\n } else {\n map[key] = override[key];\n }\n }\n break;\n }\n }\n }\n let axes = new Array(map.axes && map.axes.length ? map.axes.length : gamepad.axes.length);\n let buttons = new Array(map.buttons && map.buttons.length ? map.buttons.length : gamepad.buttons.length);\n let gripTransform = null;\n if (map.gripTransform) {\n let orientation = map.gripTransform.orientation || [0, 0, 0, 1];\n gripTransform = create();\n fromRotationTranslation(\n gripTransform,\n normalize$2(orientation, orientation),\n map.gripTransform.position || [0, 0, 0]\n );\n }\n let targetRayTransform = null;\n if (map.targetRayTransform) {\n let orientation = map.targetRayTransform.orientation || [0, 0, 0, 1];\n targetRayTransform = create();\n fromRotationTranslation(\n targetRayTransform,\n normalize$2(orientation, orientation),\n map.targetRayTransform.position || [0, 0, 0]\n );\n }\n let profiles = map.profiles;\n if (map.displayProfiles) {\n if (display.displayName in map.displayProfiles) {\n profiles = map.displayProfiles[display.displayName];\n }\n }\n this[PRIVATE$18] = {\n gamepad,\n map,\n profiles: profiles || [gamepad.id],\n mapping: map.mapping || gamepad.mapping,\n axes,\n buttons,\n gripTransform,\n targetRayTransform,\n };\n this._update();\n }\n _update() {\n let gamepad = this[PRIVATE$18].gamepad;\n let map = this[PRIVATE$18].map;\n let axes = this[PRIVATE$18].axes;\n for (let i = 0; i < axes.length; ++i) {\n if (map.axes && i in map.axes) {\n if (map.axes[i] === null) {\n axes[i] = 0;\n } else {\n axes[i] = gamepad.axes[map.axes[i]];\n }\n } else {\n axes[i] = gamepad.axes[i];\n }\n }\n if (map.axes && map.axes.invert) {\n for (let axis of map.axes.invert) {\n if (axis < axes.length) {\n axes[axis] *= -1;\n }\n }\n }\n let buttons = this[PRIVATE$18].buttons;\n for (let i = 0; i < buttons.length; ++i) {\n if (map.buttons && i in map.buttons) {\n if (map.buttons[i] === null) {\n buttons[i] = PLACEHOLDER_BUTTON;\n } else {\n buttons[i] = gamepad.buttons[map.buttons[i]];\n }\n } else {\n buttons[i] = gamepad.buttons[i];\n }\n }\n }\n get id() {\n return '';\n }\n get _profiles() {\n return this[PRIVATE$18].profiles;\n }\n get index() {\n return -1;\n }\n get connected() {\n return this[PRIVATE$18].gamepad.connected;\n }\n get timestamp() {\n return this[PRIVATE$18].gamepad.timestamp;\n }\n get mapping() {\n return this[PRIVATE$18].mapping;\n }\n get axes() {\n return this[PRIVATE$18].axes;\n }\n get buttons() {\n return this[PRIVATE$18].buttons;\n }\n get hapticActuators() {\n return this[PRIVATE$18].gamepad.hapticActuators;\n }\n}\nclass GamepadXRInputSource {\n constructor(polyfill, display, primaryButtonIndex = 0, primarySqueezeButtonIndex = -1) {\n this.polyfill = polyfill;\n this.display = display;\n this.nativeGamepad = null;\n this.gamepad = null;\n this.inputSource = new XRInputSource(this);\n this.lastPosition = create$1();\n this.emulatedPosition = false;\n this.basePoseMatrix = create();\n this.outputMatrix = create();\n this.primaryButtonIndex = primaryButtonIndex;\n this.primaryActionPressed = false;\n this.primarySqueezeButtonIndex = primarySqueezeButtonIndex;\n this.primarySqueezeActionPressed = false;\n this.handedness = '';\n this.targetRayMode = 'gaze';\n this.armModel = null;\n }\n get profiles() {\n return this.gamepad ? this.gamepad._profiles : [];\n }\n updateFromGamepad(gamepad) {\n if (this.nativeGamepad !== gamepad) {\n this.nativeGamepad = gamepad;\n if (gamepad) {\n this.gamepad = new XRRemappedGamepad(gamepad, this.display, GamepadMappings[gamepad.id]);\n } else {\n this.gamepad = null;\n }\n }\n this.handedness = gamepad.hand === '' ? 'none' : gamepad.hand;\n if (this.gamepad) {\n this.gamepad._update();\n }\n if (gamepad.pose) {\n this.targetRayMode = 'tracked-pointer';\n this.emulatedPosition = !gamepad.pose.hasPosition;\n } else if (gamepad.hand === '') {\n this.targetRayMode = 'gaze';\n this.emulatedPosition = false;\n }\n }\n updateBasePoseMatrix() {\n if (this.nativeGamepad && this.nativeGamepad.pose) {\n let pose = this.nativeGamepad.pose;\n let position = pose.position;\n let orientation = pose.orientation;\n if (!position && !orientation) {\n return;\n }\n if (!position) {\n if (!pose.hasPosition) {\n if (!this.armModel) {\n this.armModel = new OrientationArmModel();\n }\n this.armModel.setHandedness(this.nativeGamepad.hand);\n this.armModel.update(orientation, this.polyfill.getBasePoseMatrix());\n position = this.armModel.getPosition();\n } else {\n position = this.lastPosition;\n }\n } else {\n this.lastPosition[0] = position[0];\n this.lastPosition[1] = position[1];\n this.lastPosition[2] = position[2];\n }\n fromRotationTranslation(this.basePoseMatrix, orientation, position);\n } else {\n copy(this.basePoseMatrix, this.polyfill.getBasePoseMatrix());\n }\n return this.basePoseMatrix;\n }\n getXRPose(coordinateSystem, poseType) {\n this.updateBasePoseMatrix();\n switch(poseType) {\n case \"target-ray\":\n coordinateSystem._transformBasePoseMatrix(this.outputMatrix, this.basePoseMatrix);\n if (this.gamepad && this.gamepad[PRIVATE$18].targetRayTransform) {\n multiply(this.outputMatrix, this.outputMatrix, this.gamepad[PRIVATE$18].targetRayTransform);\n }\n break;\n case \"grip\":\n if (!this.nativeGamepad || !this.nativeGamepad.pose) {\n return null;\n }\n coordinateSystem._transformBasePoseMatrix(this.outputMatrix, this.basePoseMatrix);\n if (this.gamepad && this.gamepad[PRIVATE$18].gripTransform) {\n multiply(this.outputMatrix, this.outputMatrix, this.gamepad[PRIVATE$18].gripTransform);\n }\n break;\n default:\n return null;\n }\n coordinateSystem._adjustForOriginOffset(this.outputMatrix);\n return new XRPose(new XRRigidTransform(this.outputMatrix), this.emulatedPosition);\n }\n}\n\nconst TEST_ENV = \"production\" === 'test';\nconst EXTRA_PRESENTATION_ATTRIBUTES = {\n highRefreshRate: true,\n};\nconst PRIMARY_BUTTON_MAP = {\n oculus: 1,\n openvr: 1,\n 'spatial controller (spatial interaction source)': 1\n};\nlet SESSION_ID = 0;\nclass Session {\n constructor(mode, enabledFeatures, polyfillOptions={}) {\n this.mode = mode;\n this.enabledFeatures = enabledFeatures;\n this.outputContext = null;\n this.immersive = mode == 'immersive-vr' || mode == 'immersive-ar';\n this.ended = null;\n this.baseLayer = null;\n this.id = ++SESSION_ID;\n this.modifiedCanvasLayer = false;\n if (this.outputContext && !TEST_ENV) {\n const renderContextType = polyfillOptions.renderContextType || '2d';\n this.renderContext = this.outputContext.canvas.getContext(renderContextType);\n }\n }\n}\nclass WebVRDevice extends XRDevice {\n constructor(global, display) {\n const { canPresent } = display.capabilities;\n super(global);\n this.display = display;\n this.frame = new global.VRFrameData();\n this.sessions = new Map();\n this.immersiveSession = null;\n this.canPresent = canPresent;\n this.baseModelMatrix = create();\n this.gamepadInputSources = {};\n this.tempVec3 = new Float32Array(3);\n this.onVRDisplayPresentChange = this.onVRDisplayPresentChange.bind(this);\n global.window.addEventListener('vrdisplaypresentchange', this.onVRDisplayPresentChange);\n this.CAN_USE_GAMEPAD = global.navigator && ('getGamepads' in global.navigator);\n this.HAS_BITMAP_SUPPORT = isImageBitmapSupported(global);\n }\n get depthNear() { return this.display.depthNear; }\n set depthNear(val) { this.display.depthNear = val; }\n get depthFar() { return this.display.depthFar; }\n set depthFar(val) { this.display.depthFar = val; }\n onBaseLayerSet(sessionId, layer) {\n const session = this.sessions.get(sessionId);\n const canvas = layer.context.canvas;\n if (session.immersive) {\n const left = this.display.getEyeParameters('left');\n const right = this.display.getEyeParameters('right');\n canvas.width = Math.max(left.renderWidth, right.renderWidth) * 2;\n canvas.height = Math.max(left.renderHeight, right.renderHeight);\n this.display.requestPresent([{\n source: canvas, attributes: EXTRA_PRESENTATION_ATTRIBUTES\n }]).then(() => {\n if (!TEST_ENV && !this.global.document.body.contains(canvas)) {\n session.modifiedCanvasLayer = true;\n this.global.document.body.appendChild(canvas);\n applyCanvasStylesForMinimalRendering(canvas);\n }\n session.baseLayer = layer;\n });\n }\n else {\n session.baseLayer = layer;\n }\n }\n isSessionSupported(mode) {\n if (mode == 'immersive-ar') {\n return false;\n }\n if (mode == 'immersive-vr' && this.canPresent === false) {\n return false;\n }\n return true;\n }\n isFeatureSupported(featureDescriptor) {\n switch(featureDescriptor) {\n case 'viewer': return true;\n case 'local': return true;\n case 'local-floor': return true;\n case 'bounded': return false;\n case 'unbounded': return false;\n default: return false;\n }\n }\n async requestSession(mode, enabledFeatures) {\n if (!this.isSessionSupported(mode)) {\n return Promise.reject();\n }\n let immersive = mode == 'immersive-vr';\n if (immersive) {\n const canvas = this.global.document.createElement('canvas');\n if (!TEST_ENV) {\n const ctx = canvas.getContext('webgl');\n }\n await this.display.requestPresent([{\n source: canvas, attributes: EXTRA_PRESENTATION_ATTRIBUTES }]);\n }\n const session = new Session(mode, enabledFeatures, {\n renderContextType: this.HAS_BITMAP_SUPPORT ? 'bitmaprenderer' : '2d'\n });\n this.sessions.set(session.id, session);\n if (immersive) {\n this.immersiveSession = session;\n this.dispatchEvent('@@webxr-polyfill/vr-present-start', session.id);\n }\n return Promise.resolve(session.id);\n }\n requestAnimationFrame(callback) {\n return this.display.requestAnimationFrame(callback);\n }\n getPrimaryButtonIndex(gamepad) {\n let primaryButton = 0;\n let name = gamepad.id.toLowerCase();\n for (let key in PRIMARY_BUTTON_MAP) {\n if (name.includes(key)) {\n primaryButton = PRIMARY_BUTTON_MAP[key];\n break;\n }\n }\n return Math.min(primaryButton, gamepad.buttons.length - 1);\n }\n onFrameStart(sessionId, renderState) {\n this.display.depthNear = renderState.depthNear;\n this.display.depthFar = renderState.depthFar;\n this.display.getFrameData(this.frame);\n const session = this.sessions.get(sessionId);\n if (session.immersive && this.CAN_USE_GAMEPAD) {\n let prevInputSources = this.gamepadInputSources;\n this.gamepadInputSources = {};\n let gamepads = this.global.navigator.getGamepads();\n for (let i = 0; i < gamepads.length; ++i) {\n let gamepad = gamepads[i];\n if (gamepad && gamepad.displayId > 0) {\n let inputSourceImpl = prevInputSources[i];\n if (!inputSourceImpl) {\n inputSourceImpl = new GamepadXRInputSource(this, this.display, this.getPrimaryButtonIndex(gamepad));\n }\n inputSourceImpl.updateFromGamepad(gamepad);\n this.gamepadInputSources[i] = inputSourceImpl;\n if (inputSourceImpl.primaryButtonIndex != -1) {\n let primaryActionPressed = gamepad.buttons[inputSourceImpl.primaryButtonIndex].pressed;\n if (primaryActionPressed && !inputSourceImpl.primaryActionPressed) {\n this.dispatchEvent('@@webxr-polyfill/input-select-start', { sessionId: session.id, inputSource: inputSourceImpl.inputSource });\n } else if (!primaryActionPressed && inputSourceImpl.primaryActionPressed) {\n this.dispatchEvent('@@webxr-polyfill/input-select-end', { sessionId: session.id, inputSource: inputSourceImpl.inputSource });\n }\n inputSourceImpl.primaryActionPressed = primaryActionPressed;\n }\n if (inputSourceImpl.primarySqueezeButtonIndex != -1) {\n let primarySqueezeActionPressed = gamepad.buttons[inputSourceImpl.primarySqueezeButtonIndex].pressed;\n if (primarySqueezeActionPressed && !inputSourceImpl.primarySqueezeActionPressed) {\n this.dispatchEvent('@@webxr-polyfill/input-squeeze-start', { sessionId: session.id, inputSource: inputSourceImpl.inputSource });\n } else if (!primarySqueezeActionPressed && inputSourceImpl.primarySqueezeActionPressed) {\n this.dispatchEvent('@@webxr-polyfill/input-squeeze-end', { sessionId: session.id, inputSource: inputSourceImpl.inputSource });\n }\n inputSourceImpl.primarySqueezeActionPressed = primarySqueezeActionPressed;\n }\n }\n }\n }\n if (TEST_ENV) {\n return;\n }\n if (!session.immersive && session.baseLayer) {\n const canvas = session.baseLayer.context.canvas;\n perspective(this.frame.leftProjectionMatrix, renderState.inlineVerticalFieldOfView,\n canvas.width/canvas.height, renderState.depthNear, renderState.depthFar);\n }\n }\n onFrameEnd(sessionId) {\n const session = this.sessions.get(sessionId);\n if (session.ended || !session.baseLayer) {\n return;\n }\n if (session.outputContext &&\n !(session.immersive && !this.display.capabilities.hasExternalDisplay)) {\n const mirroring =\n session.immersive && this.display.capabilities.hasExternalDisplay;\n const iCanvas = session.baseLayer.context.canvas;\n const iWidth = mirroring ? iCanvas.width / 2 : iCanvas.width;\n const iHeight = iCanvas.height;\n if (!TEST_ENV) {\n const oCanvas = session.outputContext.canvas;\n const oWidth = oCanvas.width;\n const oHeight = oCanvas.height;\n const renderContext = session.renderContext;\n if (this.HAS_BITMAP_SUPPORT) {\n if (iCanvas.transferToImageBitmap) {\n renderContext.transferFromImageBitmap(iCanvas.transferToImageBitmap());\n }\n else {\n this.global.createImageBitmap(iCanvas, 0, 0, iWidth, iHeight, {\n resizeWidth: oWidth,\n resizeHeight: oHeight,\n }).then(bitmap => renderContext.transferFromImageBitmap(bitmap));\n }\n } else {\n renderContext.drawImage(iCanvas, 0, 0, iWidth, iHeight,\n 0, 0, oWidth, oHeight);\n }\n }\n }\n if (session.immersive && session.baseLayer) {\n this.display.submitFrame();\n }\n }\n cancelAnimationFrame(handle) {\n this.display.cancelAnimationFrame(handle);\n }\n async endSession(sessionId) {\n const session = this.sessions.get(sessionId);\n if (session.ended) {\n return;\n }\n if (session.immersive) {\n return this.display.exitPresent();\n } else {\n session.ended = true;\n }\n }\n doesSessionSupportReferenceSpace(sessionId, type) {\n const session = this.sessions.get(sessionId);\n if (session.ended) {\n return false;\n }\n return session.enabledFeatures.has(type);\n }\n requestStageBounds() {\n if (this.display.stageParameters) {\n const width = this.display.stageParameters.sizeX;\n const depth = this.display.stageParameters.sizeZ;\n const data = [];\n data.push(-width / 2);\n data.push(-depth / 2);\n data.push(width / 2);\n data.push(-depth / 2);\n data.push(width / 2);\n data.push(depth / 2);\n data.push(-width / 2);\n data.push(depth / 2);\n return data;\n }\n return null;\n }\n async requestFrameOfReferenceTransform(type, options) {\n if ((type === 'local-floor' || type === 'bounded-floor') &&\n this.display.stageParameters &&\n this.display.stageParameters.sittingToStandingTransform) {\n return this.display.stageParameters.sittingToStandingTransform;\n }\n return null;\n }\n getProjectionMatrix(eye) {\n if (eye === 'left') {\n return this.frame.leftProjectionMatrix;\n } else if (eye === 'right') {\n return this.frame.rightProjectionMatrix;\n } else if (eye === 'none') {\n return this.frame.leftProjectionMatrix;\n } else {\n throw new Error(`eye must be of type 'left' or 'right'`);\n }\n }\n getViewport(sessionId, eye, layer, target) {\n const session = this.sessions.get(sessionId);\n const { width, height } = layer.context.canvas;\n if (!session.immersive) {\n target.x = target.y = 0;\n target.width = width;\n target.height = height;\n return true;\n }\n if (eye === 'left' || eye === 'none') {\n target.x = 0;\n } else if (eye === 'right') {\n target.x = width / 2;\n } else {\n return false;\n }\n target.y = 0;\n target.width = width / 2;\n target.height = height;\n return true;\n }\n getBasePoseMatrix() {\n let { position, orientation } = this.frame.pose;\n if (!position && !orientation) {\n return this.baseModelMatrix;\n }\n if (!position) {\n position = this.tempVec3;\n position[0] = position[1] = position[2] = 0;\n }\n fromRotationTranslation(this.baseModelMatrix, orientation, position);\n return this.baseModelMatrix;\n }\n getBaseViewMatrix(eye) {\n if (eye === 'left' || eye === 'none') {\n return this.frame.leftViewMatrix;\n } else if (eye === 'right') {\n return this.frame.rightViewMatrix;\n } else {\n throw new Error(`eye must be of type 'left' or 'right'`);\n }\n }\n getInputSources() {\n let inputSources = [];\n for (let i in this.gamepadInputSources) {\n inputSources.push(this.gamepadInputSources[i].inputSource);\n }\n return inputSources;\n }\n getInputPose(inputSource, coordinateSystem, poseType) {\n if (!coordinateSystem) {\n return null;\n }\n for (let i in this.gamepadInputSources) {\n let inputSourceImpl = this.gamepadInputSources[i];\n if (inputSourceImpl.inputSource === inputSource) {\n return inputSourceImpl.getXRPose(coordinateSystem, poseType);\n }\n }\n return null;\n }\n onWindowResize() {\n }\n onVRDisplayPresentChange(e) {\n if (!this.display.isPresenting) {\n this.sessions.forEach(session => {\n if (session.immersive && !session.ended) {\n if (session.modifiedCanvasLayer) {\n const canvas = session.baseLayer.context.canvas;\n document.body.removeChild(canvas);\n canvas.setAttribute('style', '');\n }\n if (this.immersiveSession === session) {\n this.immersiveSession = null;\n }\n this.dispatchEvent('@@webxr-polyfill/vr-present-end', session.id);\n }\n });\n }\n }\n}\n\nclass CardboardXRDevice extends WebVRDevice {\n constructor(global, cardboardConfig) {\n const display = new CardboardVRDisplay(cardboardConfig || {});\n super(global, display);\n this.display = display;\n this.frame = {\n rightViewMatrix: new Float32Array(16),\n leftViewMatrix: new Float32Array(16),\n rightProjectionMatrix: new Float32Array(16),\n leftProjectionMatrix: new Float32Array(16),\n pose: null,\n timestamp: null,\n };\n }\n}\n\nconst TEST_ENV$1 = \"production\" === 'test';\nlet SESSION_ID$1 = 0;\nclass Session$1 {\n constructor(mode, enabledFeatures) {\n this.mode = mode;\n this.enabledFeatures = enabledFeatures;\n this.ended = null;\n this.baseLayer = null;\n this.id = ++SESSION_ID$1;\n }\n}\nclass InlineDevice extends XRDevice {\n constructor(global) {\n super(global);\n this.sessions = new Map();\n this.projectionMatrix = create();\n this.identityMatrix = create();\n }\n onBaseLayerSet(sessionId, layer) {\n const session = this.sessions.get(sessionId);\n session.baseLayer = layer;\n }\n isSessionSupported(mode) {\n return mode == 'inline';\n }\n isFeatureSupported(featureDescriptor) {\n switch(featureDescriptor) {\n case 'viewer': return true;\n default: return false;\n }\n }\n async requestSession(mode, enabledFeatures) {\n if (!this.isSessionSupported(mode)) {\n return Promise.reject();\n }\n const session = new Session$1(mode, enabledFeatures);\n this.sessions.set(session.id, session);\n return Promise.resolve(session.id);\n }\n requestAnimationFrame(callback) {\n return window.requestAnimationFrame(callback);\n }\n cancelAnimationFrame(handle) {\n window.cancelAnimationFrame(handle);\n }\n onFrameStart(sessionId, renderState) {\n if (TEST_ENV$1) {\n return;\n }\n const session = this.sessions.get(sessionId);\n if (session.baseLayer) {\n const canvas = session.baseLayer.context.canvas;\n perspective(this.projectionMatrix, renderState.inlineVerticalFieldOfView,\n canvas.width/canvas.height, renderState.depthNear, renderState.depthFar);\n }\n }\n onFrameEnd(sessionId) {\n }\n async endSession(sessionId) {\n const session = this.sessions.get(sessionId);\n session.ended = true;\n }\n doesSessionSupportReferenceSpace(sessionId, type) {\n const session = this.sessions.get(sessionId);\n if (session.ended) {\n return false;\n }\n return session.enabledFeatures.has(type);\n }\n requestStageBounds() {\n return null;\n }\n async requestFrameOfReferenceTransform(type, options) {\n return null;\n }\n getProjectionMatrix(eye) {\n return this.projectionMatrix;\n }\n getViewport(sessionId, eye, layer, target) {\n const session = this.sessions.get(sessionId);\n const { width, height } = layer.context.canvas;\n target.x = target.y = 0;\n target.width = width;\n target.height = height;\n return true;\n }\n getBasePoseMatrix() {\n return this.identityMatrix;\n }\n getBaseViewMatrix(eye) {\n return this.identityMatrix;\n }\n getInputSources() {\n return [];\n }\n getInputPose(inputSource, coordinateSystem, poseType) {\n return null;\n }\n onWindowResize() {\n }\n}\n\nconst getWebVRDevice = async function (global) {\n let device = null;\n if ('getVRDisplays' in global.navigator) {\n try {\n const displays = await global.navigator.getVRDisplays();\n if (displays && displays.length) {\n device = new WebVRDevice(global, displays[0]);\n }\n } catch (e) {}\n }\n return device;\n};\nconst requestXRDevice = async function (global, config) {\n if (config.webvr) {\n let xr = await getWebVRDevice(global);\n if (xr) {\n return xr;\n }\n }\n let mobile = isMobile(global);\n if ((mobile && config.cardboard) ||\n (!mobile && config.allowCardboardOnDesktop)) {\n if (!global.VRFrameData) {\n global.VRFrameData = function () {\n this.rightViewMatrix = new Float32Array(16);\n this.leftViewMatrix = new Float32Array(16);\n this.rightProjectionMatrix = new Float32Array(16);\n this.leftProjectionMatrix = new Float32Array(16);\n this.pose = null;\n };\n }\n return new CardboardXRDevice(global, config.cardboardConfig);\n }\n return new InlineDevice(global);\n};\n\nconst CONFIG_DEFAULTS = {\n global: _global,\n webvr: true,\n cardboard: true,\n cardboardConfig: null,\n allowCardboardOnDesktop: false,\n};\nconst partials = ['navigator', 'HTMLCanvasElement', 'WebGLRenderingContext'];\nclass WebXRPolyfill {\n constructor(config={}) {\n this.config = Object.freeze(Object.assign({}, CONFIG_DEFAULTS, config));\n this.global = this.config.global;\n this.nativeWebXR = 'xr' in this.global.navigator;\n this.injected = false;\n if (!this.nativeWebXR) {\n this._injectPolyfill(this.global);\n } else {\n this._injectCompatibilityShims(this.global);\n }\n }\n _injectPolyfill(global) {\n if (!partials.every(iface => !!global[iface])) {\n throw new Error(`Global must have the following attributes : ${partials}`);\n }\n for (const className of Object.keys(API)) {\n if (global[className] !== undefined) {\n console.warn(`${className} already defined on global.`);\n } else {\n global[className] = API[className];\n }\n }\n {\n const polyfilledCtx = polyfillMakeXRCompatible(global.WebGLRenderingContext);\n if (polyfilledCtx) {\n polyfillGetContext(global.HTMLCanvasElement);\n if (global.OffscreenCanvas) {\n polyfillGetContext(global.OffscreenCanvas);\n }\n if (global.WebGL2RenderingContext){\n polyfillMakeXRCompatible(global.WebGL2RenderingContext);\n }\n if (!window.isSecureContext) {\n console.warn(`WebXR Polyfill Warning:\nThis page is not running in a secure context (https:// or localhost)!\nThis means that although the page may be able to use the WebXR Polyfill it will\nnot be able to use native WebXR implementations, and as such will not be able to\naccess dedicated VR or AR hardware, and will not be able to take advantage of\nany performance improvements a native WebXR implementation may offer. Please\nhost this content on a secure origin for the best user experience.\n`);\n }\n }\n }\n this.injected = true;\n this._patchNavigatorXR();\n }\n _patchNavigatorXR() {\n let devicePromise = requestXRDevice(this.global, this.config);\n this.xr = new API.XRSystem(devicePromise);\n Object.defineProperty(this.global.navigator, 'xr', {\n value: this.xr,\n configurable: true,\n });\n }\n _injectCompatibilityShims(global) {\n if (!partials.every(iface => !!global[iface])) {\n throw new Error(`Global must have the following attributes : ${partials}`);\n }\n if (global.navigator.xr &&\n 'supportsSession' in global.navigator.xr &&\n !('isSessionSupported' in global.navigator.xr)) {\n let originalSupportsSession = global.navigator.xr.supportsSession;\n global.navigator.xr.isSessionSupported = function(mode) {\n return originalSupportsSession.call(this, mode).then(() => {\n return true;\n }).catch(() => {\n return false;\n });\n };\n global.navigator.xr.supportsSession = function(mode) {\n console.warn(\"navigator.xr.supportsSession() is deprecated. Please \" +\n \"call navigator.xr.isSessionSupported() instead and check the boolean \" +\n \"value returned when the promise resolves.\");\n return originalSupportsSession.call(this, mode);\n };\n }\n }\n}\n\nexport default WebXRPolyfill;\n","import WebXRPolyfill from \"webxr-polyfill\";\r\n\r\n// WebXR Polyfill for platforms only supporting WebVR API. e.g. Desktop Firefox\r\n// WebVR API is deprecated. We may drop such platforms support at some point.\r\nif (!(\"xr\" in navigator) && \"getVRDisplays\" in navigator) {\r\n new WebXRPolyfill({\r\n cardboard: false\r\n });\r\n}\r\n"],"names":["__webpack_require__","g","globalThis","this","Function","e","window","_global","self","PRIVATE","Symbol","EventTarget","constructor","listeners","Map","addEventListener","type","listener","Error","typedListeners","get","push","set","removeEventListener","i","length","pop","dispatchEvent","event","queue","ARRAY_TYPE","Float32Array","Array","create","out","identity","invert","a","a00","a01","a02","a03","a10","a11","a12","a13","a20","a21","a22","a23","a30","a31","a32","a33","b00","b01","b02","b03","b04","b05","b06","b07","b08","b09","b10","b11","det","multiply","b","b0","b1","b2","b3","fromRotationTranslation","q","v","x","y","z","w","x2","y2","z2","xx","xy","xz","yy","yz","zz","wx","wy","wz","getTranslation","mat","getRotation","trace","S","Math","sqrt","perspective","fovy","aspect","near","far","nf","f","tan","Infinity","create$1","clone$1","fromValues$1","copy$1","add$1","scale$1","normalize","len","dot","transformQuat","qx","qy","qz","qw","uvx","uvy","uvz","uuvx","uuvy","uuvz","w2","PI","create$4","multiply$4","ax","ay","az","aw","bx","by","bz","bw","slerp","t","omega","cosom","sinom","scale0","scale1","acos","sin","invert$2","a0","a1","a2","a3","dot$$1","invDot","create$3","clone$4","copy$4","normalize$2","PRIVATE$1","create$2","XRRigidTransform$1","matrix","position","orientation","inverse","arguments","_getPoint","DOMPointReadOnly","fromPoint","fromValues$4","arg","invMatrix","PRIVATE$2","XRSpace","specialType","inputSource","baseMatrix","inverseBaseMatrix","lastFrameId","_specialType","_inputSource","_ensurePoseUpdated","device","frameId","_onPoseUpdate","_baseMatrix","getBasePoseMatrix","_inverseBaseMatrix","_getSpaceRelativeTransform","space","PRIVATE$3","XRReferenceSpaceTypes","XRReferenceSpace","transform","includes","super","isFloor","originOffset","_transformBasePoseMatrix","pose","_originOffsetMatrix","_adjustForOriginOffset","transformMatrix","inverseOriginOffsetMatrix","XRRigidTransform","getOffsetReferenceSpace","additionalOffset","newSpace","bounds","PRIVATE$4","XRSessionModes","DEFAULT_SESSION_OPTIONS","requiredFeatures","optionalFeatures","now","startTime","Date","performance","now$1","PRIVATE$5","XRPose$1","emulatedPosition","PRIVATE$6","XRViewerPose","views","PRIVATE$7","XRViewport","target","width","height","XREyes","PRIVATE$8","XRView","eye","sessionId","temp","Object","viewport","projectionMatrix","getProjectionMatrix","_getViewport","layer","getViewport","PRIVATE$9","NON_ACTIVE_MSG","NEXT_FRAME_ID","XRFrame","session","id","active","animationFrame","getViewerPose","referenceSpace","DOMException","PRIVATE$15","viewerSpace","viewerTransform","viewSpace","viewSpaces","viewTransform","view","getPose","baseSpace","getInputPose","XRPose","PRIVATE$10","XRRenderStateInit","freeze","depthNear","depthFar","inlineVerticalFieldOfView","baseLayer","XRRenderState","stateInit","config","assign","POLYFILLED_XR_COMPATIBLE","XR_COMPATIBLE","PRIVATE$11","XRWebGLLayerInit","antialias","depth","stencil","alpha","multiview","ignoreDepthValues","framebufferScaleFactor","PRIVATE$12","XRInputSourceEvent","Event","eventInitDict","frame","setPrototypeOf","prototype","PRIVATE$13","XRSessionEvent","PRIVATE$14","XRInputSourcesChangeEvent","added","removed","XRViewSpace","getBaseViewMatrix","XRSession$1","mode","immersive","initialRenderState","ended","suspended","frameCallbacks","currentFrameCallbacks","frameHandle","deviceFrameHandle","activeRenderState","pendingRenderState","currentInputSources","onDeviceFrame","startDeviceFrameLoop","onBaseLayerSet","callbacks","onFrameStart","_checkInputSourcesChange","rightNow","cancelled","callback","err","console","error","onFrameEnd","requestAnimationFrame","stopDeviceFrameLoop","handle","cancelAnimationFrame","onPresentationEnd","onPresentationStart","onSelectStart","onSelectEnd","evt","dispatchInputSourceEvent","onSqueezeStart","onSqueezeEnd","onblur","undefined","onfocus","onresetpose","onend","onselect","onselectstart","onselectend","renderState","environmentBlendMode","requestReferenceSpace","TypeError","doesSessionSupportReferenceSpace","requestFrameOfReferenceTransform","requestStageBounds","index","findIndex","d","splice","inputSources","getInputSources","end","endSession","updateRenderState","newState","_session","min","max","newInputSources","oldInputSources","newInputSource","oldInputSource","PRIVATE$16","XRInputSource","impl","gripSpace","targetRaySpace","handedness","targetRayMode","profiles","gamepad","PRIVATE$17","XRReferenceSpaceEvent","API","XRSystem","devicePromise","immersiveSession","inlineSessions","Set","then","isSessionSupported","Promise","resolve","requestSession","options","defaultOptions","concat","enabledFeatures","requirementsFailed","feature","isFeatureSupported","add","log","XRSession","onSessionEnd","delete","XRWebGLLayer","context","layerInit","framebuffer","getParameter","FRAMEBUFFER_BINDING","framebufferWidth","drawingBufferWidth","framebufferHeight","drawingBufferHeight","getNativeFramebufferScaleFactor","polyfillMakeXRCompatible","Context","makeXRCompatible","polyfillGetContext","Canvas","getContext","contextType","glAttribs","ctx","call","xrCompatible","fn","module","commonjsGlobal","cardboardVrDisplay","exports","observedWarnings","match","value","createClass","defineProperties","props","descriptor","enumerable","configurable","writable","defineProperty","key","Constructor","protoProps","staticProps","slicedToArray","arr","isArray","iterator","_arr","_n","_d","_e","_s","_i","next","done","sliceIterator","lerp","isIOS","test","navigator","platform","isWebViewAndroid","userAgent","indexOf","isSafari","isFirefoxAndroid","getChromeVersion","parseInt","isSafariWithoutDeviceMotion","isChromeWithoutDeviceMotion","_match$1$split","split","_match$1$split2","branch","build","isR7","isLandscapeMode","rtn","getScreenWidth","screen","devicePixelRatio","getScreenHeight","exitFullscreen","document","webkitExitFullscreen","mozCancelFullScreen","msExitFullscreen","linkProgram","gl","vertexSource","fragmentSource","attribLocationMap","vertexShader","createShader","VERTEX_SHADER","shaderSource","compileShader","fragmentShader","FRAGMENT_SHADER","program","createProgram","attribName","attachShader","bindAttribLocation","deleteShader","getProgramUniforms","uniforms","uniformCount","getProgramParameter","ACTIVE_UNIFORMS","uniformName","getActiveUniform","name","replace","getUniformLocation","isMobile","check","vendor","opera","substr","extend","dest","src","hasOwnProperty","safariCssSizeWorkaround","canvas","style","setTimeout","frameDataFromPose","piOver180","rad45","defaultOrientation","defaultPosition","updateEyeMatrices","projection","fov","offset","vrDisplay","upTan","upDegrees","downTan","downDegrees","leftTan","leftDegrees","rightTan","rightDegrees","xScale","yScale","mat4_perspectiveFromFieldOfView","mat4_fromRotationTranslation","mat4_translate","frameData","timestamp","leftProjectionMatrix","leftViewMatrix","_getFieldOfView","_getEyeOffset","rightProjectionMatrix","rightViewMatrix","getOriginFromUrl","url","domainIdx","protoSepIdx","domainEndIdx","substring","warnOnce","message","warn","deprecateWarning","deprecated","suggested","glPreserveState","bindings","boundValues","activeTexture","binding","TEXTURE_BINDING_2D","TEXTURE_BINDING_CUBE_MAP","textureUnit","TEXTURE0","TEXTURE31","ACTIVE_TEXTURE","boundValue","ARRAY_BUFFER_BINDING","bindBuffer","ARRAY_BUFFER","COLOR_CLEAR_VALUE","clearColor","COLOR_WRITEMASK","colorMask","CURRENT_PROGRAM","useProgram","ELEMENT_ARRAY_BUFFER_BINDING","ELEMENT_ARRAY_BUFFER","bindFramebuffer","FRAMEBUFFER","RENDERBUFFER_BINDING","bindRenderbuffer","RENDERBUFFER","bindTexture","TEXTURE_2D","TEXTURE_CUBE_MAP","VIEWPORT","BLEND","CULL_FACE","DEPTH_TEST","SCISSOR_TEST","STENCIL_TEST","enable","disable","toString","distortionVS","join","distortionFS","CardboardDistorter","cardboardUI","bufferScale","dirtySubmitFrameBindings","ctxAttribs","getContextAttributes","instanceExt","getExtension","meshWidth","meshHeight","bufferWidth","bufferHeight","realBindFramebuffer","realEnable","realDisable","realColorMask","realClearColor","realViewport","realCanvasWidth","getOwnPropertyDescriptor","__proto__","realCanvasHeight","isPatched","lastBoundFramebuffer","cullFace","depthTest","blend","scissorTest","stencilTest","attribs","texCoord","viewportOffsetScale","setTextureBounds","vertexBuffer","createBuffer","indexBuffer","indexCount","renderTarget","createTexture","createFramebuffer","depthStencilBuffer","depthBuffer","stencilBuffer","createRenderbuffer","patch","onResize","destroy","unpatch","deleteProgram","deleteBuffer","deleteTexture","deleteFramebuffer","deleteRenderbuffer","glState","clear","COLOR_BUFFER_BIT","texImage2D","RGBA","RGB","UNSIGNED_BYTE","texParameteri","TEXTURE_MAG_FILTER","LINEAR","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","framebufferTexture2D","COLOR_ATTACHMENT0","renderbufferStorage","DEPTH_STENCIL","framebufferRenderbuffer","DEPTH_STENCIL_ATTACHMENT","DEPTH_COMPONENT16","DEPTH_ATTACHMENT","STENCIL_INDEX8","STENCIL_ATTACHMENT","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","apply","pname","r","h","leftBounds","rightBounds","submitFrame","positionDivisor","texCoordDivisor","getVertexAttrib","VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE","enableVertexAttribArray","vertexAttribPointer","FLOAT","vertexAttribDivisorANGLE","uniform1i","diffuse","uniform4fv","drawElements","TRIANGLES","UNSIGNED_SHORT","renderNoState","preserveDrawingBuffer","updateDeviceInfo","deviceInfo","vertices","computeMeshVertices_","bufferData","STATIC_DRAW","indices","computeMeshIndices_","lensFrustum","getLeftEyeVisibleTanAngles","noLensFrustum","getLeftEyeNoLensTanAngles","getLeftEyeVisibleScreenRect","vidx","j","u","s","distortion","distortInverse","Uint16Array","halfwidth","halfheight","iidx","getOwnPropertyDescriptor_","proto","attrName","getAttribute","val","setAttribute","uiVS","uiFS","DEG2RAD","kInnerRadius","kButtonWidthDp","CardboardUI","gearOffset","gearVertexCount","arrowOffset","arrowVertexCount","projMat","Distortion","coefficients","listen","optionsCallback","backCallback","midline","clientWidth","clientX","clientY","clientHeight","physicalPixels","dps","lineWidth","buttonSize","buttonScale","buttonBorder","addGearSegment","theta","angle","cos","segmentTheta","addArrowVertex","angledLineWidth","render","left","right","bottom","top","lr","bt","uniform4f","color","uniformMatrix4fv","projectionMat","drawArrays","TRIANGLE_STRIP","radius","r0","r1","dr0","distort","abs","dr1","r2","ret","degToRad","radToDeg","Vector3","copy","scalar","invScalar","multiplyScalar","applyQuaternion","ix","iy","iz","iw","crossVectors","v1","Quaternion","Device","params","widthMeters","heightMeters","bevelMeters","quaternion","setFromEulerXYZ","c1","c2","c3","s1","s2","s3","setFromEulerYXZ","setFromAxisAngle","axis","halfAngle","multiplyQuaternions","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","l","qb","cosHalfTheta","halfTheta","sinHalfTheta","ratioA","ratioB","setFromUnitVectors","vFrom","vTo","DEFAULT_ANDROID","DEFAULT_IOS","Viewers","CardboardV1","CardboardViewer","label","interLensDistance","baselineLensDistance","screenLensDistance","distortionCoefficients","inverseCoefficients","CardboardV2","DeviceInfo","deviceParams","additionalViewers","viewer","updateDeviceParams","determineDevice_","getDevice","setViewer","METERS_PER_INCH","metersPerPixelX","xdpi","metersPerPixelY","ydpi","bevelMm","getDistortedFieldOfViewLeftEye","eyeToScreenDistance","outerDist","innerDist","bottomDist","topDist","outerAngle","atan","innerAngle","bottomAngle","topAngle","fovLeft","fovTop","fovRight","fovBottom","halfWidth","halfHeight","verticalLensOffset","centerX","centerY","centerZ","screenLeft","screenTop","screenRight","screenBottom","result","undistortedFrustum","dist","eyeX","eyeY","getFieldOfViewLeftEye","opt_isUndistorted","getUndistortedFieldOfViewLeftEye","getFieldOfViewRightEye","p","getUndistortedParams_","getUndistortedViewportLeftEye","screenWidth","screenHeight","xPxPerTanAngle","yPxPerTanAngle","round","eyePosX","eyePosY","halfLensDistance","maxFov","viewerMax","DPDB_CACHE","format","last_updated","devices","Dpdb","onDeviceParamsUpdated","dpdb","recalculateDeviceParams_","xhr","XMLHttpRequest","obj","open","loading","status","JSON","parse","response","send","DeviceParams","SensorSample","sample","timestampS","ComplementaryFilter","kFilter","isDebug","currentAccelMeasurement","currentGyroMeasurement","previousGyroMeasurement","filterQ","previousFilterQ","accelQ","isOrientationInitialized","estimatedGravity","measuredGravity","gyroIntegralQ","PosePredictor","predictionTimeS","previousQ","previousTimestampS","deltaQ","outQ","FusionPoseSensor","predictionTime","yawOnly","accelerometer","gyroscope","filter","posePredictor","chromeVersion","isDeviceMotionInRadians","isWithoutDeviceMotion","filterToWorldQ","inverseWorldToScreenQ","worldToScreenQ","originalPoseAdjustQ","setScreenTransform_","resetQ","orientationOut_","start","getDeviceParams","newDeviceParams","calcDeviceParams_","db","rules","matched","rule","ruleMatches_","dpi","ua","res","resX","resY","sensorSample","addAccelMeasurement","vector","addGyroMeasurement","timestampDeltaS","deltaT","isNaN","run_","accelToQuaternion_","gyroDeltaQ","gyroToQuaternionDelta_","invFilterQ","quat","toFixed","targetQ","getOrientation","accel","normAccel","gyro","dt","getPrediction","currentQ","angularSpeed","predictAngle","getPosition","_deviceOrientationQ","deviceOrientationFixQ","deviceOrientationFilterToWorldQ","filterOrientation","resetPose","onDeviceOrientation_","beta","gamma","onDeviceMotion_","deviceMotion","updateDeviceMotion_","accGravity","accelerationIncludingGravity","rotRate","rotationRate","timeStamp","deltaS","onOrientationChange_","screenOrientation","onMessage_","data","toLowerCase","deviceMotionEvent","isFramed","refOrigin","thisOrigin","onDeviceMotionCallback_","bind","onOrientationChangeCallback_","onMessageCallback_","onDeviceOrientationCallback_","referrer","location","href","stop","X_AXIS","Z_AXIS","SENSOR_TO_VR","PoseSensor","instance","classCallCheck","sensor","fusionSensor","_out","api","errors","_sensorQ","_outQ","_onSensorRead","_onSensorError","init","RelativeOrientationSensor","frequency","referenceFrame","useDeviceMotion","K_FILTER","PREDICTION_TIME_S","YAW_ONLY","DEBUG","RotateInstructions","loadIcon_","overlay","createElement","backgroundColor","fontFamily","zIndex","img","icon","marginLeft","marginTop","appendChild","text","textAlign","fontSize","lineHeight","margin","innerHTML","snackbar","padding","boxSizing","snackbarText","float","snackbarButton","fontWeight","textTransform","borderLeft","paddingLeft","textDecoration","hide","show","parent","parentElement","removeChild","body","display","querySelector","showTemporarily","ms","timer","disableShowTemporarily","clearTimeout","update","encodeURIComponent","DEFAULT_VIEWER","VIEWER_KEY","ViewerSelector","defaultViewer","selectedKey","localStorage","getItem","dialog","createDialog_","root","onChangeCallbacks_","checked","contains","getCurrentViewer","getSelectedKey_","input","onChange","cb","fireOnChange_","onSave_","setItem","container","classList","background","overflow","boxShadow","createH1_","createChoice_","createButton_","h1","marginBottom","div","onclick","button","letterSpacing","border","NoSleep","createCommonjsModule$$1","modules","installedModules","moduleId","m","c","getter","o","n","__esModule","object","property","_createClass","_classCallCheck","mediaFile","oldIOS","parseFloat","exec","MSStream","noSleepTimer","noSleepVideo","currentTime","random","setInterval","play","clearInterval","pause","NoSleep$1","unwrapExports$$1","nextDisplayId","defaultLeftBounds","defaultRightBounds","raf","caf","VRDisplayCapabilities","hasPosition","hasExternalDisplay","canPresent","maxLayers","hasOrientation","VRDisplay","USE_WAKELOCK","wakelock","isPolyfilled","displayId","displayName","isPresenting","capabilities","stageParameters","waitingForPresent_","layer_","originalParent_","fullscreenElement_","fullscreenWrapper_","fullscreenElementCachedStyle_","fullscreenEventTarget_","fullscreenChangeHandler_","fullscreenErrorHandler_","wakelock_","getFrameData","_getPose","_resetPose","getImmediatePose","wrapForFullscreen","element","cssProperties","insertBefore","firstChild","applyFullscreenElementStyle","removeFullscreenWrapper","removeAttribute","requestPresent","layers","wasPresenting","reject","incomingLayer","source","updatePresent_","predistorted","slice","fullscreenElement","addFullscreenListeners_","actualFullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","lock","catch","beginPresent_","unlock","disableWakeLock","endPresent_","removeFullscreenListeners_","fireVRDisplayPresentChange_","requestFullscreen","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","enableWakeLock","exitPresent","getLayers","CustomEvent","detail","fireVRDisplayConnect_","changeHandler","errorHandler","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","getEyeParameters","whichEye","ADDITIONAL_VIEWERS","MOBILE_WAKE_LOCK","DPDB_URL","CARDBOARD_UI_DISABLED","ROTATE_INSTRUCTIONS_DISABLED","BUFFER_SCALE","DIRTY_SUBMIT_FRAME_BINDINGS","Eye","CardboardVRDisplay","config$$1","defaults","bufferScale_","poseSensor_","distorter_","cardboardUI_","dpdb_","onDeviceParamsUpdated_","deviceInfo_","viewerSelector_","onViewerChanged_","rotateInstructions_","onResize_","linearVelocity","linearAcceleration","angularVelocity","angularAcceleration","fieldOfView","eyeParams","renderWidth","renderHeight","newParams","updateBounds_","stopPropagation","preventDefault","orientationHandler","vrdisplaypresentchangeHandler","fireVRDisplayDeviceParamsChange_","lastWidth","lastHeight","vrdisplay","VRFrameData","factory","XRDevice","global","onWindowResize","featureDescriptor","coordinateSystem","poseType","oculusGo","mapping","buttons","gripTransform","oculusTouch","displayProfiles","axes","openVr","targetRayTransform","userAgentOverrides","samsungGearVR","samsungOdyssey","windowsMixedReality","GamepadMappings","HEAD_ELBOW_OFFSET_RIGHTHANDED","HEAD_ELBOW_OFFSET_LEFTHANDED","ELBOW_WRIST_OFFSET","WRIST_CONTROLLER_OFFSET","ARM_EXTENSION_OFFSET","RAD_TO_DEG","OrientationArmModel","hand","headElbowOffset","controllerQ","lastControllerQ","headQ","headPos","elbowPos","wristPos","time","lastTime","rootQ","setHandedness","controllerOrientation","headPoseMatrix","headYawQ","getHeadYawOrientation_","angleDelta","quatAngle_","controllerForward","controllerDotY","extensionRatio","clamp_","controllerCameraQ","elbowOffset","totalAngleDeg","lerpValue","pow","wristQ","invWristQ","elbowQ","headEuler","order","clamp","min$$1","max$$1","sqx","sqy","sqz","sqw","asin","atan2","eulerFromQuaternion","destinationQ","halfToRad","sx","cx","sy","cy","sz","cz","fromEuler","q1","q2","vec1","vec2","tempA","tempB","cosine","PRIVATE$18","PLACEHOLDER_BUTTON","pressed","touched","XRRemappedGamepad","map","agent","override","_update","_profiles","connected","hapticActuators","GamepadXRInputSource","polyfill","primaryButtonIndex","primarySqueezeButtonIndex","nativeGamepad","lastPosition","basePoseMatrix","outputMatrix","primaryActionPressed","primarySqueezeActionPressed","armModel","updateFromGamepad","updateBasePoseMatrix","getXRPose","EXTRA_PRESENTATION_ATTRIBUTES","highRefreshRate","PRIMARY_BUTTON_MAP","oculus","openvr","SESSION_ID","Session","polyfillOptions","outputContext","modifiedCanvasLayer","renderContextType","renderContext","WebVRDevice","sessions","baseModelMatrix","gamepadInputSources","tempVec3","onVRDisplayPresentChange","CAN_USE_GAMEPAD","HAS_BITMAP_SUPPORT","ImageBitmapRenderingContext","createImageBitmap","isImageBitmapSupported","attributes","applyCanvasStylesForMinimalRendering","getPrimaryButtonIndex","primaryButton","prevInputSources","gamepads","getGamepads","inputSourceImpl","mirroring","iCanvas","iWidth","iHeight","oCanvas","oWidth","oHeight","transferToImageBitmap","transferFromImageBitmap","resizeWidth","resizeHeight","bitmap","drawImage","has","sizeX","sizeZ","sittingToStandingTransform","forEach","CardboardXRDevice","cardboardConfig","SESSION_ID$1","Session$1","InlineDevice","identityMatrix","CONFIG_DEFAULTS","webvr","cardboard","allowCardboardOnDesktop","partials","nativeWebXR","injected","_injectCompatibilityShims","_injectPolyfill","every","iface","className","keys","WebGLRenderingContext","HTMLCanvasElement","OffscreenCanvas","WebGL2RenderingContext","isSecureContext","_patchNavigatorXR","async","xr","displays","getVRDisplays","getWebVRDevice","mobile","requestXRDevice","originalSupportsSession","supportsSession"],"sourceRoot":""}