{"version":3,"sources":["jsdelivr-header.js","/npm/glplotter@0.2.0/lib/gl-plotter.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,CCEA,SAA2C,EAAM,GAChD,GAAsB,iBAAZ,SAA0C,iBAAX,OACxC,OAAO,QAAU,SACb,GAAqB,mBAAX,QAAyB,OAAO,IAC9C,OAAO,GAAI,OACP,CACJ,IAAI,EAAI,IACR,IAAI,IAAI,KAAK,GAAuB,iBAAZ,QAAuB,QAAU,GAAM,GAAK,EAAE,EACvE,CACA,CATD,CASG,MAAM,WACT,OAAgB,WACN,IAAI,oBAAsB,CAE9B;;;kDAIA,SAAU,wBAAyB,oBAAqB,qBAE9D,aACA,KAAK,wjEAEE,EAED;;;iDAIA,SAAU,wBAAyB,oBAAqB,qBAE9D,aACA,KAAK,g3FAEE,EAED;;;gDAIA,SAAU,wBAAyB,oBAAqB,qBAE9D,aACA,KAAK,iqZAEE,EAED;;;iDAIA,SAAU,wBAAyB,oBAAqB,qBAE9D,aACA,KAAK,82bAEE,EAED;;;gDAIA,SAAU,wBAAyB,oBAAqB,qBAE9D,aACA,KAAK,y0sBAEE,EAED;;;gDAIA,SAAU,wBAAyB,oBAAqB,qBAE9D,aACA,KAAK,klxDAEE,EAED;;;gDAIA,SAAU,wBAAyB,oBAAqB,qBAE9D,aACA,KAAK,k3tBAEE,EAED;;;iDAIA,SAAU,wBAAyB,oBAAqB,qBAE9D,aACA,KAAK,+u1BAEE,EAED;;;gDAIA,SAAU,wBAAyB,oBAAqB,qBAE9D,aACA,KAAK,4xkBAEE,EAED;;;gDAIA,SAAU,wBAAyB,oBAAqB,qBAE9D,aACA,KAAK,qkvBAEE,EAED;;;gDAIA,SAAU,wBAAyB,oBAAqB,qBAE9D,aACA,KAAK,+vmBAEE,EAED;;;0CAIA,SAAU,QAEhB,KAAK,uMAEE,EAED;;;wCAIA,SAAU,QAEhB,KAAK,unBAEE,EAED;;;yCAIA,SAAU,QAEhB,KAAK,oMAEE,EAED;;;uCAIA,SAAU,QAEhB,KAAK,ydAEE,EAED;;;2CAIA,SAAU,QAEhB,aACA,KAAK,ygDAEE,EAED;;;+BAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,wuTAEE,EAED;;;+BAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,wxMAEE,EAED;;;8BAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,2qHAEE,EAED;;;oDAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,2eAEE,EAED;;;kDAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,s8CAEE,EAED;;;oDAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,qhJAEE,EAED;;;2CAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,4iDAEE,EAED;;;gDAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,kkDAEE,EAED;;;8CAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,ykBAEE,EAED;;;uCAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,s2CAEE,EAED;;;gDAIA,SAAU,wBAAyB,SAEzC,aACA,KAAK,8RAEE,EAED;;;uCAIA,SAAU,wBAAyB,SAEzC,aACA,KAAK,4/GAEE,EAED;;;yCAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,2zBAEE,EAED;;;8CAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,mwDAEE,EAED;;;wCAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,2zGAEE,EAED;;;mDAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,6lBAEE,EAED;;;iDAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,+8CAEE,EAED;;;mDAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,ypKAEE,EAED;;;0CAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,+1DAEE,EAED;;;4CAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,mkBAEE,EAED;;;uCAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,yiPAEE,EAED;;;yCAIA,SAAU,wBAAyB,SAEzC,aACA,KAAK,q0CAEE,EAED;;;oCAIA,SAAU,wBAAyB,SAEzC,aACA,KAAK,6hBAEE,EAED;;;+CAIA,SAAU,wBAAyB,SAEzC,aACA,KAAK,0OAEE,EAED;;;kDAIA,SAAU,wBAAyB,SAEzC,aACA,KAAK,4lBAEE,EAED;;;iDAIA,SAAU,wBAAyB,SAEzC,aACA,KAAK,0mBAEE,EAED;;;iDAIA,SAAU,wBAAyB,SAEzC,aACA,KAAK,svBAEE,EAED;;;kCAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,qyHAEE,EAED;;;qDAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,irDAEE,EAED;;;2DAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,21KAEE,EAED;;;yDAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,2uGAEE,EAED;;;uDAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,89HAEE,EAED;;;yDAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,oiIAEE,EAED;;;gCAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,+6BAEE,EAED;;;iCAIA,SAAU,wBAAyB,SAEzC,aACA,KAAK,yiDAEE,EAED;;;uCAIA,SAAU,wBAAyB,SAEzC,aACA,KAAK,0pCAEE,EAED;;;gCAIA,SAAU,wBAAyB,QAAS,qBAElD,aACA,KAAK,2jCAEE,EAED;;;sCAIA,SAAU,wBAAyB,SAEzC,aACA,KAAK,+8FAEE,GAKO,yBAA2B,CAAC,EAGhC,SAAS,oBAAoB,GAE5B,IAAI,EAAe,yBAAyB,GAC5C,QAAqB,IAAjB,EACH,OAAO,EAAa,QAGrB,IAAI,EAAS,yBAAyB,GAAY,CAGjD,QAAS,CAAC,GAOX,OAHA,oBAAoB,GAAU,KAAK,EAAO,QAAS,EAAQ,EAAO,QAAS,qBAGpE,EAAO,OACf,CAMC,oBAAoB,EAAI,SAAS,EAAS,GACzC,IAAI,IAAI,KAAO,EACX,oBAAoB,EAAE,EAAY,KAAS,oBAAoB,EAAE,EAAS,IAC5E,OAAO,eAAe,EAAS,EAAK,CAAE,YAAY,EAAM,IAAK,EAAW,IAG3E,EAKA,oBAAoB,EAAI,SAAS,EAAK,GAAQ,OAAO,OAAO,UAAU,eAAe,KAAK,EAAK,EAAO,EAMtG,oBAAoB,EAAI,SAAS,GACX,oBAAX,QAA0B,OAAO,aAC1C,OAAO,eAAe,EAAS,OAAO,YAAa,CAAE,MAAO,WAE7D,OAAO,eAAe,EAAS,aAAc,CAAE,OAAO,GACvD,EAQD,IAAI,oBAAsB,oBAAoB,uBAE9C,OAAO,mBACP,CAhpBM,EAkpBhB","file":"/npm/glplotter@0.2.0/lib/gl-plotter.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/glplotter@0.2.0/lib/gl-plotter.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/*\n * ATTENTION: The \"eval\" devtool has been used (maybe by default in mode: \"development\").\n * This devtool is neither made for production nor for readable output files.\n * It uses \"eval()\" calls to create a separate source file in the browser devtools.\n * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)\n * or disable the default devtool with \"devtool: false\".\n * If you are looking for production-ready output files, see mode: \"production\" (https://webpack.js.org/configuration/mode/).\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./node_modules/gl-matrix/esm/common.js\":\n/*!**********************************************!*\\\n  !*** ./node_modules/gl-matrix/esm/common.js ***!\n  \\**********************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"ARRAY_TYPE\\\": function() { return /* binding */ ARRAY_TYPE; },\\n/* harmony export */   \\\"EPSILON\\\": function() { return /* binding */ EPSILON; },\\n/* harmony export */   \\\"RANDOM\\\": function() { return /* binding */ RANDOM; },\\n/* harmony export */   \\\"equals\\\": function() { return /* binding */ equals; },\\n/* harmony export */   \\\"setMatrixArrayType\\\": function() { return /* binding */ setMatrixArrayType; },\\n/* harmony export */   \\\"toRadian\\\": function() { return /* binding */ toRadian; }\\n/* harmony export */ });\\n/**\\n * Common utilities\\n * @module glMatrix\\n */\\n// Configuration Constants\\nvar EPSILON = 0.000001;\\nvar ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\\nvar RANDOM = Math.random;\\n/**\\n * Sets the type of array used when creating new vectors and matrices\\n *\\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\\n */\\n\\nfunction setMatrixArrayType(type) {\\n  ARRAY_TYPE = type;\\n}\\nvar degree = Math.PI / 180;\\n/**\\n * Convert Degree To Radian\\n *\\n * @param {Number} a Angle in Degrees\\n */\\n\\nfunction toRadian(a) {\\n  return a * degree;\\n}\\n/**\\n * Tests whether or not the arguments have approximately the same value, within an absolute\\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\\n * than or equal to 1.0, and a relative tolerance is used for larger values)\\n *\\n * @param {Number} a The first number to test.\\n * @param {Number} b The second number to test.\\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\\n */\\n\\nfunction equals(a, b) {\\n  return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\\n}\\nif (!Math.hypot) Math.hypot = function () {\\n  var y = 0,\\n      i = arguments.length;\\n\\n  while (i--) {\\n    y += arguments[i] * arguments[i];\\n  }\\n\\n  return Math.sqrt(y);\\n};\\n\\n//# sourceURL=webpack://glplotter/./node_modules/gl-matrix/esm/common.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/gl-matrix/esm/index.js\":\n/*!*********************************************!*\\\n  !*** ./node_modules/gl-matrix/esm/index.js ***!\n  \\*********************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"glMatrix\\\": function() { return /* reexport module object */ _common_js__WEBPACK_IMPORTED_MODULE_0__; },\\n/* harmony export */   \\\"mat2\\\": function() { return /* reexport module object */ _mat2_js__WEBPACK_IMPORTED_MODULE_1__; },\\n/* harmony export */   \\\"mat2d\\\": function() { return /* reexport module object */ _mat2d_js__WEBPACK_IMPORTED_MODULE_2__; },\\n/* harmony export */   \\\"mat3\\\": function() { return /* reexport module object */ _mat3_js__WEBPACK_IMPORTED_MODULE_3__; },\\n/* harmony export */   \\\"mat4\\\": function() { return /* reexport module object */ _mat4_js__WEBPACK_IMPORTED_MODULE_4__; },\\n/* harmony export */   \\\"quat\\\": function() { return /* reexport module object */ _quat_js__WEBPACK_IMPORTED_MODULE_5__; },\\n/* harmony export */   \\\"quat2\\\": function() { return /* reexport module object */ _quat2_js__WEBPACK_IMPORTED_MODULE_6__; },\\n/* harmony export */   \\\"vec2\\\": function() { return /* reexport module object */ _vec2_js__WEBPACK_IMPORTED_MODULE_7__; },\\n/* harmony export */   \\\"vec3\\\": function() { return /* reexport module object */ _vec3_js__WEBPACK_IMPORTED_MODULE_8__; },\\n/* harmony export */   \\\"vec4\\\": function() { return /* reexport module object */ _vec4_js__WEBPACK_IMPORTED_MODULE_9__; }\\n/* harmony export */ });\\n/* harmony import */ var _common_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common.js */ \\\"./node_modules/gl-matrix/esm/common.js\\\");\\n/* harmony import */ var _mat2_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mat2.js */ \\\"./node_modules/gl-matrix/esm/mat2.js\\\");\\n/* harmony import */ var _mat2d_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mat2d.js */ \\\"./node_modules/gl-matrix/esm/mat2d.js\\\");\\n/* harmony import */ var _mat3_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mat3.js */ \\\"./node_modules/gl-matrix/esm/mat3.js\\\");\\n/* harmony import */ var _mat4_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./mat4.js */ \\\"./node_modules/gl-matrix/esm/mat4.js\\\");\\n/* harmony import */ var _quat_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./quat.js */ \\\"./node_modules/gl-matrix/esm/quat.js\\\");\\n/* harmony import */ var _quat2_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./quat2.js */ \\\"./node_modules/gl-matrix/esm/quat2.js\\\");\\n/* harmony import */ var _vec2_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./vec2.js */ \\\"./node_modules/gl-matrix/esm/vec2.js\\\");\\n/* harmony import */ var _vec3_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./vec3.js */ \\\"./node_modules/gl-matrix/esm/vec3.js\\\");\\n/* harmony import */ var _vec4_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./vec4.js */ \\\"./node_modules/gl-matrix/esm/vec4.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n//# sourceURL=webpack://glplotter/./node_modules/gl-matrix/esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/gl-matrix/esm/mat2.js\":\n/*!********************************************!*\\\n  !*** ./node_modules/gl-matrix/esm/mat2.js ***!\n  \\********************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"LDU\\\": function() { return /* binding */ LDU; },\\n/* harmony export */   \\\"add\\\": function() { return /* binding */ add; },\\n/* harmony export */   \\\"adjoint\\\": function() { return /* binding */ adjoint; },\\n/* harmony export */   \\\"clone\\\": function() { return /* binding */ clone; },\\n/* harmony export */   \\\"copy\\\": function() { return /* binding */ copy; },\\n/* harmony export */   \\\"create\\\": function() { return /* binding */ create; },\\n/* harmony export */   \\\"determinant\\\": function() { return /* binding */ determinant; },\\n/* harmony export */   \\\"equals\\\": function() { return /* binding */ equals; },\\n/* harmony export */   \\\"exactEquals\\\": function() { return /* binding */ exactEquals; },\\n/* harmony export */   \\\"frob\\\": function() { return /* binding */ frob; },\\n/* harmony export */   \\\"fromRotation\\\": function() { return /* binding */ fromRotation; },\\n/* harmony export */   \\\"fromScaling\\\": function() { return /* binding */ fromScaling; },\\n/* harmony export */   \\\"fromValues\\\": function() { return /* binding */ fromValues; },\\n/* harmony export */   \\\"identity\\\": function() { return /* binding */ identity; },\\n/* harmony export */   \\\"invert\\\": function() { return /* binding */ invert; },\\n/* harmony export */   \\\"mul\\\": function() { return /* binding */ mul; },\\n/* harmony export */   \\\"multiply\\\": function() { return /* binding */ multiply; },\\n/* harmony export */   \\\"multiplyScalar\\\": function() { return /* binding */ multiplyScalar; },\\n/* harmony export */   \\\"multiplyScalarAndAdd\\\": function() { return /* binding */ multiplyScalarAndAdd; },\\n/* harmony export */   \\\"rotate\\\": function() { return /* binding */ rotate; },\\n/* harmony export */   \\\"scale\\\": function() { return /* binding */ scale; },\\n/* harmony export */   \\\"set\\\": function() { return /* binding */ set; },\\n/* harmony export */   \\\"str\\\": function() { return /* binding */ str; },\\n/* harmony export */   \\\"sub\\\": function() { return /* binding */ sub; },\\n/* harmony export */   \\\"subtract\\\": function() { return /* binding */ subtract; },\\n/* harmony export */   \\\"transpose\\\": function() { return /* binding */ transpose; }\\n/* harmony export */ });\\n/* harmony import */ var _common_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common.js */ \\\"./node_modules/gl-matrix/esm/common.js\\\");\\n\\n/**\\n * 2x2 Matrix\\n * @module mat2\\n */\\n\\n/**\\n * Creates a new identity mat2\\n *\\n * @returns {mat2} a new 2x2 matrix\\n */\\n\\nfunction create() {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(4);\\n\\n  if (_common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE != Float32Array) {\\n    out[1] = 0;\\n    out[2] = 0;\\n  }\\n\\n  out[0] = 1;\\n  out[3] = 1;\\n  return out;\\n}\\n/**\\n * Creates a new mat2 initialized with values from an existing matrix\\n *\\n * @param {ReadonlyMat2} a matrix to clone\\n * @returns {mat2} a new 2x2 matrix\\n */\\n\\nfunction clone(a) {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.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}\\n/**\\n * Copy the values from one mat2 to another\\n *\\n * @param {mat2} out the receiving matrix\\n * @param {ReadonlyMat2} a the source matrix\\n * @returns {mat2} 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  return out;\\n}\\n/**\\n * Set a mat2 to the identity matrix\\n *\\n * @param {mat2} out the receiving matrix\\n * @returns {mat2} out\\n */\\n\\nfunction identity(out) {\\n  out[0] = 1;\\n  out[1] = 0;\\n  out[2] = 0;\\n  out[3] = 1;\\n  return out;\\n}\\n/**\\n * Create a new mat2 with the given values\\n *\\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\\n * @param {Number} m10 Component in column 1, row 0 position (index 2)\\n * @param {Number} m11 Component in column 1, row 1 position (index 3)\\n * @returns {mat2} out A new 2x2 matrix\\n */\\n\\nfunction fromValues(m00, m01, m10, m11) {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(4);\\n  out[0] = m00;\\n  out[1] = m01;\\n  out[2] = m10;\\n  out[3] = m11;\\n  return out;\\n}\\n/**\\n * Set the components of a mat2 to the given values\\n *\\n * @param {mat2} out the receiving matrix\\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\\n * @param {Number} m10 Component in column 1, row 0 position (index 2)\\n * @param {Number} m11 Component in column 1, row 1 position (index 3)\\n * @returns {mat2} out\\n */\\n\\nfunction set(out, m00, m01, m10, m11) {\\n  out[0] = m00;\\n  out[1] = m01;\\n  out[2] = m10;\\n  out[3] = m11;\\n  return out;\\n}\\n/**\\n * Transpose the values of a mat2\\n *\\n * @param {mat2} out the receiving matrix\\n * @param {ReadonlyMat2} a the source matrix\\n * @returns {mat2} out\\n */\\n\\nfunction transpose(out, a) {\\n  // If we are transposing ourselves we can skip a few steps but have to cache\\n  // some values\\n  if (out === a) {\\n    var a1 = a[1];\\n    out[1] = a[2];\\n    out[2] = a1;\\n  } else {\\n    out[0] = a[0];\\n    out[1] = a[2];\\n    out[2] = a[1];\\n    out[3] = a[3];\\n  }\\n\\n  return out;\\n}\\n/**\\n * Inverts a mat2\\n *\\n * @param {mat2} out the receiving matrix\\n * @param {ReadonlyMat2} a the source matrix\\n * @returns {mat2} out\\n */\\n\\nfunction invert(out, a) {\\n  var a0 = a[0],\\n      a1 = a[1],\\n      a2 = a[2],\\n      a3 = a[3]; // Calculate the determinant\\n\\n  var det = a0 * a3 - a2 * a1;\\n\\n  if (!det) {\\n    return null;\\n  }\\n\\n  det = 1.0 / det;\\n  out[0] = a3 * det;\\n  out[1] = -a1 * det;\\n  out[2] = -a2 * det;\\n  out[3] = a0 * det;\\n  return out;\\n}\\n/**\\n * Calculates the adjugate of a mat2\\n *\\n * @param {mat2} out the receiving matrix\\n * @param {ReadonlyMat2} a the source matrix\\n * @returns {mat2} out\\n */\\n\\nfunction adjoint(out, a) {\\n  // Caching this value is nessecary if out == a\\n  var a0 = a[0];\\n  out[0] = a[3];\\n  out[1] = -a[1];\\n  out[2] = -a[2];\\n  out[3] = a0;\\n  return out;\\n}\\n/**\\n * Calculates the determinant of a mat2\\n *\\n * @param {ReadonlyMat2} a the source matrix\\n * @returns {Number} determinant of a\\n */\\n\\nfunction determinant(a) {\\n  return a[0] * a[3] - a[2] * a[1];\\n}\\n/**\\n * Multiplies two mat2's\\n *\\n * @param {mat2} out the receiving matrix\\n * @param {ReadonlyMat2} a the first operand\\n * @param {ReadonlyMat2} b the second operand\\n * @returns {mat2} out\\n */\\n\\nfunction multiply(out, a, b) {\\n  var a0 = a[0],\\n      a1 = a[1],\\n      a2 = a[2],\\n      a3 = a[3];\\n  var b0 = b[0],\\n      b1 = b[1],\\n      b2 = b[2],\\n      b3 = b[3];\\n  out[0] = a0 * b0 + a2 * b1;\\n  out[1] = a1 * b0 + a3 * b1;\\n  out[2] = a0 * b2 + a2 * b3;\\n  out[3] = a1 * b2 + a3 * b3;\\n  return out;\\n}\\n/**\\n * Rotates a mat2 by the given angle\\n *\\n * @param {mat2} out the receiving matrix\\n * @param {ReadonlyMat2} a the matrix to rotate\\n * @param {Number} rad the angle to rotate the matrix by\\n * @returns {mat2} out\\n */\\n\\nfunction rotate(out, a, rad) {\\n  var a0 = a[0],\\n      a1 = a[1],\\n      a2 = a[2],\\n      a3 = a[3];\\n  var s = Math.sin(rad);\\n  var c = Math.cos(rad);\\n  out[0] = a0 * c + a2 * s;\\n  out[1] = a1 * c + a3 * s;\\n  out[2] = a0 * -s + a2 * c;\\n  out[3] = a1 * -s + a3 * c;\\n  return out;\\n}\\n/**\\n * Scales the mat2 by the dimensions in the given vec2\\n *\\n * @param {mat2} out the receiving matrix\\n * @param {ReadonlyMat2} a the matrix to rotate\\n * @param {ReadonlyVec2} v the vec2 to scale the matrix by\\n * @returns {mat2} out\\n **/\\n\\nfunction scale(out, a, v) {\\n  var a0 = a[0],\\n      a1 = a[1],\\n      a2 = a[2],\\n      a3 = a[3];\\n  var v0 = v[0],\\n      v1 = v[1];\\n  out[0] = a0 * v0;\\n  out[1] = a1 * v0;\\n  out[2] = a2 * v1;\\n  out[3] = a3 * v1;\\n  return out;\\n}\\n/**\\n * Creates a matrix from a given angle\\n * This is equivalent to (but much faster than):\\n *\\n *     mat2.identity(dest);\\n *     mat2.rotate(dest, dest, rad);\\n *\\n * @param {mat2} out mat2 receiving operation result\\n * @param {Number} rad the angle to rotate the matrix by\\n * @returns {mat2} out\\n */\\n\\nfunction fromRotation(out, rad) {\\n  var s = Math.sin(rad);\\n  var c = Math.cos(rad);\\n  out[0] = c;\\n  out[1] = s;\\n  out[2] = -s;\\n  out[3] = c;\\n  return out;\\n}\\n/**\\n * Creates a matrix from a vector scaling\\n * This is equivalent to (but much faster than):\\n *\\n *     mat2.identity(dest);\\n *     mat2.scale(dest, dest, vec);\\n *\\n * @param {mat2} out mat2 receiving operation result\\n * @param {ReadonlyVec2} v Scaling vector\\n * @returns {mat2} out\\n */\\n\\nfunction fromScaling(out, v) {\\n  out[0] = v[0];\\n  out[1] = 0;\\n  out[2] = 0;\\n  out[3] = v[1];\\n  return out;\\n}\\n/**\\n * Returns a string representation of a mat2\\n *\\n * @param {ReadonlyMat2} a matrix to represent as a string\\n * @returns {String} string representation of the matrix\\n */\\n\\nfunction str(a) {\\n  return \\\"mat2(\\\" + a[0] + \\\", \\\" + a[1] + \\\", \\\" + a[2] + \\\", \\\" + a[3] + \\\")\\\";\\n}\\n/**\\n * Returns Frobenius norm of a mat2\\n *\\n * @param {ReadonlyMat2} a the matrix to calculate Frobenius norm of\\n * @returns {Number} Frobenius norm\\n */\\n\\nfunction frob(a) {\\n  return Math.hypot(a[0], a[1], a[2], a[3]);\\n}\\n/**\\n * Returns L, D and U matrices (Lower triangular, Diagonal and Upper triangular) by factorizing the input matrix\\n * @param {ReadonlyMat2} L the lower triangular matrix\\n * @param {ReadonlyMat2} D the diagonal matrix\\n * @param {ReadonlyMat2} U the upper triangular matrix\\n * @param {ReadonlyMat2} a the input matrix to factorize\\n */\\n\\nfunction LDU(L, D, U, a) {\\n  L[2] = a[2] / a[0];\\n  U[0] = a[0];\\n  U[1] = a[1];\\n  U[3] = a[3] - L[2] * U[1];\\n  return [L, D, U];\\n}\\n/**\\n * Adds two mat2's\\n *\\n * @param {mat2} out the receiving matrix\\n * @param {ReadonlyMat2} a the first operand\\n * @param {ReadonlyMat2} b the second operand\\n * @returns {mat2} out\\n */\\n\\nfunction add(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  out[3] = a[3] + b[3];\\n  return out;\\n}\\n/**\\n * Subtracts matrix b from matrix a\\n *\\n * @param {mat2} out the receiving matrix\\n * @param {ReadonlyMat2} a the first operand\\n * @param {ReadonlyMat2} b the second operand\\n * @returns {mat2} out\\n */\\n\\nfunction subtract(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  out[3] = a[3] - b[3];\\n  return out;\\n}\\n/**\\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\\n *\\n * @param {ReadonlyMat2} a The first matrix.\\n * @param {ReadonlyMat2} b The second matrix.\\n * @returns {Boolean} True if the matrices are equal, false otherwise.\\n */\\n\\nfunction exactEquals(a, b) {\\n  return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\\n}\\n/**\\n * Returns whether or not the matrices have approximately the same elements in the same position.\\n *\\n * @param {ReadonlyMat2} a The first matrix.\\n * @param {ReadonlyMat2} b The second matrix.\\n * @returns {Boolean} True if the matrices are equal, false otherwise.\\n */\\n\\nfunction equals(a, b) {\\n  var a0 = a[0],\\n      a1 = a[1],\\n      a2 = a[2],\\n      a3 = a[3];\\n  var b0 = b[0],\\n      b1 = b[1],\\n      b2 = b[2],\\n      b3 = b[3];\\n  return Math.abs(a0 - b0) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\\n}\\n/**\\n * Multiply each element of the matrix by a scalar.\\n *\\n * @param {mat2} out the receiving matrix\\n * @param {ReadonlyMat2} a the matrix to scale\\n * @param {Number} b amount to scale the matrix's elements by\\n * @returns {mat2} out\\n */\\n\\nfunction multiplyScalar(out, a, b) {\\n  out[0] = a[0] * b;\\n  out[1] = a[1] * b;\\n  out[2] = a[2] * b;\\n  out[3] = a[3] * b;\\n  return out;\\n}\\n/**\\n * Adds two mat2's after multiplying each element of the second operand by a scalar value.\\n *\\n * @param {mat2} out the receiving vector\\n * @param {ReadonlyMat2} a the first operand\\n * @param {ReadonlyMat2} b the second operand\\n * @param {Number} scale the amount to scale b's elements by before adding\\n * @returns {mat2} out\\n */\\n\\nfunction multiplyScalarAndAdd(out, a, b, scale) {\\n  out[0] = a[0] + b[0] * scale;\\n  out[1] = a[1] + b[1] * scale;\\n  out[2] = a[2] + b[2] * scale;\\n  out[3] = a[3] + b[3] * scale;\\n  return out;\\n}\\n/**\\n * Alias for {@link mat2.multiply}\\n * @function\\n */\\n\\nvar mul = multiply;\\n/**\\n * Alias for {@link mat2.subtract}\\n * @function\\n */\\n\\nvar sub = subtract;\\n\\n//# sourceURL=webpack://glplotter/./node_modules/gl-matrix/esm/mat2.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/gl-matrix/esm/mat2d.js\":\n/*!*********************************************!*\\\n  !*** ./node_modules/gl-matrix/esm/mat2d.js ***!\n  \\*********************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"add\\\": function() { return /* binding */ add; },\\n/* harmony export */   \\\"clone\\\": function() { return /* binding */ clone; },\\n/* harmony export */   \\\"copy\\\": function() { return /* binding */ copy; },\\n/* harmony export */   \\\"create\\\": function() { return /* binding */ create; },\\n/* harmony export */   \\\"determinant\\\": function() { return /* binding */ determinant; },\\n/* harmony export */   \\\"equals\\\": function() { return /* binding */ equals; },\\n/* harmony export */   \\\"exactEquals\\\": function() { return /* binding */ exactEquals; },\\n/* harmony export */   \\\"frob\\\": function() { return /* binding */ frob; },\\n/* harmony export */   \\\"fromRotation\\\": function() { return /* binding */ fromRotation; },\\n/* harmony export */   \\\"fromScaling\\\": function() { return /* binding */ fromScaling; },\\n/* harmony export */   \\\"fromTranslation\\\": function() { return /* binding */ fromTranslation; },\\n/* harmony export */   \\\"fromValues\\\": function() { return /* binding */ fromValues; },\\n/* harmony export */   \\\"identity\\\": function() { return /* binding */ identity; },\\n/* harmony export */   \\\"invert\\\": function() { return /* binding */ invert; },\\n/* harmony export */   \\\"mul\\\": function() { return /* binding */ mul; },\\n/* harmony export */   \\\"multiply\\\": function() { return /* binding */ multiply; },\\n/* harmony export */   \\\"multiplyScalar\\\": function() { return /* binding */ multiplyScalar; },\\n/* harmony export */   \\\"multiplyScalarAndAdd\\\": function() { return /* binding */ multiplyScalarAndAdd; },\\n/* harmony export */   \\\"rotate\\\": function() { return /* binding */ rotate; },\\n/* harmony export */   \\\"scale\\\": function() { return /* binding */ scale; },\\n/* harmony export */   \\\"set\\\": function() { return /* binding */ set; },\\n/* harmony export */   \\\"str\\\": function() { return /* binding */ str; },\\n/* harmony export */   \\\"sub\\\": function() { return /* binding */ sub; },\\n/* harmony export */   \\\"subtract\\\": function() { return /* binding */ subtract; },\\n/* harmony export */   \\\"translate\\\": function() { return /* binding */ translate; }\\n/* harmony export */ });\\n/* harmony import */ var _common_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common.js */ \\\"./node_modules/gl-matrix/esm/common.js\\\");\\n\\n/**\\n * 2x3 Matrix\\n * @module mat2d\\n * @description\\n * A mat2d contains six elements defined as:\\n * <pre>\\n * [a, b,\\n *  c, d,\\n *  tx, ty]\\n * </pre>\\n * This is a short form for the 3x3 matrix:\\n * <pre>\\n * [a, b, 0,\\n *  c, d, 0,\\n *  tx, ty, 1]\\n * </pre>\\n * The last column is ignored so the array is shorter and operations are faster.\\n */\\n\\n/**\\n * Creates a new identity mat2d\\n *\\n * @returns {mat2d} a new 2x3 matrix\\n */\\n\\nfunction create() {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(6);\\n\\n  if (_common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE != Float32Array) {\\n    out[1] = 0;\\n    out[2] = 0;\\n    out[4] = 0;\\n    out[5] = 0;\\n  }\\n\\n  out[0] = 1;\\n  out[3] = 1;\\n  return out;\\n}\\n/**\\n * Creates a new mat2d initialized with values from an existing matrix\\n *\\n * @param {ReadonlyMat2d} a matrix to clone\\n * @returns {mat2d} a new 2x3 matrix\\n */\\n\\nfunction clone(a) {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(6);\\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  return out;\\n}\\n/**\\n * Copy the values from one mat2d to another\\n *\\n * @param {mat2d} out the receiving matrix\\n * @param {ReadonlyMat2d} a the source matrix\\n * @returns {mat2d} 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  return out;\\n}\\n/**\\n * Set a mat2d to the identity matrix\\n *\\n * @param {mat2d} out the receiving matrix\\n * @returns {mat2d} out\\n */\\n\\nfunction identity(out) {\\n  out[0] = 1;\\n  out[1] = 0;\\n  out[2] = 0;\\n  out[3] = 1;\\n  out[4] = 0;\\n  out[5] = 0;\\n  return out;\\n}\\n/**\\n * Create a new mat2d with the given values\\n *\\n * @param {Number} a Component A (index 0)\\n * @param {Number} b Component B (index 1)\\n * @param {Number} c Component C (index 2)\\n * @param {Number} d Component D (index 3)\\n * @param {Number} tx Component TX (index 4)\\n * @param {Number} ty Component TY (index 5)\\n * @returns {mat2d} A new mat2d\\n */\\n\\nfunction fromValues(a, b, c, d, tx, ty) {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(6);\\n  out[0] = a;\\n  out[1] = b;\\n  out[2] = c;\\n  out[3] = d;\\n  out[4] = tx;\\n  out[5] = ty;\\n  return out;\\n}\\n/**\\n * Set the components of a mat2d to the given values\\n *\\n * @param {mat2d} out the receiving matrix\\n * @param {Number} a Component A (index 0)\\n * @param {Number} b Component B (index 1)\\n * @param {Number} c Component C (index 2)\\n * @param {Number} d Component D (index 3)\\n * @param {Number} tx Component TX (index 4)\\n * @param {Number} ty Component TY (index 5)\\n * @returns {mat2d} out\\n */\\n\\nfunction set(out, a, b, c, d, tx, ty) {\\n  out[0] = a;\\n  out[1] = b;\\n  out[2] = c;\\n  out[3] = d;\\n  out[4] = tx;\\n  out[5] = ty;\\n  return out;\\n}\\n/**\\n * Inverts a mat2d\\n *\\n * @param {mat2d} out the receiving matrix\\n * @param {ReadonlyMat2d} a the source matrix\\n * @returns {mat2d} out\\n */\\n\\nfunction invert(out, a) {\\n  var aa = a[0],\\n      ab = a[1],\\n      ac = a[2],\\n      ad = a[3];\\n  var atx = a[4],\\n      aty = a[5];\\n  var det = aa * ad - ab * ac;\\n\\n  if (!det) {\\n    return null;\\n  }\\n\\n  det = 1.0 / det;\\n  out[0] = ad * det;\\n  out[1] = -ab * det;\\n  out[2] = -ac * det;\\n  out[3] = aa * det;\\n  out[4] = (ac * aty - ad * atx) * det;\\n  out[5] = (ab * atx - aa * aty) * det;\\n  return out;\\n}\\n/**\\n * Calculates the determinant of a mat2d\\n *\\n * @param {ReadonlyMat2d} a the source matrix\\n * @returns {Number} determinant of a\\n */\\n\\nfunction determinant(a) {\\n  return a[0] * a[3] - a[1] * a[2];\\n}\\n/**\\n * Multiplies two mat2d's\\n *\\n * @param {mat2d} out the receiving matrix\\n * @param {ReadonlyMat2d} a the first operand\\n * @param {ReadonlyMat2d} b the second operand\\n * @returns {mat2d} out\\n */\\n\\nfunction multiply(out, a, b) {\\n  var a0 = a[0],\\n      a1 = a[1],\\n      a2 = a[2],\\n      a3 = a[3],\\n      a4 = a[4],\\n      a5 = a[5];\\n  var b0 = b[0],\\n      b1 = b[1],\\n      b2 = b[2],\\n      b3 = b[3],\\n      b4 = b[4],\\n      b5 = b[5];\\n  out[0] = a0 * b0 + a2 * b1;\\n  out[1] = a1 * b0 + a3 * b1;\\n  out[2] = a0 * b2 + a2 * b3;\\n  out[3] = a1 * b2 + a3 * b3;\\n  out[4] = a0 * b4 + a2 * b5 + a4;\\n  out[5] = a1 * b4 + a3 * b5 + a5;\\n  return out;\\n}\\n/**\\n * Rotates a mat2d by the given angle\\n *\\n * @param {mat2d} out the receiving matrix\\n * @param {ReadonlyMat2d} a the matrix to rotate\\n * @param {Number} rad the angle to rotate the matrix by\\n * @returns {mat2d} out\\n */\\n\\nfunction rotate(out, a, rad) {\\n  var a0 = a[0],\\n      a1 = a[1],\\n      a2 = a[2],\\n      a3 = a[3],\\n      a4 = a[4],\\n      a5 = a[5];\\n  var s = Math.sin(rad);\\n  var c = Math.cos(rad);\\n  out[0] = a0 * c + a2 * s;\\n  out[1] = a1 * c + a3 * s;\\n  out[2] = a0 * -s + a2 * c;\\n  out[3] = a1 * -s + a3 * c;\\n  out[4] = a4;\\n  out[5] = a5;\\n  return out;\\n}\\n/**\\n * Scales the mat2d by the dimensions in the given vec2\\n *\\n * @param {mat2d} out the receiving matrix\\n * @param {ReadonlyMat2d} a the matrix to translate\\n * @param {ReadonlyVec2} v the vec2 to scale the matrix by\\n * @returns {mat2d} out\\n **/\\n\\nfunction scale(out, a, v) {\\n  var a0 = a[0],\\n      a1 = a[1],\\n      a2 = a[2],\\n      a3 = a[3],\\n      a4 = a[4],\\n      a5 = a[5];\\n  var v0 = v[0],\\n      v1 = v[1];\\n  out[0] = a0 * v0;\\n  out[1] = a1 * v0;\\n  out[2] = a2 * v1;\\n  out[3] = a3 * v1;\\n  out[4] = a4;\\n  out[5] = a5;\\n  return out;\\n}\\n/**\\n * Translates the mat2d by the dimensions in the given vec2\\n *\\n * @param {mat2d} out the receiving matrix\\n * @param {ReadonlyMat2d} a the matrix to translate\\n * @param {ReadonlyVec2} v the vec2 to translate the matrix by\\n * @returns {mat2d} out\\n **/\\n\\nfunction translate(out, a, v) {\\n  var a0 = a[0],\\n      a1 = a[1],\\n      a2 = a[2],\\n      a3 = a[3],\\n      a4 = a[4],\\n      a5 = a[5];\\n  var v0 = v[0],\\n      v1 = v[1];\\n  out[0] = a0;\\n  out[1] = a1;\\n  out[2] = a2;\\n  out[3] = a3;\\n  out[4] = a0 * v0 + a2 * v1 + a4;\\n  out[5] = a1 * v0 + a3 * v1 + a5;\\n  return out;\\n}\\n/**\\n * Creates a matrix from a given angle\\n * This is equivalent to (but much faster than):\\n *\\n *     mat2d.identity(dest);\\n *     mat2d.rotate(dest, dest, rad);\\n *\\n * @param {mat2d} out mat2d receiving operation result\\n * @param {Number} rad the angle to rotate the matrix by\\n * @returns {mat2d} out\\n */\\n\\nfunction fromRotation(out, rad) {\\n  var s = Math.sin(rad),\\n      c = Math.cos(rad);\\n  out[0] = c;\\n  out[1] = s;\\n  out[2] = -s;\\n  out[3] = c;\\n  out[4] = 0;\\n  out[5] = 0;\\n  return out;\\n}\\n/**\\n * Creates a matrix from a vector scaling\\n * This is equivalent to (but much faster than):\\n *\\n *     mat2d.identity(dest);\\n *     mat2d.scale(dest, dest, vec);\\n *\\n * @param {mat2d} out mat2d receiving operation result\\n * @param {ReadonlyVec2} v Scaling vector\\n * @returns {mat2d} out\\n */\\n\\nfunction fromScaling(out, v) {\\n  out[0] = v[0];\\n  out[1] = 0;\\n  out[2] = 0;\\n  out[3] = v[1];\\n  out[4] = 0;\\n  out[5] = 0;\\n  return out;\\n}\\n/**\\n * Creates a matrix from a vector translation\\n * This is equivalent to (but much faster than):\\n *\\n *     mat2d.identity(dest);\\n *     mat2d.translate(dest, dest, vec);\\n *\\n * @param {mat2d} out mat2d receiving operation result\\n * @param {ReadonlyVec2} v Translation vector\\n * @returns {mat2d} out\\n */\\n\\nfunction fromTranslation(out, v) {\\n  out[0] = 1;\\n  out[1] = 0;\\n  out[2] = 0;\\n  out[3] = 1;\\n  out[4] = v[0];\\n  out[5] = v[1];\\n  return out;\\n}\\n/**\\n * Returns a string representation of a mat2d\\n *\\n * @param {ReadonlyMat2d} a matrix to represent as a string\\n * @returns {String} string representation of the matrix\\n */\\n\\nfunction str(a) {\\n  return \\\"mat2d(\\\" + a[0] + \\\", \\\" + a[1] + \\\", \\\" + a[2] + \\\", \\\" + a[3] + \\\", \\\" + a[4] + \\\", \\\" + a[5] + \\\")\\\";\\n}\\n/**\\n * Returns Frobenius norm of a mat2d\\n *\\n * @param {ReadonlyMat2d} a the matrix to calculate Frobenius norm of\\n * @returns {Number} Frobenius norm\\n */\\n\\nfunction frob(a) {\\n  return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], 1);\\n}\\n/**\\n * Adds two mat2d's\\n *\\n * @param {mat2d} out the receiving matrix\\n * @param {ReadonlyMat2d} a the first operand\\n * @param {ReadonlyMat2d} b the second operand\\n * @returns {mat2d} out\\n */\\n\\nfunction add(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  out[3] = a[3] + b[3];\\n  out[4] = a[4] + b[4];\\n  out[5] = a[5] + b[5];\\n  return out;\\n}\\n/**\\n * Subtracts matrix b from matrix a\\n *\\n * @param {mat2d} out the receiving matrix\\n * @param {ReadonlyMat2d} a the first operand\\n * @param {ReadonlyMat2d} b the second operand\\n * @returns {mat2d} out\\n */\\n\\nfunction subtract(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  out[3] = a[3] - b[3];\\n  out[4] = a[4] - b[4];\\n  out[5] = a[5] - b[5];\\n  return out;\\n}\\n/**\\n * Multiply each element of the matrix by a scalar.\\n *\\n * @param {mat2d} out the receiving matrix\\n * @param {ReadonlyMat2d} a the matrix to scale\\n * @param {Number} b amount to scale the matrix's elements by\\n * @returns {mat2d} out\\n */\\n\\nfunction multiplyScalar(out, a, b) {\\n  out[0] = a[0] * b;\\n  out[1] = a[1] * b;\\n  out[2] = a[2] * b;\\n  out[3] = a[3] * b;\\n  out[4] = a[4] * b;\\n  out[5] = a[5] * b;\\n  return out;\\n}\\n/**\\n * Adds two mat2d's after multiplying each element of the second operand by a scalar value.\\n *\\n * @param {mat2d} out the receiving vector\\n * @param {ReadonlyMat2d} a the first operand\\n * @param {ReadonlyMat2d} b the second operand\\n * @param {Number} scale the amount to scale b's elements by before adding\\n * @returns {mat2d} out\\n */\\n\\nfunction multiplyScalarAndAdd(out, a, b, scale) {\\n  out[0] = a[0] + b[0] * scale;\\n  out[1] = a[1] + b[1] * scale;\\n  out[2] = a[2] + b[2] * scale;\\n  out[3] = a[3] + b[3] * scale;\\n  out[4] = a[4] + b[4] * scale;\\n  out[5] = a[5] + b[5] * scale;\\n  return out;\\n}\\n/**\\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\\n *\\n * @param {ReadonlyMat2d} a The first matrix.\\n * @param {ReadonlyMat2d} b The second matrix.\\n * @returns {Boolean} True if the matrices are equal, false otherwise.\\n */\\n\\nfunction exactEquals(a, b) {\\n  return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5];\\n}\\n/**\\n * Returns whether or not the matrices have approximately the same elements in the same position.\\n *\\n * @param {ReadonlyMat2d} a The first matrix.\\n * @param {ReadonlyMat2d} b The second matrix.\\n * @returns {Boolean} True if the matrices are equal, false otherwise.\\n */\\n\\nfunction equals(a, b) {\\n  var a0 = a[0],\\n      a1 = a[1],\\n      a2 = a[2],\\n      a3 = a[3],\\n      a4 = a[4],\\n      a5 = a[5];\\n  var b0 = b[0],\\n      b1 = b[1],\\n      b2 = b[2],\\n      b3 = b[3],\\n      b4 = b[4],\\n      b5 = b[5];\\n  return Math.abs(a0 - b0) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5));\\n}\\n/**\\n * Alias for {@link mat2d.multiply}\\n * @function\\n */\\n\\nvar mul = multiply;\\n/**\\n * Alias for {@link mat2d.subtract}\\n * @function\\n */\\n\\nvar sub = subtract;\\n\\n//# sourceURL=webpack://glplotter/./node_modules/gl-matrix/esm/mat2d.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/gl-matrix/esm/mat3.js\":\n/*!********************************************!*\\\n  !*** ./node_modules/gl-matrix/esm/mat3.js ***!\n  \\********************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"add\\\": function() { return /* binding */ add; },\\n/* harmony export */   \\\"adjoint\\\": function() { return /* binding */ adjoint; },\\n/* harmony export */   \\\"clone\\\": function() { return /* binding */ clone; },\\n/* harmony export */   \\\"copy\\\": function() { return /* binding */ copy; },\\n/* harmony export */   \\\"create\\\": function() { return /* binding */ create; },\\n/* harmony export */   \\\"determinant\\\": function() { return /* binding */ determinant; },\\n/* harmony export */   \\\"equals\\\": function() { return /* binding */ equals; },\\n/* harmony export */   \\\"exactEquals\\\": function() { return /* binding */ exactEquals; },\\n/* harmony export */   \\\"frob\\\": function() { return /* binding */ frob; },\\n/* harmony export */   \\\"fromMat2d\\\": function() { return /* binding */ fromMat2d; },\\n/* harmony export */   \\\"fromMat4\\\": function() { return /* binding */ fromMat4; },\\n/* harmony export */   \\\"fromQuat\\\": function() { return /* binding */ fromQuat; },\\n/* harmony export */   \\\"fromRotation\\\": function() { return /* binding */ fromRotation; },\\n/* harmony export */   \\\"fromScaling\\\": function() { return /* binding */ fromScaling; },\\n/* harmony export */   \\\"fromTranslation\\\": function() { return /* binding */ fromTranslation; },\\n/* harmony export */   \\\"fromValues\\\": function() { return /* binding */ fromValues; },\\n/* harmony export */   \\\"identity\\\": function() { return /* binding */ identity; },\\n/* harmony export */   \\\"invert\\\": function() { return /* binding */ invert; },\\n/* harmony export */   \\\"mul\\\": function() { return /* binding */ mul; },\\n/* harmony export */   \\\"multiply\\\": function() { return /* binding */ multiply; },\\n/* harmony export */   \\\"multiplyScalar\\\": function() { return /* binding */ multiplyScalar; },\\n/* harmony export */   \\\"multiplyScalarAndAdd\\\": function() { return /* binding */ multiplyScalarAndAdd; },\\n/* harmony export */   \\\"normalFromMat4\\\": function() { return /* binding */ normalFromMat4; },\\n/* harmony export */   \\\"projection\\\": function() { return /* binding */ projection; },\\n/* harmony export */   \\\"rotate\\\": function() { return /* binding */ rotate; },\\n/* harmony export */   \\\"scale\\\": function() { return /* binding */ scale; },\\n/* harmony export */   \\\"set\\\": function() { return /* binding */ set; },\\n/* harmony export */   \\\"str\\\": function() { return /* binding */ str; },\\n/* harmony export */   \\\"sub\\\": function() { return /* binding */ sub; },\\n/* harmony export */   \\\"subtract\\\": function() { return /* binding */ subtract; },\\n/* harmony export */   \\\"translate\\\": function() { return /* binding */ translate; },\\n/* harmony export */   \\\"transpose\\\": function() { return /* binding */ transpose; }\\n/* harmony export */ });\\n/* harmony import */ var _common_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common.js */ \\\"./node_modules/gl-matrix/esm/common.js\\\");\\n\\n/**\\n * 3x3 Matrix\\n * @module mat3\\n */\\n\\n/**\\n * Creates a new identity mat3\\n *\\n * @returns {mat3} a new 3x3 matrix\\n */\\n\\nfunction create() {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(9);\\n\\n  if (_common_js__WEBPACK_IMPORTED_MODULE_0__.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\\n  out[0] = 1;\\n  out[4] = 1;\\n  out[8] = 1;\\n  return out;\\n}\\n/**\\n * Copies the upper-left 3x3 values into the given mat3.\\n *\\n * @param {mat3} out the receiving 3x3 matrix\\n * @param {ReadonlyMat4} a   the source 4x4 matrix\\n * @returns {mat3} out\\n */\\n\\nfunction fromMat4(out, a) {\\n  out[0] = a[0];\\n  out[1] = a[1];\\n  out[2] = a[2];\\n  out[3] = a[4];\\n  out[4] = a[5];\\n  out[5] = a[6];\\n  out[6] = a[8];\\n  out[7] = a[9];\\n  out[8] = a[10];\\n  return out;\\n}\\n/**\\n * Creates a new mat3 initialized with values from an existing matrix\\n *\\n * @param {ReadonlyMat3} a matrix to clone\\n * @returns {mat3} a new 3x3 matrix\\n */\\n\\nfunction clone(a) {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(9);\\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  return out;\\n}\\n/**\\n * Copy the values from one mat3 to another\\n *\\n * @param {mat3} out the receiving matrix\\n * @param {ReadonlyMat3} a the source matrix\\n * @returns {mat3} 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  return out;\\n}\\n/**\\n * Create a new mat3 with the given values\\n *\\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\\n * @returns {mat3} A new mat3\\n */\\n\\nfunction fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(9);\\n  out[0] = m00;\\n  out[1] = m01;\\n  out[2] = m02;\\n  out[3] = m10;\\n  out[4] = m11;\\n  out[5] = m12;\\n  out[6] = m20;\\n  out[7] = m21;\\n  out[8] = m22;\\n  return out;\\n}\\n/**\\n * Set the components of a mat3 to the given values\\n *\\n * @param {mat3} out the receiving matrix\\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\\n * @returns {mat3} out\\n */\\n\\nfunction set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {\\n  out[0] = m00;\\n  out[1] = m01;\\n  out[2] = m02;\\n  out[3] = m10;\\n  out[4] = m11;\\n  out[5] = m12;\\n  out[6] = m20;\\n  out[7] = m21;\\n  out[8] = m22;\\n  return out;\\n}\\n/**\\n * Set a mat3 to the identity matrix\\n *\\n * @param {mat3} out the receiving matrix\\n * @returns {mat3} out\\n */\\n\\nfunction identity(out) {\\n  out[0] = 1;\\n  out[1] = 0;\\n  out[2] = 0;\\n  out[3] = 0;\\n  out[4] = 1;\\n  out[5] = 0;\\n  out[6] = 0;\\n  out[7] = 0;\\n  out[8] = 1;\\n  return out;\\n}\\n/**\\n * Transpose the values of a mat3\\n *\\n * @param {mat3} out the receiving matrix\\n * @param {ReadonlyMat3} a the source matrix\\n * @returns {mat3} out\\n */\\n\\nfunction transpose(out, a) {\\n  // If we are transposing ourselves we can skip a few steps but have to cache some values\\n  if (out === a) {\\n    var a01 = a[1],\\n        a02 = a[2],\\n        a12 = a[5];\\n    out[1] = a[3];\\n    out[2] = a[6];\\n    out[3] = a01;\\n    out[5] = a[7];\\n    out[6] = a02;\\n    out[7] = a12;\\n  } else {\\n    out[0] = a[0];\\n    out[1] = a[3];\\n    out[2] = a[6];\\n    out[3] = a[1];\\n    out[4] = a[4];\\n    out[5] = a[7];\\n    out[6] = a[2];\\n    out[7] = a[5];\\n    out[8] = a[8];\\n  }\\n\\n  return out;\\n}\\n/**\\n * Inverts a mat3\\n *\\n * @param {mat3} out the receiving matrix\\n * @param {ReadonlyMat3} a the source matrix\\n * @returns {mat3} out\\n */\\n\\nfunction invert(out, a) {\\n  var a00 = a[0],\\n      a01 = a[1],\\n      a02 = a[2];\\n  var a10 = a[3],\\n      a11 = a[4],\\n      a12 = a[5];\\n  var a20 = a[6],\\n      a21 = a[7],\\n      a22 = a[8];\\n  var b01 = a22 * a11 - a12 * a21;\\n  var b11 = -a22 * a10 + a12 * a20;\\n  var b21 = a21 * a10 - a11 * a20; // Calculate the determinant\\n\\n  var det = a00 * b01 + a01 * b11 + a02 * b21;\\n\\n  if (!det) {\\n    return null;\\n  }\\n\\n  det = 1.0 / det;\\n  out[0] = b01 * det;\\n  out[1] = (-a22 * a01 + a02 * a21) * det;\\n  out[2] = (a12 * a01 - a02 * a11) * det;\\n  out[3] = b11 * det;\\n  out[4] = (a22 * a00 - a02 * a20) * det;\\n  out[5] = (-a12 * a00 + a02 * a10) * det;\\n  out[6] = b21 * det;\\n  out[7] = (-a21 * a00 + a01 * a20) * det;\\n  out[8] = (a11 * a00 - a01 * a10) * det;\\n  return out;\\n}\\n/**\\n * Calculates the adjugate of a mat3\\n *\\n * @param {mat3} out the receiving matrix\\n * @param {ReadonlyMat3} a the source matrix\\n * @returns {mat3} out\\n */\\n\\nfunction adjoint(out, a) {\\n  var a00 = a[0],\\n      a01 = a[1],\\n      a02 = a[2];\\n  var a10 = a[3],\\n      a11 = a[4],\\n      a12 = a[5];\\n  var a20 = a[6],\\n      a21 = a[7],\\n      a22 = a[8];\\n  out[0] = a11 * a22 - a12 * a21;\\n  out[1] = a02 * a21 - a01 * a22;\\n  out[2] = a01 * a12 - a02 * a11;\\n  out[3] = a12 * a20 - a10 * a22;\\n  out[4] = a00 * a22 - a02 * a20;\\n  out[5] = a02 * a10 - a00 * a12;\\n  out[6] = a10 * a21 - a11 * a20;\\n  out[7] = a01 * a20 - a00 * a21;\\n  out[8] = a00 * a11 - a01 * a10;\\n  return out;\\n}\\n/**\\n * Calculates the determinant of a mat3\\n *\\n * @param {ReadonlyMat3} a the source matrix\\n * @returns {Number} determinant of a\\n */\\n\\nfunction determinant(a) {\\n  var a00 = a[0],\\n      a01 = a[1],\\n      a02 = a[2];\\n  var a10 = a[3],\\n      a11 = a[4],\\n      a12 = a[5];\\n  var a20 = a[6],\\n      a21 = a[7],\\n      a22 = a[8];\\n  return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\\n}\\n/**\\n * Multiplies two mat3's\\n *\\n * @param {mat3} out the receiving matrix\\n * @param {ReadonlyMat3} a the first operand\\n * @param {ReadonlyMat3} b the second operand\\n * @returns {mat3} out\\n */\\n\\nfunction multiply(out, a, b) {\\n  var a00 = a[0],\\n      a01 = a[1],\\n      a02 = a[2];\\n  var a10 = a[3],\\n      a11 = a[4],\\n      a12 = a[5];\\n  var a20 = a[6],\\n      a21 = a[7],\\n      a22 = a[8];\\n  var b00 = b[0],\\n      b01 = b[1],\\n      b02 = b[2];\\n  var b10 = b[3],\\n      b11 = b[4],\\n      b12 = b[5];\\n  var b20 = b[6],\\n      b21 = b[7],\\n      b22 = b[8];\\n  out[0] = b00 * a00 + b01 * a10 + b02 * a20;\\n  out[1] = b00 * a01 + b01 * a11 + b02 * a21;\\n  out[2] = b00 * a02 + b01 * a12 + b02 * a22;\\n  out[3] = b10 * a00 + b11 * a10 + b12 * a20;\\n  out[4] = b10 * a01 + b11 * a11 + b12 * a21;\\n  out[5] = b10 * a02 + b11 * a12 + b12 * a22;\\n  out[6] = b20 * a00 + b21 * a10 + b22 * a20;\\n  out[7] = b20 * a01 + b21 * a11 + b22 * a21;\\n  out[8] = b20 * a02 + b21 * a12 + b22 * a22;\\n  return out;\\n}\\n/**\\n * Translate a mat3 by the given vector\\n *\\n * @param {mat3} out the receiving matrix\\n * @param {ReadonlyMat3} a the matrix to translate\\n * @param {ReadonlyVec2} v vector to translate by\\n * @returns {mat3} out\\n */\\n\\nfunction translate(out, a, v) {\\n  var a00 = a[0],\\n      a01 = a[1],\\n      a02 = a[2],\\n      a10 = a[3],\\n      a11 = a[4],\\n      a12 = a[5],\\n      a20 = a[6],\\n      a21 = a[7],\\n      a22 = a[8],\\n      x = v[0],\\n      y = v[1];\\n  out[0] = a00;\\n  out[1] = a01;\\n  out[2] = a02;\\n  out[3] = a10;\\n  out[4] = a11;\\n  out[5] = a12;\\n  out[6] = x * a00 + y * a10 + a20;\\n  out[7] = x * a01 + y * a11 + a21;\\n  out[8] = x * a02 + y * a12 + a22;\\n  return out;\\n}\\n/**\\n * Rotates a mat3 by the given angle\\n *\\n * @param {mat3} out the receiving matrix\\n * @param {ReadonlyMat3} a the matrix to rotate\\n * @param {Number} rad the angle to rotate the matrix by\\n * @returns {mat3} out\\n */\\n\\nfunction rotate(out, a, rad) {\\n  var a00 = a[0],\\n      a01 = a[1],\\n      a02 = a[2],\\n      a10 = a[3],\\n      a11 = a[4],\\n      a12 = a[5],\\n      a20 = a[6],\\n      a21 = a[7],\\n      a22 = a[8],\\n      s = Math.sin(rad),\\n      c = Math.cos(rad);\\n  out[0] = c * a00 + s * a10;\\n  out[1] = c * a01 + s * a11;\\n  out[2] = c * a02 + s * a12;\\n  out[3] = c * a10 - s * a00;\\n  out[4] = c * a11 - s * a01;\\n  out[5] = c * a12 - s * a02;\\n  out[6] = a20;\\n  out[7] = a21;\\n  out[8] = a22;\\n  return out;\\n}\\n/**\\n * Scales the mat3 by the dimensions in the given vec2\\n *\\n * @param {mat3} out the receiving matrix\\n * @param {ReadonlyMat3} a the matrix to rotate\\n * @param {ReadonlyVec2} v the vec2 to scale the matrix by\\n * @returns {mat3} out\\n **/\\n\\nfunction scale(out, a, v) {\\n  var x = v[0],\\n      y = v[1];\\n  out[0] = x * a[0];\\n  out[1] = x * a[1];\\n  out[2] = x * a[2];\\n  out[3] = y * a[3];\\n  out[4] = y * a[4];\\n  out[5] = y * a[5];\\n  out[6] = a[6];\\n  out[7] = a[7];\\n  out[8] = a[8];\\n  return out;\\n}\\n/**\\n * Creates a matrix from a vector translation\\n * This is equivalent to (but much faster than):\\n *\\n *     mat3.identity(dest);\\n *     mat3.translate(dest, dest, vec);\\n *\\n * @param {mat3} out mat3 receiving operation result\\n * @param {ReadonlyVec2} v Translation vector\\n * @returns {mat3} out\\n */\\n\\nfunction fromTranslation(out, v) {\\n  out[0] = 1;\\n  out[1] = 0;\\n  out[2] = 0;\\n  out[3] = 0;\\n  out[4] = 1;\\n  out[5] = 0;\\n  out[6] = v[0];\\n  out[7] = v[1];\\n  out[8] = 1;\\n  return out;\\n}\\n/**\\n * Creates a matrix from a given angle\\n * This is equivalent to (but much faster than):\\n *\\n *     mat3.identity(dest);\\n *     mat3.rotate(dest, dest, rad);\\n *\\n * @param {mat3} out mat3 receiving operation result\\n * @param {Number} rad the angle to rotate the matrix by\\n * @returns {mat3} out\\n */\\n\\nfunction fromRotation(out, rad) {\\n  var s = Math.sin(rad),\\n      c = Math.cos(rad);\\n  out[0] = c;\\n  out[1] = s;\\n  out[2] = 0;\\n  out[3] = -s;\\n  out[4] = c;\\n  out[5] = 0;\\n  out[6] = 0;\\n  out[7] = 0;\\n  out[8] = 1;\\n  return out;\\n}\\n/**\\n * Creates a matrix from a vector scaling\\n * This is equivalent to (but much faster than):\\n *\\n *     mat3.identity(dest);\\n *     mat3.scale(dest, dest, vec);\\n *\\n * @param {mat3} out mat3 receiving operation result\\n * @param {ReadonlyVec2} v Scaling vector\\n * @returns {mat3} out\\n */\\n\\nfunction fromScaling(out, v) {\\n  out[0] = v[0];\\n  out[1] = 0;\\n  out[2] = 0;\\n  out[3] = 0;\\n  out[4] = v[1];\\n  out[5] = 0;\\n  out[6] = 0;\\n  out[7] = 0;\\n  out[8] = 1;\\n  return out;\\n}\\n/**\\n * Copies the values from a mat2d into a mat3\\n *\\n * @param {mat3} out the receiving matrix\\n * @param {ReadonlyMat2d} a the matrix to copy\\n * @returns {mat3} out\\n **/\\n\\nfunction fromMat2d(out, a) {\\n  out[0] = a[0];\\n  out[1] = a[1];\\n  out[2] = 0;\\n  out[3] = a[2];\\n  out[4] = a[3];\\n  out[5] = 0;\\n  out[6] = a[4];\\n  out[7] = a[5];\\n  out[8] = 1;\\n  return out;\\n}\\n/**\\n * Calculates a 3x3 matrix from the given quaternion\\n *\\n * @param {mat3} out mat3 receiving operation result\\n * @param {ReadonlyQuat} q Quaternion to create matrix from\\n *\\n * @returns {mat3} out\\n */\\n\\nfunction fromQuat(out, q) {\\n  var x = q[0],\\n      y = q[1],\\n      z = q[2],\\n      w = q[3];\\n  var x2 = x + x;\\n  var y2 = y + y;\\n  var z2 = z + z;\\n  var xx = x * x2;\\n  var yx = y * x2;\\n  var yy = y * y2;\\n  var zx = z * x2;\\n  var zy = z * y2;\\n  var zz = z * z2;\\n  var wx = w * x2;\\n  var wy = w * y2;\\n  var wz = w * z2;\\n  out[0] = 1 - yy - zz;\\n  out[3] = yx - wz;\\n  out[6] = zx + wy;\\n  out[1] = yx + wz;\\n  out[4] = 1 - xx - zz;\\n  out[7] = zy - wx;\\n  out[2] = zx - wy;\\n  out[5] = zy + wx;\\n  out[8] = 1 - xx - yy;\\n  return out;\\n}\\n/**\\n * Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\\n *\\n * @param {mat3} out mat3 receiving operation result\\n * @param {ReadonlyMat4} a Mat4 to derive the normal matrix from\\n *\\n * @returns {mat3} out\\n */\\n\\nfunction normalFromMat4(out, a) {\\n  var a00 = a[0],\\n      a01 = a[1],\\n      a02 = a[2],\\n      a03 = a[3];\\n  var a10 = a[4],\\n      a11 = a[5],\\n      a12 = a[6],\\n      a13 = a[7];\\n  var a20 = a[8],\\n      a21 = a[9],\\n      a22 = a[10],\\n      a23 = a[11];\\n  var a30 = a[12],\\n      a31 = a[13],\\n      a32 = a[14],\\n      a33 = a[15];\\n  var b00 = a00 * a11 - a01 * a10;\\n  var b01 = a00 * a12 - a02 * a10;\\n  var b02 = a00 * a13 - a03 * a10;\\n  var b03 = a01 * a12 - a02 * a11;\\n  var b04 = a01 * a13 - a03 * a11;\\n  var b05 = a02 * a13 - a03 * a12;\\n  var b06 = a20 * a31 - a21 * a30;\\n  var b07 = a20 * a32 - a22 * a30;\\n  var b08 = a20 * a33 - a23 * a30;\\n  var b09 = a21 * a32 - a22 * a31;\\n  var b10 = a21 * a33 - a23 * a31;\\n  var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\\n\\n  var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\\n\\n  if (!det) {\\n    return null;\\n  }\\n\\n  det = 1.0 / det;\\n  out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\\n  out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\\n  out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\\n  out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\\n  out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\\n  out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\\n  out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\\n  out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\\n  out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\\n  return out;\\n}\\n/**\\n * Generates a 2D projection matrix with the given bounds\\n *\\n * @param {mat3} out mat3 frustum matrix will be written into\\n * @param {number} width Width of your gl context\\n * @param {number} height Height of gl context\\n * @returns {mat3} out\\n */\\n\\nfunction projection(out, width, height) {\\n  out[0] = 2 / width;\\n  out[1] = 0;\\n  out[2] = 0;\\n  out[3] = 0;\\n  out[4] = -2 / height;\\n  out[5] = 0;\\n  out[6] = -1;\\n  out[7] = 1;\\n  out[8] = 1;\\n  return out;\\n}\\n/**\\n * Returns a string representation of a mat3\\n *\\n * @param {ReadonlyMat3} a matrix to represent as a string\\n * @returns {String} string representation of the matrix\\n */\\n\\nfunction str(a) {\\n  return \\\"mat3(\\\" + a[0] + \\\", \\\" + a[1] + \\\", \\\" + a[2] + \\\", \\\" + a[3] + \\\", \\\" + a[4] + \\\", \\\" + a[5] + \\\", \\\" + a[6] + \\\", \\\" + a[7] + \\\", \\\" + a[8] + \\\")\\\";\\n}\\n/**\\n * Returns Frobenius norm of a mat3\\n *\\n * @param {ReadonlyMat3} a the matrix to calculate Frobenius norm of\\n * @returns {Number} Frobenius norm\\n */\\n\\nfunction frob(a) {\\n  return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);\\n}\\n/**\\n * Adds two mat3's\\n *\\n * @param {mat3} out the receiving matrix\\n * @param {ReadonlyMat3} a the first operand\\n * @param {ReadonlyMat3} b the second operand\\n * @returns {mat3} out\\n */\\n\\nfunction add(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  out[3] = a[3] + b[3];\\n  out[4] = a[4] + b[4];\\n  out[5] = a[5] + b[5];\\n  out[6] = a[6] + b[6];\\n  out[7] = a[7] + b[7];\\n  out[8] = a[8] + b[8];\\n  return out;\\n}\\n/**\\n * Subtracts matrix b from matrix a\\n *\\n * @param {mat3} out the receiving matrix\\n * @param {ReadonlyMat3} a the first operand\\n * @param {ReadonlyMat3} b the second operand\\n * @returns {mat3} out\\n */\\n\\nfunction subtract(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  out[3] = a[3] - b[3];\\n  out[4] = a[4] - b[4];\\n  out[5] = a[5] - b[5];\\n  out[6] = a[6] - b[6];\\n  out[7] = a[7] - b[7];\\n  out[8] = a[8] - b[8];\\n  return out;\\n}\\n/**\\n * Multiply each element of the matrix by a scalar.\\n *\\n * @param {mat3} out the receiving matrix\\n * @param {ReadonlyMat3} a the matrix to scale\\n * @param {Number} b amount to scale the matrix's elements by\\n * @returns {mat3} out\\n */\\n\\nfunction multiplyScalar(out, a, b) {\\n  out[0] = a[0] * b;\\n  out[1] = a[1] * b;\\n  out[2] = a[2] * b;\\n  out[3] = a[3] * b;\\n  out[4] = a[4] * b;\\n  out[5] = a[5] * b;\\n  out[6] = a[6] * b;\\n  out[7] = a[7] * b;\\n  out[8] = a[8] * b;\\n  return out;\\n}\\n/**\\n * Adds two mat3's after multiplying each element of the second operand by a scalar value.\\n *\\n * @param {mat3} out the receiving vector\\n * @param {ReadonlyMat3} a the first operand\\n * @param {ReadonlyMat3} b the second operand\\n * @param {Number} scale the amount to scale b's elements by before adding\\n * @returns {mat3} out\\n */\\n\\nfunction multiplyScalarAndAdd(out, a, b, scale) {\\n  out[0] = a[0] + b[0] * scale;\\n  out[1] = a[1] + b[1] * scale;\\n  out[2] = a[2] + b[2] * scale;\\n  out[3] = a[3] + b[3] * scale;\\n  out[4] = a[4] + b[4] * scale;\\n  out[5] = a[5] + b[5] * scale;\\n  out[6] = a[6] + b[6] * scale;\\n  out[7] = a[7] + b[7] * scale;\\n  out[8] = a[8] + b[8] * scale;\\n  return out;\\n}\\n/**\\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\\n *\\n * @param {ReadonlyMat3} a The first matrix.\\n * @param {ReadonlyMat3} b The second matrix.\\n * @returns {Boolean} True if the matrices are equal, false otherwise.\\n */\\n\\nfunction exactEquals(a, b) {\\n  return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8];\\n}\\n/**\\n * Returns whether or not the matrices have approximately the same elements in the same position.\\n *\\n * @param {ReadonlyMat3} a The first matrix.\\n * @param {ReadonlyMat3} b The second matrix.\\n * @returns {Boolean} True if the matrices are equal, false otherwise.\\n */\\n\\nfunction equals(a, b) {\\n  var a0 = a[0],\\n      a1 = a[1],\\n      a2 = a[2],\\n      a3 = a[3],\\n      a4 = a[4],\\n      a5 = a[5],\\n      a6 = a[6],\\n      a7 = a[7],\\n      a8 = a[8];\\n  var b0 = b[0],\\n      b1 = b[1],\\n      b2 = b[2],\\n      b3 = b[3],\\n      b4 = b[4],\\n      b5 = b[5],\\n      b6 = b[6],\\n      b7 = b[7],\\n      b8 = b[8];\\n  return Math.abs(a0 - b0) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8));\\n}\\n/**\\n * Alias for {@link mat3.multiply}\\n * @function\\n */\\n\\nvar mul = multiply;\\n/**\\n * Alias for {@link mat3.subtract}\\n * @function\\n */\\n\\nvar sub = subtract;\\n\\n//# sourceURL=webpack://glplotter/./node_modules/gl-matrix/esm/mat3.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/gl-matrix/esm/mat4.js\":\n/*!********************************************!*\\\n  !*** ./node_modules/gl-matrix/esm/mat4.js ***!\n  \\********************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"add\\\": function() { return /* binding */ add; },\\n/* harmony export */   \\\"adjoint\\\": function() { return /* binding */ adjoint; },\\n/* harmony export */   \\\"clone\\\": function() { return /* binding */ clone; },\\n/* harmony export */   \\\"copy\\\": function() { return /* binding */ copy; },\\n/* harmony export */   \\\"create\\\": function() { return /* binding */ create; },\\n/* harmony export */   \\\"determinant\\\": function() { return /* binding */ determinant; },\\n/* harmony export */   \\\"equals\\\": function() { return /* binding */ equals; },\\n/* harmony export */   \\\"exactEquals\\\": function() { return /* binding */ exactEquals; },\\n/* harmony export */   \\\"frob\\\": function() { return /* binding */ frob; },\\n/* harmony export */   \\\"fromQuat\\\": function() { return /* binding */ fromQuat; },\\n/* harmony export */   \\\"fromQuat2\\\": function() { return /* binding */ fromQuat2; },\\n/* harmony export */   \\\"fromRotation\\\": function() { return /* binding */ fromRotation; },\\n/* harmony export */   \\\"fromRotationTranslation\\\": function() { return /* binding */ fromRotationTranslation; },\\n/* harmony export */   \\\"fromRotationTranslationScale\\\": function() { return /* binding */ fromRotationTranslationScale; },\\n/* harmony export */   \\\"fromRotationTranslationScaleOrigin\\\": function() { return /* binding */ fromRotationTranslationScaleOrigin; },\\n/* harmony export */   \\\"fromScaling\\\": function() { return /* binding */ fromScaling; },\\n/* harmony export */   \\\"fromTranslation\\\": function() { return /* binding */ fromTranslation; },\\n/* harmony export */   \\\"fromValues\\\": function() { return /* binding */ fromValues; },\\n/* harmony export */   \\\"fromXRotation\\\": function() { return /* binding */ fromXRotation; },\\n/* harmony export */   \\\"fromYRotation\\\": function() { return /* binding */ fromYRotation; },\\n/* harmony export */   \\\"fromZRotation\\\": function() { return /* binding */ fromZRotation; },\\n/* harmony export */   \\\"frustum\\\": function() { return /* binding */ frustum; },\\n/* harmony export */   \\\"getRotation\\\": function() { return /* binding */ getRotation; },\\n/* harmony export */   \\\"getScaling\\\": function() { return /* binding */ getScaling; },\\n/* harmony export */   \\\"getTranslation\\\": function() { return /* binding */ getTranslation; },\\n/* harmony export */   \\\"identity\\\": function() { return /* binding */ identity; },\\n/* harmony export */   \\\"invert\\\": function() { return /* binding */ invert; },\\n/* harmony export */   \\\"lookAt\\\": function() { return /* binding */ lookAt; },\\n/* harmony export */   \\\"mul\\\": function() { return /* binding */ mul; },\\n/* harmony export */   \\\"multiply\\\": function() { return /* binding */ multiply; },\\n/* harmony export */   \\\"multiplyScalar\\\": function() { return /* binding */ multiplyScalar; },\\n/* harmony export */   \\\"multiplyScalarAndAdd\\\": function() { return /* binding */ multiplyScalarAndAdd; },\\n/* harmony export */   \\\"ortho\\\": function() { return /* binding */ ortho; },\\n/* harmony export */   \\\"orthoNO\\\": function() { return /* binding */ orthoNO; },\\n/* harmony export */   \\\"orthoZO\\\": function() { return /* binding */ orthoZO; },\\n/* harmony export */   \\\"perspective\\\": function() { return /* binding */ perspective; },\\n/* harmony export */   \\\"perspectiveFromFieldOfView\\\": function() { return /* binding */ perspectiveFromFieldOfView; },\\n/* harmony export */   \\\"perspectiveNO\\\": function() { return /* binding */ perspectiveNO; },\\n/* harmony export */   \\\"perspectiveZO\\\": function() { return /* binding */ perspectiveZO; },\\n/* harmony export */   \\\"rotate\\\": function() { return /* binding */ rotate; },\\n/* harmony export */   \\\"rotateX\\\": function() { return /* binding */ rotateX; },\\n/* harmony export */   \\\"rotateY\\\": function() { return /* binding */ rotateY; },\\n/* harmony export */   \\\"rotateZ\\\": function() { return /* binding */ rotateZ; },\\n/* harmony export */   \\\"scale\\\": function() { return /* binding */ scale; },\\n/* harmony export */   \\\"set\\\": function() { return /* binding */ set; },\\n/* harmony export */   \\\"str\\\": function() { return /* binding */ str; },\\n/* harmony export */   \\\"sub\\\": function() { return /* binding */ sub; },\\n/* harmony export */   \\\"subtract\\\": function() { return /* binding */ subtract; },\\n/* harmony export */   \\\"targetTo\\\": function() { return /* binding */ targetTo; },\\n/* harmony export */   \\\"translate\\\": function() { return /* binding */ translate; },\\n/* harmony export */   \\\"transpose\\\": function() { return /* binding */ transpose; }\\n/* harmony export */ });\\n/* harmony import */ var _common_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common.js */ \\\"./node_modules/gl-matrix/esm/common.js\\\");\\n\\n/**\\n * 4x4 Matrix<br>Format: column-major, when typed out it looks like row-major<br>The matrices are being post multiplied.\\n * @module mat4\\n */\\n\\n/**\\n * Creates a new identity mat4\\n *\\n * @returns {mat4} a new 4x4 matrix\\n */\\n\\nfunction create() {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(16);\\n\\n  if (_common_js__WEBPACK_IMPORTED_MODULE_0__.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\\n  out[0] = 1;\\n  out[5] = 1;\\n  out[10] = 1;\\n  out[15] = 1;\\n  return out;\\n}\\n/**\\n * Creates a new mat4 initialized with values from an existing matrix\\n *\\n * @param {ReadonlyMat4} a matrix to clone\\n * @returns {mat4} a new 4x4 matrix\\n */\\n\\nfunction clone(a) {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(16);\\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 * Copy the values from one mat4 to another\\n *\\n * @param {mat4} out the receiving matrix\\n * @param {ReadonlyMat4} a the source matrix\\n * @returns {mat4} 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 * Create a new mat4 with the given values\\n *\\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\\n * @returns {mat4} A new mat4\\n */\\n\\nfunction fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(16);\\n  out[0] = m00;\\n  out[1] = m01;\\n  out[2] = m02;\\n  out[3] = m03;\\n  out[4] = m10;\\n  out[5] = m11;\\n  out[6] = m12;\\n  out[7] = m13;\\n  out[8] = m20;\\n  out[9] = m21;\\n  out[10] = m22;\\n  out[11] = m23;\\n  out[12] = m30;\\n  out[13] = m31;\\n  out[14] = m32;\\n  out[15] = m33;\\n  return out;\\n}\\n/**\\n * Set the components of a mat4 to the given values\\n *\\n * @param {mat4} out the receiving matrix\\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\\n * @returns {mat4} out\\n */\\n\\nfunction set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\\n  out[0] = m00;\\n  out[1] = m01;\\n  out[2] = m02;\\n  out[3] = m03;\\n  out[4] = m10;\\n  out[5] = m11;\\n  out[6] = m12;\\n  out[7] = m13;\\n  out[8] = m20;\\n  out[9] = m21;\\n  out[10] = m22;\\n  out[11] = m23;\\n  out[12] = m30;\\n  out[13] = m31;\\n  out[14] = m32;\\n  out[15] = m33;\\n  return out;\\n}\\n/**\\n * Set a mat4 to the identity matrix\\n *\\n * @param {mat4} out the receiving matrix\\n * @returns {mat4} out\\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/**\\n * Transpose the values of a mat4\\n *\\n * @param {mat4} out the receiving matrix\\n * @param {ReadonlyMat4} a the source matrix\\n * @returns {mat4} out\\n */\\n\\nfunction transpose(out, a) {\\n  // If we are transposing ourselves we can skip a few steps but have to cache some values\\n  if (out === a) {\\n    var a01 = a[1],\\n        a02 = a[2],\\n        a03 = a[3];\\n    var a12 = a[6],\\n        a13 = a[7];\\n    var a23 = a[11];\\n    out[1] = a[4];\\n    out[2] = a[8];\\n    out[3] = a[12];\\n    out[4] = a01;\\n    out[6] = a[9];\\n    out[7] = a[13];\\n    out[8] = a02;\\n    out[9] = a12;\\n    out[11] = a[14];\\n    out[12] = a03;\\n    out[13] = a13;\\n    out[14] = a23;\\n  } else {\\n    out[0] = a[0];\\n    out[1] = a[4];\\n    out[2] = a[8];\\n    out[3] = a[12];\\n    out[4] = a[1];\\n    out[5] = a[5];\\n    out[6] = a[9];\\n    out[7] = a[13];\\n    out[8] = a[2];\\n    out[9] = a[6];\\n    out[10] = a[10];\\n    out[11] = a[14];\\n    out[12] = a[3];\\n    out[13] = a[7];\\n    out[14] = a[11];\\n    out[15] = a[15];\\n  }\\n\\n  return out;\\n}\\n/**\\n * Inverts a mat4\\n *\\n * @param {mat4} out the receiving matrix\\n * @param {ReadonlyMat4} a the source matrix\\n * @returns {mat4} out\\n */\\n\\nfunction invert(out, a) {\\n  var a00 = a[0],\\n      a01 = a[1],\\n      a02 = a[2],\\n      a03 = a[3];\\n  var a10 = a[4],\\n      a11 = a[5],\\n      a12 = a[6],\\n      a13 = a[7];\\n  var a20 = a[8],\\n      a21 = a[9],\\n      a22 = a[10],\\n      a23 = a[11];\\n  var a30 = a[12],\\n      a31 = a[13],\\n      a32 = a[14],\\n      a33 = a[15];\\n  var b00 = a00 * a11 - a01 * a10;\\n  var b01 = a00 * a12 - a02 * a10;\\n  var b02 = a00 * a13 - a03 * a10;\\n  var b03 = a01 * a12 - a02 * a11;\\n  var b04 = a01 * a13 - a03 * a11;\\n  var b05 = a02 * a13 - a03 * a12;\\n  var b06 = a20 * a31 - a21 * a30;\\n  var b07 = a20 * a32 - a22 * a30;\\n  var b08 = a20 * a33 - a23 * a30;\\n  var b09 = a21 * a32 - a22 * a31;\\n  var b10 = a21 * a33 - a23 * a31;\\n  var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\\n\\n  var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\\n\\n  if (!det) {\\n    return null;\\n  }\\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 * Calculates the adjugate of a mat4\\n *\\n * @param {mat4} out the receiving matrix\\n * @param {ReadonlyMat4} a the source matrix\\n * @returns {mat4} out\\n */\\n\\nfunction adjoint(out, a) {\\n  var a00 = a[0],\\n      a01 = a[1],\\n      a02 = a[2],\\n      a03 = a[3];\\n  var a10 = a[4],\\n      a11 = a[5],\\n      a12 = a[6],\\n      a13 = a[7];\\n  var a20 = a[8],\\n      a21 = a[9],\\n      a22 = a[10],\\n      a23 = a[11];\\n  var a30 = a[12],\\n      a31 = a[13],\\n      a32 = a[14],\\n      a33 = a[15];\\n  out[0] = a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22);\\n  out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\\n  out[2] = a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12);\\n  out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\\n  out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\\n  out[5] = a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22);\\n  out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\\n  out[7] = a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12);\\n  out[8] = a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21);\\n  out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\\n  out[10] = a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11);\\n  out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\\n  out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\\n  out[13] = a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21);\\n  out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\\n  out[15] = a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11);\\n  return out;\\n}\\n/**\\n * Calculates the determinant of a mat4\\n *\\n * @param {ReadonlyMat4} a the source matrix\\n * @returns {Number} determinant of a\\n */\\n\\nfunction determinant(a) {\\n  var a00 = a[0],\\n      a01 = a[1],\\n      a02 = a[2],\\n      a03 = a[3];\\n  var a10 = a[4],\\n      a11 = a[5],\\n      a12 = a[6],\\n      a13 = a[7];\\n  var a20 = a[8],\\n      a21 = a[9],\\n      a22 = a[10],\\n      a23 = a[11];\\n  var a30 = a[12],\\n      a31 = a[13],\\n      a32 = a[14],\\n      a33 = a[15];\\n  var b00 = a00 * a11 - a01 * a10;\\n  var b01 = a00 * a12 - a02 * a10;\\n  var b02 = a00 * a13 - a03 * a10;\\n  var b03 = a01 * a12 - a02 * a11;\\n  var b04 = a01 * a13 - a03 * a11;\\n  var b05 = a02 * a13 - a03 * a12;\\n  var b06 = a20 * a31 - a21 * a30;\\n  var b07 = a20 * a32 - a22 * a30;\\n  var b08 = a20 * a33 - a23 * a30;\\n  var b09 = a21 * a32 - a22 * a31;\\n  var b10 = a21 * a33 - a23 * a31;\\n  var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\\n\\n  return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\\n}\\n/**\\n * Multiplies two mat4s\\n *\\n * @param {mat4} out the receiving matrix\\n * @param {ReadonlyMat4} a the first operand\\n * @param {ReadonlyMat4} b the second operand\\n * @returns {mat4} out\\n */\\n\\nfunction multiply(out, a, b) {\\n  var a00 = a[0],\\n      a01 = a[1],\\n      a02 = a[2],\\n      a03 = a[3];\\n  var a10 = a[4],\\n      a11 = a[5],\\n      a12 = a[6],\\n      a13 = a[7];\\n  var a20 = a[8],\\n      a21 = a[9],\\n      a22 = a[10],\\n      a23 = a[11];\\n  var a30 = a[12],\\n      a31 = a[13],\\n      a32 = a[14],\\n      a33 = a[15]; // Cache only the current line of the second matrix\\n\\n  var b0 = b[0],\\n      b1 = b[1],\\n      b2 = b[2],\\n      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];\\n  b1 = b[5];\\n  b2 = b[6];\\n  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];\\n  b1 = b[9];\\n  b2 = b[10];\\n  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];\\n  b1 = b[13];\\n  b2 = b[14];\\n  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 * Translate a mat4 by the given vector\\n *\\n * @param {mat4} out the receiving matrix\\n * @param {ReadonlyMat4} a the matrix to translate\\n * @param {ReadonlyVec3} v vector to translate by\\n * @returns {mat4} out\\n */\\n\\nfunction translate(out, a, v) {\\n  var x = v[0],\\n      y = v[1],\\n      z = v[2];\\n  var a00, a01, a02, a03;\\n  var a10, a11, a12, a13;\\n  var a20, a21, a22, a23;\\n\\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];\\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    out[0] = a00;\\n    out[1] = a01;\\n    out[2] = a02;\\n    out[3] = a03;\\n    out[4] = a10;\\n    out[5] = a11;\\n    out[6] = a12;\\n    out[7] = a13;\\n    out[8] = a20;\\n    out[9] = a21;\\n    out[10] = a22;\\n    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\\n  return out;\\n}\\n/**\\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\\n *\\n * @param {mat4} out the receiving matrix\\n * @param {ReadonlyMat4} a the matrix to scale\\n * @param {ReadonlyVec3} v the vec3 to scale the matrix by\\n * @returns {mat4} out\\n **/\\n\\nfunction scale(out, a, v) {\\n  var x = v[0],\\n      y = v[1],\\n      z = v[2];\\n  out[0] = a[0] * x;\\n  out[1] = a[1] * x;\\n  out[2] = a[2] * x;\\n  out[3] = a[3] * x;\\n  out[4] = a[4] * y;\\n  out[5] = a[5] * y;\\n  out[6] = a[6] * y;\\n  out[7] = a[7] * y;\\n  out[8] = a[8] * z;\\n  out[9] = a[9] * z;\\n  out[10] = a[10] * z;\\n  out[11] = a[11] * z;\\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 * Rotates a mat4 by the given angle around the given axis\\n *\\n * @param {mat4} out the receiving matrix\\n * @param {ReadonlyMat4} a the matrix to rotate\\n * @param {Number} rad the angle to rotate the matrix by\\n * @param {ReadonlyVec3} axis the axis to rotate around\\n * @returns {mat4} out\\n */\\n\\nfunction rotate(out, a, rad, axis) {\\n  var x = axis[0],\\n      y = axis[1],\\n      z = axis[2];\\n  var len = Math.hypot(x, y, z);\\n  var s, c, t;\\n  var a00, a01, a02, a03;\\n  var a10, a11, a12, a13;\\n  var a20, a21, a22, a23;\\n  var b00, b01, b02;\\n  var b10, b11, b12;\\n  var b20, b21, b22;\\n\\n  if (len < _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON) {\\n    return null;\\n  }\\n\\n  len = 1 / len;\\n  x *= len;\\n  y *= len;\\n  z *= len;\\n  s = Math.sin(rad);\\n  c = Math.cos(rad);\\n  t = 1 - c;\\n  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]; // Construct the elements of the rotation matrix\\n\\n  b00 = x * x * t + c;\\n  b01 = y * x * t + z * s;\\n  b02 = z * x * t - y * s;\\n  b10 = x * y * t - z * s;\\n  b11 = y * y * t + c;\\n  b12 = z * y * t + x * s;\\n  b20 = x * z * t + y * s;\\n  b21 = y * z * t - x * s;\\n  b22 = z * z * t + c; // Perform rotation-specific matrix multiplication\\n\\n  out[0] = a00 * b00 + a10 * b01 + a20 * b02;\\n  out[1] = a01 * b00 + a11 * b01 + a21 * b02;\\n  out[2] = a02 * b00 + a12 * b01 + a22 * b02;\\n  out[3] = a03 * b00 + a13 * b01 + a23 * b02;\\n  out[4] = a00 * b10 + a10 * b11 + a20 * b12;\\n  out[5] = a01 * b10 + a11 * b11 + a21 * b12;\\n  out[6] = a02 * b10 + a12 * b11 + a22 * b12;\\n  out[7] = a03 * b10 + a13 * b11 + a23 * b12;\\n  out[8] = a00 * b20 + a10 * b21 + a20 * b22;\\n  out[9] = a01 * b20 + a11 * b21 + a21 * b22;\\n  out[10] = a02 * b20 + a12 * b21 + a22 * b22;\\n  out[11] = a03 * b20 + a13 * b21 + a23 * b22;\\n\\n  if (a !== out) {\\n    // If the source and destination differ, copy the unchanged last row\\n    out[12] = a[12];\\n    out[13] = a[13];\\n    out[14] = a[14];\\n    out[15] = a[15];\\n  }\\n\\n  return out;\\n}\\n/**\\n * Rotates a matrix by the given angle around the X axis\\n *\\n * @param {mat4} out the receiving matrix\\n * @param {ReadonlyMat4} a the matrix to rotate\\n * @param {Number} rad the angle to rotate the matrix by\\n * @returns {mat4} out\\n */\\n\\nfunction rotateX(out, a, rad) {\\n  var s = Math.sin(rad);\\n  var c = Math.cos(rad);\\n  var a10 = a[4];\\n  var a11 = a[5];\\n  var a12 = a[6];\\n  var a13 = a[7];\\n  var a20 = a[8];\\n  var a21 = a[9];\\n  var a22 = a[10];\\n  var a23 = a[11];\\n\\n  if (a !== out) {\\n    // If the source and destination differ, copy the unchanged rows\\n    out[0] = a[0];\\n    out[1] = a[1];\\n    out[2] = a[2];\\n    out[3] = a[3];\\n    out[12] = a[12];\\n    out[13] = a[13];\\n    out[14] = a[14];\\n    out[15] = a[15];\\n  } // Perform axis-specific matrix multiplication\\n\\n\\n  out[4] = a10 * c + a20 * s;\\n  out[5] = a11 * c + a21 * s;\\n  out[6] = a12 * c + a22 * s;\\n  out[7] = a13 * c + a23 * s;\\n  out[8] = a20 * c - a10 * s;\\n  out[9] = a21 * c - a11 * s;\\n  out[10] = a22 * c - a12 * s;\\n  out[11] = a23 * c - a13 * s;\\n  return out;\\n}\\n/**\\n * Rotates a matrix by the given angle around the Y axis\\n *\\n * @param {mat4} out the receiving matrix\\n * @param {ReadonlyMat4} a the matrix to rotate\\n * @param {Number} rad the angle to rotate the matrix by\\n * @returns {mat4} out\\n */\\n\\nfunction rotateY(out, a, rad) {\\n  var s = Math.sin(rad);\\n  var c = Math.cos(rad);\\n  var a00 = a[0];\\n  var a01 = a[1];\\n  var a02 = a[2];\\n  var a03 = a[3];\\n  var a20 = a[8];\\n  var a21 = a[9];\\n  var a22 = a[10];\\n  var a23 = a[11];\\n\\n  if (a !== out) {\\n    // If the source and destination differ, copy the unchanged rows\\n    out[4] = a[4];\\n    out[5] = a[5];\\n    out[6] = a[6];\\n    out[7] = a[7];\\n    out[12] = a[12];\\n    out[13] = a[13];\\n    out[14] = a[14];\\n    out[15] = a[15];\\n  } // Perform axis-specific matrix multiplication\\n\\n\\n  out[0] = a00 * c - a20 * s;\\n  out[1] = a01 * c - a21 * s;\\n  out[2] = a02 * c - a22 * s;\\n  out[3] = a03 * c - a23 * s;\\n  out[8] = a00 * s + a20 * c;\\n  out[9] = a01 * s + a21 * c;\\n  out[10] = a02 * s + a22 * c;\\n  out[11] = a03 * s + a23 * c;\\n  return out;\\n}\\n/**\\n * Rotates a matrix by the given angle around the Z axis\\n *\\n * @param {mat4} out the receiving matrix\\n * @param {ReadonlyMat4} a the matrix to rotate\\n * @param {Number} rad the angle to rotate the matrix by\\n * @returns {mat4} out\\n */\\n\\nfunction rotateZ(out, a, rad) {\\n  var s = Math.sin(rad);\\n  var c = Math.cos(rad);\\n  var a00 = a[0];\\n  var a01 = a[1];\\n  var a02 = a[2];\\n  var a03 = a[3];\\n  var a10 = a[4];\\n  var a11 = a[5];\\n  var a12 = a[6];\\n  var a13 = a[7];\\n\\n  if (a !== out) {\\n    // If the source and destination differ, copy the unchanged last row\\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  } // Perform axis-specific matrix multiplication\\n\\n\\n  out[0] = a00 * c + a10 * s;\\n  out[1] = a01 * c + a11 * s;\\n  out[2] = a02 * c + a12 * s;\\n  out[3] = a03 * c + a13 * s;\\n  out[4] = a10 * c - a00 * s;\\n  out[5] = a11 * c - a01 * s;\\n  out[6] = a12 * c - a02 * s;\\n  out[7] = a13 * c - a03 * s;\\n  return out;\\n}\\n/**\\n * Creates a matrix from a vector translation\\n * This is equivalent to (but much faster than):\\n *\\n *     mat4.identity(dest);\\n *     mat4.translate(dest, dest, vec);\\n *\\n * @param {mat4} out mat4 receiving operation result\\n * @param {ReadonlyVec3} v Translation vector\\n * @returns {mat4} out\\n */\\n\\nfunction fromTranslation(out, v) {\\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] = v[0];\\n  out[13] = v[1];\\n  out[14] = v[2];\\n  out[15] = 1;\\n  return out;\\n}\\n/**\\n * Creates a matrix from a vector scaling\\n * This is equivalent to (but much faster than):\\n *\\n *     mat4.identity(dest);\\n *     mat4.scale(dest, dest, vec);\\n *\\n * @param {mat4} out mat4 receiving operation result\\n * @param {ReadonlyVec3} v Scaling vector\\n * @returns {mat4} out\\n */\\n\\nfunction fromScaling(out, v) {\\n  out[0] = v[0];\\n  out[1] = 0;\\n  out[2] = 0;\\n  out[3] = 0;\\n  out[4] = 0;\\n  out[5] = v[1];\\n  out[6] = 0;\\n  out[7] = 0;\\n  out[8] = 0;\\n  out[9] = 0;\\n  out[10] = v[2];\\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/**\\n * Creates a matrix from a given angle around a given axis\\n * This is equivalent to (but much faster than):\\n *\\n *     mat4.identity(dest);\\n *     mat4.rotate(dest, dest, rad, axis);\\n *\\n * @param {mat4} out mat4 receiving operation result\\n * @param {Number} rad the angle to rotate the matrix by\\n * @param {ReadonlyVec3} axis the axis to rotate around\\n * @returns {mat4} out\\n */\\n\\nfunction fromRotation(out, rad, axis) {\\n  var x = axis[0],\\n      y = axis[1],\\n      z = axis[2];\\n  var len = Math.hypot(x, y, z);\\n  var s, c, t;\\n\\n  if (len < _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON) {\\n    return null;\\n  }\\n\\n  len = 1 / len;\\n  x *= len;\\n  y *= len;\\n  z *= len;\\n  s = Math.sin(rad);\\n  c = Math.cos(rad);\\n  t = 1 - c; // Perform rotation-specific matrix multiplication\\n\\n  out[0] = x * x * t + c;\\n  out[1] = y * x * t + z * s;\\n  out[2] = z * x * t - y * s;\\n  out[3] = 0;\\n  out[4] = x * y * t - z * s;\\n  out[5] = y * y * t + c;\\n  out[6] = z * y * t + x * s;\\n  out[7] = 0;\\n  out[8] = x * z * t + y * s;\\n  out[9] = y * z * t - x * s;\\n  out[10] = z * z * t + c;\\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/**\\n * Creates a matrix from the given angle around the X axis\\n * This is equivalent to (but much faster than):\\n *\\n *     mat4.identity(dest);\\n *     mat4.rotateX(dest, dest, rad);\\n *\\n * @param {mat4} out mat4 receiving operation result\\n * @param {Number} rad the angle to rotate the matrix by\\n * @returns {mat4} out\\n */\\n\\nfunction fromXRotation(out, rad) {\\n  var s = Math.sin(rad);\\n  var c = Math.cos(rad); // Perform axis-specific matrix multiplication\\n\\n  out[0] = 1;\\n  out[1] = 0;\\n  out[2] = 0;\\n  out[3] = 0;\\n  out[4] = 0;\\n  out[5] = c;\\n  out[6] = s;\\n  out[7] = 0;\\n  out[8] = 0;\\n  out[9] = -s;\\n  out[10] = c;\\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/**\\n * Creates a matrix from the given angle around the Y axis\\n * This is equivalent to (but much faster than):\\n *\\n *     mat4.identity(dest);\\n *     mat4.rotateY(dest, dest, rad);\\n *\\n * @param {mat4} out mat4 receiving operation result\\n * @param {Number} rad the angle to rotate the matrix by\\n * @returns {mat4} out\\n */\\n\\nfunction fromYRotation(out, rad) {\\n  var s = Math.sin(rad);\\n  var c = Math.cos(rad); // Perform axis-specific matrix multiplication\\n\\n  out[0] = c;\\n  out[1] = 0;\\n  out[2] = -s;\\n  out[3] = 0;\\n  out[4] = 0;\\n  out[5] = 1;\\n  out[6] = 0;\\n  out[7] = 0;\\n  out[8] = s;\\n  out[9] = 0;\\n  out[10] = c;\\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/**\\n * Creates a matrix from the given angle around the Z axis\\n * This is equivalent to (but much faster than):\\n *\\n *     mat4.identity(dest);\\n *     mat4.rotateZ(dest, dest, rad);\\n *\\n * @param {mat4} out mat4 receiving operation result\\n * @param {Number} rad the angle to rotate the matrix by\\n * @returns {mat4} out\\n */\\n\\nfunction fromZRotation(out, rad) {\\n  var s = Math.sin(rad);\\n  var c = Math.cos(rad); // Perform axis-specific matrix multiplication\\n\\n  out[0] = c;\\n  out[1] = s;\\n  out[2] = 0;\\n  out[3] = 0;\\n  out[4] = -s;\\n  out[5] = c;\\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/**\\n * Creates a matrix from a quaternion rotation and vector translation\\n * This is equivalent to (but much faster than):\\n *\\n *     mat4.identity(dest);\\n *     mat4.translate(dest, vec);\\n *     let quatMat = mat4.create();\\n *     quat4.toMat4(quat, quatMat);\\n *     mat4.multiply(dest, quatMat);\\n *\\n * @param {mat4} out mat4 receiving operation result\\n * @param {quat4} q Rotation quaternion\\n * @param {ReadonlyVec3} v Translation vector\\n * @returns {mat4} out\\n */\\n\\nfunction fromRotationTranslation(out, q, v) {\\n  // Quaternion math\\n  var x = q[0],\\n      y = q[1],\\n      z = q[2],\\n      w = q[3];\\n  var x2 = x + x;\\n  var y2 = y + y;\\n  var z2 = z + z;\\n  var xx = x * x2;\\n  var xy = x * y2;\\n  var xz = x * z2;\\n  var yy = y * y2;\\n  var yz = y * z2;\\n  var zz = z * z2;\\n  var wx = w * x2;\\n  var wy = w * y2;\\n  var 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/**\\n * Creates a new mat4 from a dual quat.\\n *\\n * @param {mat4} out Matrix\\n * @param {ReadonlyQuat2} a Dual Quaternion\\n * @returns {mat4} mat4 receiving operation result\\n */\\n\\nfunction fromQuat2(out, a) {\\n  var translation = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(3);\\n  var bx = -a[0],\\n      by = -a[1],\\n      bz = -a[2],\\n      bw = a[3],\\n      ax = a[4],\\n      ay = a[5],\\n      az = a[6],\\n      aw = a[7];\\n  var magnitude = bx * bx + by * by + bz * bz + bw * bw; //Only scale if it makes sense\\n\\n  if (magnitude > 0) {\\n    translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;\\n    translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;\\n    translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;\\n  } else {\\n    translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\\n    translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\\n    translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\\n  }\\n\\n  fromRotationTranslation(out, a, translation);\\n  return out;\\n}\\n/**\\n * Returns the translation vector component of a transformation\\n *  matrix. If a matrix is built with fromRotationTranslation,\\n *  the returned vector will be the same as the translation vector\\n *  originally supplied.\\n * @param  {vec3} out Vector to receive translation component\\n * @param  {ReadonlyMat4} mat Matrix to be decomposed (input)\\n * @return {vec3} 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/**\\n * Returns the scaling factor component of a transformation\\n *  matrix. If a matrix is built with fromRotationTranslationScale\\n *  with a normalized Quaternion paramter, the returned vector will be\\n *  the same as the scaling vector\\n *  originally supplied.\\n * @param  {vec3} out Vector to receive scaling factor component\\n * @param  {ReadonlyMat4} mat Matrix to be decomposed (input)\\n * @return {vec3} out\\n */\\n\\nfunction getScaling(out, mat) {\\n  var m11 = mat[0];\\n  var m12 = mat[1];\\n  var m13 = mat[2];\\n  var m21 = mat[4];\\n  var m22 = mat[5];\\n  var m23 = mat[6];\\n  var m31 = mat[8];\\n  var m32 = mat[9];\\n  var m33 = mat[10];\\n  out[0] = Math.hypot(m11, m12, m13);\\n  out[1] = Math.hypot(m21, m22, m23);\\n  out[2] = Math.hypot(m31, m32, m33);\\n  return out;\\n}\\n/**\\n * Returns a quaternion representing the rotational component\\n *  of a transformation matrix. If a matrix is built with\\n *  fromRotationTranslation, the returned quaternion will be the\\n *  same as the quaternion originally supplied.\\n * @param {quat} out Quaternion to receive the rotation component\\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\\n * @return {quat} out\\n */\\n\\nfunction getRotation(out, mat) {\\n  var scaling = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(3);\\n  getScaling(scaling, mat);\\n  var is1 = 1 / scaling[0];\\n  var is2 = 1 / scaling[1];\\n  var is3 = 1 / scaling[2];\\n  var sm11 = mat[0] * is1;\\n  var sm12 = mat[1] * is2;\\n  var sm13 = mat[2] * is3;\\n  var sm21 = mat[4] * is1;\\n  var sm22 = mat[5] * is2;\\n  var sm23 = mat[6] * is3;\\n  var sm31 = mat[8] * is1;\\n  var sm32 = mat[9] * is2;\\n  var sm33 = mat[10] * is3;\\n  var trace = sm11 + sm22 + sm33;\\n  var S = 0;\\n\\n  if (trace > 0) {\\n    S = Math.sqrt(trace + 1.0) * 2;\\n    out[3] = 0.25 * S;\\n    out[0] = (sm23 - sm32) / S;\\n    out[1] = (sm31 - sm13) / S;\\n    out[2] = (sm12 - sm21) / S;\\n  } else if (sm11 > sm22 && sm11 > sm33) {\\n    S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\\n    out[3] = (sm23 - sm32) / S;\\n    out[0] = 0.25 * S;\\n    out[1] = (sm12 + sm21) / S;\\n    out[2] = (sm31 + sm13) / S;\\n  } else if (sm22 > sm33) {\\n    S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\\n    out[3] = (sm31 - sm13) / S;\\n    out[0] = (sm12 + sm21) / S;\\n    out[1] = 0.25 * S;\\n    out[2] = (sm23 + sm32) / S;\\n  } else {\\n    S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\\n    out[3] = (sm12 - sm21) / S;\\n    out[0] = (sm31 + sm13) / S;\\n    out[1] = (sm23 + sm32) / S;\\n    out[2] = 0.25 * S;\\n  }\\n\\n  return out;\\n}\\n/**\\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\\n * This is equivalent to (but much faster than):\\n *\\n *     mat4.identity(dest);\\n *     mat4.translate(dest, vec);\\n *     let quatMat = mat4.create();\\n *     quat4.toMat4(quat, quatMat);\\n *     mat4.multiply(dest, quatMat);\\n *     mat4.scale(dest, scale)\\n *\\n * @param {mat4} out mat4 receiving operation result\\n * @param {quat4} q Rotation quaternion\\n * @param {ReadonlyVec3} v Translation vector\\n * @param {ReadonlyVec3} s Scaling vector\\n * @returns {mat4} out\\n */\\n\\nfunction fromRotationTranslationScale(out, q, v, s) {\\n  // Quaternion math\\n  var x = q[0],\\n      y = q[1],\\n      z = q[2],\\n      w = q[3];\\n  var x2 = x + x;\\n  var y2 = y + y;\\n  var z2 = z + z;\\n  var xx = x * x2;\\n  var xy = x * y2;\\n  var xz = x * z2;\\n  var yy = y * y2;\\n  var yz = y * z2;\\n  var zz = z * z2;\\n  var wx = w * x2;\\n  var wy = w * y2;\\n  var wz = w * z2;\\n  var sx = s[0];\\n  var sy = s[1];\\n  var sz = s[2];\\n  out[0] = (1 - (yy + zz)) * sx;\\n  out[1] = (xy + wz) * sx;\\n  out[2] = (xz - wy) * sx;\\n  out[3] = 0;\\n  out[4] = (xy - wz) * sy;\\n  out[5] = (1 - (xx + zz)) * sy;\\n  out[6] = (yz + wx) * sy;\\n  out[7] = 0;\\n  out[8] = (xz + wy) * sz;\\n  out[9] = (yz - wx) * sz;\\n  out[10] = (1 - (xx + yy)) * sz;\\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/**\\n * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\\n * This is equivalent to (but much faster than):\\n *\\n *     mat4.identity(dest);\\n *     mat4.translate(dest, vec);\\n *     mat4.translate(dest, origin);\\n *     let quatMat = mat4.create();\\n *     quat4.toMat4(quat, quatMat);\\n *     mat4.multiply(dest, quatMat);\\n *     mat4.scale(dest, scale)\\n *     mat4.translate(dest, negativeOrigin);\\n *\\n * @param {mat4} out mat4 receiving operation result\\n * @param {quat4} q Rotation quaternion\\n * @param {ReadonlyVec3} v Translation vector\\n * @param {ReadonlyVec3} s Scaling vector\\n * @param {ReadonlyVec3} o The origin vector around which to scale and rotate\\n * @returns {mat4} out\\n */\\n\\nfunction fromRotationTranslationScaleOrigin(out, q, v, s, o) {\\n  // Quaternion math\\n  var x = q[0],\\n      y = q[1],\\n      z = q[2],\\n      w = q[3];\\n  var x2 = x + x;\\n  var y2 = y + y;\\n  var z2 = z + z;\\n  var xx = x * x2;\\n  var xy = x * y2;\\n  var xz = x * z2;\\n  var yy = y * y2;\\n  var yz = y * z2;\\n  var zz = z * z2;\\n  var wx = w * x2;\\n  var wy = w * y2;\\n  var wz = w * z2;\\n  var sx = s[0];\\n  var sy = s[1];\\n  var sz = s[2];\\n  var ox = o[0];\\n  var oy = o[1];\\n  var oz = o[2];\\n  var out0 = (1 - (yy + zz)) * sx;\\n  var out1 = (xy + wz) * sx;\\n  var out2 = (xz - wy) * sx;\\n  var out4 = (xy - wz) * sy;\\n  var out5 = (1 - (xx + zz)) * sy;\\n  var out6 = (yz + wx) * sy;\\n  var out8 = (xz + wy) * sz;\\n  var out9 = (yz - wx) * sz;\\n  var out10 = (1 - (xx + yy)) * sz;\\n  out[0] = out0;\\n  out[1] = out1;\\n  out[2] = out2;\\n  out[3] = 0;\\n  out[4] = out4;\\n  out[5] = out5;\\n  out[6] = out6;\\n  out[7] = 0;\\n  out[8] = out8;\\n  out[9] = out9;\\n  out[10] = out10;\\n  out[11] = 0;\\n  out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\\n  out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\\n  out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\\n  out[15] = 1;\\n  return out;\\n}\\n/**\\n * Calculates a 4x4 matrix from the given quaternion\\n *\\n * @param {mat4} out mat4 receiving operation result\\n * @param {ReadonlyQuat} q Quaternion to create matrix from\\n *\\n * @returns {mat4} out\\n */\\n\\nfunction fromQuat(out, q) {\\n  var x = q[0],\\n      y = q[1],\\n      z = q[2],\\n      w = q[3];\\n  var x2 = x + x;\\n  var y2 = y + y;\\n  var z2 = z + z;\\n  var xx = x * x2;\\n  var yx = y * x2;\\n  var yy = y * y2;\\n  var zx = z * x2;\\n  var zy = z * y2;\\n  var zz = z * z2;\\n  var wx = w * x2;\\n  var wy = w * y2;\\n  var wz = w * z2;\\n  out[0] = 1 - yy - zz;\\n  out[1] = yx + wz;\\n  out[2] = zx - wy;\\n  out[3] = 0;\\n  out[4] = yx - wz;\\n  out[5] = 1 - xx - zz;\\n  out[6] = zy + wx;\\n  out[7] = 0;\\n  out[8] = zx + wy;\\n  out[9] = zy - wx;\\n  out[10] = 1 - xx - yy;\\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/**\\n * Generates a frustum matrix with the given bounds\\n *\\n * @param {mat4} out mat4 frustum matrix will be written into\\n * @param {Number} left Left bound of the frustum\\n * @param {Number} right Right bound of the frustum\\n * @param {Number} bottom Bottom bound of the frustum\\n * @param {Number} top Top bound of the frustum\\n * @param {Number} near Near bound of the frustum\\n * @param {Number} far Far bound of the frustum\\n * @returns {mat4} out\\n */\\n\\nfunction frustum(out, left, right, bottom, top, near, far) {\\n  var rl = 1 / (right - left);\\n  var tb = 1 / (top - bottom);\\n  var nf = 1 / (near - far);\\n  out[0] = near * 2 * rl;\\n  out[1] = 0;\\n  out[2] = 0;\\n  out[3] = 0;\\n  out[4] = 0;\\n  out[5] = near * 2 * tb;\\n  out[6] = 0;\\n  out[7] = 0;\\n  out[8] = (right + left) * rl;\\n  out[9] = (top + bottom) * tb;\\n  out[10] = (far + near) * nf;\\n  out[11] = -1;\\n  out[12] = 0;\\n  out[13] = 0;\\n  out[14] = far * near * 2 * nf;\\n  out[15] = 0;\\n  return out;\\n}\\n/**\\n * Generates a perspective projection matrix with the given bounds.\\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\\n * which matches WebGL/OpenGL's clip volume.\\n * Passing null/undefined/no value for far will generate infinite projection matrix.\\n *\\n * @param {mat4} out mat4 frustum matrix will be written into\\n * @param {number} fovy Vertical field of view in radians\\n * @param {number} aspect Aspect ratio. typically viewport width/height\\n * @param {number} near Near bound of the frustum\\n * @param {number} far Far bound of the frustum, can be null or Infinity\\n * @returns {mat4} out\\n */\\n\\nfunction perspectiveNO(out, fovy, aspect, near, far) {\\n  var f = 1.0 / Math.tan(fovy / 2),\\n      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\\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\\n  return out;\\n}\\n/**\\n * Alias for {@link mat4.perspectiveNO}\\n * @function\\n */\\n\\nvar perspective = perspectiveNO;\\n/**\\n * Generates a perspective projection matrix suitable for WebGPU with the given bounds.\\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\\n * Passing null/undefined/no value for far will generate infinite projection matrix.\\n *\\n * @param {mat4} out mat4 frustum matrix will be written into\\n * @param {number} fovy Vertical field of view in radians\\n * @param {number} aspect Aspect ratio. typically viewport width/height\\n * @param {number} near Near bound of the frustum\\n * @param {number} far Far bound of the frustum, can be null or Infinity\\n * @returns {mat4} out\\n */\\n\\nfunction perspectiveZO(out, fovy, aspect, near, far) {\\n  var f = 1.0 / Math.tan(fovy / 2),\\n      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\\n  if (far != null && far !== Infinity) {\\n    nf = 1 / (near - far);\\n    out[10] = far * nf;\\n    out[14] = far * near * nf;\\n  } else {\\n    out[10] = -1;\\n    out[14] = -near;\\n  }\\n\\n  return out;\\n}\\n/**\\n * Generates a perspective projection matrix with the given field of view.\\n * This is primarily useful for generating projection matrices to be used\\n * with the still experiemental WebVR API.\\n *\\n * @param {mat4} out mat4 frustum matrix will be written into\\n * @param {Object} fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\\n * @param {number} near Near bound of the frustum\\n * @param {number} far Far bound of the frustum\\n * @returns {mat4} out\\n */\\n\\nfunction perspectiveFromFieldOfView(out, fov, near, far) {\\n  var upTan = Math.tan(fov.upDegrees * Math.PI / 180.0);\\n  var downTan = Math.tan(fov.downDegrees * Math.PI / 180.0);\\n  var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180.0);\\n  var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180.0);\\n  var xScale = 2.0 / (leftTan + rightTan);\\n  var 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/**\\n * Generates a orthogonal projection matrix with the given bounds.\\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\\n * which matches WebGL/OpenGL's clip volume.\\n *\\n * @param {mat4} out mat4 frustum matrix will be written into\\n * @param {number} left Left bound of the frustum\\n * @param {number} right Right bound of the frustum\\n * @param {number} bottom Bottom bound of the frustum\\n * @param {number} top Top bound of the frustum\\n * @param {number} near Near bound of the frustum\\n * @param {number} far Far bound of the frustum\\n * @returns {mat4} out\\n */\\n\\nfunction orthoNO(out, left, right, bottom, top, near, far) {\\n  var lr = 1 / (left - right);\\n  var bt = 1 / (bottom - top);\\n  var 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}\\n/**\\n * Alias for {@link mat4.orthoNO}\\n * @function\\n */\\n\\nvar ortho = orthoNO;\\n/**\\n * Generates a orthogonal projection matrix with the given bounds.\\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\\n *\\n * @param {mat4} out mat4 frustum matrix will be written into\\n * @param {number} left Left bound of the frustum\\n * @param {number} right Right bound of the frustum\\n * @param {number} bottom Bottom bound of the frustum\\n * @param {number} top Top bound of the frustum\\n * @param {number} near Near bound of the frustum\\n * @param {number} far Far bound of the frustum\\n * @returns {mat4} out\\n */\\n\\nfunction orthoZO(out, left, right, bottom, top, near, far) {\\n  var lr = 1 / (left - right);\\n  var bt = 1 / (bottom - top);\\n  var 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] = nf;\\n  out[11] = 0;\\n  out[12] = (left + right) * lr;\\n  out[13] = (top + bottom) * bt;\\n  out[14] = near * nf;\\n  out[15] = 1;\\n  return out;\\n}\\n/**\\n * Generates a look-at matrix with the given eye position, focal point, and up axis.\\n * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.\\n *\\n * @param {mat4} out mat4 frustum matrix will be written into\\n * @param {ReadonlyVec3} eye Position of the viewer\\n * @param {ReadonlyVec3} center Point the viewer is looking at\\n * @param {ReadonlyVec3} up vec3 pointing up\\n * @returns {mat4} out\\n */\\n\\nfunction lookAt(out, eye, center, up) {\\n  var x0, x1, x2, y0, y1, y2, z0, z1, z2, len;\\n  var eyex = eye[0];\\n  var eyey = eye[1];\\n  var eyez = eye[2];\\n  var upx = up[0];\\n  var upy = up[1];\\n  var upz = up[2];\\n  var centerx = center[0];\\n  var centery = center[1];\\n  var centerz = center[2];\\n\\n  if (Math.abs(eyex - centerx) < _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON && Math.abs(eyey - centery) < _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON && Math.abs(eyez - centerz) < _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON) {\\n    return identity(out);\\n  }\\n\\n  z0 = eyex - centerx;\\n  z1 = eyey - centery;\\n  z2 = eyez - centerz;\\n  len = 1 / Math.hypot(z0, z1, z2);\\n  z0 *= len;\\n  z1 *= len;\\n  z2 *= len;\\n  x0 = upy * z2 - upz * z1;\\n  x1 = upz * z0 - upx * z2;\\n  x2 = upx * z1 - upy * z0;\\n  len = Math.hypot(x0, x1, x2);\\n\\n  if (!len) {\\n    x0 = 0;\\n    x1 = 0;\\n    x2 = 0;\\n  } else {\\n    len = 1 / len;\\n    x0 *= len;\\n    x1 *= len;\\n    x2 *= len;\\n  }\\n\\n  y0 = z1 * x2 - z2 * x1;\\n  y1 = z2 * x0 - z0 * x2;\\n  y2 = z0 * x1 - z1 * x0;\\n  len = Math.hypot(y0, y1, y2);\\n\\n  if (!len) {\\n    y0 = 0;\\n    y1 = 0;\\n    y2 = 0;\\n  } else {\\n    len = 1 / len;\\n    y0 *= len;\\n    y1 *= len;\\n    y2 *= len;\\n  }\\n\\n  out[0] = x0;\\n  out[1] = y0;\\n  out[2] = z0;\\n  out[3] = 0;\\n  out[4] = x1;\\n  out[5] = y1;\\n  out[6] = z1;\\n  out[7] = 0;\\n  out[8] = x2;\\n  out[9] = y2;\\n  out[10] = z2;\\n  out[11] = 0;\\n  out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\\n  out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\\n  out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\\n  out[15] = 1;\\n  return out;\\n}\\n/**\\n * Generates a matrix that makes something look at something else.\\n *\\n * @param {mat4} out mat4 frustum matrix will be written into\\n * @param {ReadonlyVec3} eye Position of the viewer\\n * @param {ReadonlyVec3} center Point the viewer is looking at\\n * @param {ReadonlyVec3} up vec3 pointing up\\n * @returns {mat4} out\\n */\\n\\nfunction targetTo(out, eye, target, up) {\\n  var eyex = eye[0],\\n      eyey = eye[1],\\n      eyez = eye[2],\\n      upx = up[0],\\n      upy = up[1],\\n      upz = up[2];\\n  var z0 = eyex - target[0],\\n      z1 = eyey - target[1],\\n      z2 = eyez - target[2];\\n  var len = z0 * z0 + z1 * z1 + z2 * z2;\\n\\n  if (len > 0) {\\n    len = 1 / Math.sqrt(len);\\n    z0 *= len;\\n    z1 *= len;\\n    z2 *= len;\\n  }\\n\\n  var x0 = upy * z2 - upz * z1,\\n      x1 = upz * z0 - upx * z2,\\n      x2 = upx * z1 - upy * z0;\\n  len = x0 * x0 + x1 * x1 + x2 * x2;\\n\\n  if (len > 0) {\\n    len = 1 / Math.sqrt(len);\\n    x0 *= len;\\n    x1 *= len;\\n    x2 *= len;\\n  }\\n\\n  out[0] = x0;\\n  out[1] = x1;\\n  out[2] = x2;\\n  out[3] = 0;\\n  out[4] = z1 * x2 - z2 * x1;\\n  out[5] = z2 * x0 - z0 * x2;\\n  out[6] = z0 * x1 - z1 * x0;\\n  out[7] = 0;\\n  out[8] = z0;\\n  out[9] = z1;\\n  out[10] = z2;\\n  out[11] = 0;\\n  out[12] = eyex;\\n  out[13] = eyey;\\n  out[14] = eyez;\\n  out[15] = 1;\\n  return out;\\n}\\n/**\\n * Returns a string representation of a mat4\\n *\\n * @param {ReadonlyMat4} a matrix to represent as a string\\n * @returns {String} string representation of the matrix\\n */\\n\\nfunction str(a) {\\n  return \\\"mat4(\\\" + a[0] + \\\", \\\" + a[1] + \\\", \\\" + a[2] + \\\", \\\" + a[3] + \\\", \\\" + a[4] + \\\", \\\" + a[5] + \\\", \\\" + a[6] + \\\", \\\" + a[7] + \\\", \\\" + a[8] + \\\", \\\" + a[9] + \\\", \\\" + a[10] + \\\", \\\" + a[11] + \\\", \\\" + a[12] + \\\", \\\" + a[13] + \\\", \\\" + a[14] + \\\", \\\" + a[15] + \\\")\\\";\\n}\\n/**\\n * Returns Frobenius norm of a mat4\\n *\\n * @param {ReadonlyMat4} a the matrix to calculate Frobenius norm of\\n * @returns {Number} Frobenius norm\\n */\\n\\nfunction frob(a) {\\n  return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]);\\n}\\n/**\\n * Adds two mat4's\\n *\\n * @param {mat4} out the receiving matrix\\n * @param {ReadonlyMat4} a the first operand\\n * @param {ReadonlyMat4} b the second operand\\n * @returns {mat4} out\\n */\\n\\nfunction add(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  out[3] = a[3] + b[3];\\n  out[4] = a[4] + b[4];\\n  out[5] = a[5] + b[5];\\n  out[6] = a[6] + b[6];\\n  out[7] = a[7] + b[7];\\n  out[8] = a[8] + b[8];\\n  out[9] = a[9] + b[9];\\n  out[10] = a[10] + b[10];\\n  out[11] = a[11] + b[11];\\n  out[12] = a[12] + b[12];\\n  out[13] = a[13] + b[13];\\n  out[14] = a[14] + b[14];\\n  out[15] = a[15] + b[15];\\n  return out;\\n}\\n/**\\n * Subtracts matrix b from matrix a\\n *\\n * @param {mat4} out the receiving matrix\\n * @param {ReadonlyMat4} a the first operand\\n * @param {ReadonlyMat4} b the second operand\\n * @returns {mat4} out\\n */\\n\\nfunction subtract(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  out[3] = a[3] - b[3];\\n  out[4] = a[4] - b[4];\\n  out[5] = a[5] - b[5];\\n  out[6] = a[6] - b[6];\\n  out[7] = a[7] - b[7];\\n  out[8] = a[8] - b[8];\\n  out[9] = a[9] - b[9];\\n  out[10] = a[10] - b[10];\\n  out[11] = a[11] - b[11];\\n  out[12] = a[12] - b[12];\\n  out[13] = a[13] - b[13];\\n  out[14] = a[14] - b[14];\\n  out[15] = a[15] - b[15];\\n  return out;\\n}\\n/**\\n * Multiply each element of the matrix by a scalar.\\n *\\n * @param {mat4} out the receiving matrix\\n * @param {ReadonlyMat4} a the matrix to scale\\n * @param {Number} b amount to scale the matrix's elements by\\n * @returns {mat4} out\\n */\\n\\nfunction multiplyScalar(out, a, b) {\\n  out[0] = a[0] * b;\\n  out[1] = a[1] * b;\\n  out[2] = a[2] * b;\\n  out[3] = a[3] * b;\\n  out[4] = a[4] * b;\\n  out[5] = a[5] * b;\\n  out[6] = a[6] * b;\\n  out[7] = a[7] * b;\\n  out[8] = a[8] * b;\\n  out[9] = a[9] * b;\\n  out[10] = a[10] * b;\\n  out[11] = a[11] * b;\\n  out[12] = a[12] * b;\\n  out[13] = a[13] * b;\\n  out[14] = a[14] * b;\\n  out[15] = a[15] * b;\\n  return out;\\n}\\n/**\\n * Adds two mat4's after multiplying each element of the second operand by a scalar value.\\n *\\n * @param {mat4} out the receiving vector\\n * @param {ReadonlyMat4} a the first operand\\n * @param {ReadonlyMat4} b the second operand\\n * @param {Number} scale the amount to scale b's elements by before adding\\n * @returns {mat4} out\\n */\\n\\nfunction multiplyScalarAndAdd(out, a, b, scale) {\\n  out[0] = a[0] + b[0] * scale;\\n  out[1] = a[1] + b[1] * scale;\\n  out[2] = a[2] + b[2] * scale;\\n  out[3] = a[3] + b[3] * scale;\\n  out[4] = a[4] + b[4] * scale;\\n  out[5] = a[5] + b[5] * scale;\\n  out[6] = a[6] + b[6] * scale;\\n  out[7] = a[7] + b[7] * scale;\\n  out[8] = a[8] + b[8] * scale;\\n  out[9] = a[9] + b[9] * scale;\\n  out[10] = a[10] + b[10] * scale;\\n  out[11] = a[11] + b[11] * scale;\\n  out[12] = a[12] + b[12] * scale;\\n  out[13] = a[13] + b[13] * scale;\\n  out[14] = a[14] + b[14] * scale;\\n  out[15] = a[15] + b[15] * scale;\\n  return out;\\n}\\n/**\\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\\n *\\n * @param {ReadonlyMat4} a The first matrix.\\n * @param {ReadonlyMat4} b The second matrix.\\n * @returns {Boolean} True if the matrices are equal, false otherwise.\\n */\\n\\nfunction exactEquals(a, b) {\\n  return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] && a[12] === b[12] && a[13] === b[13] && a[14] === b[14] && a[15] === b[15];\\n}\\n/**\\n * Returns whether or not the matrices have approximately the same elements in the same position.\\n *\\n * @param {ReadonlyMat4} a The first matrix.\\n * @param {ReadonlyMat4} b The second matrix.\\n * @returns {Boolean} True if the matrices are equal, false otherwise.\\n */\\n\\nfunction equals(a, b) {\\n  var a0 = a[0],\\n      a1 = a[1],\\n      a2 = a[2],\\n      a3 = a[3];\\n  var a4 = a[4],\\n      a5 = a[5],\\n      a6 = a[6],\\n      a7 = a[7];\\n  var a8 = a[8],\\n      a9 = a[9],\\n      a10 = a[10],\\n      a11 = a[11];\\n  var a12 = a[12],\\n      a13 = a[13],\\n      a14 = a[14],\\n      a15 = a[15];\\n  var b0 = b[0],\\n      b1 = b[1],\\n      b2 = b[2],\\n      b3 = b[3];\\n  var b4 = b[4],\\n      b5 = b[5],\\n      b6 = b[6],\\n      b7 = b[7];\\n  var b8 = b[8],\\n      b9 = b[9],\\n      b10 = b[10],\\n      b11 = b[11];\\n  var b12 = b[12],\\n      b13 = b[13],\\n      b14 = b[14],\\n      b15 = b[15];\\n  return Math.abs(a0 - b0) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8)) && Math.abs(a9 - b9) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a9), Math.abs(b9)) && Math.abs(a10 - b10) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a10), Math.abs(b10)) && Math.abs(a11 - b11) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a11), Math.abs(b11)) && Math.abs(a12 - b12) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a12), Math.abs(b12)) && Math.abs(a13 - b13) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a13), Math.abs(b13)) && Math.abs(a14 - b14) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a14), Math.abs(b14)) && Math.abs(a15 - b15) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a15), Math.abs(b15));\\n}\\n/**\\n * Alias for {@link mat4.multiply}\\n * @function\\n */\\n\\nvar mul = multiply;\\n/**\\n * Alias for {@link mat4.subtract}\\n * @function\\n */\\n\\nvar sub = subtract;\\n\\n//# sourceURL=webpack://glplotter/./node_modules/gl-matrix/esm/mat4.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/gl-matrix/esm/quat.js\":\n/*!********************************************!*\\\n  !*** ./node_modules/gl-matrix/esm/quat.js ***!\n  \\********************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"add\\\": function() { return /* binding */ add; },\\n/* harmony export */   \\\"calculateW\\\": function() { return /* binding */ calculateW; },\\n/* harmony export */   \\\"clone\\\": function() { return /* binding */ clone; },\\n/* harmony export */   \\\"conjugate\\\": function() { return /* binding */ conjugate; },\\n/* harmony export */   \\\"copy\\\": function() { return /* binding */ copy; },\\n/* harmony export */   \\\"create\\\": function() { return /* binding */ create; },\\n/* harmony export */   \\\"dot\\\": function() { return /* binding */ dot; },\\n/* harmony export */   \\\"equals\\\": function() { return /* binding */ equals; },\\n/* harmony export */   \\\"exactEquals\\\": function() { return /* binding */ exactEquals; },\\n/* harmony export */   \\\"exp\\\": function() { return /* binding */ exp; },\\n/* harmony export */   \\\"fromEuler\\\": function() { return /* binding */ fromEuler; },\\n/* harmony export */   \\\"fromMat3\\\": function() { return /* binding */ fromMat3; },\\n/* harmony export */   \\\"fromValues\\\": function() { return /* binding */ fromValues; },\\n/* harmony export */   \\\"getAngle\\\": function() { return /* binding */ getAngle; },\\n/* harmony export */   \\\"getAxisAngle\\\": function() { return /* binding */ getAxisAngle; },\\n/* harmony export */   \\\"identity\\\": function() { return /* binding */ identity; },\\n/* harmony export */   \\\"invert\\\": function() { return /* binding */ invert; },\\n/* harmony export */   \\\"len\\\": function() { return /* binding */ len; },\\n/* harmony export */   \\\"length\\\": function() { return /* binding */ length; },\\n/* harmony export */   \\\"lerp\\\": function() { return /* binding */ lerp; },\\n/* harmony export */   \\\"ln\\\": function() { return /* binding */ ln; },\\n/* harmony export */   \\\"mul\\\": function() { return /* binding */ mul; },\\n/* harmony export */   \\\"multiply\\\": function() { return /* binding */ multiply; },\\n/* harmony export */   \\\"normalize\\\": function() { return /* binding */ normalize; },\\n/* harmony export */   \\\"pow\\\": function() { return /* binding */ pow; },\\n/* harmony export */   \\\"random\\\": function() { return /* binding */ random; },\\n/* harmony export */   \\\"rotateX\\\": function() { return /* binding */ rotateX; },\\n/* harmony export */   \\\"rotateY\\\": function() { return /* binding */ rotateY; },\\n/* harmony export */   \\\"rotateZ\\\": function() { return /* binding */ rotateZ; },\\n/* harmony export */   \\\"rotationTo\\\": function() { return /* binding */ rotationTo; },\\n/* harmony export */   \\\"scale\\\": function() { return /* binding */ scale; },\\n/* harmony export */   \\\"set\\\": function() { return /* binding */ set; },\\n/* harmony export */   \\\"setAxes\\\": function() { return /* binding */ setAxes; },\\n/* harmony export */   \\\"setAxisAngle\\\": function() { return /* binding */ setAxisAngle; },\\n/* harmony export */   \\\"slerp\\\": function() { return /* binding */ slerp; },\\n/* harmony export */   \\\"sqlerp\\\": function() { return /* binding */ sqlerp; },\\n/* harmony export */   \\\"sqrLen\\\": function() { return /* binding */ sqrLen; },\\n/* harmony export */   \\\"squaredLength\\\": function() { return /* binding */ squaredLength; },\\n/* harmony export */   \\\"str\\\": function() { return /* binding */ str; }\\n/* harmony export */ });\\n/* harmony import */ var _common_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common.js */ \\\"./node_modules/gl-matrix/esm/common.js\\\");\\n/* harmony import */ var _mat3_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mat3.js */ \\\"./node_modules/gl-matrix/esm/mat3.js\\\");\\n/* harmony import */ var _vec3_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./vec3.js */ \\\"./node_modules/gl-matrix/esm/vec3.js\\\");\\n/* harmony import */ var _vec4_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./vec4.js */ \\\"./node_modules/gl-matrix/esm/vec4.js\\\");\\n\\n\\n\\n\\n/**\\n * Quaternion\\n * @module quat\\n */\\n\\n/**\\n * Creates a new identity quat\\n *\\n * @returns {quat} a new quaternion\\n */\\n\\nfunction create() {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(4);\\n\\n  if (_common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE != Float32Array) {\\n    out[0] = 0;\\n    out[1] = 0;\\n    out[2] = 0;\\n  }\\n\\n  out[3] = 1;\\n  return out;\\n}\\n/**\\n * Set a quat to the identity quaternion\\n *\\n * @param {quat} out the receiving quaternion\\n * @returns {quat} out\\n */\\n\\nfunction identity(out) {\\n  out[0] = 0;\\n  out[1] = 0;\\n  out[2] = 0;\\n  out[3] = 1;\\n  return out;\\n}\\n/**\\n * Sets a quat from the given angle and rotation axis,\\n * then returns it.\\n *\\n * @param {quat} out the receiving quaternion\\n * @param {ReadonlyVec3} axis the axis around which to rotate\\n * @param {Number} rad the angle in radians\\n * @returns {quat} out\\n **/\\n\\nfunction setAxisAngle(out, axis, rad) {\\n  rad = rad * 0.5;\\n  var 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/**\\n * Gets the rotation axis and angle for a given\\n *  quaternion. If a quaternion is created with\\n *  setAxisAngle, this method will return the same\\n *  values as providied in the original parameter list\\n *  OR functionally equivalent values.\\n * Example: The quaternion formed by axis [0, 0, 1] and\\n *  angle -90 is the same as the quaternion formed by\\n *  [0, 0, 1] and 270. This method favors the latter.\\n * @param  {vec3} out_axis  Vector receiving the axis of rotation\\n * @param  {ReadonlyQuat} q     Quaternion to be decomposed\\n * @return {Number}     Angle, in radians, of the rotation\\n */\\n\\nfunction getAxisAngle(out_axis, q) {\\n  var rad = Math.acos(q[3]) * 2.0;\\n  var s = Math.sin(rad / 2.0);\\n\\n  if (s > _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON) {\\n    out_axis[0] = q[0] / s;\\n    out_axis[1] = q[1] / s;\\n    out_axis[2] = q[2] / s;\\n  } else {\\n    // If s is zero, return any axis (no rotation - axis does not matter)\\n    out_axis[0] = 1;\\n    out_axis[1] = 0;\\n    out_axis[2] = 0;\\n  }\\n\\n  return rad;\\n}\\n/**\\n * Gets the angular distance between two unit quaternions\\n *\\n * @param  {ReadonlyQuat} a     Origin unit quaternion\\n * @param  {ReadonlyQuat} b     Destination unit quaternion\\n * @return {Number}     Angle, in radians, between the two quaternions\\n */\\n\\nfunction getAngle(a, b) {\\n  var dotproduct = dot(a, b);\\n  return Math.acos(2 * dotproduct * dotproduct - 1);\\n}\\n/**\\n * Multiplies two quat's\\n *\\n * @param {quat} out the receiving quaternion\\n * @param {ReadonlyQuat} a the first operand\\n * @param {ReadonlyQuat} b the second operand\\n * @returns {quat} out\\n */\\n\\nfunction multiply(out, a, b) {\\n  var ax = a[0],\\n      ay = a[1],\\n      az = a[2],\\n      aw = a[3];\\n  var bx = b[0],\\n      by = b[1],\\n      bz = b[2],\\n      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 * Rotates a quaternion by the given angle about the X axis\\n *\\n * @param {quat} out quat receiving operation result\\n * @param {ReadonlyQuat} a quat to rotate\\n * @param {number} rad angle (in radians) to rotate\\n * @returns {quat} out\\n */\\n\\nfunction rotateX(out, a, rad) {\\n  rad *= 0.5;\\n  var ax = a[0],\\n      ay = a[1],\\n      az = a[2],\\n      aw = a[3];\\n  var bx = Math.sin(rad),\\n      bw = Math.cos(rad);\\n  out[0] = ax * bw + aw * bx;\\n  out[1] = ay * bw + az * bx;\\n  out[2] = az * bw - ay * bx;\\n  out[3] = aw * bw - ax * bx;\\n  return out;\\n}\\n/**\\n * Rotates a quaternion by the given angle about the Y axis\\n *\\n * @param {quat} out quat receiving operation result\\n * @param {ReadonlyQuat} a quat to rotate\\n * @param {number} rad angle (in radians) to rotate\\n * @returns {quat} out\\n */\\n\\nfunction rotateY(out, a, rad) {\\n  rad *= 0.5;\\n  var ax = a[0],\\n      ay = a[1],\\n      az = a[2],\\n      aw = a[3];\\n  var by = Math.sin(rad),\\n      bw = Math.cos(rad);\\n  out[0] = ax * bw - az * by;\\n  out[1] = ay * bw + aw * by;\\n  out[2] = az * bw + ax * by;\\n  out[3] = aw * bw - ay * by;\\n  return out;\\n}\\n/**\\n * Rotates a quaternion by the given angle about the Z axis\\n *\\n * @param {quat} out quat receiving operation result\\n * @param {ReadonlyQuat} a quat to rotate\\n * @param {number} rad angle (in radians) to rotate\\n * @returns {quat} out\\n */\\n\\nfunction rotateZ(out, a, rad) {\\n  rad *= 0.5;\\n  var ax = a[0],\\n      ay = a[1],\\n      az = a[2],\\n      aw = a[3];\\n  var bz = Math.sin(rad),\\n      bw = Math.cos(rad);\\n  out[0] = ax * bw + ay * bz;\\n  out[1] = ay * bw - ax * bz;\\n  out[2] = az * bw + aw * bz;\\n  out[3] = aw * bw - az * bz;\\n  return out;\\n}\\n/**\\n * Calculates the W component of a quat from the X, Y, and Z components.\\n * Assumes that quaternion is 1 unit in length.\\n * Any existing W component will be ignored.\\n *\\n * @param {quat} out the receiving quaternion\\n * @param {ReadonlyQuat} a quat to calculate W component of\\n * @returns {quat} out\\n */\\n\\nfunction calculateW(out, a) {\\n  var x = a[0],\\n      y = a[1],\\n      z = a[2];\\n  out[0] = x;\\n  out[1] = y;\\n  out[2] = z;\\n  out[3] = Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z));\\n  return out;\\n}\\n/**\\n * Calculate the exponential of a unit quaternion.\\n *\\n * @param {quat} out the receiving quaternion\\n * @param {ReadonlyQuat} a quat to calculate the exponential of\\n * @returns {quat} out\\n */\\n\\nfunction exp(out, a) {\\n  var x = a[0],\\n      y = a[1],\\n      z = a[2],\\n      w = a[3];\\n  var r = Math.sqrt(x * x + y * y + z * z);\\n  var et = Math.exp(w);\\n  var s = r > 0 ? et * Math.sin(r) / r : 0;\\n  out[0] = x * s;\\n  out[1] = y * s;\\n  out[2] = z * s;\\n  out[3] = et * Math.cos(r);\\n  return out;\\n}\\n/**\\n * Calculate the natural logarithm of a unit quaternion.\\n *\\n * @param {quat} out the receiving quaternion\\n * @param {ReadonlyQuat} a quat to calculate the exponential of\\n * @returns {quat} out\\n */\\n\\nfunction ln(out, a) {\\n  var x = a[0],\\n      y = a[1],\\n      z = a[2],\\n      w = a[3];\\n  var r = Math.sqrt(x * x + y * y + z * z);\\n  var t = r > 0 ? Math.atan2(r, w) / r : 0;\\n  out[0] = x * t;\\n  out[1] = y * t;\\n  out[2] = z * t;\\n  out[3] = 0.5 * Math.log(x * x + y * y + z * z + w * w);\\n  return out;\\n}\\n/**\\n * Calculate the scalar power of a unit quaternion.\\n *\\n * @param {quat} out the receiving quaternion\\n * @param {ReadonlyQuat} a quat to calculate the exponential of\\n * @param {Number} b amount to scale the quaternion by\\n * @returns {quat} out\\n */\\n\\nfunction pow(out, a, b) {\\n  ln(out, a);\\n  scale(out, out, b);\\n  exp(out, out);\\n  return out;\\n}\\n/**\\n * Performs a spherical linear interpolation between two quat\\n *\\n * @param {quat} out the receiving quaternion\\n * @param {ReadonlyQuat} a the first operand\\n * @param {ReadonlyQuat} b the second operand\\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\\n * @returns {quat} out\\n */\\n\\nfunction slerp(out, a, b, t) {\\n  // benchmarks:\\n  //    http://jsperf.com/quaternion-slerp-implementations\\n  var ax = a[0],\\n      ay = a[1],\\n      az = a[2],\\n      aw = a[3];\\n  var bx = b[0],\\n      by = b[1],\\n      bz = b[2],\\n      bw = b[3];\\n  var omega, cosom, sinom, scale0, scale1; // calc cosine\\n\\n  cosom = ax * bx + ay * by + az * bz + aw * bw; // adjust signs (if necessary)\\n\\n  if (cosom < 0.0) {\\n    cosom = -cosom;\\n    bx = -bx;\\n    by = -by;\\n    bz = -bz;\\n    bw = -bw;\\n  } // calculate coefficients\\n\\n\\n  if (1.0 - cosom > _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON) {\\n    // standard case (slerp)\\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    // \\\"from\\\" and \\\"to\\\" quaternions are very close\\n    //  ... so we can do a linear interpolation\\n    scale0 = 1.0 - t;\\n    scale1 = t;\\n  } // calculate final values\\n\\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/**\\n * Generates a random unit quaternion\\n *\\n * @param {quat} out the receiving quaternion\\n * @returns {quat} out\\n */\\n\\nfunction random(out) {\\n  // Implementation of http://planning.cs.uiuc.edu/node198.html\\n  // TODO: Calling random 3 times is probably not the fastest solution\\n  var u1 = _common_js__WEBPACK_IMPORTED_MODULE_0__.RANDOM();\\n  var u2 = _common_js__WEBPACK_IMPORTED_MODULE_0__.RANDOM();\\n  var u3 = _common_js__WEBPACK_IMPORTED_MODULE_0__.RANDOM();\\n  var sqrt1MinusU1 = Math.sqrt(1 - u1);\\n  var sqrtU1 = Math.sqrt(u1);\\n  out[0] = sqrt1MinusU1 * Math.sin(2.0 * Math.PI * u2);\\n  out[1] = sqrt1MinusU1 * Math.cos(2.0 * Math.PI * u2);\\n  out[2] = sqrtU1 * Math.sin(2.0 * Math.PI * u3);\\n  out[3] = sqrtU1 * Math.cos(2.0 * Math.PI * u3);\\n  return out;\\n}\\n/**\\n * Calculates the inverse of a quat\\n *\\n * @param {quat} out the receiving quaternion\\n * @param {ReadonlyQuat} a quat to calculate inverse of\\n * @returns {quat} out\\n */\\n\\nfunction invert(out, a) {\\n  var a0 = a[0],\\n      a1 = a[1],\\n      a2 = a[2],\\n      a3 = a[3];\\n  var dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\\n  var invDot = dot ? 1.0 / dot : 0; // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0\\n\\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/**\\n * Calculates the conjugate of a quat\\n * If the quaternion is normalized, this function is faster than quat.inverse and produces the same result.\\n *\\n * @param {quat} out the receiving quaternion\\n * @param {ReadonlyQuat} a quat to calculate conjugate of\\n * @returns {quat} out\\n */\\n\\nfunction conjugate(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 * Creates a quaternion from the given 3x3 rotation matrix.\\n *\\n * NOTE: The resultant quaternion is not normalized, so you should be sure\\n * to renormalize the quaternion yourself where necessary.\\n *\\n * @param {quat} out the receiving quaternion\\n * @param {ReadonlyMat3} m rotation matrix\\n * @returns {quat} out\\n * @function\\n */\\n\\nfunction fromMat3(out, m) {\\n  // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\\n  // article \\\"Quaternion Calculus and Fast Animation\\\".\\n  var fTrace = m[0] + m[4] + m[8];\\n  var fRoot;\\n\\n  if (fTrace > 0.0) {\\n    // |w| > 1/2, may as well choose w > 1/2\\n    fRoot = Math.sqrt(fTrace + 1.0); // 2w\\n\\n    out[3] = 0.5 * fRoot;\\n    fRoot = 0.5 / fRoot; // 1/(4w)\\n\\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    // |w| <= 1/2\\n    var i = 0;\\n    if (m[4] > m[0]) i = 1;\\n    if (m[8] > m[i * 3 + i]) i = 2;\\n    var j = (i + 1) % 3;\\n    var 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\\n  return out;\\n}\\n/**\\n * Creates a quaternion from the given euler angle x, y, z.\\n *\\n * @param {quat} out the receiving quaternion\\n * @param {x} Angle to rotate around X axis in degrees.\\n * @param {y} Angle to rotate around Y axis in degrees.\\n * @param {z} Angle to rotate around Z axis in degrees.\\n * @returns {quat} out\\n * @function\\n */\\n\\nfunction fromEuler(out, x, y, z) {\\n  var halfToRad = 0.5 * Math.PI / 180.0;\\n  x *= halfToRad;\\n  y *= halfToRad;\\n  z *= halfToRad;\\n  var sx = Math.sin(x);\\n  var cx = Math.cos(x);\\n  var sy = Math.sin(y);\\n  var cy = Math.cos(y);\\n  var sz = Math.sin(z);\\n  var 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/**\\n * Returns a string representation of a quatenion\\n *\\n * @param {ReadonlyQuat} a vector to represent as a string\\n * @returns {String} string representation of the vector\\n */\\n\\nfunction str(a) {\\n  return \\\"quat(\\\" + a[0] + \\\", \\\" + a[1] + \\\", \\\" + a[2] + \\\", \\\" + a[3] + \\\")\\\";\\n}\\n/**\\n * Creates a new quat initialized with values from an existing quaternion\\n *\\n * @param {ReadonlyQuat} a quaternion to clone\\n * @returns {quat} a new quaternion\\n * @function\\n */\\n\\nvar clone = _vec4_js__WEBPACK_IMPORTED_MODULE_1__.clone;\\n/**\\n * Creates a new quat initialized with the given values\\n *\\n * @param {Number} x X component\\n * @param {Number} y Y component\\n * @param {Number} z Z component\\n * @param {Number} w W component\\n * @returns {quat} a new quaternion\\n * @function\\n */\\n\\nvar fromValues = _vec4_js__WEBPACK_IMPORTED_MODULE_1__.fromValues;\\n/**\\n * Copy the values from one quat to another\\n *\\n * @param {quat} out the receiving quaternion\\n * @param {ReadonlyQuat} a the source quaternion\\n * @returns {quat} out\\n * @function\\n */\\n\\nvar copy = _vec4_js__WEBPACK_IMPORTED_MODULE_1__.copy;\\n/**\\n * Set the components of a quat to the given values\\n *\\n * @param {quat} out the receiving quaternion\\n * @param {Number} x X component\\n * @param {Number} y Y component\\n * @param {Number} z Z component\\n * @param {Number} w W component\\n * @returns {quat} out\\n * @function\\n */\\n\\nvar set = _vec4_js__WEBPACK_IMPORTED_MODULE_1__.set;\\n/**\\n * Adds two quat's\\n *\\n * @param {quat} out the receiving quaternion\\n * @param {ReadonlyQuat} a the first operand\\n * @param {ReadonlyQuat} b the second operand\\n * @returns {quat} out\\n * @function\\n */\\n\\nvar add = _vec4_js__WEBPACK_IMPORTED_MODULE_1__.add;\\n/**\\n * Alias for {@link quat.multiply}\\n * @function\\n */\\n\\nvar mul = multiply;\\n/**\\n * Scales a quat by a scalar number\\n *\\n * @param {quat} out the receiving vector\\n * @param {ReadonlyQuat} a the vector to scale\\n * @param {Number} b amount to scale the vector by\\n * @returns {quat} out\\n * @function\\n */\\n\\nvar scale = _vec4_js__WEBPACK_IMPORTED_MODULE_1__.scale;\\n/**\\n * Calculates the dot product of two quat's\\n *\\n * @param {ReadonlyQuat} a the first operand\\n * @param {ReadonlyQuat} b the second operand\\n * @returns {Number} dot product of a and b\\n * @function\\n */\\n\\nvar dot = _vec4_js__WEBPACK_IMPORTED_MODULE_1__.dot;\\n/**\\n * Performs a linear interpolation between two quat's\\n *\\n * @param {quat} out the receiving quaternion\\n * @param {ReadonlyQuat} a the first operand\\n * @param {ReadonlyQuat} b the second operand\\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\\n * @returns {quat} out\\n * @function\\n */\\n\\nvar lerp = _vec4_js__WEBPACK_IMPORTED_MODULE_1__.lerp;\\n/**\\n * Calculates the length of a quat\\n *\\n * @param {ReadonlyQuat} a vector to calculate length of\\n * @returns {Number} length of a\\n */\\n\\nvar length = _vec4_js__WEBPACK_IMPORTED_MODULE_1__.length;\\n/**\\n * Alias for {@link quat.length}\\n * @function\\n */\\n\\nvar len = length;\\n/**\\n * Calculates the squared length of a quat\\n *\\n * @param {ReadonlyQuat} a vector to calculate squared length of\\n * @returns {Number} squared length of a\\n * @function\\n */\\n\\nvar squaredLength = _vec4_js__WEBPACK_IMPORTED_MODULE_1__.squaredLength;\\n/**\\n * Alias for {@link quat.squaredLength}\\n * @function\\n */\\n\\nvar sqrLen = squaredLength;\\n/**\\n * Normalize a quat\\n *\\n * @param {quat} out the receiving quaternion\\n * @param {ReadonlyQuat} a quaternion to normalize\\n * @returns {quat} out\\n * @function\\n */\\n\\nvar normalize = _vec4_js__WEBPACK_IMPORTED_MODULE_1__.normalize;\\n/**\\n * Returns whether or not the quaternions have exactly the same elements in the same position (when compared with ===)\\n *\\n * @param {ReadonlyQuat} a The first quaternion.\\n * @param {ReadonlyQuat} b The second quaternion.\\n * @returns {Boolean} True if the vectors are equal, false otherwise.\\n */\\n\\nvar exactEquals = _vec4_js__WEBPACK_IMPORTED_MODULE_1__.exactEquals;\\n/**\\n * Returns whether or not the quaternions have approximately the same elements in the same position.\\n *\\n * @param {ReadonlyQuat} a The first vector.\\n * @param {ReadonlyQuat} b The second vector.\\n * @returns {Boolean} True if the vectors are equal, false otherwise.\\n */\\n\\nvar equals = _vec4_js__WEBPACK_IMPORTED_MODULE_1__.equals;\\n/**\\n * Sets a quaternion to represent the shortest rotation from one\\n * vector to another.\\n *\\n * Both vectors are assumed to be unit length.\\n *\\n * @param {quat} out the receiving quaternion.\\n * @param {ReadonlyVec3} a the initial vector\\n * @param {ReadonlyVec3} b the destination vector\\n * @returns {quat} out\\n */\\n\\nvar rotationTo = function () {\\n  var tmpvec3 = _vec3_js__WEBPACK_IMPORTED_MODULE_2__.create();\\n  var xUnitVec3 = _vec3_js__WEBPACK_IMPORTED_MODULE_2__.fromValues(1, 0, 0);\\n  var yUnitVec3 = _vec3_js__WEBPACK_IMPORTED_MODULE_2__.fromValues(0, 1, 0);\\n  return function (out, a, b) {\\n    var dot = _vec3_js__WEBPACK_IMPORTED_MODULE_2__.dot(a, b);\\n\\n    if (dot < -0.999999) {\\n      _vec3_js__WEBPACK_IMPORTED_MODULE_2__.cross(tmpvec3, xUnitVec3, a);\\n      if (_vec3_js__WEBPACK_IMPORTED_MODULE_2__.len(tmpvec3) < 0.000001) _vec3_js__WEBPACK_IMPORTED_MODULE_2__.cross(tmpvec3, yUnitVec3, a);\\n      _vec3_js__WEBPACK_IMPORTED_MODULE_2__.normalize(tmpvec3, tmpvec3);\\n      setAxisAngle(out, tmpvec3, Math.PI);\\n      return out;\\n    } else if (dot > 0.999999) {\\n      out[0] = 0;\\n      out[1] = 0;\\n      out[2] = 0;\\n      out[3] = 1;\\n      return out;\\n    } else {\\n      _vec3_js__WEBPACK_IMPORTED_MODULE_2__.cross(tmpvec3, a, b);\\n      out[0] = tmpvec3[0];\\n      out[1] = tmpvec3[1];\\n      out[2] = tmpvec3[2];\\n      out[3] = 1 + dot;\\n      return normalize(out, out);\\n    }\\n  };\\n}();\\n/**\\n * Performs a spherical linear interpolation with two control points\\n *\\n * @param {quat} out the receiving quaternion\\n * @param {ReadonlyQuat} a the first operand\\n * @param {ReadonlyQuat} b the second operand\\n * @param {ReadonlyQuat} c the third operand\\n * @param {ReadonlyQuat} d the fourth operand\\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\\n * @returns {quat} out\\n */\\n\\nvar sqlerp = function () {\\n  var temp1 = create();\\n  var temp2 = create();\\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}();\\n/**\\n * Sets the specified quaternion with values corresponding to the given\\n * axes. Each axis is a vec3 and is expected to be unit length and\\n * perpendicular to all other specified axes.\\n *\\n * @param {ReadonlyVec3} view  the vector representing the viewing direction\\n * @param {ReadonlyVec3} right the vector representing the local \\\"right\\\" direction\\n * @param {ReadonlyVec3} up    the vector representing the local \\\"up\\\" direction\\n * @returns {quat} out\\n */\\n\\nvar setAxes = function () {\\n  var matr = _mat3_js__WEBPACK_IMPORTED_MODULE_3__.create();\\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(out, fromMat3(out, matr));\\n  };\\n}();\\n\\n//# sourceURL=webpack://glplotter/./node_modules/gl-matrix/esm/quat.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/gl-matrix/esm/quat2.js\":\n/*!*********************************************!*\\\n  !*** ./node_modules/gl-matrix/esm/quat2.js ***!\n  \\*********************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"add\\\": function() { return /* binding */ add; },\\n/* harmony export */   \\\"clone\\\": function() { return /* binding */ clone; },\\n/* harmony export */   \\\"conjugate\\\": function() { return /* binding */ conjugate; },\\n/* harmony export */   \\\"copy\\\": function() { return /* binding */ copy; },\\n/* harmony export */   \\\"create\\\": function() { return /* binding */ create; },\\n/* harmony export */   \\\"dot\\\": function() { return /* binding */ dot; },\\n/* harmony export */   \\\"equals\\\": function() { return /* binding */ equals; },\\n/* harmony export */   \\\"exactEquals\\\": function() { return /* binding */ exactEquals; },\\n/* harmony export */   \\\"fromMat4\\\": function() { return /* binding */ fromMat4; },\\n/* harmony export */   \\\"fromRotation\\\": function() { return /* binding */ fromRotation; },\\n/* harmony export */   \\\"fromRotationTranslation\\\": function() { return /* binding */ fromRotationTranslation; },\\n/* harmony export */   \\\"fromRotationTranslationValues\\\": function() { return /* binding */ fromRotationTranslationValues; },\\n/* harmony export */   \\\"fromTranslation\\\": function() { return /* binding */ fromTranslation; },\\n/* harmony export */   \\\"fromValues\\\": function() { return /* binding */ fromValues; },\\n/* harmony export */   \\\"getDual\\\": function() { return /* binding */ getDual; },\\n/* harmony export */   \\\"getReal\\\": function() { return /* binding */ getReal; },\\n/* harmony export */   \\\"getTranslation\\\": function() { return /* binding */ getTranslation; },\\n/* harmony export */   \\\"identity\\\": function() { return /* binding */ identity; },\\n/* harmony export */   \\\"invert\\\": function() { return /* binding */ invert; },\\n/* harmony export */   \\\"len\\\": function() { return /* binding */ len; },\\n/* harmony export */   \\\"length\\\": function() { return /* binding */ length; },\\n/* harmony export */   \\\"lerp\\\": function() { return /* binding */ lerp; },\\n/* harmony export */   \\\"mul\\\": function() { return /* binding */ mul; },\\n/* harmony export */   \\\"multiply\\\": function() { return /* binding */ multiply; },\\n/* harmony export */   \\\"normalize\\\": function() { return /* binding */ normalize; },\\n/* harmony export */   \\\"rotateAroundAxis\\\": function() { return /* binding */ rotateAroundAxis; },\\n/* harmony export */   \\\"rotateByQuatAppend\\\": function() { return /* binding */ rotateByQuatAppend; },\\n/* harmony export */   \\\"rotateByQuatPrepend\\\": function() { return /* binding */ rotateByQuatPrepend; },\\n/* harmony export */   \\\"rotateX\\\": function() { return /* binding */ rotateX; },\\n/* harmony export */   \\\"rotateY\\\": function() { return /* binding */ rotateY; },\\n/* harmony export */   \\\"rotateZ\\\": function() { return /* binding */ rotateZ; },\\n/* harmony export */   \\\"scale\\\": function() { return /* binding */ scale; },\\n/* harmony export */   \\\"set\\\": function() { return /* binding */ set; },\\n/* harmony export */   \\\"setDual\\\": function() { return /* binding */ setDual; },\\n/* harmony export */   \\\"setReal\\\": function() { return /* binding */ setReal; },\\n/* harmony export */   \\\"sqrLen\\\": function() { return /* binding */ sqrLen; },\\n/* harmony export */   \\\"squaredLength\\\": function() { return /* binding */ squaredLength; },\\n/* harmony export */   \\\"str\\\": function() { return /* binding */ str; },\\n/* harmony export */   \\\"translate\\\": function() { return /* binding */ translate; }\\n/* harmony export */ });\\n/* harmony import */ var _common_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common.js */ \\\"./node_modules/gl-matrix/esm/common.js\\\");\\n/* harmony import */ var _quat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./quat.js */ \\\"./node_modules/gl-matrix/esm/quat.js\\\");\\n/* harmony import */ var _mat4_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mat4.js */ \\\"./node_modules/gl-matrix/esm/mat4.js\\\");\\n\\n\\n\\n/**\\n * Dual Quaternion<br>\\n * Format: [real, dual]<br>\\n * Quaternion format: XYZW<br>\\n * Make sure to have normalized dual quaternions, otherwise the functions may not work as intended.<br>\\n * @module quat2\\n */\\n\\n/**\\n * Creates a new identity dual quat\\n *\\n * @returns {quat2} a new dual quaternion [real -> rotation, dual -> translation]\\n */\\n\\nfunction create() {\\n  var dq = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(8);\\n\\n  if (_common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE != Float32Array) {\\n    dq[0] = 0;\\n    dq[1] = 0;\\n    dq[2] = 0;\\n    dq[4] = 0;\\n    dq[5] = 0;\\n    dq[6] = 0;\\n    dq[7] = 0;\\n  }\\n\\n  dq[3] = 1;\\n  return dq;\\n}\\n/**\\n * Creates a new quat initialized with values from an existing quaternion\\n *\\n * @param {ReadonlyQuat2} a dual quaternion to clone\\n * @returns {quat2} new dual quaternion\\n * @function\\n */\\n\\nfunction clone(a) {\\n  var dq = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(8);\\n  dq[0] = a[0];\\n  dq[1] = a[1];\\n  dq[2] = a[2];\\n  dq[3] = a[3];\\n  dq[4] = a[4];\\n  dq[5] = a[5];\\n  dq[6] = a[6];\\n  dq[7] = a[7];\\n  return dq;\\n}\\n/**\\n * Creates a new dual quat initialized with the given values\\n *\\n * @param {Number} x1 X component\\n * @param {Number} y1 Y component\\n * @param {Number} z1 Z component\\n * @param {Number} w1 W component\\n * @param {Number} x2 X component\\n * @param {Number} y2 Y component\\n * @param {Number} z2 Z component\\n * @param {Number} w2 W component\\n * @returns {quat2} new dual quaternion\\n * @function\\n */\\n\\nfunction fromValues(x1, y1, z1, w1, x2, y2, z2, w2) {\\n  var dq = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(8);\\n  dq[0] = x1;\\n  dq[1] = y1;\\n  dq[2] = z1;\\n  dq[3] = w1;\\n  dq[4] = x2;\\n  dq[5] = y2;\\n  dq[6] = z2;\\n  dq[7] = w2;\\n  return dq;\\n}\\n/**\\n * Creates a new dual quat from the given values (quat and translation)\\n *\\n * @param {Number} x1 X component\\n * @param {Number} y1 Y component\\n * @param {Number} z1 Z component\\n * @param {Number} w1 W component\\n * @param {Number} x2 X component (translation)\\n * @param {Number} y2 Y component (translation)\\n * @param {Number} z2 Z component (translation)\\n * @returns {quat2} new dual quaternion\\n * @function\\n */\\n\\nfunction fromRotationTranslationValues(x1, y1, z1, w1, x2, y2, z2) {\\n  var dq = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(8);\\n  dq[0] = x1;\\n  dq[1] = y1;\\n  dq[2] = z1;\\n  dq[3] = w1;\\n  var ax = x2 * 0.5,\\n      ay = y2 * 0.5,\\n      az = z2 * 0.5;\\n  dq[4] = ax * w1 + ay * z1 - az * y1;\\n  dq[5] = ay * w1 + az * x1 - ax * z1;\\n  dq[6] = az * w1 + ax * y1 - ay * x1;\\n  dq[7] = -ax * x1 - ay * y1 - az * z1;\\n  return dq;\\n}\\n/**\\n * Creates a dual quat from a quaternion and a translation\\n *\\n * @param {ReadonlyQuat2} dual quaternion receiving operation result\\n * @param {ReadonlyQuat} q a normalized quaternion\\n * @param {ReadonlyVec3} t tranlation vector\\n * @returns {quat2} dual quaternion receiving operation result\\n * @function\\n */\\n\\nfunction fromRotationTranslation(out, q, t) {\\n  var ax = t[0] * 0.5,\\n      ay = t[1] * 0.5,\\n      az = t[2] * 0.5,\\n      bx = q[0],\\n      by = q[1],\\n      bz = q[2],\\n      bw = q[3];\\n  out[0] = bx;\\n  out[1] = by;\\n  out[2] = bz;\\n  out[3] = bw;\\n  out[4] = ax * bw + ay * bz - az * by;\\n  out[5] = ay * bw + az * bx - ax * bz;\\n  out[6] = az * bw + ax * by - ay * bx;\\n  out[7] = -ax * bx - ay * by - az * bz;\\n  return out;\\n}\\n/**\\n * Creates a dual quat from a translation\\n *\\n * @param {ReadonlyQuat2} dual quaternion receiving operation result\\n * @param {ReadonlyVec3} t translation vector\\n * @returns {quat2} dual quaternion receiving operation result\\n * @function\\n */\\n\\nfunction fromTranslation(out, t) {\\n  out[0] = 0;\\n  out[1] = 0;\\n  out[2] = 0;\\n  out[3] = 1;\\n  out[4] = t[0] * 0.5;\\n  out[5] = t[1] * 0.5;\\n  out[6] = t[2] * 0.5;\\n  out[7] = 0;\\n  return out;\\n}\\n/**\\n * Creates a dual quat from a quaternion\\n *\\n * @param {ReadonlyQuat2} dual quaternion receiving operation result\\n * @param {ReadonlyQuat} q the quaternion\\n * @returns {quat2} dual quaternion receiving operation result\\n * @function\\n */\\n\\nfunction fromRotation(out, q) {\\n  out[0] = q[0];\\n  out[1] = q[1];\\n  out[2] = q[2];\\n  out[3] = q[3];\\n  out[4] = 0;\\n  out[5] = 0;\\n  out[6] = 0;\\n  out[7] = 0;\\n  return out;\\n}\\n/**\\n * Creates a new dual quat from a matrix (4x4)\\n *\\n * @param {quat2} out the dual quaternion\\n * @param {ReadonlyMat4} a the matrix\\n * @returns {quat2} dual quat receiving operation result\\n * @function\\n */\\n\\nfunction fromMat4(out, a) {\\n  //TODO Optimize this\\n  var outer = _quat_js__WEBPACK_IMPORTED_MODULE_1__.create();\\n  _mat4_js__WEBPACK_IMPORTED_MODULE_2__.getRotation(outer, a);\\n  var t = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(3);\\n  _mat4_js__WEBPACK_IMPORTED_MODULE_2__.getTranslation(t, a);\\n  fromRotationTranslation(out, outer, t);\\n  return out;\\n}\\n/**\\n * Copy the values from one dual quat to another\\n *\\n * @param {quat2} out the receiving dual quaternion\\n * @param {ReadonlyQuat2} a the source dual quaternion\\n * @returns {quat2} out\\n * @function\\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  return out;\\n}\\n/**\\n * Set a dual quat to the identity dual quaternion\\n *\\n * @param {quat2} out the receiving quaternion\\n * @returns {quat2} out\\n */\\n\\nfunction identity(out) {\\n  out[0] = 0;\\n  out[1] = 0;\\n  out[2] = 0;\\n  out[3] = 1;\\n  out[4] = 0;\\n  out[5] = 0;\\n  out[6] = 0;\\n  out[7] = 0;\\n  return out;\\n}\\n/**\\n * Set the components of a dual quat to the given values\\n *\\n * @param {quat2} out the receiving quaternion\\n * @param {Number} x1 X component\\n * @param {Number} y1 Y component\\n * @param {Number} z1 Z component\\n * @param {Number} w1 W component\\n * @param {Number} x2 X component\\n * @param {Number} y2 Y component\\n * @param {Number} z2 Z component\\n * @param {Number} w2 W component\\n * @returns {quat2} out\\n * @function\\n */\\n\\nfunction set(out, x1, y1, z1, w1, x2, y2, z2, w2) {\\n  out[0] = x1;\\n  out[1] = y1;\\n  out[2] = z1;\\n  out[3] = w1;\\n  out[4] = x2;\\n  out[5] = y2;\\n  out[6] = z2;\\n  out[7] = w2;\\n  return out;\\n}\\n/**\\n * Gets the real part of a dual quat\\n * @param  {quat} out real part\\n * @param  {ReadonlyQuat2} a Dual Quaternion\\n * @return {quat} real part\\n */\\n\\nvar getReal = _quat_js__WEBPACK_IMPORTED_MODULE_1__.copy;\\n/**\\n * Gets the dual part of a dual quat\\n * @param  {quat} out dual part\\n * @param  {ReadonlyQuat2} a Dual Quaternion\\n * @return {quat} dual part\\n */\\n\\nfunction getDual(out, a) {\\n  out[0] = a[4];\\n  out[1] = a[5];\\n  out[2] = a[6];\\n  out[3] = a[7];\\n  return out;\\n}\\n/**\\n * Set the real component of a dual quat to the given quaternion\\n *\\n * @param {quat2} out the receiving quaternion\\n * @param {ReadonlyQuat} q a quaternion representing the real part\\n * @returns {quat2} out\\n * @function\\n */\\n\\nvar setReal = _quat_js__WEBPACK_IMPORTED_MODULE_1__.copy;\\n/**\\n * Set the dual component of a dual quat to the given quaternion\\n *\\n * @param {quat2} out the receiving quaternion\\n * @param {ReadonlyQuat} q a quaternion representing the dual part\\n * @returns {quat2} out\\n * @function\\n */\\n\\nfunction setDual(out, q) {\\n  out[4] = q[0];\\n  out[5] = q[1];\\n  out[6] = q[2];\\n  out[7] = q[3];\\n  return out;\\n}\\n/**\\n * Gets the translation of a normalized dual quat\\n * @param  {vec3} out translation\\n * @param  {ReadonlyQuat2} a Dual Quaternion to be decomposed\\n * @return {vec3} translation\\n */\\n\\nfunction getTranslation(out, a) {\\n  var ax = a[4],\\n      ay = a[5],\\n      az = a[6],\\n      aw = a[7],\\n      bx = -a[0],\\n      by = -a[1],\\n      bz = -a[2],\\n      bw = a[3];\\n  out[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\\n  out[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\\n  out[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\\n  return out;\\n}\\n/**\\n * Translates a dual quat by the given vector\\n *\\n * @param {quat2} out the receiving dual quaternion\\n * @param {ReadonlyQuat2} a the dual quaternion to translate\\n * @param {ReadonlyVec3} v vector to translate by\\n * @returns {quat2} out\\n */\\n\\nfunction translate(out, a, v) {\\n  var ax1 = a[0],\\n      ay1 = a[1],\\n      az1 = a[2],\\n      aw1 = a[3],\\n      bx1 = v[0] * 0.5,\\n      by1 = v[1] * 0.5,\\n      bz1 = v[2] * 0.5,\\n      ax2 = a[4],\\n      ay2 = a[5],\\n      az2 = a[6],\\n      aw2 = a[7];\\n  out[0] = ax1;\\n  out[1] = ay1;\\n  out[2] = az1;\\n  out[3] = aw1;\\n  out[4] = aw1 * bx1 + ay1 * bz1 - az1 * by1 + ax2;\\n  out[5] = aw1 * by1 + az1 * bx1 - ax1 * bz1 + ay2;\\n  out[6] = aw1 * bz1 + ax1 * by1 - ay1 * bx1 + az2;\\n  out[7] = -ax1 * bx1 - ay1 * by1 - az1 * bz1 + aw2;\\n  return out;\\n}\\n/**\\n * Rotates a dual quat around the X axis\\n *\\n * @param {quat2} out the receiving dual quaternion\\n * @param {ReadonlyQuat2} a the dual quaternion to rotate\\n * @param {number} rad how far should the rotation be\\n * @returns {quat2} out\\n */\\n\\nfunction rotateX(out, a, rad) {\\n  var bx = -a[0],\\n      by = -a[1],\\n      bz = -a[2],\\n      bw = a[3],\\n      ax = a[4],\\n      ay = a[5],\\n      az = a[6],\\n      aw = a[7],\\n      ax1 = ax * bw + aw * bx + ay * bz - az * by,\\n      ay1 = ay * bw + aw * by + az * bx - ax * bz,\\n      az1 = az * bw + aw * bz + ax * by - ay * bx,\\n      aw1 = aw * bw - ax * bx - ay * by - az * bz;\\n  _quat_js__WEBPACK_IMPORTED_MODULE_1__.rotateX(out, a, rad);\\n  bx = out[0];\\n  by = out[1];\\n  bz = out[2];\\n  bw = out[3];\\n  out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\\n  out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\\n  out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\\n  out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\\n  return out;\\n}\\n/**\\n * Rotates a dual quat around the Y axis\\n *\\n * @param {quat2} out the receiving dual quaternion\\n * @param {ReadonlyQuat2} a the dual quaternion to rotate\\n * @param {number} rad how far should the rotation be\\n * @returns {quat2} out\\n */\\n\\nfunction rotateY(out, a, rad) {\\n  var bx = -a[0],\\n      by = -a[1],\\n      bz = -a[2],\\n      bw = a[3],\\n      ax = a[4],\\n      ay = a[5],\\n      az = a[6],\\n      aw = a[7],\\n      ax1 = ax * bw + aw * bx + ay * bz - az * by,\\n      ay1 = ay * bw + aw * by + az * bx - ax * bz,\\n      az1 = az * bw + aw * bz + ax * by - ay * bx,\\n      aw1 = aw * bw - ax * bx - ay * by - az * bz;\\n  _quat_js__WEBPACK_IMPORTED_MODULE_1__.rotateY(out, a, rad);\\n  bx = out[0];\\n  by = out[1];\\n  bz = out[2];\\n  bw = out[3];\\n  out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\\n  out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\\n  out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\\n  out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\\n  return out;\\n}\\n/**\\n * Rotates a dual quat around the Z axis\\n *\\n * @param {quat2} out the receiving dual quaternion\\n * @param {ReadonlyQuat2} a the dual quaternion to rotate\\n * @param {number} rad how far should the rotation be\\n * @returns {quat2} out\\n */\\n\\nfunction rotateZ(out, a, rad) {\\n  var bx = -a[0],\\n      by = -a[1],\\n      bz = -a[2],\\n      bw = a[3],\\n      ax = a[4],\\n      ay = a[5],\\n      az = a[6],\\n      aw = a[7],\\n      ax1 = ax * bw + aw * bx + ay * bz - az * by,\\n      ay1 = ay * bw + aw * by + az * bx - ax * bz,\\n      az1 = az * bw + aw * bz + ax * by - ay * bx,\\n      aw1 = aw * bw - ax * bx - ay * by - az * bz;\\n  _quat_js__WEBPACK_IMPORTED_MODULE_1__.rotateZ(out, a, rad);\\n  bx = out[0];\\n  by = out[1];\\n  bz = out[2];\\n  bw = out[3];\\n  out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\\n  out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\\n  out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\\n  out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\\n  return out;\\n}\\n/**\\n * Rotates a dual quat by a given quaternion (a * q)\\n *\\n * @param {quat2} out the receiving dual quaternion\\n * @param {ReadonlyQuat2} a the dual quaternion to rotate\\n * @param {ReadonlyQuat} q quaternion to rotate by\\n * @returns {quat2} out\\n */\\n\\nfunction rotateByQuatAppend(out, a, q) {\\n  var qx = q[0],\\n      qy = q[1],\\n      qz = q[2],\\n      qw = q[3],\\n      ax = a[0],\\n      ay = a[1],\\n      az = a[2],\\n      aw = a[3];\\n  out[0] = ax * qw + aw * qx + ay * qz - az * qy;\\n  out[1] = ay * qw + aw * qy + az * qx - ax * qz;\\n  out[2] = az * qw + aw * qz + ax * qy - ay * qx;\\n  out[3] = aw * qw - ax * qx - ay * qy - az * qz;\\n  ax = a[4];\\n  ay = a[5];\\n  az = a[6];\\n  aw = a[7];\\n  out[4] = ax * qw + aw * qx + ay * qz - az * qy;\\n  out[5] = ay * qw + aw * qy + az * qx - ax * qz;\\n  out[6] = az * qw + aw * qz + ax * qy - ay * qx;\\n  out[7] = aw * qw - ax * qx - ay * qy - az * qz;\\n  return out;\\n}\\n/**\\n * Rotates a dual quat by a given quaternion (q * a)\\n *\\n * @param {quat2} out the receiving dual quaternion\\n * @param {ReadonlyQuat} q quaternion to rotate by\\n * @param {ReadonlyQuat2} a the dual quaternion to rotate\\n * @returns {quat2} out\\n */\\n\\nfunction rotateByQuatPrepend(out, q, a) {\\n  var qx = q[0],\\n      qy = q[1],\\n      qz = q[2],\\n      qw = q[3],\\n      bx = a[0],\\n      by = a[1],\\n      bz = a[2],\\n      bw = a[3];\\n  out[0] = qx * bw + qw * bx + qy * bz - qz * by;\\n  out[1] = qy * bw + qw * by + qz * bx - qx * bz;\\n  out[2] = qz * bw + qw * bz + qx * by - qy * bx;\\n  out[3] = qw * bw - qx * bx - qy * by - qz * bz;\\n  bx = a[4];\\n  by = a[5];\\n  bz = a[6];\\n  bw = a[7];\\n  out[4] = qx * bw + qw * bx + qy * bz - qz * by;\\n  out[5] = qy * bw + qw * by + qz * bx - qx * bz;\\n  out[6] = qz * bw + qw * bz + qx * by - qy * bx;\\n  out[7] = qw * bw - qx * bx - qy * by - qz * bz;\\n  return out;\\n}\\n/**\\n * Rotates a dual quat around a given axis. Does the normalisation automatically\\n *\\n * @param {quat2} out the receiving dual quaternion\\n * @param {ReadonlyQuat2} a the dual quaternion to rotate\\n * @param {ReadonlyVec3} axis the axis to rotate around\\n * @param {Number} rad how far the rotation should be\\n * @returns {quat2} out\\n */\\n\\nfunction rotateAroundAxis(out, a, axis, rad) {\\n  //Special case for rad = 0\\n  if (Math.abs(rad) < _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON) {\\n    return copy(out, a);\\n  }\\n\\n  var axisLength = Math.hypot(axis[0], axis[1], axis[2]);\\n  rad = rad * 0.5;\\n  var s = Math.sin(rad);\\n  var bx = s * axis[0] / axisLength;\\n  var by = s * axis[1] / axisLength;\\n  var bz = s * axis[2] / axisLength;\\n  var bw = Math.cos(rad);\\n  var ax1 = a[0],\\n      ay1 = a[1],\\n      az1 = a[2],\\n      aw1 = a[3];\\n  out[0] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\\n  out[1] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\\n  out[2] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\\n  out[3] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\\n  var ax = a[4],\\n      ay = a[5],\\n      az = a[6],\\n      aw = a[7];\\n  out[4] = ax * bw + aw * bx + ay * bz - az * by;\\n  out[5] = ay * bw + aw * by + az * bx - ax * bz;\\n  out[6] = az * bw + aw * bz + ax * by - ay * bx;\\n  out[7] = aw * bw - ax * bx - ay * by - az * bz;\\n  return out;\\n}\\n/**\\n * Adds two dual quat's\\n *\\n * @param {quat2} out the receiving dual quaternion\\n * @param {ReadonlyQuat2} a the first operand\\n * @param {ReadonlyQuat2} b the second operand\\n * @returns {quat2} out\\n * @function\\n */\\n\\nfunction add(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  out[3] = a[3] + b[3];\\n  out[4] = a[4] + b[4];\\n  out[5] = a[5] + b[5];\\n  out[6] = a[6] + b[6];\\n  out[7] = a[7] + b[7];\\n  return out;\\n}\\n/**\\n * Multiplies two dual quat's\\n *\\n * @param {quat2} out the receiving dual quaternion\\n * @param {ReadonlyQuat2} a the first operand\\n * @param {ReadonlyQuat2} b the second operand\\n * @returns {quat2} out\\n */\\n\\nfunction multiply(out, a, b) {\\n  var ax0 = a[0],\\n      ay0 = a[1],\\n      az0 = a[2],\\n      aw0 = a[3],\\n      bx1 = b[4],\\n      by1 = b[5],\\n      bz1 = b[6],\\n      bw1 = b[7],\\n      ax1 = a[4],\\n      ay1 = a[5],\\n      az1 = a[6],\\n      aw1 = a[7],\\n      bx0 = b[0],\\n      by0 = b[1],\\n      bz0 = b[2],\\n      bw0 = b[3];\\n  out[0] = ax0 * bw0 + aw0 * bx0 + ay0 * bz0 - az0 * by0;\\n  out[1] = ay0 * bw0 + aw0 * by0 + az0 * bx0 - ax0 * bz0;\\n  out[2] = az0 * bw0 + aw0 * bz0 + ax0 * by0 - ay0 * bx0;\\n  out[3] = aw0 * bw0 - ax0 * bx0 - ay0 * by0 - az0 * bz0;\\n  out[4] = ax0 * bw1 + aw0 * bx1 + ay0 * bz1 - az0 * by1 + ax1 * bw0 + aw1 * bx0 + ay1 * bz0 - az1 * by0;\\n  out[5] = ay0 * bw1 + aw0 * by1 + az0 * bx1 - ax0 * bz1 + ay1 * bw0 + aw1 * by0 + az1 * bx0 - ax1 * bz0;\\n  out[6] = az0 * bw1 + aw0 * bz1 + ax0 * by1 - ay0 * bx1 + az1 * bw0 + aw1 * bz0 + ax1 * by0 - ay1 * bx0;\\n  out[7] = aw0 * bw1 - ax0 * bx1 - ay0 * by1 - az0 * bz1 + aw1 * bw0 - ax1 * bx0 - ay1 * by0 - az1 * bz0;\\n  return out;\\n}\\n/**\\n * Alias for {@link quat2.multiply}\\n * @function\\n */\\n\\nvar mul = multiply;\\n/**\\n * Scales a dual quat by a scalar number\\n *\\n * @param {quat2} out the receiving dual quat\\n * @param {ReadonlyQuat2} a the dual quat to scale\\n * @param {Number} b amount to scale the dual quat by\\n * @returns {quat2} out\\n * @function\\n */\\n\\nfunction scale(out, a, b) {\\n  out[0] = a[0] * b;\\n  out[1] = a[1] * b;\\n  out[2] = a[2] * b;\\n  out[3] = a[3] * b;\\n  out[4] = a[4] * b;\\n  out[5] = a[5] * b;\\n  out[6] = a[6] * b;\\n  out[7] = a[7] * b;\\n  return out;\\n}\\n/**\\n * Calculates the dot product of two dual quat's (The dot product of the real parts)\\n *\\n * @param {ReadonlyQuat2} a the first operand\\n * @param {ReadonlyQuat2} b the second operand\\n * @returns {Number} dot product of a and b\\n * @function\\n */\\n\\nvar dot = _quat_js__WEBPACK_IMPORTED_MODULE_1__.dot;\\n/**\\n * Performs a linear interpolation between two dual quats's\\n * NOTE: The resulting dual quaternions won't always be normalized (The error is most noticeable when t = 0.5)\\n *\\n * @param {quat2} out the receiving dual quat\\n * @param {ReadonlyQuat2} a the first operand\\n * @param {ReadonlyQuat2} b the second operand\\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\\n * @returns {quat2} out\\n */\\n\\nfunction lerp(out, a, b, t) {\\n  var mt = 1 - t;\\n  if (dot(a, b) < 0) t = -t;\\n  out[0] = a[0] * mt + b[0] * t;\\n  out[1] = a[1] * mt + b[1] * t;\\n  out[2] = a[2] * mt + b[2] * t;\\n  out[3] = a[3] * mt + b[3] * t;\\n  out[4] = a[4] * mt + b[4] * t;\\n  out[5] = a[5] * mt + b[5] * t;\\n  out[6] = a[6] * mt + b[6] * t;\\n  out[7] = a[7] * mt + b[7] * t;\\n  return out;\\n}\\n/**\\n * Calculates the inverse of a dual quat. If they are normalized, conjugate is cheaper\\n *\\n * @param {quat2} out the receiving dual quaternion\\n * @param {ReadonlyQuat2} a dual quat to calculate inverse of\\n * @returns {quat2} out\\n */\\n\\nfunction invert(out, a) {\\n  var sqlen = squaredLength(a);\\n  out[0] = -a[0] / sqlen;\\n  out[1] = -a[1] / sqlen;\\n  out[2] = -a[2] / sqlen;\\n  out[3] = a[3] / sqlen;\\n  out[4] = -a[4] / sqlen;\\n  out[5] = -a[5] / sqlen;\\n  out[6] = -a[6] / sqlen;\\n  out[7] = a[7] / sqlen;\\n  return out;\\n}\\n/**\\n * Calculates the conjugate of a dual quat\\n * If the dual quaternion is normalized, this function is faster than quat2.inverse and produces the same result.\\n *\\n * @param {quat2} out the receiving quaternion\\n * @param {ReadonlyQuat2} a quat to calculate conjugate of\\n * @returns {quat2} out\\n */\\n\\nfunction conjugate(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  return out;\\n}\\n/**\\n * Calculates the length of a dual quat\\n *\\n * @param {ReadonlyQuat2} a dual quat to calculate length of\\n * @returns {Number} length of a\\n * @function\\n */\\n\\nvar length = _quat_js__WEBPACK_IMPORTED_MODULE_1__.length;\\n/**\\n * Alias for {@link quat2.length}\\n * @function\\n */\\n\\nvar len = length;\\n/**\\n * Calculates the squared length of a dual quat\\n *\\n * @param {ReadonlyQuat2} a dual quat to calculate squared length of\\n * @returns {Number} squared length of a\\n * @function\\n */\\n\\nvar squaredLength = _quat_js__WEBPACK_IMPORTED_MODULE_1__.squaredLength;\\n/**\\n * Alias for {@link quat2.squaredLength}\\n * @function\\n */\\n\\nvar sqrLen = squaredLength;\\n/**\\n * Normalize a dual quat\\n *\\n * @param {quat2} out the receiving dual quaternion\\n * @param {ReadonlyQuat2} a dual quaternion to normalize\\n * @returns {quat2} out\\n * @function\\n */\\n\\nfunction normalize(out, a) {\\n  var magnitude = squaredLength(a);\\n\\n  if (magnitude > 0) {\\n    magnitude = Math.sqrt(magnitude);\\n    var a0 = a[0] / magnitude;\\n    var a1 = a[1] / magnitude;\\n    var a2 = a[2] / magnitude;\\n    var a3 = a[3] / magnitude;\\n    var b0 = a[4];\\n    var b1 = a[5];\\n    var b2 = a[6];\\n    var b3 = a[7];\\n    var a_dot_b = a0 * b0 + a1 * b1 + a2 * b2 + a3 * b3;\\n    out[0] = a0;\\n    out[1] = a1;\\n    out[2] = a2;\\n    out[3] = a3;\\n    out[4] = (b0 - a0 * a_dot_b) / magnitude;\\n    out[5] = (b1 - a1 * a_dot_b) / magnitude;\\n    out[6] = (b2 - a2 * a_dot_b) / magnitude;\\n    out[7] = (b3 - a3 * a_dot_b) / magnitude;\\n  }\\n\\n  return out;\\n}\\n/**\\n * Returns a string representation of a dual quatenion\\n *\\n * @param {ReadonlyQuat2} a dual quaternion to represent as a string\\n * @returns {String} string representation of the dual quat\\n */\\n\\nfunction str(a) {\\n  return \\\"quat2(\\\" + a[0] + \\\", \\\" + a[1] + \\\", \\\" + a[2] + \\\", \\\" + a[3] + \\\", \\\" + a[4] + \\\", \\\" + a[5] + \\\", \\\" + a[6] + \\\", \\\" + a[7] + \\\")\\\";\\n}\\n/**\\n * Returns whether or not the dual quaternions have exactly the same elements in the same position (when compared with ===)\\n *\\n * @param {ReadonlyQuat2} a the first dual quaternion.\\n * @param {ReadonlyQuat2} b the second dual quaternion.\\n * @returns {Boolean} true if the dual quaternions are equal, false otherwise.\\n */\\n\\nfunction exactEquals(a, b) {\\n  return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7];\\n}\\n/**\\n * Returns whether or not the dual quaternions have approximately the same elements in the same position.\\n *\\n * @param {ReadonlyQuat2} a the first dual quat.\\n * @param {ReadonlyQuat2} b the second dual quat.\\n * @returns {Boolean} true if the dual quats are equal, false otherwise.\\n */\\n\\nfunction equals(a, b) {\\n  var a0 = a[0],\\n      a1 = a[1],\\n      a2 = a[2],\\n      a3 = a[3],\\n      a4 = a[4],\\n      a5 = a[5],\\n      a6 = a[6],\\n      a7 = a[7];\\n  var b0 = b[0],\\n      b1 = b[1],\\n      b2 = b[2],\\n      b3 = b[3],\\n      b4 = b[4],\\n      b5 = b[5],\\n      b6 = b[6],\\n      b7 = b[7];\\n  return Math.abs(a0 - b0) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7));\\n}\\n\\n//# sourceURL=webpack://glplotter/./node_modules/gl-matrix/esm/quat2.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/gl-matrix/esm/vec2.js\":\n/*!********************************************!*\\\n  !*** ./node_modules/gl-matrix/esm/vec2.js ***!\n  \\********************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"add\\\": function() { return /* binding */ add; },\\n/* harmony export */   \\\"angle\\\": function() { return /* binding */ angle; },\\n/* harmony export */   \\\"ceil\\\": function() { return /* binding */ ceil; },\\n/* harmony export */   \\\"clone\\\": function() { return /* binding */ clone; },\\n/* harmony export */   \\\"copy\\\": function() { return /* binding */ copy; },\\n/* harmony export */   \\\"create\\\": function() { return /* binding */ create; },\\n/* harmony export */   \\\"cross\\\": function() { return /* binding */ cross; },\\n/* harmony export */   \\\"dist\\\": function() { return /* binding */ dist; },\\n/* harmony export */   \\\"distance\\\": function() { return /* binding */ distance; },\\n/* harmony export */   \\\"div\\\": function() { return /* binding */ div; },\\n/* harmony export */   \\\"divide\\\": function() { return /* binding */ divide; },\\n/* harmony export */   \\\"dot\\\": function() { return /* binding */ dot; },\\n/* harmony export */   \\\"equals\\\": function() { return /* binding */ equals; },\\n/* harmony export */   \\\"exactEquals\\\": function() { return /* binding */ exactEquals; },\\n/* harmony export */   \\\"floor\\\": function() { return /* binding */ floor; },\\n/* harmony export */   \\\"forEach\\\": function() { return /* binding */ forEach; },\\n/* harmony export */   \\\"fromValues\\\": function() { return /* binding */ fromValues; },\\n/* harmony export */   \\\"inverse\\\": function() { return /* binding */ inverse; },\\n/* harmony export */   \\\"len\\\": function() { return /* binding */ len; },\\n/* harmony export */   \\\"length\\\": function() { return /* binding */ length; },\\n/* harmony export */   \\\"lerp\\\": function() { return /* binding */ lerp; },\\n/* harmony export */   \\\"max\\\": function() { return /* binding */ max; },\\n/* harmony export */   \\\"min\\\": function() { return /* binding */ min; },\\n/* harmony export */   \\\"mul\\\": function() { return /* binding */ mul; },\\n/* harmony export */   \\\"multiply\\\": function() { return /* binding */ multiply; },\\n/* harmony export */   \\\"negate\\\": function() { return /* binding */ negate; },\\n/* harmony export */   \\\"normalize\\\": function() { return /* binding */ normalize; },\\n/* harmony export */   \\\"random\\\": function() { return /* binding */ random; },\\n/* harmony export */   \\\"rotate\\\": function() { return /* binding */ rotate; },\\n/* harmony export */   \\\"round\\\": function() { return /* binding */ round; },\\n/* harmony export */   \\\"scale\\\": function() { return /* binding */ scale; },\\n/* harmony export */   \\\"scaleAndAdd\\\": function() { return /* binding */ scaleAndAdd; },\\n/* harmony export */   \\\"set\\\": function() { return /* binding */ set; },\\n/* harmony export */   \\\"sqrDist\\\": function() { return /* binding */ sqrDist; },\\n/* harmony export */   \\\"sqrLen\\\": function() { return /* binding */ sqrLen; },\\n/* harmony export */   \\\"squaredDistance\\\": function() { return /* binding */ squaredDistance; },\\n/* harmony export */   \\\"squaredLength\\\": function() { return /* binding */ squaredLength; },\\n/* harmony export */   \\\"str\\\": function() { return /* binding */ str; },\\n/* harmony export */   \\\"sub\\\": function() { return /* binding */ sub; },\\n/* harmony export */   \\\"subtract\\\": function() { return /* binding */ subtract; },\\n/* harmony export */   \\\"transformMat2\\\": function() { return /* binding */ transformMat2; },\\n/* harmony export */   \\\"transformMat2d\\\": function() { return /* binding */ transformMat2d; },\\n/* harmony export */   \\\"transformMat3\\\": function() { return /* binding */ transformMat3; },\\n/* harmony export */   \\\"transformMat4\\\": function() { return /* binding */ transformMat4; },\\n/* harmony export */   \\\"zero\\\": function() { return /* binding */ zero; }\\n/* harmony export */ });\\n/* harmony import */ var _common_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common.js */ \\\"./node_modules/gl-matrix/esm/common.js\\\");\\n\\n/**\\n * 2 Dimensional Vector\\n * @module vec2\\n */\\n\\n/**\\n * Creates a new, empty vec2\\n *\\n * @returns {vec2} a new 2D vector\\n */\\n\\nfunction create() {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(2);\\n\\n  if (_common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE != Float32Array) {\\n    out[0] = 0;\\n    out[1] = 0;\\n  }\\n\\n  return out;\\n}\\n/**\\n * Creates a new vec2 initialized with values from an existing vector\\n *\\n * @param {ReadonlyVec2} a vector to clone\\n * @returns {vec2} a new 2D vector\\n */\\n\\nfunction clone(a) {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(2);\\n  out[0] = a[0];\\n  out[1] = a[1];\\n  return out;\\n}\\n/**\\n * Creates a new vec2 initialized with the given values\\n *\\n * @param {Number} x X component\\n * @param {Number} y Y component\\n * @returns {vec2} a new 2D vector\\n */\\n\\nfunction fromValues(x, y) {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(2);\\n  out[0] = x;\\n  out[1] = y;\\n  return out;\\n}\\n/**\\n * Copy the values from one vec2 to another\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a the source vector\\n * @returns {vec2} out\\n */\\n\\nfunction copy(out, a) {\\n  out[0] = a[0];\\n  out[1] = a[1];\\n  return out;\\n}\\n/**\\n * Set the components of a vec2 to the given values\\n *\\n * @param {vec2} out the receiving vector\\n * @param {Number} x X component\\n * @param {Number} y Y component\\n * @returns {vec2} out\\n */\\n\\nfunction set(out, x, y) {\\n  out[0] = x;\\n  out[1] = y;\\n  return out;\\n}\\n/**\\n * Adds two vec2's\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a the first operand\\n * @param {ReadonlyVec2} b the second operand\\n * @returns {vec2} out\\n */\\n\\nfunction add(out, a, b) {\\n  out[0] = a[0] + b[0];\\n  out[1] = a[1] + b[1];\\n  return out;\\n}\\n/**\\n * Subtracts vector b from vector a\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a the first operand\\n * @param {ReadonlyVec2} b the second operand\\n * @returns {vec2} out\\n */\\n\\nfunction subtract(out, a, b) {\\n  out[0] = a[0] - b[0];\\n  out[1] = a[1] - b[1];\\n  return out;\\n}\\n/**\\n * Multiplies two vec2's\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a the first operand\\n * @param {ReadonlyVec2} b the second operand\\n * @returns {vec2} out\\n */\\n\\nfunction multiply(out, a, b) {\\n  out[0] = a[0] * b[0];\\n  out[1] = a[1] * b[1];\\n  return out;\\n}\\n/**\\n * Divides two vec2's\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a the first operand\\n * @param {ReadonlyVec2} b the second operand\\n * @returns {vec2} out\\n */\\n\\nfunction divide(out, a, b) {\\n  out[0] = a[0] / b[0];\\n  out[1] = a[1] / b[1];\\n  return out;\\n}\\n/**\\n * Math.ceil the components of a vec2\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a vector to ceil\\n * @returns {vec2} out\\n */\\n\\nfunction ceil(out, a) {\\n  out[0] = Math.ceil(a[0]);\\n  out[1] = Math.ceil(a[1]);\\n  return out;\\n}\\n/**\\n * Math.floor the components of a vec2\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a vector to floor\\n * @returns {vec2} out\\n */\\n\\nfunction floor(out, a) {\\n  out[0] = Math.floor(a[0]);\\n  out[1] = Math.floor(a[1]);\\n  return out;\\n}\\n/**\\n * Returns the minimum of two vec2's\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a the first operand\\n * @param {ReadonlyVec2} b the second operand\\n * @returns {vec2} out\\n */\\n\\nfunction min(out, a, b) {\\n  out[0] = Math.min(a[0], b[0]);\\n  out[1] = Math.min(a[1], b[1]);\\n  return out;\\n}\\n/**\\n * Returns the maximum of two vec2's\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a the first operand\\n * @param {ReadonlyVec2} b the second operand\\n * @returns {vec2} out\\n */\\n\\nfunction max(out, a, b) {\\n  out[0] = Math.max(a[0], b[0]);\\n  out[1] = Math.max(a[1], b[1]);\\n  return out;\\n}\\n/**\\n * Math.round the components of a vec2\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a vector to round\\n * @returns {vec2} out\\n */\\n\\nfunction round(out, a) {\\n  out[0] = Math.round(a[0]);\\n  out[1] = Math.round(a[1]);\\n  return out;\\n}\\n/**\\n * Scales a vec2 by a scalar number\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a the vector to scale\\n * @param {Number} b amount to scale the vector by\\n * @returns {vec2} out\\n */\\n\\nfunction scale(out, a, b) {\\n  out[0] = a[0] * b;\\n  out[1] = a[1] * b;\\n  return out;\\n}\\n/**\\n * Adds two vec2's after scaling the second operand by a scalar value\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a the first operand\\n * @param {ReadonlyVec2} b the second operand\\n * @param {Number} scale the amount to scale b by before adding\\n * @returns {vec2} out\\n */\\n\\nfunction scaleAndAdd(out, a, b, scale) {\\n  out[0] = a[0] + b[0] * scale;\\n  out[1] = a[1] + b[1] * scale;\\n  return out;\\n}\\n/**\\n * Calculates the euclidian distance between two vec2's\\n *\\n * @param {ReadonlyVec2} a the first operand\\n * @param {ReadonlyVec2} b the second operand\\n * @returns {Number} distance between a and b\\n */\\n\\nfunction distance(a, b) {\\n  var x = b[0] - a[0],\\n      y = b[1] - a[1];\\n  return Math.hypot(x, y);\\n}\\n/**\\n * Calculates the squared euclidian distance between two vec2's\\n *\\n * @param {ReadonlyVec2} a the first operand\\n * @param {ReadonlyVec2} b the second operand\\n * @returns {Number} squared distance between a and b\\n */\\n\\nfunction squaredDistance(a, b) {\\n  var x = b[0] - a[0],\\n      y = b[1] - a[1];\\n  return x * x + y * y;\\n}\\n/**\\n * Calculates the length of a vec2\\n *\\n * @param {ReadonlyVec2} a vector to calculate length of\\n * @returns {Number} length of a\\n */\\n\\nfunction length(a) {\\n  var x = a[0],\\n      y = a[1];\\n  return Math.hypot(x, y);\\n}\\n/**\\n * Calculates the squared length of a vec2\\n *\\n * @param {ReadonlyVec2} a vector to calculate squared length of\\n * @returns {Number} squared length of a\\n */\\n\\nfunction squaredLength(a) {\\n  var x = a[0],\\n      y = a[1];\\n  return x * x + y * y;\\n}\\n/**\\n * Negates the components of a vec2\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a vector to negate\\n * @returns {vec2} out\\n */\\n\\nfunction negate(out, a) {\\n  out[0] = -a[0];\\n  out[1] = -a[1];\\n  return out;\\n}\\n/**\\n * Returns the inverse of the components of a vec2\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a vector to invert\\n * @returns {vec2} out\\n */\\n\\nfunction inverse(out, a) {\\n  out[0] = 1.0 / a[0];\\n  out[1] = 1.0 / a[1];\\n  return out;\\n}\\n/**\\n * Normalize a vec2\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a vector to normalize\\n * @returns {vec2} out\\n */\\n\\nfunction normalize(out, a) {\\n  var x = a[0],\\n      y = a[1];\\n  var len = x * x + y * y;\\n\\n  if (len > 0) {\\n    //TODO: evaluate use of glm_invsqrt here?\\n    len = 1 / Math.sqrt(len);\\n  }\\n\\n  out[0] = a[0] * len;\\n  out[1] = a[1] * len;\\n  return out;\\n}\\n/**\\n * Calculates the dot product of two vec2's\\n *\\n * @param {ReadonlyVec2} a the first operand\\n * @param {ReadonlyVec2} b the second operand\\n * @returns {Number} dot product of a and b\\n */\\n\\nfunction dot(a, b) {\\n  return a[0] * b[0] + a[1] * b[1];\\n}\\n/**\\n * Computes the cross product of two vec2's\\n * Note that the cross product must by definition produce a 3D vector\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec2} a the first operand\\n * @param {ReadonlyVec2} b the second operand\\n * @returns {vec3} out\\n */\\n\\nfunction cross(out, a, b) {\\n  var z = a[0] * b[1] - a[1] * b[0];\\n  out[0] = out[1] = 0;\\n  out[2] = z;\\n  return out;\\n}\\n/**\\n * Performs a linear interpolation between two vec2's\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a the first operand\\n * @param {ReadonlyVec2} b the second operand\\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\\n * @returns {vec2} out\\n */\\n\\nfunction lerp(out, a, b, t) {\\n  var ax = a[0],\\n      ay = a[1];\\n  out[0] = ax + t * (b[0] - ax);\\n  out[1] = ay + t * (b[1] - ay);\\n  return out;\\n}\\n/**\\n * Generates a random vector with the given scale\\n *\\n * @param {vec2} out the receiving vector\\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\\n * @returns {vec2} out\\n */\\n\\nfunction random(out, scale) {\\n  scale = scale || 1.0;\\n  var r = _common_js__WEBPACK_IMPORTED_MODULE_0__.RANDOM() * 2.0 * Math.PI;\\n  out[0] = Math.cos(r) * scale;\\n  out[1] = Math.sin(r) * scale;\\n  return out;\\n}\\n/**\\n * Transforms the vec2 with a mat2\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a the vector to transform\\n * @param {ReadonlyMat2} m matrix to transform with\\n * @returns {vec2} out\\n */\\n\\nfunction transformMat2(out, a, m) {\\n  var x = a[0],\\n      y = a[1];\\n  out[0] = m[0] * x + m[2] * y;\\n  out[1] = m[1] * x + m[3] * y;\\n  return out;\\n}\\n/**\\n * Transforms the vec2 with a mat2d\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a the vector to transform\\n * @param {ReadonlyMat2d} m matrix to transform with\\n * @returns {vec2} out\\n */\\n\\nfunction transformMat2d(out, a, m) {\\n  var x = a[0],\\n      y = a[1];\\n  out[0] = m[0] * x + m[2] * y + m[4];\\n  out[1] = m[1] * x + m[3] * y + m[5];\\n  return out;\\n}\\n/**\\n * Transforms the vec2 with a mat3\\n * 3rd vector component is implicitly '1'\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a the vector to transform\\n * @param {ReadonlyMat3} m matrix to transform with\\n * @returns {vec2} out\\n */\\n\\nfunction transformMat3(out, a, m) {\\n  var x = a[0],\\n      y = a[1];\\n  out[0] = m[0] * x + m[3] * y + m[6];\\n  out[1] = m[1] * x + m[4] * y + m[7];\\n  return out;\\n}\\n/**\\n * Transforms the vec2 with a mat4\\n * 3rd vector component is implicitly '0'\\n * 4th vector component is implicitly '1'\\n *\\n * @param {vec2} out the receiving vector\\n * @param {ReadonlyVec2} a the vector to transform\\n * @param {ReadonlyMat4} m matrix to transform with\\n * @returns {vec2} out\\n */\\n\\nfunction transformMat4(out, a, m) {\\n  var x = a[0];\\n  var y = a[1];\\n  out[0] = m[0] * x + m[4] * y + m[12];\\n  out[1] = m[1] * x + m[5] * y + m[13];\\n  return out;\\n}\\n/**\\n * Rotate a 2D vector\\n * @param {vec2} out The receiving vec2\\n * @param {ReadonlyVec2} a The vec2 point to rotate\\n * @param {ReadonlyVec2} b The origin of the rotation\\n * @param {Number} rad The angle of rotation in radians\\n * @returns {vec2} out\\n */\\n\\nfunction rotate(out, a, b, rad) {\\n  //Translate point to the origin\\n  var p0 = a[0] - b[0],\\n      p1 = a[1] - b[1],\\n      sinC = Math.sin(rad),\\n      cosC = Math.cos(rad); //perform rotation and translate to correct position\\n\\n  out[0] = p0 * cosC - p1 * sinC + b[0];\\n  out[1] = p0 * sinC + p1 * cosC + b[1];\\n  return out;\\n}\\n/**\\n * Get the angle between two 2D vectors\\n * @param {ReadonlyVec2} a The first operand\\n * @param {ReadonlyVec2} b The second operand\\n * @returns {Number} The angle in radians\\n */\\n\\nfunction angle(a, b) {\\n  var x1 = a[0],\\n      y1 = a[1],\\n      x2 = b[0],\\n      y2 = b[1],\\n      // mag is the product of the magnitudes of a and b\\n  mag = Math.sqrt(x1 * x1 + y1 * y1) * Math.sqrt(x2 * x2 + y2 * y2),\\n      // mag &&.. short circuits if mag == 0\\n  cosine = mag && (x1 * x2 + y1 * y2) / mag; // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1\\n\\n  return Math.acos(Math.min(Math.max(cosine, -1), 1));\\n}\\n/**\\n * Set the components of a vec2 to zero\\n *\\n * @param {vec2} out the receiving vector\\n * @returns {vec2} out\\n */\\n\\nfunction zero(out) {\\n  out[0] = 0.0;\\n  out[1] = 0.0;\\n  return out;\\n}\\n/**\\n * Returns a string representation of a vector\\n *\\n * @param {ReadonlyVec2} a vector to represent as a string\\n * @returns {String} string representation of the vector\\n */\\n\\nfunction str(a) {\\n  return \\\"vec2(\\\" + a[0] + \\\", \\\" + a[1] + \\\")\\\";\\n}\\n/**\\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\\n *\\n * @param {ReadonlyVec2} a The first vector.\\n * @param {ReadonlyVec2} b The second vector.\\n * @returns {Boolean} True if the vectors are equal, false otherwise.\\n */\\n\\nfunction exactEquals(a, b) {\\n  return a[0] === b[0] && a[1] === b[1];\\n}\\n/**\\n * Returns whether or not the vectors have approximately the same elements in the same position.\\n *\\n * @param {ReadonlyVec2} a The first vector.\\n * @param {ReadonlyVec2} b The second vector.\\n * @returns {Boolean} True if the vectors are equal, false otherwise.\\n */\\n\\nfunction equals(a, b) {\\n  var a0 = a[0],\\n      a1 = a[1];\\n  var b0 = b[0],\\n      b1 = b[1];\\n  return Math.abs(a0 - b0) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1));\\n}\\n/**\\n * Alias for {@link vec2.length}\\n * @function\\n */\\n\\nvar len = length;\\n/**\\n * Alias for {@link vec2.subtract}\\n * @function\\n */\\n\\nvar sub = subtract;\\n/**\\n * Alias for {@link vec2.multiply}\\n * @function\\n */\\n\\nvar mul = multiply;\\n/**\\n * Alias for {@link vec2.divide}\\n * @function\\n */\\n\\nvar div = divide;\\n/**\\n * Alias for {@link vec2.distance}\\n * @function\\n */\\n\\nvar dist = distance;\\n/**\\n * Alias for {@link vec2.squaredDistance}\\n * @function\\n */\\n\\nvar sqrDist = squaredDistance;\\n/**\\n * Alias for {@link vec2.squaredLength}\\n * @function\\n */\\n\\nvar sqrLen = squaredLength;\\n/**\\n * Perform some operation over an array of vec2s.\\n *\\n * @param {Array} a the array of vectors to iterate over\\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\\n * @param {Number} offset Number of elements to skip at the beginning of the array\\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\\n * @param {Function} fn Function to call for each vector in the array\\n * @param {Object} [arg] additional argument to pass to fn\\n * @returns {Array} a\\n * @function\\n */\\n\\nvar forEach = function () {\\n  var vec = create();\\n  return function (a, stride, offset, count, fn, arg) {\\n    var i, l;\\n\\n    if (!stride) {\\n      stride = 2;\\n    }\\n\\n    if (!offset) {\\n      offset = 0;\\n    }\\n\\n    if (count) {\\n      l = Math.min(count * stride + offset, a.length);\\n    } else {\\n      l = a.length;\\n    }\\n\\n    for (i = offset; i < l; i += stride) {\\n      vec[0] = a[i];\\n      vec[1] = a[i + 1];\\n      fn(vec, vec, arg);\\n      a[i] = vec[0];\\n      a[i + 1] = vec[1];\\n    }\\n\\n    return a;\\n  };\\n}();\\n\\n//# sourceURL=webpack://glplotter/./node_modules/gl-matrix/esm/vec2.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/gl-matrix/esm/vec3.js\":\n/*!********************************************!*\\\n  !*** ./node_modules/gl-matrix/esm/vec3.js ***!\n  \\********************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"add\\\": function() { return /* binding */ add; },\\n/* harmony export */   \\\"angle\\\": function() { return /* binding */ angle; },\\n/* harmony export */   \\\"bezier\\\": function() { return /* binding */ bezier; },\\n/* harmony export */   \\\"ceil\\\": function() { return /* binding */ ceil; },\\n/* harmony export */   \\\"clone\\\": function() { return /* binding */ clone; },\\n/* harmony export */   \\\"copy\\\": function() { return /* binding */ copy; },\\n/* harmony export */   \\\"create\\\": function() { return /* binding */ create; },\\n/* harmony export */   \\\"cross\\\": function() { return /* binding */ cross; },\\n/* harmony export */   \\\"dist\\\": function() { return /* binding */ dist; },\\n/* harmony export */   \\\"distance\\\": function() { return /* binding */ distance; },\\n/* harmony export */   \\\"div\\\": function() { return /* binding */ div; },\\n/* harmony export */   \\\"divide\\\": function() { return /* binding */ divide; },\\n/* harmony export */   \\\"dot\\\": function() { return /* binding */ dot; },\\n/* harmony export */   \\\"equals\\\": function() { return /* binding */ equals; },\\n/* harmony export */   \\\"exactEquals\\\": function() { return /* binding */ exactEquals; },\\n/* harmony export */   \\\"floor\\\": function() { return /* binding */ floor; },\\n/* harmony export */   \\\"forEach\\\": function() { return /* binding */ forEach; },\\n/* harmony export */   \\\"fromValues\\\": function() { return /* binding */ fromValues; },\\n/* harmony export */   \\\"hermite\\\": function() { return /* binding */ hermite; },\\n/* harmony export */   \\\"inverse\\\": function() { return /* binding */ inverse; },\\n/* harmony export */   \\\"len\\\": function() { return /* binding */ len; },\\n/* harmony export */   \\\"length\\\": function() { return /* binding */ length; },\\n/* harmony export */   \\\"lerp\\\": function() { return /* binding */ lerp; },\\n/* harmony export */   \\\"max\\\": function() { return /* binding */ max; },\\n/* harmony export */   \\\"min\\\": function() { return /* binding */ min; },\\n/* harmony export */   \\\"mul\\\": function() { return /* binding */ mul; },\\n/* harmony export */   \\\"multiply\\\": function() { return /* binding */ multiply; },\\n/* harmony export */   \\\"negate\\\": function() { return /* binding */ negate; },\\n/* harmony export */   \\\"normalize\\\": function() { return /* binding */ normalize; },\\n/* harmony export */   \\\"random\\\": function() { return /* binding */ random; },\\n/* harmony export */   \\\"rotateX\\\": function() { return /* binding */ rotateX; },\\n/* harmony export */   \\\"rotateY\\\": function() { return /* binding */ rotateY; },\\n/* harmony export */   \\\"rotateZ\\\": function() { return /* binding */ rotateZ; },\\n/* harmony export */   \\\"round\\\": function() { return /* binding */ round; },\\n/* harmony export */   \\\"scale\\\": function() { return /* binding */ scale; },\\n/* harmony export */   \\\"scaleAndAdd\\\": function() { return /* binding */ scaleAndAdd; },\\n/* harmony export */   \\\"set\\\": function() { return /* binding */ set; },\\n/* harmony export */   \\\"sqrDist\\\": function() { return /* binding */ sqrDist; },\\n/* harmony export */   \\\"sqrLen\\\": function() { return /* binding */ sqrLen; },\\n/* harmony export */   \\\"squaredDistance\\\": function() { return /* binding */ squaredDistance; },\\n/* harmony export */   \\\"squaredLength\\\": function() { return /* binding */ squaredLength; },\\n/* harmony export */   \\\"str\\\": function() { return /* binding */ str; },\\n/* harmony export */   \\\"sub\\\": function() { return /* binding */ sub; },\\n/* harmony export */   \\\"subtract\\\": function() { return /* binding */ subtract; },\\n/* harmony export */   \\\"transformMat3\\\": function() { return /* binding */ transformMat3; },\\n/* harmony export */   \\\"transformMat4\\\": function() { return /* binding */ transformMat4; },\\n/* harmony export */   \\\"transformQuat\\\": function() { return /* binding */ transformQuat; },\\n/* harmony export */   \\\"zero\\\": function() { return /* binding */ zero; }\\n/* harmony export */ });\\n/* harmony import */ var _common_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common.js */ \\\"./node_modules/gl-matrix/esm/common.js\\\");\\n\\n/**\\n * 3 Dimensional Vector\\n * @module vec3\\n */\\n\\n/**\\n * Creates a new, empty vec3\\n *\\n * @returns {vec3} a new 3D vector\\n */\\n\\nfunction create() {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(3);\\n\\n  if (_common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE != Float32Array) {\\n    out[0] = 0;\\n    out[1] = 0;\\n    out[2] = 0;\\n  }\\n\\n  return out;\\n}\\n/**\\n * Creates a new vec3 initialized with values from an existing vector\\n *\\n * @param {ReadonlyVec3} a vector to clone\\n * @returns {vec3} a new 3D vector\\n */\\n\\nfunction clone(a) {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(3);\\n  out[0] = a[0];\\n  out[1] = a[1];\\n  out[2] = a[2];\\n  return out;\\n}\\n/**\\n * Calculates the length of a vec3\\n *\\n * @param {ReadonlyVec3} a vector to calculate length of\\n * @returns {Number} length of a\\n */\\n\\nfunction length(a) {\\n  var x = a[0];\\n  var y = a[1];\\n  var z = a[2];\\n  return Math.hypot(x, y, z);\\n}\\n/**\\n * Creates a new vec3 initialized with the given values\\n *\\n * @param {Number} x X component\\n * @param {Number} y Y component\\n * @param {Number} z Z component\\n * @returns {vec3} a new 3D vector\\n */\\n\\nfunction fromValues(x, y, z) {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(3);\\n  out[0] = x;\\n  out[1] = y;\\n  out[2] = z;\\n  return out;\\n}\\n/**\\n * Copy the values from one vec3 to another\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a the source vector\\n * @returns {vec3} out\\n */\\n\\nfunction copy(out, a) {\\n  out[0] = a[0];\\n  out[1] = a[1];\\n  out[2] = a[2];\\n  return out;\\n}\\n/**\\n * Set the components of a vec3 to the given values\\n *\\n * @param {vec3} out the receiving vector\\n * @param {Number} x X component\\n * @param {Number} y Y component\\n * @param {Number} z Z component\\n * @returns {vec3} out\\n */\\n\\nfunction set(out, x, y, z) {\\n  out[0] = x;\\n  out[1] = y;\\n  out[2] = z;\\n  return out;\\n}\\n/**\\n * Adds two vec3's\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a the first operand\\n * @param {ReadonlyVec3} b the second operand\\n * @returns {vec3} out\\n */\\n\\nfunction add(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 * Subtracts vector b from vector a\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a the first operand\\n * @param {ReadonlyVec3} b the second operand\\n * @returns {vec3} out\\n */\\n\\nfunction subtract(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 * Multiplies two vec3's\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a the first operand\\n * @param {ReadonlyVec3} b the second operand\\n * @returns {vec3} out\\n */\\n\\nfunction multiply(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 * Divides two vec3's\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a the first operand\\n * @param {ReadonlyVec3} b the second operand\\n * @returns {vec3} out\\n */\\n\\nfunction divide(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 * Math.ceil the components of a vec3\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a vector to ceil\\n * @returns {vec3} out\\n */\\n\\nfunction ceil(out, a) {\\n  out[0] = Math.ceil(a[0]);\\n  out[1] = Math.ceil(a[1]);\\n  out[2] = Math.ceil(a[2]);\\n  return out;\\n}\\n/**\\n * Math.floor the components of a vec3\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a vector to floor\\n * @returns {vec3} out\\n */\\n\\nfunction floor(out, a) {\\n  out[0] = Math.floor(a[0]);\\n  out[1] = Math.floor(a[1]);\\n  out[2] = Math.floor(a[2]);\\n  return out;\\n}\\n/**\\n * Returns the minimum of two vec3's\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a the first operand\\n * @param {ReadonlyVec3} b the second operand\\n * @returns {vec3} out\\n */\\n\\nfunction min(out, a, b) {\\n  out[0] = Math.min(a[0], b[0]);\\n  out[1] = Math.min(a[1], b[1]);\\n  out[2] = Math.min(a[2], b[2]);\\n  return out;\\n}\\n/**\\n * Returns the maximum of two vec3's\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a the first operand\\n * @param {ReadonlyVec3} b the second operand\\n * @returns {vec3} out\\n */\\n\\nfunction max(out, a, b) {\\n  out[0] = Math.max(a[0], b[0]);\\n  out[1] = Math.max(a[1], b[1]);\\n  out[2] = Math.max(a[2], b[2]);\\n  return out;\\n}\\n/**\\n * Math.round the components of a vec3\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a vector to round\\n * @returns {vec3} out\\n */\\n\\nfunction round(out, a) {\\n  out[0] = Math.round(a[0]);\\n  out[1] = Math.round(a[1]);\\n  out[2] = Math.round(a[2]);\\n  return out;\\n}\\n/**\\n * Scales a vec3 by a scalar number\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a the vector to scale\\n * @param {Number} b amount to scale the vector by\\n * @returns {vec3} out\\n */\\n\\nfunction scale(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 * Adds two vec3's after scaling the second operand by a scalar value\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a the first operand\\n * @param {ReadonlyVec3} b the second operand\\n * @param {Number} scale the amount to scale b by before adding\\n * @returns {vec3} out\\n */\\n\\nfunction scaleAndAdd(out, a, b, scale) {\\n  out[0] = a[0] + b[0] * scale;\\n  out[1] = a[1] + b[1] * scale;\\n  out[2] = a[2] + b[2] * scale;\\n  return out;\\n}\\n/**\\n * Calculates the euclidian distance between two vec3's\\n *\\n * @param {ReadonlyVec3} a the first operand\\n * @param {ReadonlyVec3} b the second operand\\n * @returns {Number} distance between a and b\\n */\\n\\nfunction distance(a, b) {\\n  var x = b[0] - a[0];\\n  var y = b[1] - a[1];\\n  var z = b[2] - a[2];\\n  return Math.hypot(x, y, z);\\n}\\n/**\\n * Calculates the squared euclidian distance between two vec3's\\n *\\n * @param {ReadonlyVec3} a the first operand\\n * @param {ReadonlyVec3} b the second operand\\n * @returns {Number} squared distance between a and b\\n */\\n\\nfunction squaredDistance(a, b) {\\n  var x = b[0] - a[0];\\n  var y = b[1] - a[1];\\n  var z = b[2] - a[2];\\n  return x * x + y * y + z * z;\\n}\\n/**\\n * Calculates the squared length of a vec3\\n *\\n * @param {ReadonlyVec3} a vector to calculate squared length of\\n * @returns {Number} squared length of a\\n */\\n\\nfunction squaredLength(a) {\\n  var x = a[0];\\n  var y = a[1];\\n  var z = a[2];\\n  return x * x + y * y + z * z;\\n}\\n/**\\n * Negates the components of a vec3\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a vector to negate\\n * @returns {vec3} out\\n */\\n\\nfunction negate(out, a) {\\n  out[0] = -a[0];\\n  out[1] = -a[1];\\n  out[2] = -a[2];\\n  return out;\\n}\\n/**\\n * Returns the inverse of the components of a vec3\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a vector to invert\\n * @returns {vec3} out\\n */\\n\\nfunction inverse(out, a) {\\n  out[0] = 1.0 / a[0];\\n  out[1] = 1.0 / a[1];\\n  out[2] = 1.0 / a[2];\\n  return out;\\n}\\n/**\\n * Normalize a vec3\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a vector to normalize\\n * @returns {vec3} out\\n */\\n\\nfunction normalize(out, a) {\\n  var x = a[0];\\n  var y = a[1];\\n  var z = a[2];\\n  var len = x * x + y * y + z * z;\\n\\n  if (len > 0) {\\n    //TODO: evaluate use of glm_invsqrt here?\\n    len = 1 / Math.sqrt(len);\\n  }\\n\\n  out[0] = a[0] * len;\\n  out[1] = a[1] * len;\\n  out[2] = a[2] * len;\\n  return out;\\n}\\n/**\\n * Calculates the dot product of two vec3's\\n *\\n * @param {ReadonlyVec3} a the first operand\\n * @param {ReadonlyVec3} b the second operand\\n * @returns {Number} dot product of a and b\\n */\\n\\nfunction dot(a, b) {\\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\\n}\\n/**\\n * Computes the cross product of two vec3's\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a the first operand\\n * @param {ReadonlyVec3} b the second operand\\n * @returns {vec3} out\\n */\\n\\nfunction cross(out, a, b) {\\n  var ax = a[0],\\n      ay = a[1],\\n      az = a[2];\\n  var bx = b[0],\\n      by = b[1],\\n      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 * Performs a linear interpolation between two vec3's\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a the first operand\\n * @param {ReadonlyVec3} b the second operand\\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\\n * @returns {vec3} out\\n */\\n\\nfunction lerp(out, a, b, t) {\\n  var ax = a[0];\\n  var ay = a[1];\\n  var az = a[2];\\n  out[0] = ax + t * (b[0] - ax);\\n  out[1] = ay + t * (b[1] - ay);\\n  out[2] = az + t * (b[2] - az);\\n  return out;\\n}\\n/**\\n * Performs a hermite interpolation with two control points\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a the first operand\\n * @param {ReadonlyVec3} b the second operand\\n * @param {ReadonlyVec3} c the third operand\\n * @param {ReadonlyVec3} d the fourth operand\\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\\n * @returns {vec3} out\\n */\\n\\nfunction hermite(out, a, b, c, d, t) {\\n  var factorTimes2 = t * t;\\n  var factor1 = factorTimes2 * (2 * t - 3) + 1;\\n  var factor2 = factorTimes2 * (t - 2) + t;\\n  var factor3 = factorTimes2 * (t - 1);\\n  var factor4 = factorTimes2 * (3 - 2 * t);\\n  out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\\n  out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\\n  out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\\n  return out;\\n}\\n/**\\n * Performs a bezier interpolation with two control points\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a the first operand\\n * @param {ReadonlyVec3} b the second operand\\n * @param {ReadonlyVec3} c the third operand\\n * @param {ReadonlyVec3} d the fourth operand\\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\\n * @returns {vec3} out\\n */\\n\\nfunction bezier(out, a, b, c, d, t) {\\n  var inverseFactor = 1 - t;\\n  var inverseFactorTimesTwo = inverseFactor * inverseFactor;\\n  var factorTimes2 = t * t;\\n  var factor1 = inverseFactorTimesTwo * inverseFactor;\\n  var factor2 = 3 * t * inverseFactorTimesTwo;\\n  var factor3 = 3 * factorTimes2 * inverseFactor;\\n  var factor4 = factorTimes2 * t;\\n  out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\\n  out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\\n  out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\\n  return out;\\n}\\n/**\\n * Generates a random vector with the given scale\\n *\\n * @param {vec3} out the receiving vector\\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\\n * @returns {vec3} out\\n */\\n\\nfunction random(out, scale) {\\n  scale = scale || 1.0;\\n  var r = _common_js__WEBPACK_IMPORTED_MODULE_0__.RANDOM() * 2.0 * Math.PI;\\n  var z = _common_js__WEBPACK_IMPORTED_MODULE_0__.RANDOM() * 2.0 - 1.0;\\n  var zScale = Math.sqrt(1.0 - z * z) * scale;\\n  out[0] = Math.cos(r) * zScale;\\n  out[1] = Math.sin(r) * zScale;\\n  out[2] = z * scale;\\n  return out;\\n}\\n/**\\n * Transforms the vec3 with a mat4.\\n * 4th vector component is implicitly '1'\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a the vector to transform\\n * @param {ReadonlyMat4} m matrix to transform with\\n * @returns {vec3} out\\n */\\n\\nfunction transformMat4(out, a, m) {\\n  var x = a[0],\\n      y = a[1],\\n      z = a[2];\\n  var w = m[3] * x + m[7] * y + m[11] * z + m[15];\\n  w = w || 1.0;\\n  out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\\n  out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\\n  out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\\n  return out;\\n}\\n/**\\n * Transforms the vec3 with a mat3.\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a the vector to transform\\n * @param {ReadonlyMat3} m the 3x3 matrix to transform with\\n * @returns {vec3} out\\n */\\n\\nfunction transformMat3(out, a, m) {\\n  var x = a[0],\\n      y = a[1],\\n      z = a[2];\\n  out[0] = x * m[0] + y * m[3] + z * m[6];\\n  out[1] = x * m[1] + y * m[4] + z * m[7];\\n  out[2] = x * m[2] + y * m[5] + z * m[8];\\n  return out;\\n}\\n/**\\n * Transforms the vec3 with a quat\\n * Can also be used for dual quaternions. (Multiply it with the real part)\\n *\\n * @param {vec3} out the receiving vector\\n * @param {ReadonlyVec3} a the vector to transform\\n * @param {ReadonlyQuat} q quaternion to transform with\\n * @returns {vec3} out\\n */\\n\\nfunction transformQuat(out, a, q) {\\n  // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\\n  var qx = q[0],\\n      qy = q[1],\\n      qz = q[2],\\n      qw = q[3];\\n  var x = a[0],\\n      y = a[1],\\n      z = a[2]; // var qvec = [qx, qy, qz];\\n  // var uv = vec3.cross([], qvec, a);\\n\\n  var uvx = qy * z - qz * y,\\n      uvy = qz * x - qx * z,\\n      uvz = qx * y - qy * x; // var uuv = vec3.cross([], qvec, uv);\\n\\n  var uuvx = qy * uvz - qz * uvy,\\n      uuvy = qz * uvx - qx * uvz,\\n      uuvz = qx * uvy - qy * uvx; // vec3.scale(uv, uv, 2 * w);\\n\\n  var w2 = qw * 2;\\n  uvx *= w2;\\n  uvy *= w2;\\n  uvz *= w2; // vec3.scale(uuv, uuv, 2);\\n\\n  uuvx *= 2;\\n  uuvy *= 2;\\n  uuvz *= 2; // return vec3.add(out, a, vec3.add(out, uv, uuv));\\n\\n  out[0] = x + uvx + uuvx;\\n  out[1] = y + uvy + uuvy;\\n  out[2] = z + uvz + uuvz;\\n  return out;\\n}\\n/**\\n * Rotate a 3D vector around the x-axis\\n * @param {vec3} out The receiving vec3\\n * @param {ReadonlyVec3} a The vec3 point to rotate\\n * @param {ReadonlyVec3} b The origin of the rotation\\n * @param {Number} rad The angle of rotation in radians\\n * @returns {vec3} out\\n */\\n\\nfunction rotateX(out, a, b, rad) {\\n  var p = [],\\n      r = []; //Translate point to the origin\\n\\n  p[0] = a[0] - b[0];\\n  p[1] = a[1] - b[1];\\n  p[2] = a[2] - b[2]; //perform rotation\\n\\n  r[0] = p[0];\\n  r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\\n  r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); //translate to correct position\\n\\n  out[0] = r[0] + b[0];\\n  out[1] = r[1] + b[1];\\n  out[2] = r[2] + b[2];\\n  return out;\\n}\\n/**\\n * Rotate a 3D vector around the y-axis\\n * @param {vec3} out The receiving vec3\\n * @param {ReadonlyVec3} a The vec3 point to rotate\\n * @param {ReadonlyVec3} b The origin of the rotation\\n * @param {Number} rad The angle of rotation in radians\\n * @returns {vec3} out\\n */\\n\\nfunction rotateY(out, a, b, rad) {\\n  var p = [],\\n      r = []; //Translate point to the origin\\n\\n  p[0] = a[0] - b[0];\\n  p[1] = a[1] - b[1];\\n  p[2] = a[2] - b[2]; //perform rotation\\n\\n  r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\\n  r[1] = p[1];\\n  r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); //translate to correct position\\n\\n  out[0] = r[0] + b[0];\\n  out[1] = r[1] + b[1];\\n  out[2] = r[2] + b[2];\\n  return out;\\n}\\n/**\\n * Rotate a 3D vector around the z-axis\\n * @param {vec3} out The receiving vec3\\n * @param {ReadonlyVec3} a The vec3 point to rotate\\n * @param {ReadonlyVec3} b The origin of the rotation\\n * @param {Number} rad The angle of rotation in radians\\n * @returns {vec3} out\\n */\\n\\nfunction rotateZ(out, a, b, rad) {\\n  var p = [],\\n      r = []; //Translate point to the origin\\n\\n  p[0] = a[0] - b[0];\\n  p[1] = a[1] - b[1];\\n  p[2] = a[2] - b[2]; //perform rotation\\n\\n  r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\\n  r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\\n  r[2] = p[2]; //translate to correct position\\n\\n  out[0] = r[0] + b[0];\\n  out[1] = r[1] + b[1];\\n  out[2] = r[2] + b[2];\\n  return out;\\n}\\n/**\\n * Get the angle between two 3D vectors\\n * @param {ReadonlyVec3} a The first operand\\n * @param {ReadonlyVec3} b The second operand\\n * @returns {Number} The angle in radians\\n */\\n\\nfunction angle(a, b) {\\n  var ax = a[0],\\n      ay = a[1],\\n      az = a[2],\\n      bx = b[0],\\n      by = b[1],\\n      bz = b[2],\\n      mag1 = Math.sqrt(ax * ax + ay * ay + az * az),\\n      mag2 = Math.sqrt(bx * bx + by * by + bz * bz),\\n      mag = mag1 * mag2,\\n      cosine = mag && dot(a, b) / mag;\\n  return Math.acos(Math.min(Math.max(cosine, -1), 1));\\n}\\n/**\\n * Set the components of a vec3 to zero\\n *\\n * @param {vec3} out the receiving vector\\n * @returns {vec3} out\\n */\\n\\nfunction zero(out) {\\n  out[0] = 0.0;\\n  out[1] = 0.0;\\n  out[2] = 0.0;\\n  return out;\\n}\\n/**\\n * Returns a string representation of a vector\\n *\\n * @param {ReadonlyVec3} a vector to represent as a string\\n * @returns {String} string representation of the vector\\n */\\n\\nfunction str(a) {\\n  return \\\"vec3(\\\" + a[0] + \\\", \\\" + a[1] + \\\", \\\" + a[2] + \\\")\\\";\\n}\\n/**\\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\\n *\\n * @param {ReadonlyVec3} a The first vector.\\n * @param {ReadonlyVec3} b The second vector.\\n * @returns {Boolean} True if the vectors are equal, false otherwise.\\n */\\n\\nfunction exactEquals(a, b) {\\n  return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\\n}\\n/**\\n * Returns whether or not the vectors have approximately the same elements in the same position.\\n *\\n * @param {ReadonlyVec3} a The first vector.\\n * @param {ReadonlyVec3} b The second vector.\\n * @returns {Boolean} True if the vectors are equal, false otherwise.\\n */\\n\\nfunction equals(a, b) {\\n  var a0 = a[0],\\n      a1 = a[1],\\n      a2 = a[2];\\n  var b0 = b[0],\\n      b1 = b[1],\\n      b2 = b[2];\\n  return Math.abs(a0 - b0) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\\n}\\n/**\\n * Alias for {@link vec3.subtract}\\n * @function\\n */\\n\\nvar sub = subtract;\\n/**\\n * Alias for {@link vec3.multiply}\\n * @function\\n */\\n\\nvar mul = multiply;\\n/**\\n * Alias for {@link vec3.divide}\\n * @function\\n */\\n\\nvar div = divide;\\n/**\\n * Alias for {@link vec3.distance}\\n * @function\\n */\\n\\nvar dist = distance;\\n/**\\n * Alias for {@link vec3.squaredDistance}\\n * @function\\n */\\n\\nvar sqrDist = squaredDistance;\\n/**\\n * Alias for {@link vec3.length}\\n * @function\\n */\\n\\nvar len = length;\\n/**\\n * Alias for {@link vec3.squaredLength}\\n * @function\\n */\\n\\nvar sqrLen = squaredLength;\\n/**\\n * Perform some operation over an array of vec3s.\\n *\\n * @param {Array} a the array of vectors to iterate over\\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\\n * @param {Number} offset Number of elements to skip at the beginning of the array\\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\\n * @param {Function} fn Function to call for each vector in the array\\n * @param {Object} [arg] additional argument to pass to fn\\n * @returns {Array} a\\n * @function\\n */\\n\\nvar forEach = function () {\\n  var vec = create();\\n  return function (a, stride, offset, count, fn, arg) {\\n    var i, l;\\n\\n    if (!stride) {\\n      stride = 3;\\n    }\\n\\n    if (!offset) {\\n      offset = 0;\\n    }\\n\\n    if (count) {\\n      l = Math.min(count * stride + offset, a.length);\\n    } else {\\n      l = a.length;\\n    }\\n\\n    for (i = offset; i < l; i += stride) {\\n      vec[0] = a[i];\\n      vec[1] = a[i + 1];\\n      vec[2] = a[i + 2];\\n      fn(vec, vec, arg);\\n      a[i] = vec[0];\\n      a[i + 1] = vec[1];\\n      a[i + 2] = vec[2];\\n    }\\n\\n    return a;\\n  };\\n}();\\n\\n//# sourceURL=webpack://glplotter/./node_modules/gl-matrix/esm/vec3.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/gl-matrix/esm/vec4.js\":\n/*!********************************************!*\\\n  !*** ./node_modules/gl-matrix/esm/vec4.js ***!\n  \\********************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"add\\\": function() { return /* binding */ add; },\\n/* harmony export */   \\\"ceil\\\": function() { return /* binding */ ceil; },\\n/* harmony export */   \\\"clone\\\": function() { return /* binding */ clone; },\\n/* harmony export */   \\\"copy\\\": function() { return /* binding */ copy; },\\n/* harmony export */   \\\"create\\\": function() { return /* binding */ create; },\\n/* harmony export */   \\\"cross\\\": function() { return /* binding */ cross; },\\n/* harmony export */   \\\"dist\\\": function() { return /* binding */ dist; },\\n/* harmony export */   \\\"distance\\\": function() { return /* binding */ distance; },\\n/* harmony export */   \\\"div\\\": function() { return /* binding */ div; },\\n/* harmony export */   \\\"divide\\\": function() { return /* binding */ divide; },\\n/* harmony export */   \\\"dot\\\": function() { return /* binding */ dot; },\\n/* harmony export */   \\\"equals\\\": function() { return /* binding */ equals; },\\n/* harmony export */   \\\"exactEquals\\\": function() { return /* binding */ exactEquals; },\\n/* harmony export */   \\\"floor\\\": function() { return /* binding */ floor; },\\n/* harmony export */   \\\"forEach\\\": function() { return /* binding */ forEach; },\\n/* harmony export */   \\\"fromValues\\\": function() { return /* binding */ fromValues; },\\n/* harmony export */   \\\"inverse\\\": function() { return /* binding */ inverse; },\\n/* harmony export */   \\\"len\\\": function() { return /* binding */ len; },\\n/* harmony export */   \\\"length\\\": function() { return /* binding */ length; },\\n/* harmony export */   \\\"lerp\\\": function() { return /* binding */ lerp; },\\n/* harmony export */   \\\"max\\\": function() { return /* binding */ max; },\\n/* harmony export */   \\\"min\\\": function() { return /* binding */ min; },\\n/* harmony export */   \\\"mul\\\": function() { return /* binding */ mul; },\\n/* harmony export */   \\\"multiply\\\": function() { return /* binding */ multiply; },\\n/* harmony export */   \\\"negate\\\": function() { return /* binding */ negate; },\\n/* harmony export */   \\\"normalize\\\": function() { return /* binding */ normalize; },\\n/* harmony export */   \\\"random\\\": function() { return /* binding */ random; },\\n/* harmony export */   \\\"round\\\": function() { return /* binding */ round; },\\n/* harmony export */   \\\"scale\\\": function() { return /* binding */ scale; },\\n/* harmony export */   \\\"scaleAndAdd\\\": function() { return /* binding */ scaleAndAdd; },\\n/* harmony export */   \\\"set\\\": function() { return /* binding */ set; },\\n/* harmony export */   \\\"sqrDist\\\": function() { return /* binding */ sqrDist; },\\n/* harmony export */   \\\"sqrLen\\\": function() { return /* binding */ sqrLen; },\\n/* harmony export */   \\\"squaredDistance\\\": function() { return /* binding */ squaredDistance; },\\n/* harmony export */   \\\"squaredLength\\\": function() { return /* binding */ squaredLength; },\\n/* harmony export */   \\\"str\\\": function() { return /* binding */ str; },\\n/* harmony export */   \\\"sub\\\": function() { return /* binding */ sub; },\\n/* harmony export */   \\\"subtract\\\": function() { return /* binding */ subtract; },\\n/* harmony export */   \\\"transformMat4\\\": function() { return /* binding */ transformMat4; },\\n/* harmony export */   \\\"transformQuat\\\": function() { return /* binding */ transformQuat; },\\n/* harmony export */   \\\"zero\\\": function() { return /* binding */ zero; }\\n/* harmony export */ });\\n/* harmony import */ var _common_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common.js */ \\\"./node_modules/gl-matrix/esm/common.js\\\");\\n\\n/**\\n * 4 Dimensional Vector\\n * @module vec4\\n */\\n\\n/**\\n * Creates a new, empty vec4\\n *\\n * @returns {vec4} a new 4D vector\\n */\\n\\nfunction create() {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(4);\\n\\n  if (_common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE != Float32Array) {\\n    out[0] = 0;\\n    out[1] = 0;\\n    out[2] = 0;\\n    out[3] = 0;\\n  }\\n\\n  return out;\\n}\\n/**\\n * Creates a new vec4 initialized with values from an existing vector\\n *\\n * @param {ReadonlyVec4} a vector to clone\\n * @returns {vec4} a new 4D vector\\n */\\n\\nfunction clone(a) {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.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}\\n/**\\n * Creates a new vec4 initialized with the given values\\n *\\n * @param {Number} x X component\\n * @param {Number} y Y component\\n * @param {Number} z Z component\\n * @param {Number} w W component\\n * @returns {vec4} a new 4D vector\\n */\\n\\nfunction fromValues(x, y, z, w) {\\n  var out = new _common_js__WEBPACK_IMPORTED_MODULE_0__.ARRAY_TYPE(4);\\n  out[0] = x;\\n  out[1] = y;\\n  out[2] = z;\\n  out[3] = w;\\n  return out;\\n}\\n/**\\n * Copy the values from one vec4 to another\\n *\\n * @param {vec4} out the receiving vector\\n * @param {ReadonlyVec4} a the source vector\\n * @returns {vec4} 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  return out;\\n}\\n/**\\n * Set the components of a vec4 to the given values\\n *\\n * @param {vec4} out the receiving vector\\n * @param {Number} x X component\\n * @param {Number} y Y component\\n * @param {Number} z Z component\\n * @param {Number} w W component\\n * @returns {vec4} out\\n */\\n\\nfunction set(out, x, y, z, w) {\\n  out[0] = x;\\n  out[1] = y;\\n  out[2] = z;\\n  out[3] = w;\\n  return out;\\n}\\n/**\\n * Adds two vec4's\\n *\\n * @param {vec4} out the receiving vector\\n * @param {ReadonlyVec4} a the first operand\\n * @param {ReadonlyVec4} b the second operand\\n * @returns {vec4} out\\n */\\n\\nfunction add(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  out[3] = a[3] + b[3];\\n  return out;\\n}\\n/**\\n * Subtracts vector b from vector a\\n *\\n * @param {vec4} out the receiving vector\\n * @param {ReadonlyVec4} a the first operand\\n * @param {ReadonlyVec4} b the second operand\\n * @returns {vec4} out\\n */\\n\\nfunction subtract(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  out[3] = a[3] - b[3];\\n  return out;\\n}\\n/**\\n * Multiplies two vec4's\\n *\\n * @param {vec4} out the receiving vector\\n * @param {ReadonlyVec4} a the first operand\\n * @param {ReadonlyVec4} b the second operand\\n * @returns {vec4} out\\n */\\n\\nfunction multiply(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  out[3] = a[3] * b[3];\\n  return out;\\n}\\n/**\\n * Divides two vec4's\\n *\\n * @param {vec4} out the receiving vector\\n * @param {ReadonlyVec4} a the first operand\\n * @param {ReadonlyVec4} b the second operand\\n * @returns {vec4} out\\n */\\n\\nfunction divide(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  out[3] = a[3] / b[3];\\n  return out;\\n}\\n/**\\n * Math.ceil the components of a vec4\\n *\\n * @param {vec4} out the receiving vector\\n * @param {ReadonlyVec4} a vector to ceil\\n * @returns {vec4} out\\n */\\n\\nfunction ceil(out, a) {\\n  out[0] = Math.ceil(a[0]);\\n  out[1] = Math.ceil(a[1]);\\n  out[2] = Math.ceil(a[2]);\\n  out[3] = Math.ceil(a[3]);\\n  return out;\\n}\\n/**\\n * Math.floor the components of a vec4\\n *\\n * @param {vec4} out the receiving vector\\n * @param {ReadonlyVec4} a vector to floor\\n * @returns {vec4} out\\n */\\n\\nfunction floor(out, a) {\\n  out[0] = Math.floor(a[0]);\\n  out[1] = Math.floor(a[1]);\\n  out[2] = Math.floor(a[2]);\\n  out[3] = Math.floor(a[3]);\\n  return out;\\n}\\n/**\\n * Returns the minimum of two vec4's\\n *\\n * @param {vec4} out the receiving vector\\n * @param {ReadonlyVec4} a the first operand\\n * @param {ReadonlyVec4} b the second operand\\n * @returns {vec4} out\\n */\\n\\nfunction min(out, a, b) {\\n  out[0] = Math.min(a[0], b[0]);\\n  out[1] = Math.min(a[1], b[1]);\\n  out[2] = Math.min(a[2], b[2]);\\n  out[3] = Math.min(a[3], b[3]);\\n  return out;\\n}\\n/**\\n * Returns the maximum of two vec4's\\n *\\n * @param {vec4} out the receiving vector\\n * @param {ReadonlyVec4} a the first operand\\n * @param {ReadonlyVec4} b the second operand\\n * @returns {vec4} out\\n */\\n\\nfunction max(out, a, b) {\\n  out[0] = Math.max(a[0], b[0]);\\n  out[1] = Math.max(a[1], b[1]);\\n  out[2] = Math.max(a[2], b[2]);\\n  out[3] = Math.max(a[3], b[3]);\\n  return out;\\n}\\n/**\\n * Math.round the components of a vec4\\n *\\n * @param {vec4} out the receiving vector\\n * @param {ReadonlyVec4} a vector to round\\n * @returns {vec4} out\\n */\\n\\nfunction round(out, a) {\\n  out[0] = Math.round(a[0]);\\n  out[1] = Math.round(a[1]);\\n  out[2] = Math.round(a[2]);\\n  out[3] = Math.round(a[3]);\\n  return out;\\n}\\n/**\\n * Scales a vec4 by a scalar number\\n *\\n * @param {vec4} out the receiving vector\\n * @param {ReadonlyVec4} a the vector to scale\\n * @param {Number} b amount to scale the vector by\\n * @returns {vec4} out\\n */\\n\\nfunction scale(out, a, b) {\\n  out[0] = a[0] * b;\\n  out[1] = a[1] * b;\\n  out[2] = a[2] * b;\\n  out[3] = a[3] * b;\\n  return out;\\n}\\n/**\\n * Adds two vec4's after scaling the second operand by a scalar value\\n *\\n * @param {vec4} out the receiving vector\\n * @param {ReadonlyVec4} a the first operand\\n * @param {ReadonlyVec4} b the second operand\\n * @param {Number} scale the amount to scale b by before adding\\n * @returns {vec4} out\\n */\\n\\nfunction scaleAndAdd(out, a, b, scale) {\\n  out[0] = a[0] + b[0] * scale;\\n  out[1] = a[1] + b[1] * scale;\\n  out[2] = a[2] + b[2] * scale;\\n  out[3] = a[3] + b[3] * scale;\\n  return out;\\n}\\n/**\\n * Calculates the euclidian distance between two vec4's\\n *\\n * @param {ReadonlyVec4} a the first operand\\n * @param {ReadonlyVec4} b the second operand\\n * @returns {Number} distance between a and b\\n */\\n\\nfunction distance(a, b) {\\n  var x = b[0] - a[0];\\n  var y = b[1] - a[1];\\n  var z = b[2] - a[2];\\n  var w = b[3] - a[3];\\n  return Math.hypot(x, y, z, w);\\n}\\n/**\\n * Calculates the squared euclidian distance between two vec4's\\n *\\n * @param {ReadonlyVec4} a the first operand\\n * @param {ReadonlyVec4} b the second operand\\n * @returns {Number} squared distance between a and b\\n */\\n\\nfunction squaredDistance(a, b) {\\n  var x = b[0] - a[0];\\n  var y = b[1] - a[1];\\n  var z = b[2] - a[2];\\n  var w = b[3] - a[3];\\n  return x * x + y * y + z * z + w * w;\\n}\\n/**\\n * Calculates the length of a vec4\\n *\\n * @param {ReadonlyVec4} a vector to calculate length of\\n * @returns {Number} length of a\\n */\\n\\nfunction length(a) {\\n  var x = a[0];\\n  var y = a[1];\\n  var z = a[2];\\n  var w = a[3];\\n  return Math.hypot(x, y, z, w);\\n}\\n/**\\n * Calculates the squared length of a vec4\\n *\\n * @param {ReadonlyVec4} a vector to calculate squared length of\\n * @returns {Number} squared length of a\\n */\\n\\nfunction squaredLength(a) {\\n  var x = a[0];\\n  var y = a[1];\\n  var z = a[2];\\n  var w = a[3];\\n  return x * x + y * y + z * z + w * w;\\n}\\n/**\\n * Negates the components of a vec4\\n *\\n * @param {vec4} out the receiving vector\\n * @param {ReadonlyVec4} a vector to negate\\n * @returns {vec4} out\\n */\\n\\nfunction negate(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 * Returns the inverse of the components of a vec4\\n *\\n * @param {vec4} out the receiving vector\\n * @param {ReadonlyVec4} a vector to invert\\n * @returns {vec4} out\\n */\\n\\nfunction inverse(out, a) {\\n  out[0] = 1.0 / a[0];\\n  out[1] = 1.0 / a[1];\\n  out[2] = 1.0 / a[2];\\n  out[3] = 1.0 / a[3];\\n  return out;\\n}\\n/**\\n * Normalize a vec4\\n *\\n * @param {vec4} out the receiving vector\\n * @param {ReadonlyVec4} a vector to normalize\\n * @returns {vec4} out\\n */\\n\\nfunction normalize(out, a) {\\n  var x = a[0];\\n  var y = a[1];\\n  var z = a[2];\\n  var w = a[3];\\n  var len = x * x + y * y + z * z + w * w;\\n\\n  if (len > 0) {\\n    len = 1 / Math.sqrt(len);\\n  }\\n\\n  out[0] = x * len;\\n  out[1] = y * len;\\n  out[2] = z * len;\\n  out[3] = w * len;\\n  return out;\\n}\\n/**\\n * Calculates the dot product of two vec4's\\n *\\n * @param {ReadonlyVec4} a the first operand\\n * @param {ReadonlyVec4} b the second operand\\n * @returns {Number} dot product of a and b\\n */\\n\\nfunction dot(a, b) {\\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\\n}\\n/**\\n * Returns the cross-product of three vectors in a 4-dimensional space\\n *\\n * @param {ReadonlyVec4} result the receiving vector\\n * @param {ReadonlyVec4} U the first vector\\n * @param {ReadonlyVec4} V the second vector\\n * @param {ReadonlyVec4} W the third vector\\n * @returns {vec4} result\\n */\\n\\nfunction cross(out, u, v, w) {\\n  var A = v[0] * w[1] - v[1] * w[0],\\n      B = v[0] * w[2] - v[2] * w[0],\\n      C = v[0] * w[3] - v[3] * w[0],\\n      D = v[1] * w[2] - v[2] * w[1],\\n      E = v[1] * w[3] - v[3] * w[1],\\n      F = v[2] * w[3] - v[3] * w[2];\\n  var G = u[0];\\n  var H = u[1];\\n  var I = u[2];\\n  var J = u[3];\\n  out[0] = H * F - I * E + J * D;\\n  out[1] = -(G * F) + I * C - J * B;\\n  out[2] = G * E - H * C + J * A;\\n  out[3] = -(G * D) + H * B - I * A;\\n  return out;\\n}\\n/**\\n * Performs a linear interpolation between two vec4's\\n *\\n * @param {vec4} out the receiving vector\\n * @param {ReadonlyVec4} a the first operand\\n * @param {ReadonlyVec4} b the second operand\\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\\n * @returns {vec4} out\\n */\\n\\nfunction lerp(out, a, b, t) {\\n  var ax = a[0];\\n  var ay = a[1];\\n  var az = a[2];\\n  var aw = a[3];\\n  out[0] = ax + t * (b[0] - ax);\\n  out[1] = ay + t * (b[1] - ay);\\n  out[2] = az + t * (b[2] - az);\\n  out[3] = aw + t * (b[3] - aw);\\n  return out;\\n}\\n/**\\n * Generates a random vector with the given scale\\n *\\n * @param {vec4} out the receiving vector\\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\\n * @returns {vec4} out\\n */\\n\\nfunction random(out, scale) {\\n  scale = scale || 1.0; // Marsaglia, George. Choosing a Point from the Surface of a\\n  // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\\n  // http://projecteuclid.org/euclid.aoms/1177692644;\\n\\n  var v1, v2, v3, v4;\\n  var s1, s2;\\n\\n  do {\\n    v1 = _common_js__WEBPACK_IMPORTED_MODULE_0__.RANDOM() * 2 - 1;\\n    v2 = _common_js__WEBPACK_IMPORTED_MODULE_0__.RANDOM() * 2 - 1;\\n    s1 = v1 * v1 + v2 * v2;\\n  } while (s1 >= 1);\\n\\n  do {\\n    v3 = _common_js__WEBPACK_IMPORTED_MODULE_0__.RANDOM() * 2 - 1;\\n    v4 = _common_js__WEBPACK_IMPORTED_MODULE_0__.RANDOM() * 2 - 1;\\n    s2 = v3 * v3 + v4 * v4;\\n  } while (s2 >= 1);\\n\\n  var d = Math.sqrt((1 - s1) / s2);\\n  out[0] = scale * v1;\\n  out[1] = scale * v2;\\n  out[2] = scale * v3 * d;\\n  out[3] = scale * v4 * d;\\n  return out;\\n}\\n/**\\n * Transforms the vec4 with a mat4.\\n *\\n * @param {vec4} out the receiving vector\\n * @param {ReadonlyVec4} a the vector to transform\\n * @param {ReadonlyMat4} m matrix to transform with\\n * @returns {vec4} out\\n */\\n\\nfunction transformMat4(out, a, m) {\\n  var x = a[0],\\n      y = a[1],\\n      z = a[2],\\n      w = a[3];\\n  out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\\n  out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\\n  out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\\n  out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\\n  return out;\\n}\\n/**\\n * Transforms the vec4 with a quat\\n *\\n * @param {vec4} out the receiving vector\\n * @param {ReadonlyVec4} a the vector to transform\\n * @param {ReadonlyQuat} q quaternion to transform with\\n * @returns {vec4} out\\n */\\n\\nfunction transformQuat(out, a, q) {\\n  var x = a[0],\\n      y = a[1],\\n      z = a[2];\\n  var qx = q[0],\\n      qy = q[1],\\n      qz = q[2],\\n      qw = q[3]; // calculate quat * vec\\n\\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; // calculate result * inverse quat\\n\\n  out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\\n  out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\\n  out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\\n  out[3] = a[3];\\n  return out;\\n}\\n/**\\n * Set the components of a vec4 to zero\\n *\\n * @param {vec4} out the receiving vector\\n * @returns {vec4} out\\n */\\n\\nfunction zero(out) {\\n  out[0] = 0.0;\\n  out[1] = 0.0;\\n  out[2] = 0.0;\\n  out[3] = 0.0;\\n  return out;\\n}\\n/**\\n * Returns a string representation of a vector\\n *\\n * @param {ReadonlyVec4} a vector to represent as a string\\n * @returns {String} string representation of the vector\\n */\\n\\nfunction str(a) {\\n  return \\\"vec4(\\\" + a[0] + \\\", \\\" + a[1] + \\\", \\\" + a[2] + \\\", \\\" + a[3] + \\\")\\\";\\n}\\n/**\\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\\n *\\n * @param {ReadonlyVec4} a The first vector.\\n * @param {ReadonlyVec4} b The second vector.\\n * @returns {Boolean} True if the vectors are equal, false otherwise.\\n */\\n\\nfunction exactEquals(a, b) {\\n  return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\\n}\\n/**\\n * Returns whether or not the vectors have approximately the same elements in the same position.\\n *\\n * @param {ReadonlyVec4} a The first vector.\\n * @param {ReadonlyVec4} b The second vector.\\n * @returns {Boolean} True if the vectors are equal, false otherwise.\\n */\\n\\nfunction equals(a, b) {\\n  var a0 = a[0],\\n      a1 = a[1],\\n      a2 = a[2],\\n      a3 = a[3];\\n  var b0 = b[0],\\n      b1 = b[1],\\n      b2 = b[2],\\n      b3 = b[3];\\n  return Math.abs(a0 - b0) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= _common_js__WEBPACK_IMPORTED_MODULE_0__.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\\n}\\n/**\\n * Alias for {@link vec4.subtract}\\n * @function\\n */\\n\\nvar sub = subtract;\\n/**\\n * Alias for {@link vec4.multiply}\\n * @function\\n */\\n\\nvar mul = multiply;\\n/**\\n * Alias for {@link vec4.divide}\\n * @function\\n */\\n\\nvar div = divide;\\n/**\\n * Alias for {@link vec4.distance}\\n * @function\\n */\\n\\nvar dist = distance;\\n/**\\n * Alias for {@link vec4.squaredDistance}\\n * @function\\n */\\n\\nvar sqrDist = squaredDistance;\\n/**\\n * Alias for {@link vec4.length}\\n * @function\\n */\\n\\nvar len = length;\\n/**\\n * Alias for {@link vec4.squaredLength}\\n * @function\\n */\\n\\nvar sqrLen = squaredLength;\\n/**\\n * Perform some operation over an array of vec4s.\\n *\\n * @param {Array} a the array of vectors to iterate over\\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\\n * @param {Number} offset Number of elements to skip at the beginning of the array\\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\\n * @param {Function} fn Function to call for each vector in the array\\n * @param {Object} [arg] additional argument to pass to fn\\n * @returns {Array} a\\n * @function\\n */\\n\\nvar forEach = function () {\\n  var vec = create();\\n  return function (a, stride, offset, count, fn, arg) {\\n    var i, l;\\n\\n    if (!stride) {\\n      stride = 4;\\n    }\\n\\n    if (!offset) {\\n      offset = 0;\\n    }\\n\\n    if (count) {\\n      l = Math.min(count * stride + offset, a.length);\\n    } else {\\n      l = a.length;\\n    }\\n\\n    for (i = offset; i < l; i += stride) {\\n      vec[0] = a[i];\\n      vec[1] = a[i + 1];\\n      vec[2] = a[i + 2];\\n      vec[3] = a[i + 3];\\n      fn(vec, vec, arg);\\n      a[i] = vec[0];\\n      a[i + 1] = vec[1];\\n      a[i + 2] = vec[2];\\n      a[i + 3] = vec[3];\\n    }\\n\\n    return a;\\n  };\\n}();\\n\\n//# sourceURL=webpack://glplotter/./node_modules/gl-matrix/esm/vec4.js?\");\n\n/***/ }),\n\n/***/ \"./src/measure/gl/fragment.glsl\":\n/*!**************************************!*\\\n  !*** ./src/measure/gl/fragment.glsl ***!\n  \\**************************************/\n/***/ (function(module) {\n\neval(\"module.exports = \\\"precision mediump float;\\\\nuniform vec4 u_fragColor;\\\\nvoid main() {\\\\n\\\\tgl_FragColor = u_fragColor;\\\\n}\\\\n\\\"\\n\\n//# sourceURL=webpack://glplotter/./src/measure/gl/fragment.glsl?\");\n\n/***/ }),\n\n/***/ \"./src/measure/gl/vertex.glsl\":\n/*!************************************!*\\\n  !*** ./src/measure/gl/vertex.glsl ***!\n  \\************************************/\n/***/ (function(module) {\n\neval(\"module.exports = \\\"attribute vec3 a_position;\\\\nuniform mat4 u_translationMatrix;\\\\nuniform mat4 u_scaleMatrix;\\\\nuniform mat4 u_modelMatrix;\\\\nuniform mat4 u_projectionMatrix;\\\\nvoid main() {\\\\n\\\\tvec3 pos = a_position;\\\\n\\\\tpos[2] = 0.0;\\\\n\\\\tvec4 scaled_position = (u_modelMatrix * u_scaleMatrix) * vec4(pos, 1.0);\\\\n\\\\tvec4 transformedPos = ((u_translationMatrix * u_projectionMatrix) * u_modelMatrix) * scaled_position;\\\\n\\\\tif (a_position[2] == 1.0) {\\\\n\\\\t\\\\ttransformedPos[0] = transformedPos[0] + 0.002;\\\\n\\\\t}\\\\n\\\\tgl_Position = transformedPos;\\\\n}\\\\n\\\"\\n\\n//# sourceURL=webpack://glplotter/./src/measure/gl/vertex.glsl?\");\n\n/***/ }),\n\n/***/ \"./src/signal/gl/fragment.glsl\":\n/*!*************************************!*\\\n  !*** ./src/signal/gl/fragment.glsl ***!\n  \\*************************************/\n/***/ (function(module) {\n\neval(\"module.exports = \\\"precision highp float;\\\\nuniform vec4 u_fragColor;\\\\nvoid main() {\\\\n\\\\tgl_FragColor = u_fragColor;\\\\n}\\\\n\\\"\\n\\n//# sourceURL=webpack://glplotter/./src/signal/gl/fragment.glsl?\");\n\n/***/ }),\n\n/***/ \"./src/signal/gl/vertex.glsl\":\n/*!***********************************!*\\\n  !*** ./src/signal/gl/vertex.glsl ***!\n  \\***********************************/\n/***/ (function(module) {\n\neval(\"module.exports = \\\"attribute vec3 a_position;\\\\nuniform mat4 u_translationMatrix;\\\\nuniform mat4 u_scaleMatrix;\\\\nuniform mat4 u_modelMatrix;\\\\nuniform mat4 u_projectionMatrix;\\\\nvoid main() {\\\\n\\\\tvec3 pos = a_position;\\\\n\\\\tvec4 scaled_position = (u_modelMatrix * u_scaleMatrix) * vec4(pos, 1.0);\\\\n\\\\tgl_Position = ((u_translationMatrix * u_projectionMatrix) * u_modelMatrix) * scaled_position;\\\\n}\\\\n\\\"\\n\\n//# sourceURL=webpack://glplotter/./src/signal/gl/vertex.glsl?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hex-rgb/index.js\":\n/*!***************************************!*\\\n  !*** ./node_modules/hex-rgb/index.js ***!\n  \\***************************************/\n/***/ (function(module) {\n\n\"use strict\";\neval(\"\\n\\nconst hexCharacters = 'a-f\\\\\\\\d';\\nconst match3or4Hex = `#?[${hexCharacters}]{3}[${hexCharacters}]?`;\\nconst match6or8Hex = `#?[${hexCharacters}]{6}([${hexCharacters}]{2})?`;\\nconst nonHexChars = new RegExp(`[^#${hexCharacters}]`, 'gi');\\nconst validHexSize = new RegExp(`^${match3or4Hex}$|^${match6or8Hex}$`, 'i');\\n\\nmodule.exports = (hex, options = {}) => {\\n\\tif (typeof hex !== 'string' || nonHexChars.test(hex) || !validHexSize.test(hex)) {\\n\\t\\tthrow new TypeError('Expected a valid hex string');\\n\\t}\\n\\n\\thex = hex.replace(/^#/, '');\\n\\tlet alphaFromHex = 1;\\n\\n\\tif (hex.length === 8) {\\n\\t\\talphaFromHex = Number.parseInt(hex.slice(6, 8), 16) / 255;\\n\\t\\thex = hex.slice(0, 6);\\n\\t}\\n\\n\\tif (hex.length === 4) {\\n\\t\\talphaFromHex = Number.parseInt(hex.slice(3, 4).repeat(2), 16) / 255;\\n\\t\\thex = hex.slice(0, 3);\\n\\t}\\n\\n\\tif (hex.length === 3) {\\n\\t\\thex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\\n\\t}\\n\\n\\tconst number = Number.parseInt(hex, 16);\\n\\tconst red = number >> 16;\\n\\tconst green = (number >> 8) & 255;\\n\\tconst blue = number & 255;\\n\\tconst alpha = typeof options.alpha === 'number' ? options.alpha : alphaFromHex;\\n\\n\\tif (options.format === 'array') {\\n\\t\\treturn [red, green, blue, alpha];\\n\\t}\\n\\n\\tif (options.format === 'css') {\\n\\t\\tconst alphaString = alpha === 1 ? '' : ` / ${Number((alpha * 100).toFixed(2))}%`;\\n\\t\\treturn `rgb(${red} ${green} ${blue}${alphaString})`;\\n\\t}\\n\\n\\treturn {red, green, blue, alpha};\\n};\\n\\n\\n//# sourceURL=webpack://glplotter/./node_modules/hex-rgb/index.js?\");\n\n/***/ }),\n\n/***/ \"./src/gl-context.ts\":\n/*!***************************!*\\\n  !*** ./src/gl-context.ts ***!\n  \\***************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.GLContext = exports.destroyGlContext = exports.clearContext = exports.resizeGlContext = exports.createGlContext = void 0;\\nvar gl_matrix_1 = __webpack_require__(/*! gl-matrix */ \\\"./node_modules/gl-matrix/esm/index.js\\\");\\nvar GLError_1 = __webpack_require__(/*! ./structures/GLError */ \\\"./src/structures/GLError.ts\\\");\\nvar createGlContext = function (domElement) {\\n    var dimensions = {\\n        width: domElement.getBoundingClientRect().width,\\n        height: domElement.getBoundingClientRect().height,\\n    };\\n    // Create a container holding two canvas\\n    // - one for the 2d drawing\\n    // - one for the text\\n    var textCanvas = document.createElement('canvas');\\n    domElement.appendChild(textCanvas);\\n    var drawingCanvas = document.createElement('canvas');\\n    domElement.appendChild(drawingCanvas);\\n    positionCanvas(textCanvas, dimensions);\\n    positionCanvas(drawingCanvas, dimensions);\\n    gl_matrix_1.glMatrix.setMatrixArrayType(Array);\\n    var _a = initializeContexts(textCanvas, drawingCanvas), textContext = _a.textContext, drawingContext = _a.drawingContext;\\n    return {\\n        textCanvas: textCanvas,\\n        drawingCanvas: drawingCanvas,\\n        textContext: textContext,\\n        drawingContext: drawingContext,\\n    };\\n};\\nexports.createGlContext = createGlContext;\\nvar positionCanvas = function (canvas, dimensions) {\\n    var scale = +window.devicePixelRatio || 1;\\n    canvas.width = Math.floor(dimensions.width * scale) | 0;\\n    canvas.height = Math.floor(dimensions.height * scale) | 0;\\n    canvas.style.position = 'absolute';\\n    canvas.style.top = '0px';\\n    canvas.style.left = '0px';\\n    canvas.style.width = \\\"\\\".concat(Math.floor(dimensions.width), \\\"px\\\");\\n    canvas.style.height = \\\"\\\".concat(Math.floor(dimensions.height), \\\"px\\\");\\n};\\nvar initializeContexts = function (textCanvas, drawingCanvas) {\\n    var textContext = textCanvas.getContext('2d');\\n    if (textContext === null) {\\n        throw new GLError_1.GLError('Could not create text context');\\n    }\\n    var drawingContext = drawingCanvas.getContext('webgl2', {\\n        preserveDrawingBuffer: false,\\n        antialias: false,\\n    });\\n    if (drawingContext === null) {\\n        throw new GLError_1.GLError('Could not create drawing context');\\n    }\\n    drawingContext.disable(drawingContext.SCISSOR_TEST);\\n    drawingContext.clearColor(0, 0, 0, 0);\\n    drawingContext.clear(drawingContext.COLOR_BUFFER_BIT);\\n    drawingContext.clearDepth(1.0);\\n    drawingContext.enable(drawingContext.BLEND);\\n    drawingContext.blendFunc(drawingContext.SRC_ALPHA, drawingContext.ONE_MINUS_SRC_ALPHA);\\n    drawingContext.disable(drawingContext.DEPTH_TEST);\\n    drawingContext.lineWidth(2);\\n    drawingContext.viewport(0, 0, drawingContext.drawingBufferWidth, drawingContext.drawingBufferHeight);\\n    return { textContext: textContext, drawingContext: drawingContext };\\n};\\nvar resizeGlContext = function (domElement, _a) {\\n    var textContext = _a.textContext, drawingContext = _a.drawingContext;\\n    var dimensions = {\\n        width: domElement.getBoundingClientRect().width,\\n        height: domElement.getBoundingClientRect().height,\\n    };\\n    positionCanvas(textContext.canvas, dimensions);\\n    positionCanvas(drawingContext.canvas, dimensions);\\n    drawingContext.viewport(0, 0, drawingContext.drawingBufferWidth, drawingContext.drawingBufferHeight);\\n};\\nexports.resizeGlContext = resizeGlContext;\\nvar clearContext = function (_a) {\\n    var textContext = _a.textContext, drawingContext = _a.drawingContext;\\n    drawingContext.disable(drawingContext.SCISSOR_TEST);\\n    drawingContext.clearColor(0, 0, 0, 0);\\n    drawingContext.clear(drawingContext.COLOR_BUFFER_BIT | drawingContext.DEPTH_BUFFER_BIT);\\n    // Clear the 2D canvas\\n    textContext.clearRect(0, 0, textContext.canvas.width, textContext.canvas.height);\\n};\\nexports.clearContext = clearContext;\\nvar destroyGlContext = function (_a) {\\n    var _b, _c;\\n    var textContext = _a.textContext, drawingContext = _a.drawingContext;\\n    textContext.clearRect(0, 0, textContext.canvas.width, textContext.canvas.height);\\n    drawingContext.disable(drawingContext.SCISSOR_TEST);\\n    drawingContext.clearColor(0, 0, 0, 0);\\n    drawingContext.clear(drawingContext.COLOR_BUFFER_BIT | drawingContext.DEPTH_BUFFER_BIT);\\n    (_b = textContext.canvas.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(textContext.canvas);\\n    (_c = drawingContext.canvas.parentNode) === null || _c === void 0 ? void 0 : _c.removeChild(drawingContext.canvas);\\n};\\nexports.destroyGlContext = destroyGlContext;\\nexports.GLContext = {\\n    create: function (domElement) {\\n        var dimensions = {\\n            width: domElement.getBoundingClientRect().width,\\n            height: domElement.getBoundingClientRect().height,\\n        };\\n        // Create a container holding two canvas\\n        // - one for the 2d drawing\\n        // - one for the text\\n        var textCanvas = document.createElement('canvas');\\n        domElement.appendChild(textCanvas);\\n        var drawingCanvas = document.createElement('canvas');\\n        domElement.appendChild(drawingCanvas);\\n        this.positionCanvas(textCanvas, dimensions);\\n        this.positionCanvas(drawingCanvas, dimensions);\\n        var _a = this.initializeContexts(textCanvas, drawingCanvas), textContext = _a.textContext, drawingContext = _a.drawingContext;\\n        return {\\n            textCanvas: textCanvas,\\n            drawingCanvas: drawingCanvas,\\n            textContext: textContext,\\n            drawingContext: drawingContext,\\n        };\\n    },\\n    positionCanvas: function (canvas, dimensions) {\\n        canvas.style.position = 'absolute';\\n        canvas.style.top = '0px';\\n        canvas.style.left = '0px';\\n        canvas.style.width = \\\"\\\".concat(Math.floor(dimensions.width), \\\" px\\\");\\n        canvas.style.height = \\\"\\\".concat(Math.floor(dimensions.height), \\\" px\\\");\\n    },\\n    initializeContexts: function (textCanvas, drawingCanvas) {\\n        var textContext = textCanvas.getContext('2d');\\n        if (textContext === null) {\\n            throw new GLError_1.GLError('Could not create text context');\\n        }\\n        var drawingContext = drawingCanvas.getContext('webgl2', {\\n            preserveDrawingBuffer: false,\\n            antialias: false,\\n        });\\n        if (drawingContext === null) {\\n            throw new GLError_1.GLError('Could not create drawing context');\\n        }\\n        drawingContext.disable(drawingContext.SCISSOR_TEST);\\n        drawingContext.clearColor(0, 0, 0, 0);\\n        drawingContext.clear(drawingContext.COLOR_BUFFER_BIT);\\n        drawingContext.clearDepth(1.0);\\n        drawingContext.enable(drawingContext.BLEND);\\n        drawingContext.blendFunc(drawingContext.SRC_ALPHA, drawingContext.ONE_MINUS_SRC_ALPHA);\\n        drawingContext.disable(drawingContext.DEPTH_TEST);\\n        drawingContext.lineWidth(2);\\n        drawingContext.viewport(0, 0, drawingContext.drawingBufferWidth, drawingContext.drawingBufferHeight);\\n        return { textContext: textContext, drawingContext: drawingContext };\\n    },\\n    // getCanvasDimensions() {\\n    //   let scale = +window.devicePixelRatio || 1;\\n    //   var width  = Math.floor(this.dimensions.width  * scale) | 0;\\n    //   var height = Math.floor(this.dimensions.height * scale) | 0;\\n    // },\\n    // //   return {width: width, height: height}\\n    // // },\\n    // // resize() {\\n    // //   this.setContainerSize();\\n    // //   this.fit();\\n    // // },\\n    // initGl() {\\n    //   this.gl = this.canvas.getContext('webgl2', {\\n    //     preserveDrawingBuffer: false,\\n    //     antialias: false\\n    //   });\\n    //   this.gl.disable(this.gl.SCISSOR_TEST);\\n    //   this.gl.clearColor(0, 0, 0, 0);\\n    //   this.gl.clear(this.gl.COLOR_BUFFER_BIT);\\n    //   this.gl.clearDepth(1.0);\\n    //   this.gl.enable(this.gl.BLEND);\\n    //   this.gl.blendFunc(this.gl.SRC_ALPHA, this.gl.ONE_MINUS_SRC_ALPHA);\\n    //   this.gl.disable(this.gl.DEPTH_TEST)\\n    //   this.gl.lineWidth(2);\\n    //   this.gl.viewport(0, 0, this.gl.drawingBufferWidth, this.gl.drawingBufferHeight);\\n    //   this.textContext = this.textCanvas.getContext(\\\"2d\\\");\\n    // },\\n    // resetGl() {\\n    //   let canvasDimensions = this.getCanvasDimensions();\\n    //   if (this.canvas.width !== canvasDimensions.width ||\\n    //     this.canvas.height !== canvasDimensions.height) {\\n    //     this.canvas.width = canvasDimensions.width;\\n    //     this.canvas.height = canvasDimensions.height;\\n    //     this.textCanvas.width = canvasDimensions.width;\\n    //     this.textCanvas.height = canvasDimensions.height;\\n    //     this.initGl();\\n    //   },\\n    // //   try {\\n    // //     if (!this.gl || this.gl.isContextLost()) {\\n    // //       this.initGl();\\n    // //     }\\n    // //   } catch (err) {} // catch chrome developer tool causing crash\\n    // // },\\n    // // setCurrentTab(tabId) {\\n    // //   this.currentTabToDraw = tabId;\\n    // // },\\n    // purge(context: GLContextProps): void {\\n    //   context.textContext.clearRect(\\n    //     0,\\n    //     0,\\n    //     context.textContext.canvas.width,\\n    //     context.textContext.canvas.height\\n    //   );\\n    //   context.drawingContext.disable(context.drawingContext.SCISSOR_TEST);\\n    //   context.drawingContext.clearColor(0, 0, 0, 0);\\n    //   context.drawingContext.clear(\\n    //     context.drawingContext.COLOR_BUFFER_BIT |\\n    //       context.drawingContext.DEPTH_BUFFER_BIT\\n    //   );\\n    // },\\n    // destroy(context: GLContextProps): void {\\n    //   this.purge(context);\\n    //   context.textCanvas.parentNode?.removeChild(context.textCanvas);\\n    //   context.drawingCanvas.parentNode?.removeChild(context.drawingCanvas);\\n    // },\\n};\\n\\n\\n//# sourceURL=webpack://glplotter/./src/gl-context.ts?\");\n\n/***/ }),\n\n/***/ \"./src/gl-plotter.ts\":\n/*!***************************!*\\\n  !*** ./src/gl-plotter.ts ***!\n  \\***************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __assign = (this && this.__assign) || function () {\\n    __assign = Object.assign || function(t) {\\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\\n            s = arguments[i];\\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\\n                t[p] = s[p];\\n        }\\n        return t;\\n    };\\n    return __assign.apply(this, arguments);\\n};\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.glplotter = void 0;\\nvar gl_context_1 = __webpack_require__(/*! ./gl-context */ \\\"./src/gl-context.ts\\\");\\nvar store_1 = __webpack_require__(/*! ./store/store */ \\\"./src/store/store.ts\\\");\\nvar screen_utils_1 = __webpack_require__(/*! ./screen/screen-utils */ \\\"./src/screen/screen-utils.ts\\\");\\nvar conversions_1 = __webpack_require__(/*! ./utils/conversions */ \\\"./src/utils/conversions.ts\\\");\\nfunction glplotter(_a) {\\n    var referenceContainer = _a.referenceContainer, displayRate = _a.displayRate, stateObserver = _a.stateObserver;\\n    var store = (0, store_1.createStore)();\\n    store.dispatch({\\n        type: 'screen/init',\\n        payload: {\\n            container: referenceContainer,\\n            displayRate: displayRate,\\n        },\\n    });\\n    var contextProps = (0, gl_context_1.createGlContext)(referenceContainer);\\n    var emitStateChanged = function () {\\n        var _a = store.getState(), screenState = _a.screenState, gpuBuffers = _a.gpuBuffers;\\n        var pointsPerWindow = (0, conversions_1.screenSizeToPointSize)(screenState);\\n        var gpuOverflow = gpuBuffers.find(function (buffer) { return !!buffer.gpuBufferOverflow; }) !== undefined;\\n        stateObserver === null || stateObserver === void 0 ? void 0 : stateObserver({ pointsPerWindow: pointsPerWindow, gpuOverflow: gpuOverflow });\\n    };\\n    var resizeListener = function () {\\n        (0, gl_context_1.resizeGlContext)(referenceContainer, contextProps);\\n        store.dispatch({\\n            type: 'screen/new-container',\\n            payload: {\\n                container: referenceContainer,\\n            },\\n        });\\n        emitStateChanged();\\n    };\\n    //attach resize listener\\n    window.addEventListener('resize', resizeListener);\\n    var pendingAnimationRequest = requestAnimationFrame(function () { return draw(); });\\n    var draw = function () {\\n        var gpuBuffers = store.getState().gpuBuffers;\\n        (0, gl_context_1.clearContext)(contextProps);\\n        store.dispatch({\\n            type: 'signal/drawAll',\\n            payload: {\\n                gl: contextProps.drawingContext,\\n            },\\n        });\\n        store.dispatch({\\n            type: 'measure/drawAll',\\n            payload: {\\n                gl: contextProps.drawingContext,\\n                textContext: contextProps.textContext,\\n            },\\n        });\\n        var hasBufferOverflown = gpuBuffers.find(function (buffer) { return !!buffer.gpuBufferOverflow; });\\n        if (hasBufferOverflown) {\\n            emitStateChanged();\\n            return;\\n        }\\n        pendingAnimationRequest = requestAnimationFrame(draw);\\n    };\\n    return {\\n        bufferData: function (data) {\\n            store.dispatch({\\n                type: 'data/buffer',\\n                payload: __assign(__assign({}, data), { gl: contextProps.drawingContext }),\\n            });\\n        },\\n        addSignal: function (signal) {\\n            store.dispatch({ type: 'signal/add', payload: signal });\\n        },\\n        removeSignal: function (id) {\\n            store.dispatch({ type: 'signal/remove', payload: { id: id } });\\n        },\\n        replaceSignals: function (signals) {\\n            store.dispatch({ type: 'signal/replaceAll', payload: { signals: signals } });\\n        },\\n        stop: function () {\\n            if (pendingAnimationRequest) {\\n                cancelAnimationFrame(pendingAnimationRequest);\\n            }\\n            (0, gl_context_1.clearContext)(contextProps);\\n            store.dispatch({\\n                type: 'signal/drawAll',\\n                payload: {\\n                    gl: contextProps.drawingContext,\\n                },\\n            });\\n        },\\n        destroy: function () {\\n            stop();\\n            window.removeEventListener('resize', resizeListener);\\n            store.dispatch({\\n                type: 'signal/destroyAll',\\n                payload: {},\\n            });\\n            store.dispatch({\\n                type: 'measure/destroyAll',\\n                payload: {},\\n            });\\n            (0, gl_context_1.destroyGlContext)(contextProps);\\n        },\\n        displayRate: function (displayRate) {\\n            store.dispatch({\\n                type: 'screen/displayRate',\\n                payload: { displayRate: displayRate, container: referenceContainer },\\n            });\\n            emitStateChanged();\\n        },\\n        zoom: function (signalIds, ratio) {\\n            store.dispatch({ type: 'signal/zoom', payload: { signalIds: signalIds, ratio: ratio } });\\n        },\\n        positionSignal: function (signalId, yPosition) {\\n            store.dispatch({ type: 'signal/position', payload: { signalId: signalId, yPosition: yPosition } });\\n        },\\n        switchMode: function (mode) {\\n            store.dispatch({ type: 'screen/switchMode', payload: { mode: mode } });\\n        },\\n        move: function (translation) {\\n            store.dispatch({ type: 'screen/move', payload: { translation: translation } });\\n        },\\n        timestamp: function (pixelX) {\\n            var screenState = store.getState().screenState;\\n            return (0, screen_utils_1.getTimestampAtPixelPosition)(screenState, pixelX);\\n        },\\n        pixelToTimestamp: function (pixel) {\\n            var screenState = store.getState().screenState;\\n            return (0, conversions_1.pixelSizeToPointSize)(screenState, pixel);\\n        },\\n        addMeasure: function (measure) {\\n            store.dispatch({ type: 'measure/add', payload: measure });\\n        },\\n        removeMeasure: function (id) {\\n            store.dispatch({ type: 'measure/remove', payload: { id: id } });\\n        },\\n        replaceMeasures: function (measures) {\\n            store.dispatch({ type: 'measure/replaceAll', payload: { measures: measures } });\\n        },\\n    };\\n}\\nexports.glplotter = glplotter;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/gl-plotter.ts?\");\n\n/***/ }),\n\n/***/ \"./src/gl/shader.ts\":\n/*!**************************!*\\\n  !*** ./src/gl/shader.ts ***!\n  \\**************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.shader = void 0;\\nvar GLError_1 = __webpack_require__(/*! @src/structures/GLError */ \\\"./src/structures/GLError.ts\\\");\\nvar shader = function (fragmentShader, vertexShader) {\\n    var shaderProps = null;\\n    return {\\n        use: function (gl, translationMatrix, scaleMatrix, mvMatrix, pMatrix, color) {\\n            if (shaderProps === null) {\\n                shaderProps = initGl(gl, fragmentShader, vertexShader);\\n            }\\n            gl.useProgram(shaderProps.program);\\n            gl.enableVertexAttribArray(shaderProps.vertexPositionAttribute);\\n            gl.vertexAttribPointer(shaderProps.vertexPositionAttribute, 3, gl.FLOAT, false, 0, 0);\\n            gl.uniformMatrix4fv(shaderProps.scaleMatrixPosition, false, scaleMatrix);\\n            gl.uniformMatrix4fv(shaderProps.translationMatrixPosition, false, translationMatrix);\\n            gl.uniformMatrix4fv(shaderProps.projectionMatrixPosition, false, pMatrix);\\n            gl.uniformMatrix4fv(shaderProps.modelMatrixPosition, false, mvMatrix);\\n            gl.uniform4fv(shaderProps.uFragColor, color);\\n        },\\n        delete: function (gl) {\\n            if (shaderProps === null) {\\n                return;\\n            }\\n            var shaders = shaderProps.shaders;\\n            shaders.forEach(function (shader) { return gl.isShader(shader) && gl.deleteShader(shader); });\\n            shaderProps = null;\\n        },\\n    };\\n};\\nexports.shader = shader;\\nvar createShader = function (gl, type, source) {\\n    var shader = gl.createShader(type);\\n    if (shader === null) {\\n        throw new GLError_1.GLError('Failed to create gl shader');\\n    }\\n    gl.shaderSource(shader, source);\\n    gl.compileShader(shader);\\n    if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\\n        console.error(gl.getShaderInfoLog(shader));\\n    }\\n    return shader;\\n};\\nvar initGl = function (gl, fragmentShader, vertexShader) {\\n    var fShader = createShader(gl, gl.FRAGMENT_SHADER, fragmentShader);\\n    var vShader = createShader(gl, gl.VERTEX_SHADER, vertexShader);\\n    var program = gl.createProgram();\\n    if (program === null) {\\n        throw new GLError_1.GLError('Failed to create gl program');\\n    }\\n    gl.attachShader(program, vShader);\\n    gl.attachShader(program, fShader);\\n    gl.linkProgram(program);\\n    if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\\n        console.error(gl.getShaderInfoLog(program));\\n    }\\n    var vertexPositionAttribute = gl.getAttribLocation(program, 'a_position');\\n    var scaleMatrixPosition = gl.getUniformLocation(program, 'u_scaleMatrix');\\n    var translationMatrixPosition = gl.getUniformLocation(program, 'u_translationMatrix');\\n    var projectionMatrixPosition = gl.getUniformLocation(program, 'u_projectionMatrix');\\n    var modelMatrixPosition = gl.getUniformLocation(program, 'u_modelMatrix');\\n    var uFragColor = gl.getUniformLocation(program, 'u_fragColor');\\n    if (scaleMatrixPosition === null ||\\n        translationMatrixPosition === null ||\\n        projectionMatrixPosition === null ||\\n        modelMatrixPosition === null ||\\n        uFragColor === null) {\\n        throw new GLError_1.GLError('Failed to assign gl locations');\\n    }\\n    return {\\n        program: program,\\n        vertexPositionAttribute: vertexPositionAttribute,\\n        scaleMatrixPosition: scaleMatrixPosition,\\n        translationMatrixPosition: translationMatrixPosition,\\n        projectionMatrixPosition: projectionMatrixPosition,\\n        modelMatrixPosition: modelMatrixPosition,\\n        uFragColor: uFragColor,\\n        shaders: [fShader, vShader],\\n    };\\n};\\n\\n\\n//# sourceURL=webpack://glplotter/./src/gl/shader.ts?\");\n\n/***/ }),\n\n/***/ \"./src/measure/drawers/drawer-automove.ts\":\n/*!************************************************!*\\\n  !*** ./src/measure/drawers/drawer-automove.ts ***!\n  \\************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.drawAutomoveMeasures = void 0;\\nvar drawer_manual_1 = __webpack_require__(/*! ./drawer-manual */ \\\"./src/measure/drawers/drawer-manual.ts\\\");\\nvar drawAutomoveMeasures = function (state, gl, textContext) {\\n    (0, drawer_manual_1.drawManualMeasures)(state, gl, textContext);\\n};\\nexports.drawAutomoveMeasures = drawAutomoveMeasures;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/measure/drawers/drawer-automove.ts?\");\n\n/***/ }),\n\n/***/ \"./src/measure/drawers/drawer-manual.ts\":\n/*!**********************************************!*\\\n  !*** ./src/measure/drawers/drawer-manual.ts ***!\n  \\**********************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.drawManualMeasures = void 0;\\nvar conversions_1 = __webpack_require__(/*! @src/utils/conversions */ \\\"./src/utils/conversions.ts\\\");\\nvar measure_conversions_1 = __webpack_require__(/*! ../measure-conversions */ \\\"./src/measure/measure-conversions.ts\\\");\\nvar drawer_1 = __webpack_require__(/*! ./drawer */ \\\"./src/measure/drawers/drawer.ts\\\");\\nvar text_drawer_1 = __webpack_require__(/*! ./text-drawer */ \\\"./src/measure/drawers/text-drawer.ts\\\");\\nvar drawManualMeasures = function (state, gl, textContext) {\\n    var _a = (0, drawer_1.calculateMatrixes)(state), translationMatrix = _a.translationMatrix, scaleMatrix = _a.scaleMatrix;\\n    state.measures.forEach(function (measure) {\\n        var measureIndex = state.measureRamBuffer.measureIndexes.find(function (measureIndex) { return measureIndex.measureId === measure.id; });\\n        if (measureIndex === undefined) {\\n            return;\\n        }\\n        (0, drawer_1.setVertexAttributes)(state, measure, translationMatrix, scaleMatrix, gl);\\n        gl.drawArrays(gl.TRIANGLES, (0, conversions_1.coordonateSizeToVerticeSize)(measureIndex.index), (0, measure_conversions_1.measureVerticeSize)());\\n    });\\n    (0, text_drawer_1.drawText)(state, state.measures, translationMatrix, scaleMatrix, gl, textContext);\\n};\\nexports.drawManualMeasures = drawManualMeasures;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/measure/drawers/drawer-manual.ts?\");\n\n/***/ }),\n\n/***/ \"./src/measure/drawers/drawer-rotating.ts\":\n/*!************************************************!*\\\n  !*** ./src/measure/drawers/drawer-rotating.ts ***!\n  \\************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.drawRotatingMeasures = void 0;\\nvar screen_utils_1 = __webpack_require__(/*! @src/screen/screen-utils */ \\\"./src/screen/screen-utils.ts\\\");\\nvar conversions_1 = __webpack_require__(/*! @src/utils/conversions */ \\\"./src/utils/conversions.ts\\\");\\nvar gl_matrix_1 = __webpack_require__(/*! gl-matrix */ \\\"./node_modules/gl-matrix/esm/index.js\\\");\\nvar measure_conversions_1 = __webpack_require__(/*! ../measure-conversions */ \\\"./src/measure/measure-conversions.ts\\\");\\nvar drawer_1 = __webpack_require__(/*! ./drawer */ \\\"./src/measure/drawers/drawer.ts\\\");\\nvar text_drawer_1 = __webpack_require__(/*! ./text-drawer */ \\\"./src/measure/drawers/text-drawer.ts\\\");\\nvar drawLeft = function (state, gl, textContext) {\\n    var screenState = state.screenState;\\n    var totalRotations = (0, screen_utils_1.getTotalRotations)(screenState);\\n    var nbrCoordonatesToStartOfScreen = (0, screen_utils_1.getNbrCoordonatesAfterRotations)(screenState, totalRotations);\\n    var leftMeasures = state.measures.filter(function (measure) {\\n        return measure.pointX <\\n            (0, conversions_1.coordonateSizeToVerticeSize)(screenState.totalCoordonatesDrawn) &&\\n            measure.pointX >\\n                (0, conversions_1.coordonateSizeToVerticeSize)(nbrCoordonatesToStartOfScreen);\\n    });\\n    var _a = (0, drawer_1.calculateMatrixes)(state), translationMatrix = _a.translationMatrix, scaleMatrix = _a.scaleMatrix;\\n    //apply a X translation for newer points\\n    //of 2 times the screen rotation\\n    var newPointsTranslation = gl_matrix_1.mat4.create();\\n    gl_matrix_1.mat4.translate(newPointsTranslation, translationMatrix, [\\n        -totalRotations * 2,\\n        0,\\n        0,\\n    ]);\\n    leftMeasures.forEach(function (measure) {\\n        var measureIndex = state.measureRamBuffer.measureIndexes.find(function (measureIndex) { return measureIndex.measureId === measure.id; });\\n        if (measureIndex === undefined) {\\n            return;\\n        }\\n        (0, drawer_1.setVertexAttributes)(state, measure, newPointsTranslation, scaleMatrix, gl);\\n        gl.drawArrays(gl.TRIANGLES, (0, conversions_1.coordonateSizeToVerticeSize)(measureIndex.index), (0, measure_conversions_1.measureVerticeSize)());\\n    });\\n    (0, text_drawer_1.drawText)(state, leftMeasures, newPointsTranslation, scaleMatrix, gl, textContext);\\n};\\nvar drawRight = function (state, gl, textContext) {\\n    var screenState = state.screenState;\\n    var totalRotations = (0, screen_utils_1.getTotalRotations)(screenState);\\n    var nbrCoordonatesToStartOfScreen = (0, screen_utils_1.getNbrCoordonatesAfterRotations)(screenState, totalRotations);\\n    var lastPointXAddedToScreen = (0, conversions_1.coordonateSizeToVerticeSize)(screenState.totalCoordonatesDrawn);\\n    var eraserOnPreviousScreen = lastPointXAddedToScreen - (0, screen_utils_1.getNbrVerticesPerScreen)(screenState);\\n    var rightMeasures = state.measures.filter(function (measure) {\\n        var maxXOnPreviousScreen = (0, conversions_1.coordonateSizeToVerticeSize)(nbrCoordonatesToStartOfScreen);\\n        if (measure.pointX > eraserOnPreviousScreen &&\\n            measure.pointX < maxXOnPreviousScreen) {\\n            return true;\\n        }\\n        return false;\\n    });\\n    var _a = (0, drawer_1.calculateMatrixes)(state), translationMatrix = _a.translationMatrix, scaleMatrix = _a.scaleMatrix;\\n    //apply a X translation for older points\\n    //of 1 screen rotation\\n    var oldPointsTranslation = gl_matrix_1.mat4.create();\\n    gl_matrix_1.mat4.translate(oldPointsTranslation, translationMatrix, [\\n        -(totalRotations - 1) * 2,\\n        0,\\n        0,\\n    ]);\\n    rightMeasures.forEach(function (measure) {\\n        var measureIndex = state.measureRamBuffer.measureIndexes.find(function (measureIndex) { return measureIndex.measureId === measure.id; });\\n        if (measureIndex === undefined) {\\n            return;\\n        }\\n        (0, drawer_1.setVertexAttributes)(state, measure, oldPointsTranslation, scaleMatrix, gl);\\n        gl.drawArrays(gl.TRIANGLES, (0, conversions_1.coordonateSizeToVerticeSize)(measureIndex.index), (0, measure_conversions_1.measureVerticeSize)());\\n    });\\n    (0, text_drawer_1.drawText)(state, rightMeasures, oldPointsTranslation, scaleMatrix, gl, textContext);\\n};\\nvar drawRotatingMeasures = function (state, gl, textContext) {\\n    drawLeft(state, gl, textContext);\\n    drawRight(state, gl, textContext);\\n};\\nexports.drawRotatingMeasures = drawRotatingMeasures;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/measure/drawers/drawer-rotating.ts?\");\n\n/***/ }),\n\n/***/ \"./src/measure/drawers/drawer.ts\":\n/*!***************************************!*\\\n  !*** ./src/measure/drawers/drawer.ts ***!\n  \\***************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.setVertexAttributes = exports.calculateMatrixes = void 0;\\nvar screen_matrix_1 = __webpack_require__(/*! @src/screen/screen-matrix */ \\\"./src/screen/screen-matrix.ts\\\");\\nvar gl_matrix_1 = __webpack_require__(/*! gl-matrix */ \\\"./node_modules/gl-matrix/esm/index.js\\\");\\nvar measure_shader_1 = __webpack_require__(/*! ../gl/measure-shader */ \\\"./src/measure/gl/measure-shader.ts\\\");\\nvar calculateMatrixes = function (state) {\\n    var translationMatrix = gl_matrix_1.mat4.create();\\n    gl_matrix_1.mat4.fromTranslation(translationMatrix, [\\n        (0, screen_matrix_1.calculateXTranslation)(state.screenState),\\n        0,\\n        0,\\n    ]);\\n    var scaleMatrix = gl_matrix_1.mat4.create();\\n    gl_matrix_1.mat4.fromScaling(scaleMatrix, [(0, screen_matrix_1.calculateXScale)(state.screenState), 1, 1]);\\n    return { translationMatrix: translationMatrix, scaleMatrix: scaleMatrix };\\n};\\nexports.calculateMatrixes = calculateMatrixes;\\n//Sets the vertex attribute array and pointer\\n//Applies the translation matrixes\\n//This needs to be called before each draw call\\nvar setVertexAttributes = function (state, measure, translationMatrix, scaleMatrix, gl) {\\n    measure_shader_1.measureShader.use(gl, translationMatrix, scaleMatrix, Float32Array.from(state.screenState.matrixes.modelMatrix), Float32Array.from(state.screenState.matrixes.projectionMatrix), measure.color);\\n};\\nexports.setVertexAttributes = setVertexAttributes;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/measure/drawers/drawer.ts?\");\n\n/***/ }),\n\n/***/ \"./src/measure/drawers/text-drawer.ts\":\n/*!********************************************!*\\\n  !*** ./src/measure/drawers/text-drawer.ts ***!\n  \\********************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.drawText = void 0;\\nvar gl_matrix_1 = __webpack_require__(/*! gl-matrix */ \\\"./node_modules/gl-matrix/esm/index.js\\\");\\nvar drawText = function (state, measures, translationMatrix, scaleMatrix, gl, textContext) {\\n    var matrix = gl_matrix_1.mat4.create();\\n    gl_matrix_1.mat4.mul(matrix, translationMatrix, Float32Array.from(state.screenState.matrixes.modelMatrix));\\n    gl_matrix_1.mat4.mul(matrix, matrix, Float32Array.from(state.screenState.matrixes.projectionMatrix));\\n    gl_matrix_1.mat4.mul(matrix, matrix, scaleMatrix);\\n    measures.forEach(function (measure) {\\n        var vec = gl_matrix_1.vec4.fromValues(measure.pointX + measure.width / 2, measure.middleLinePosition, 0, 1);\\n        var clipspace = gl_matrix_1.vec4.transformMat4(vec, vec, matrix);\\n        // divide X and Y by W just like the GPU does.\\n        clipspace[0] /= clipspace[3];\\n        clipspace[1] /= clipspace[3];\\n        // convert from clipspace to pixels\\n        var pixelX = (clipspace[0] * 0.5 + 0.5) * gl.canvas.width;\\n        var pixelY = (clipspace[1] * -0.5 + 0.5) * gl.canvas.height;\\n        textContext.font = '20px Arial';\\n        textContext.fillStyle = 'rgba(255, 255, 255, 0.3)';\\n        textContext.textAlign = 'center';\\n        -textContext.fillRect(pixelX - 40, pixelY, 80, 30);\\n        textContext.fillStyle = 'white';\\n        textContext.fillText(measure.text, pixelX, pixelY + 20);\\n    });\\n};\\nexports.drawText = drawText;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/measure/drawers/text-drawer.ts?\");\n\n/***/ }),\n\n/***/ \"./src/measure/gl/measure-shader.ts\":\n/*!******************************************!*\\\n  !*** ./src/measure/gl/measure-shader.ts ***!\n  \\******************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.measureShader = void 0;\\nvar shader_1 = __webpack_require__(/*! @src/gl/shader */ \\\"./src/gl/shader.ts\\\");\\n//eslint-disable-next-line\\nvar vertexShader = __webpack_require__(/*! ./vertex.glsl */ \\\"./src/measure/gl/vertex.glsl\\\");\\n//eslint-disable-next-line\\nvar fragmentShader = __webpack_require__(/*! ./fragment.glsl */ \\\"./src/measure/gl/fragment.glsl\\\");\\nexports.measureShader = (0, shader_1.shader)(fragmentShader, vertexShader);\\n\\n\\n//# sourceURL=webpack://glplotter/./src/measure/gl/measure-shader.ts?\");\n\n/***/ }),\n\n/***/ \"./src/measure/gpu-buffer.ts\":\n/*!***********************************!*\\\n  !*** ./src/measure/gpu-buffer.ts ***!\n  \\***********************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.deleteMeasureBuffer = exports.bindAndUploadMeasures = void 0;\\nvar GLError_1 = __webpack_require__(/*! @src/structures/GLError */ \\\"./src/structures/GLError.ts\\\");\\nvar ram_buffer_1 = __webpack_require__(/*! ./ram-buffer */ \\\"./src/measure/ram-buffer.ts\\\");\\nvar vertexBuffer = null;\\nvar bindAndUploadMeasures = function (ramBufferState, gpuBufferState, gl) {\\n    if (vertexBuffer !== null && !ramBufferState.isDirty) {\\n        return gpuBufferState;\\n    }\\n    if (vertexBuffer !== null) {\\n        (0, exports.deleteMeasureBuffer)(gl);\\n    }\\n    vertexBuffer = gl.createBuffer();\\n    if (vertexBuffer === null) {\\n        throw new GLError_1.GLError('Failed to create vertex buffer');\\n    }\\n    gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);\\n    var vertices = (0, ram_buffer_1.getMeasureVertices)();\\n    gl.bufferData(gl.ARRAY_BUFFER, Float32Array.from(vertices), gl.STATIC_DRAW);\\n    return gpuBufferState;\\n};\\nexports.bindAndUploadMeasures = bindAndUploadMeasures;\\nvar deleteMeasureBuffer = function (gl) {\\n    if (vertexBuffer === null) {\\n        return;\\n    }\\n    if (!gl.isBuffer(vertexBuffer)) {\\n        return;\\n    }\\n    gl.deleteBuffer(vertexBuffer);\\n};\\nexports.deleteMeasureBuffer = deleteMeasureBuffer;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/measure/gpu-buffer.ts?\");\n\n/***/ }),\n\n/***/ \"./src/measure/measure-conversions.ts\":\n/*!********************************************!*\\\n  !*** ./src/measure/measure-conversions.ts ***!\n  \\********************************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.measureVerticeSize = void 0;\\nfunction measureVerticeSize() {\\n    return 18;\\n}\\nexports.measureVerticeSize = measureVerticeSize;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/measure/measure-conversions.ts?\");\n\n/***/ }),\n\n/***/ \"./src/measure/ram-buffer.ts\":\n/*!***********************************!*\\\n  !*** ./src/measure/ram-buffer.ts ***!\n  \\***********************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\neval(\"\\nvar __assign = (this && this.__assign) || function () {\\n    __assign = Object.assign || function(t) {\\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\\n            s = arguments[i];\\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\\n                t[p] = s[p];\\n        }\\n        return t;\\n    };\\n    return __assign.apply(this, arguments);\\n};\\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\\n        if (ar || !(i in from)) {\\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\\n            ar[i] = from[i];\\n        }\\n    }\\n    return to.concat(ar || Array.prototype.slice.call(from));\\n};\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.replaceMeasureVertices = exports.addMeasureVertices = exports.resetMeasureVertices = exports.getMeasureVertices = void 0;\\nvar measureVertices = [];\\nvar getMeasureVertices = function () {\\n    return measureVertices;\\n};\\nexports.getMeasureVertices = getMeasureVertices;\\nvar resetMeasureVertices = function () {\\n    measureVertices.length = 0;\\n};\\nexports.resetMeasureVertices = resetMeasureVertices;\\nvar addMeasureVertices = function (bufferState, _a) {\\n    var id = _a.id, pointX = _a.pointX, width = _a.width, middleLineWidth = _a.middleLineWidth, middleLinePosition = _a.middleLinePosition;\\n    var leftTriangles = [\\n        pointX,\\n        2,\\n        0,\\n        pointX,\\n        0,\\n        0,\\n        pointX,\\n        2,\\n        1,\\n        pointX,\\n        0,\\n        0,\\n        pointX,\\n        2,\\n        1,\\n        pointX,\\n        0,\\n        1,\\n    ];\\n    var rightTriangles = [\\n        pointX + width,\\n        2,\\n        0,\\n        pointX + width,\\n        0,\\n        0,\\n        pointX + width,\\n        2,\\n        1,\\n        pointX + width,\\n        0,\\n        0,\\n        pointX + width,\\n        2,\\n        1,\\n        pointX + width,\\n        0,\\n        1,\\n    ];\\n    var middleTriangles = [\\n        pointX,\\n        middleLinePosition,\\n        0,\\n        pointX,\\n        middleLinePosition + middleLineWidth,\\n        0,\\n        pointX + width,\\n        middleLinePosition,\\n        0,\\n        pointX,\\n        middleLinePosition + middleLineWidth,\\n        0,\\n        pointX + width,\\n        middleLinePosition,\\n        0,\\n        pointX + width,\\n        middleLinePosition + middleLineWidth,\\n        0,\\n    ];\\n    var vertices = __spreadArray(__spreadArray(__spreadArray([], leftTriangles, true), rightTriangles, true), middleTriangles, true);\\n    var nextIndex = measureVertices.length;\\n    measureVertices.push.apply(measureVertices, vertices);\\n    return __assign(__assign({}, bufferState), { measureIndexes: __spreadArray(__spreadArray([], bufferState.measureIndexes, true), [\\n            {\\n                measureId: id,\\n                index: nextIndex,\\n            },\\n        ], false), isDirty: true });\\n};\\nexports.addMeasureVertices = addMeasureVertices;\\nvar replaceMeasureVertices = function (bufferState, measures) {\\n    (0, exports.resetMeasureVertices)();\\n    var nextState = __assign(__assign({}, bufferState), { isDirty: true, measureIndexes: [] });\\n    measures.forEach(function (measure) { return (nextState = (0, exports.addMeasureVertices)(nextState, measure)); });\\n    return nextState;\\n};\\nexports.replaceMeasureVertices = replaceMeasureVertices;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/measure/ram-buffer.ts?\");\n\n/***/ }),\n\n/***/ \"./src/screen/screen-matrix.ts\":\n/*!*************************************!*\\\n  !*** ./src/screen/screen-matrix.ts ***!\n  \\*************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.calculateXScale = exports.calculateXTranslation = void 0;\\nvar conversions_1 = __webpack_require__(/*! @src/utils/conversions */ \\\"./src/utils/conversions.ts\\\");\\nvar calculateXTranslation = function (screenState) {\\n    return (0, conversions_1.pixelSizeToClipspaceSize)(screenState, screenState.matrixes.xTranslation);\\n};\\nexports.calculateXTranslation = calculateXTranslation;\\nvar calculateXScale = function (screenState) {\\n    var pointsPerSecond = (screenState.mmToPx * screenState.containerWidth) / screenState.displayRate;\\n    var displayRateScaleFactor = 1 / (pointsPerSecond * 1000);\\n    return displayRateScaleFactor;\\n};\\nexports.calculateXScale = calculateXScale;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/screen/screen-matrix.ts?\");\n\n/***/ }),\n\n/***/ \"./src/screen/screen-transitions.ts\":\n/*!******************************************!*\\\n  !*** ./src/screen/screen-transitions.ts ***!\n  \\******************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __assign = (this && this.__assign) || function () {\\n    __assign = Object.assign || function(t) {\\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\\n            s = arguments[i];\\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\\n                t[p] = s[p];\\n        }\\n        return t;\\n    };\\n    return __assign.apply(this, arguments);\\n};\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.applyPostDrawScreenTransition = exports.applyPreDrawScreenTransition = void 0;\\nvar conversions_1 = __webpack_require__(/*! @src/utils/conversions */ \\\"./src/utils/conversions.ts\\\");\\nvar applyPreDrawScreenTransition = function (state, _a) {\\n    var lastCoordonatesCountAddedToScreen = _a.lastCoordonatesCountAddedToScreen;\\n    //update screen with new positions\\n    var screenState = __assign(__assign({}, state), { totalCoordonatesAdded: state.totalCoordonatesDrawn + lastCoordonatesCountAddedToScreen });\\n    return screenState;\\n};\\nexports.applyPreDrawScreenTransition = applyPreDrawScreenTransition;\\nvar applyPostDrawScreenTransition = function (state, totalCoordonatesDrawn) {\\n    var nextState = __assign(__assign({}, state), { totalCoordonatesDrawn: totalCoordonatesDrawn });\\n    if (state.drawingMode !== 'AUTOMOVE') {\\n        return nextState;\\n    }\\n    var nbrPoints = nextState.totalCoordonatesDrawn / 3;\\n    var newMatrixes = __assign(__assign({}, state.matrixes), { xTranslation: state.matrixes.xTranslation + (0, conversions_1.pointSizeToPixelSize)(state, nbrPoints) });\\n    return __assign(__assign({}, nextState), { matrixes: newMatrixes });\\n};\\nexports.applyPostDrawScreenTransition = applyPostDrawScreenTransition;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/screen/screen-transitions.ts?\");\n\n/***/ }),\n\n/***/ \"./src/screen/screen-utils.ts\":\n/*!************************************!*\\\n  !*** ./src/screen/screen-utils.ts ***!\n  \\************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.getTimestampAtPixelPosition = exports.getTotalRotations = exports.getNbrCoordonatesAfterRotations = exports.getNbrVerticesPerScreen = void 0;\\nvar conversions_1 = __webpack_require__(/*! @src/utils/conversions */ \\\"./src/utils/conversions.ts\\\");\\nfunction getNbrVerticesPerScreen(screenState) {\\n    return Math.round((0, conversions_1.screenSizeToPointSize)(screenState));\\n}\\nexports.getNbrVerticesPerScreen = getNbrVerticesPerScreen;\\nfunction getNbrCoordonatesAfterRotations(screenState, rotations) {\\n    var nbrPoints = rotations * (0, conversions_1.screenSizeToPointSize)(screenState);\\n    var nbrCoordonates = (0, conversions_1.pointSizeToCoordonateSize)(nbrPoints);\\n    return rotations > 0 ? nbrCoordonates : -nbrCoordonates;\\n}\\nexports.getNbrCoordonatesAfterRotations = getNbrCoordonatesAfterRotations;\\nfunction getTotalRotations(state) {\\n    var pointsPerWindow = (0, conversions_1.screenSizeToPointSize)(state);\\n    var coordonatesPerWindow = (0, conversions_1.pointSizeToCoordonateSize)(pointsPerWindow);\\n    var totalCoordonatesAdded = state.totalCoordonatesDrawn;\\n    return Math.floor(totalCoordonatesAdded / coordonatesPerWindow);\\n}\\nexports.getTotalRotations = getTotalRotations;\\nfunction getTimestampAtPixelPosition(screenState, pixelX) {\\n    switch (screenState.drawingMode) {\\n        case 'ROTATE':\\n            return getTimestampAtPositionInRotateMode(screenState, pixelX);\\n        case 'MANUAL':\\n            return getTimestampAtPositionInManualMode(screenState, pixelX);\\n        default:\\n            //@TODO\\n            return 0;\\n    }\\n}\\nexports.getTimestampAtPixelPosition = getTimestampAtPixelPosition;\\nfunction getTimestampAtPositionInRotateMode(screenState, pixelX) {\\n    var positionPixelShiftingFactor = 0;\\n    var totalRotations = getTotalRotations(screenState);\\n    if (totalRotations === 0) {\\n        return getTimestampAtPositionInManualMode(screenState, pixelX);\\n    }\\n    var totalRotationsInPixel = totalRotations * screenState.containerWidth;\\n    var totalPointsAdded = (0, conversions_1.coordonateSizeToVerticeSize)(screenState.totalCoordonatesDrawn);\\n    var totalPixelsAdded = (0, conversions_1.pointSizeToPixelSize)(screenState, totalPointsAdded);\\n    var currentWindowXOfEraser = totalPixelsAdded - totalRotationsInPixel;\\n    if (pixelX < currentWindowXOfEraser) {\\n        //we are on the left side of the eraser, all rotations have already\\n        //been applied\\n        positionPixelShiftingFactor = totalRotationsInPixel;\\n    }\\n    else {\\n        //we are on the right side of the eraser, 1 rotation has not yet been applied\\n        positionPixelShiftingFactor =\\n            totalRotationsInPixel - screenState.containerWidth;\\n    }\\n    var xToPoints = (0, conversions_1.screenSizeToPointSize)(screenState) / screenState.containerWidth;\\n    var rotatedPositionX = pixelX + positionPixelShiftingFactor;\\n    var currentX = xToPoints * rotatedPositionX;\\n    return currentX;\\n}\\nfunction getTimestampAtPositionInManualMode(screenState, pixelX) {\\n    var translatedPixelPosition = pixelX - screenState.matrixes.xTranslation;\\n    var currentX = (0, conversions_1.pixelSizeToPointSize)(screenState, translatedPixelPosition);\\n    return currentX;\\n}\\n\\n\\n//# sourceURL=webpack://glplotter/./src/screen/screen-utils.ts?\");\n\n/***/ }),\n\n/***/ \"./src/signal/drawers/drawer-automove.ts\":\n/*!***********************************************!*\\\n  !*** ./src/signal/drawers/drawer-automove.ts ***!\n  \\***********************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.drawAutomoveSignal = void 0;\\nvar drawer_manual_1 = __webpack_require__(/*! ./drawer-manual */ \\\"./src/signal/drawers/drawer-manual.ts\\\");\\nvar drawAutomoveSignal = function (state, signal, totalCoordonatesAvailable, gl) {\\n    if (state.screenState.totalCoordonatesDrawn === 0) {\\n        return;\\n    }\\n    (0, drawer_manual_1.drawManualSignal)(state, signal, totalCoordonatesAvailable, gl);\\n};\\nexports.drawAutomoveSignal = drawAutomoveSignal;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/signal/drawers/drawer-automove.ts?\");\n\n/***/ }),\n\n/***/ \"./src/signal/drawers/drawer-manual.ts\":\n/*!*********************************************!*\\\n  !*** ./src/signal/drawers/drawer-manual.ts ***!\n  \\*********************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.drawManualSignal = void 0;\\nvar screen_utils_1 = __webpack_require__(/*! @src/screen/screen-utils */ \\\"./src/screen/screen-utils.ts\\\");\\nvar conversions_1 = __webpack_require__(/*! @src/utils/conversions */ \\\"./src/utils/conversions.ts\\\");\\nvar drawer_1 = __webpack_require__(/*! ./drawer */ \\\"./src/signal/drawers/drawer.ts\\\");\\nvar drawManualSignal = function (state, signal, totalCoordonatesAvailable, gl) {\\n    var _a = (0, drawer_1.calculateMatrixes)(state, signal), translationMatrix = _a.translationMatrix, scaleMatrix = _a.scaleMatrix;\\n    (0, drawer_1.setVertexAttributes)(state, signal, translationMatrix, scaleMatrix, gl);\\n    var nbrVerticeInBuffer = (0, conversions_1.coordonateSizeToVerticeSize)(totalCoordonatesAvailable);\\n    //shift position\\n    var appliedTranslationInVerticeUnit = (0, conversions_1.pixelSizeToVerticeSize)(state.screenState, state.screenState.matrixes.xTranslation);\\n    var firstVerticeOnScreen = Math.max(0, appliedTranslationInVerticeUnit);\\n    var lastVerticeOnScreen = Math.min(nbrVerticeInBuffer, firstVerticeOnScreen + (0, screen_utils_1.getNbrVerticesPerScreen)(state.screenState));\\n    var verticeCount = Math.max(0, lastVerticeOnScreen - firstVerticeOnScreen);\\n    gl.drawArrays(gl.LINE_STRIP, firstVerticeOnScreen, verticeCount);\\n};\\nexports.drawManualSignal = drawManualSignal;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/signal/drawers/drawer-manual.ts?\");\n\n/***/ }),\n\n/***/ \"./src/signal/drawers/drawer-rotating.ts\":\n/*!***********************************************!*\\\n  !*** ./src/signal/drawers/drawer-rotating.ts ***!\n  \\***********************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.drawRotatingSignal = void 0;\\nvar gl_matrix_1 = __webpack_require__(/*! gl-matrix */ \\\"./node_modules/gl-matrix/esm/index.js\\\");\\nvar conversions_1 = __webpack_require__(/*! @src/utils/conversions */ \\\"./src/utils/conversions.ts\\\");\\nvar drawer_1 = __webpack_require__(/*! ./drawer */ \\\"./src/signal/drawers/drawer.ts\\\");\\nvar screen_utils_1 = __webpack_require__(/*! @src/screen/screen-utils */ \\\"./src/screen/screen-utils.ts\\\");\\nvar calculateCoordonatesOnLeft = function (state, totalCoordonatesAvailable) {\\n    var totalRotations = (0, screen_utils_1.getTotalRotations)(state);\\n    //Get the number of coordonates that have been added\\n    //until the start of the screen\\n    //ie:\\n    //First rotation => 0\\n    //Second rotation => nbr of coordonates in 1 screen\\n    //...\\n    var nbrCoordonatesToStartOfScreen = (0, screen_utils_1.getNbrCoordonatesAfterRotations)(state, totalRotations);\\n    //Make sure we don't take more than there has been added\\n    var nbrCoordonatesToDraw = totalCoordonatesAvailable - nbrCoordonatesToStartOfScreen - 3; //-1 to account for rotation fudge\\n    //We'll draw from the first on the left of the screen\\n    //To the last we have\\n    return {\\n        coordonateStartIndex: nbrCoordonatesToStartOfScreen,\\n        nbrCoordonates: nbrCoordonatesToDraw,\\n    };\\n};\\nvar calculateCoordonatesOnRight = function (state, totalCoordonatesAvailable) {\\n    var totalRotations = (0, screen_utils_1.getTotalRotations)(state);\\n    var nbrCoordonatesOnLeft = calculateCoordonatesOnLeft(state, totalCoordonatesAvailable).nbrCoordonates;\\n    //Get the number of coordonates that have been added\\n    //until the start of the previous screen\\n    //ie:\\n    //First rotation => nothing\\n    //Second rotation => 0\\n    //Third rotation => nbr of coordonates in 1 screen\\n    //...\\n    var nbrCoordonatesToStartOfPreviousScreen = (0, screen_utils_1.getNbrCoordonatesAfterRotations)(state, totalRotations - 1);\\n    var nbrCoordonatesToEndOfLeft = nbrCoordonatesToStartOfPreviousScreen + nbrCoordonatesOnLeft;\\n    var mmToPoints = (0, conversions_1.screenSizeToPointSize)(state) / (state.mmToPx * state.containerWidth);\\n    var rightPadding = (0, conversions_1.pointSizeToCoordonateSize)(parseInt(\\\"\\\".concat(2 * 10 * mmToPoints))); // 2 cm\\n    var nbrCoordonatesToDraw = totalCoordonatesAvailable - nbrCoordonatesToEndOfLeft - rightPadding;\\n    //We want to draw the previous screen\\n    //except what is already drawn on the left\\n    return {\\n        coordonateStartIndex: nbrCoordonatesToEndOfLeft + rightPadding,\\n        nbrCoordonates: nbrCoordonatesToDraw,\\n    };\\n};\\nvar drawLeft = function (state, signal, totalCoordonatesAvailable, gl) {\\n    var totalRotations = (0, screen_utils_1.getTotalRotations)(state.screenState);\\n    var _a = calculateCoordonatesOnLeft(state.screenState, totalCoordonatesAvailable), coordonateStartIndex = _a.coordonateStartIndex, nbrCoordonates = _a.nbrCoordonates;\\n    if (nbrCoordonates > 0) {\\n        var _b = (0, drawer_1.calculateMatrixes)(state, signal), translationMatrix = _b.translationMatrix, scaleMatrix = _b.scaleMatrix;\\n        //apply a X translation for newer points\\n        //of 2 times the screen rotation\\n        var newPointsTranslation = gl_matrix_1.mat4.create();\\n        gl_matrix_1.mat4.translate(newPointsTranslation, translationMatrix, [\\n            -totalRotations * 2,\\n            0,\\n            0,\\n        ]);\\n        (0, drawer_1.setVertexAttributes)(state, signal, newPointsTranslation, scaleMatrix, gl);\\n        gl.drawArrays(gl.LINE_STRIP, (0, conversions_1.coordonateSizeToVerticeSize)(coordonateStartIndex), (0, conversions_1.coordonateSizeToVerticeSize)(nbrCoordonates));\\n    }\\n};\\nvar drawRight = function (state, signal, totalCoordonatesAvailable, gl) {\\n    var totalRotations = (0, screen_utils_1.getTotalRotations)(state.screenState);\\n    if (totalRotations === 0) {\\n        return;\\n    }\\n    var _a = calculateCoordonatesOnRight(state.screenState, totalCoordonatesAvailable), coordonateStartIndex = _a.coordonateStartIndex, nbrCoordonates = _a.nbrCoordonates;\\n    if (nbrCoordonates > 0) {\\n        var _b = (0, drawer_1.calculateMatrixes)(state, signal), translationMatrix = _b.translationMatrix, scaleMatrix = _b.scaleMatrix;\\n        //apply a X translation for older points\\n        //of 1 screen rotation\\n        var oldPointsTranslation = gl_matrix_1.mat4.create();\\n        gl_matrix_1.mat4.translate(oldPointsTranslation, translationMatrix, [\\n            -(totalRotations - 1) * 2,\\n            0,\\n            0,\\n        ]);\\n        (0, drawer_1.setVertexAttributes)(state, signal, oldPointsTranslation, scaleMatrix, gl);\\n        gl.drawArrays(gl.LINE_STRIP, (0, conversions_1.coordonateSizeToVerticeSize)(coordonateStartIndex), (0, conversions_1.coordonateSizeToVerticeSize)(nbrCoordonates));\\n    }\\n};\\nvar drawRotatingSignal = function (state, signal, totalCoordonatesAvailable, gl) {\\n    drawLeft(state, signal, totalCoordonatesAvailable, gl);\\n    drawRight(state, signal, totalCoordonatesAvailable, gl);\\n};\\nexports.drawRotatingSignal = drawRotatingSignal;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/signal/drawers/drawer-rotating.ts?\");\n\n/***/ }),\n\n/***/ \"./src/signal/drawers/drawer.ts\":\n/*!**************************************!*\\\n  !*** ./src/signal/drawers/drawer.ts ***!\n  \\**************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.setVertexAttributes = exports.calculateMatrixes = void 0;\\nvar screen_matrix_1 = __webpack_require__(/*! @src/screen/screen-matrix */ \\\"./src/screen/screen-matrix.ts\\\");\\nvar gl_matrix_1 = __webpack_require__(/*! gl-matrix */ \\\"./node_modules/gl-matrix/esm/index.js\\\");\\nvar signal_shader_1 = __webpack_require__(/*! ../gl/signal-shader */ \\\"./src/signal/gl/signal-shader.ts\\\");\\nvar signal_matrix_1 = __webpack_require__(/*! ../signal-matrix */ \\\"./src/signal/signal-matrix.ts\\\");\\nvar calculateMatrixes = function (state, signal) {\\n    //combine screen and signal matrixes\\n    var translationMatrix = gl_matrix_1.mat4.create();\\n    gl_matrix_1.mat4.fromTranslation(translationMatrix, [\\n        (0, screen_matrix_1.calculateXTranslation)(state.screenState),\\n        (0, signal_matrix_1.calculateYTranslation)(signal, state.screenState),\\n        0,\\n    ]);\\n    var scaleMatrix = gl_matrix_1.mat4.create();\\n    gl_matrix_1.mat4.fromScaling(scaleMatrix, [\\n        (0, screen_matrix_1.calculateXScale)(state.screenState),\\n        (0, signal_matrix_1.calculateYScale)(signal, state.screenState),\\n        1,\\n    ]);\\n    return { translationMatrix: translationMatrix, scaleMatrix: scaleMatrix };\\n};\\nexports.calculateMatrixes = calculateMatrixes;\\n//Sets the vertex attribute array and pointer\\n//Applies the translation matrixes\\n//This needs to be called before each draw call\\nvar setVertexAttributes = function (state, signal, translationMatrix, scaleMatrix, gl) {\\n    signal_shader_1.signalShader.use(gl, translationMatrix, scaleMatrix, Float32Array.from(state.screenState.matrixes.modelMatrix), Float32Array.from(state.screenState.matrixes.projectionMatrix), signal.color);\\n};\\nexports.setVertexAttributes = setVertexAttributes;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/signal/drawers/drawer.ts?\");\n\n/***/ }),\n\n/***/ \"./src/signal/gl/signal-shader.ts\":\n/*!****************************************!*\\\n  !*** ./src/signal/gl/signal-shader.ts ***!\n  \\****************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.signalShader = void 0;\\nvar shader_1 = __webpack_require__(/*! @src/gl/shader */ \\\"./src/gl/shader.ts\\\");\\n//eslint-disable-next-line\\nvar vertexShader = __webpack_require__(/*! ./vertex.glsl */ \\\"./src/signal/gl/vertex.glsl\\\");\\n//eslint-disable-next-line\\nvar fragmentShader = __webpack_require__(/*! ./fragment.glsl */ \\\"./src/signal/gl/fragment.glsl\\\");\\nexports.signalShader = (0, shader_1.shader)(fragmentShader, vertexShader);\\n\\n\\n//# sourceURL=webpack://glplotter/./src/signal/gl/signal-shader.ts?\");\n\n/***/ }),\n\n/***/ \"./src/signal/gpu-buffers.ts\":\n/*!***********************************!*\\\n  !*** ./src/signal/gpu-buffers.ts ***!\n  \\***********************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __assign = (this && this.__assign) || function () {\\n    __assign = Object.assign || function(t) {\\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\\n            s = arguments[i];\\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\\n                t[p] = s[p];\\n        }\\n        return t;\\n    };\\n    return __assign.apply(this, arguments);\\n};\\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\\n        if (ar || !(i in from)) {\\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\\n            ar[i] = from[i];\\n        }\\n    }\\n    return to.concat(ar || Array.prototype.slice.call(from));\\n};\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.deleteGpuBuffer = exports.initializeIfNeeded = exports.uploadVerticesToGpu = exports.shouldSignalsBeDrained = exports.calculateDrawBatchSize = exports.VERTICES_BATCH_SIZE = exports.resetGpuBuffers = exports.getGpuBuffer = void 0;\\nvar GLError_1 = __webpack_require__(/*! @src/structures/GLError */ \\\"./src/structures/GLError.ts\\\");\\nvar gpuBuffers = new Map();\\nvar getGpuBuffer = function (channelId) {\\n    var buffer = gpuBuffers.get(channelId);\\n    if (buffer === undefined) {\\n        throw new GLError_1.GLError(\\\"Trying to get non existant GPU buffer for channel \\\".concat(channelId));\\n    }\\n    return buffer;\\n};\\nexports.getGpuBuffer = getGpuBuffer;\\nvar resetGpuBuffers = function () {\\n    gpuBuffers.clear();\\n};\\nexports.resetGpuBuffers = resetGpuBuffers;\\n//holds entire sequence of data in GPU\\n//1 point is 3 elements\\n//1 point is 1ms (depending on samplingRate)\\n//1h = 60 * 60 * 1000 = 3600000 points = 10800000 elements = 43200000 bytes\\nvar VERTEX_BUFFER_SIZE = 50 * 1024 * 1024; // 50Mb\\n//Batch vertices to be updated in the vertex buffer\\n//so that we add the same number of points on each draw\\n//this will help make the translation smoother\\nexports.VERTICES_BATCH_SIZE = 51; //51 = just a bit more than 60Hz so that we don't fall back too much behing and cause a drain\\n//If system doesn't upload data to GPU for a while\\n//(missed draw calls because of busy cpu, or no draw call because window is not visible)\\n//data will start to accumulate in the ramBufferssignal and points being drawn start\\n//to be too much behing \\\"realtime\\\" data\\n//if the amount of data is above that threshold, drain the whole data buffer\\n//this will cause a \\\"fastforward\\\" of the signal, but will catchup with realtime\\nvar VERTICES_DRAIN_THRESHOLD = exports.VERTICES_BATCH_SIZE * 18;\\nvar initialState = {\\n    vertexBufferSize: VERTEX_BUFFER_SIZE,\\n    vertexBufferNeedsInitializing: true,\\n    nextVerticeIndexInVertexBuffer: 0,\\n    gpuBufferOverflow: false,\\n    dataConsumptionBufferStartIndex: 0,\\n    dataConsumptionBufferConsumed: false,\\n    scheduledForDeletion: false,\\n};\\nvar calculateDrawBatchSize = function (state) {\\n    var batchSize = exports.VERTICES_BATCH_SIZE;\\n    if ((0, exports.shouldSignalsBeDrained)(state)) {\\n        batchSize = Infinity;\\n    }\\n    //get the maximum data available\\n    var nbrCoordonatesToDraw = state.gpuBuffers.reduce(function (min, buffer) {\\n        return Math.min(min, buffer.nextVerticeIndexInVertexBuffer -\\n            state.screenState.totalCoordonatesDrawn);\\n    }, batchSize);\\n    return nbrCoordonatesToDraw;\\n};\\nexports.calculateDrawBatchSize = calculateDrawBatchSize;\\nvar shouldSignalsBeDrained = function (state) {\\n    var totalCoordonatesAdded = state.screenState.totalCoordonatesDrawn;\\n    return state.gpuBuffers.reduce(function (willDrain, gpuBufferState) {\\n        if (willDrain) {\\n            return true;\\n        }\\n        // console.log(gpuBufferState.nextVerticeIndexInVertexBuffer, totalCoordonatesAdded, gpuBufferState.nextVerticeIndexInVertexBuffer - totalCoordonatesAdded);\\n        return (gpuBufferState.nextVerticeIndexInVertexBuffer - totalCoordonatesAdded >\\n            VERTICES_DRAIN_THRESHOLD);\\n    }, false);\\n};\\nexports.shouldSignalsBeDrained = shouldSignalsBeDrained;\\nvar uploadVerticesToGpu = function (state, channelId, vertices, gl) {\\n    //find the gpu buffer and create it if necessary\\n    var gpuBufferState = state.gpuBuffers.find(function (buffer) { return buffer.channelId === channelId; });\\n    var backFillCount = 0;\\n    if (gpuBufferState === undefined) {\\n        //create new state\\n        gpuBufferState = __assign(__assign({}, initialState), { channelId: channelId });\\n        //When uploading the first vertices,\\n        //Backfill with what other buffers already filled\\n        //So that we always have buffers with the same indices\\n        backFillCount = state.gpuBuffers.reduce(function (maxVertices, buffer) {\\n            return Math.max(maxVertices, buffer.nextVerticeIndexInVertexBuffer);\\n        }, 0);\\n        backFillCount = Math.max(0, backFillCount - vertices.length);\\n    }\\n    var backfillVertices = Array(backFillCount).fill(undefined);\\n    var nextGpuBufferState = __assign(__assign({}, gpuBufferState), (0, exports.initializeIfNeeded)(gpuBufferState, gl));\\n    var dataUpload = __spreadArray(__spreadArray([], backfillVertices, true), vertices, true);\\n    if (nextGpuBufferState.nextVerticeIndexInVertexBuffer *\\n        Float32Array.BYTES_PER_ELEMENT +\\n        dataUpload.length * Float32Array.BYTES_PER_ELEMENT >=\\n        gpuBufferState.vertexBufferSize) {\\n        return __assign(__assign({}, nextGpuBufferState), { gpuBufferOverflow: true });\\n    }\\n    gl.bufferSubData(gl.ARRAY_BUFFER, nextGpuBufferState.nextVerticeIndexInVertexBuffer *\\n        Float32Array.BYTES_PER_ELEMENT, Float32Array.from(dataUpload));\\n    nextGpuBufferState.nextVerticeIndexInVertexBuffer += dataUpload.length;\\n    return nextGpuBufferState;\\n};\\nexports.uploadVerticesToGpu = uploadVerticesToGpu;\\nvar initializeIfNeeded = function (gpuBufferState, gl) {\\n    var nextState = {\\n        vertexBufferNeedsInitializing: gpuBufferState.vertexBufferNeedsInitializing,\\n    };\\n    if (!gpuBufferState.vertexBufferNeedsInitializing) {\\n        var buffer_1 = (0, exports.getGpuBuffer)(gpuBufferState.channelId);\\n        gl.bindBuffer(gl.ARRAY_BUFFER, buffer_1);\\n        return nextState;\\n    }\\n    var buffer = gpuBuffers.get(gpuBufferState.channelId);\\n    //if buffer was already created, delete the previous one and recreate it\\n    if (buffer !== undefined) {\\n        gl.deleteBuffer(buffer);\\n    }\\n    var glBuffer = gl.createBuffer();\\n    if (glBuffer === null) {\\n        throw new GLError_1.GLError('Failed to create vertex buffer');\\n    }\\n    gpuBuffers.set(gpuBufferState.channelId, glBuffer);\\n    gl.bindBuffer(gl.ARRAY_BUFFER, glBuffer);\\n    gl.bufferData(gl.ARRAY_BUFFER, gpuBufferState.vertexBufferSize, gl.DYNAMIC_DRAW);\\n    //If the newly created buffer does not start its\\n    //indices at zero, backfill it with empty vertices\\n    if (gpuBufferState.nextVerticeIndexInVertexBuffer > 0) {\\n        var emptyVertice = Array(gpuBufferState.nextVerticeIndexInVertexBuffer).fill(undefined);\\n        gl.bufferSubData(gl.ARRAY_BUFFER, 0, Float32Array.from(emptyVertice));\\n    }\\n    nextState.vertexBufferNeedsInitializing = false;\\n    return nextState;\\n};\\nexports.initializeIfNeeded = initializeIfNeeded;\\nvar deleteGpuBuffer = function (gpuBufferState, gl) {\\n    var buffer = gpuBuffers.get(gpuBufferState.channelId);\\n    if (buffer === undefined) {\\n        return;\\n    }\\n    if (!gl.isBuffer(buffer)) {\\n        return;\\n    }\\n    gl.deleteBuffer(buffer);\\n};\\nexports.deleteGpuBuffer = deleteGpuBuffer;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/signal/gpu-buffers.ts?\");\n\n/***/ }),\n\n/***/ \"./src/signal/signal-matrix.ts\":\n/*!*************************************!*\\\n  !*** ./src/signal/signal-matrix.ts ***!\n  \\*************************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.calculateYScale = exports.calculateYTranslation = void 0;\\nvar calculateYTranslation = function (signal, screenState) {\\n    //with no translation, domain is 0 to bottom, 1 to top\\n    //We want the 0 of the signal to be positionned at yPosition pixels\\n    // Translate up 1 container\\n    // Translate down by yPosition\\n    // Transform pixels to domain space\\n    var pixelToDomain = 2 / screenState.containerHeight;\\n    var translation = pixelToDomain * (screenState.containerHeight - signal.yPosition);\\n    return translation;\\n};\\nexports.calculateYTranslation = calculateYTranslation;\\nvar calculateYScale = function (signal, screenState) {\\n    //The container has a size of 2 in the domain\\n    //With no scaling, 0 will be at the bottom, 1 at the top\\n    //We should fit the signal, considering its amplitude\\n    //In chartHeight\\n    //First we scale down to chartHeight\\n    //Then we divide by amplitude\\n    //Finally we apply zoom ratio\\n    var signalHeightToContainerRatio = signal.chartHeight / screenState.containerHeight;\\n    var scale = (signalHeightToContainerRatio / signal.amplitude) * signal.zoomRatio;\\n    return scale;\\n};\\nexports.calculateYScale = calculateYScale;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/signal/signal-matrix.ts?\");\n\n/***/ }),\n\n/***/ \"./src/signal/vertices.ts\":\n/*!********************************!*\\\n  !*** ./src/signal/vertices.ts ***!\n  \\********************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.pointsToLineVertices = void 0;\\nvar pointsToLineVertices = function (points) {\\n    var vertices = [];\\n    points.forEach(function (point) {\\n        if (isNaN(point.x) || isNaN(point.y)) {\\n            throw 'invalid coordonates';\\n        }\\n        vertices.push.apply(vertices, [point.x, point.y, 0]);\\n    });\\n    return vertices;\\n};\\nexports.pointsToLineVertices = pointsToLineVertices;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/signal/vertices.ts?\");\n\n/***/ }),\n\n/***/ \"./src/store/actions/data-actions.ts\":\n/*!*******************************************!*\\\n  !*** ./src/store/actions/data-actions.ts ***!\n  \\*******************************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.BufferDataActionType = void 0;\\nexports.BufferDataActionType = 'data/buffer';\\n\\n\\n//# sourceURL=webpack://glplotter/./src/store/actions/data-actions.ts?\");\n\n/***/ }),\n\n/***/ \"./src/store/actions/measure-actions.ts\":\n/*!**********************************************!*\\\n  !*** ./src/store/actions/measure-actions.ts ***!\n  \\**********************************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.DestroyAllMeasureActionType = exports.DrawMeasuresActionType = exports.ReplaceMeasuresActionType = exports.RemoveMeasureActionType = exports.AddMeasureActionType = void 0;\\nexports.AddMeasureActionType = 'measure/add';\\nexports.RemoveMeasureActionType = 'measure/remove';\\nexports.ReplaceMeasuresActionType = 'measure/replaceAll';\\nexports.DrawMeasuresActionType = 'measure/drawAll';\\nexports.DestroyAllMeasureActionType = 'measure/destroyAll';\\n\\n\\n//# sourceURL=webpack://glplotter/./src/store/actions/measure-actions.ts?\");\n\n/***/ }),\n\n/***/ \"./src/store/actions/screen-actions.ts\":\n/*!*********************************************!*\\\n  !*** ./src/store/actions/screen-actions.ts ***!\n  \\*********************************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.MoveScreenActionType = exports.SwitchModeActionType = exports.UpdateDisplayRateActionType = exports.UpdateScreenContainerActionType = exports.InitializeScreenActionType = void 0;\\nexports.InitializeScreenActionType = 'screen/init';\\nexports.UpdateScreenContainerActionType = 'screen/new-container';\\nexports.UpdateDisplayRateActionType = 'screen/displayRate';\\nexports.SwitchModeActionType = 'screen/switchMode';\\nexports.MoveScreenActionType = 'screen/move';\\n\\n\\n//# sourceURL=webpack://glplotter/./src/store/actions/screen-actions.ts?\");\n\n/***/ }),\n\n/***/ \"./src/store/actions/signal-actions.ts\":\n/*!*********************************************!*\\\n  !*** ./src/store/actions/signal-actions.ts ***!\n  \\*********************************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.DestroyAllSignalActionType = exports.PositionSignalActionType = exports.ZoomSignalsActionType = exports.DrawSignalsActionType = exports.ReplaceSignalsActionType = exports.RemoveSignalActionType = exports.AddSignalActionType = void 0;\\nexports.AddSignalActionType = 'signal/add';\\nexports.RemoveSignalActionType = 'signal/remove';\\nexports.ReplaceSignalsActionType = 'signal/replaceAll';\\nexports.DrawSignalsActionType = 'signal/drawAll';\\nexports.ZoomSignalsActionType = 'signal/zoom';\\nexports.PositionSignalActionType = 'signal/position';\\nexports.DestroyAllSignalActionType = 'signal/destroyAll';\\n\\n\\n//# sourceURL=webpack://glplotter/./src/store/actions/signal-actions.ts?\");\n\n/***/ }),\n\n/***/ \"./src/store/reducer.ts\":\n/*!******************************!*\\\n  !*** ./src/store/reducer.ts ***!\n  \\******************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.reducer = void 0;\\nvar draw_signals_1 = __webpack_require__(/*! ./reducers/signal/draw-signals */ \\\"./src/store/reducers/signal/draw-signals.ts\\\");\\nvar data_actions_1 = __webpack_require__(/*! ./actions/data-actions */ \\\"./src/store/actions/data-actions.ts\\\");\\nvar screen_actions_1 = __webpack_require__(/*! ./actions/screen-actions */ \\\"./src/store/actions/screen-actions.ts\\\");\\nvar data_reducer_1 = __webpack_require__(/*! ./reducers/data/data-reducer */ \\\"./src/store/reducers/data/data-reducer.ts\\\");\\nvar screen_reducer_1 = __webpack_require__(/*! ./reducers/screen/screen-reducer */ \\\"./src/store/reducers/screen/screen-reducer.ts\\\");\\nvar signal_actions_1 = __webpack_require__(/*! ./actions/signal-actions */ \\\"./src/store/actions/signal-actions.ts\\\");\\nvar signal_reducer_1 = __webpack_require__(/*! ./reducers/signal/signal-reducer */ \\\"./src/store/reducers/signal/signal-reducer.ts\\\");\\nvar measure_actions_1 = __webpack_require__(/*! ./actions/measure-actions */ \\\"./src/store/actions/measure-actions.ts\\\");\\nvar measure_reducer_1 = __webpack_require__(/*! ./reducers/measure/measure-reducer */ \\\"./src/store/reducers/measure/measure-reducer.ts\\\");\\nvar reducer = function (state, action) {\\n    switch (action.type) {\\n        case data_actions_1.BufferDataActionType:\\n            return (0, data_reducer_1.bufferData)(state, action.payload);\\n        case screen_actions_1.InitializeScreenActionType:\\n            return (0, screen_reducer_1.initializeScreen)(state, action.payload);\\n        case screen_actions_1.UpdateScreenContainerActionType:\\n            return (0, screen_reducer_1.applyContainerChanges)(state, action.payload);\\n        case signal_actions_1.AddSignalActionType:\\n            return (0, signal_reducer_1.addSignal)(state, action.payload);\\n        case signal_actions_1.RemoveSignalActionType:\\n            return (0, signal_reducer_1.removeSignal)(state, action.payload);\\n        case signal_actions_1.ReplaceSignalsActionType:\\n            return (0, signal_reducer_1.replaceSignals)(state, action.payload);\\n        case signal_actions_1.DrawSignalsActionType:\\n            return (0, draw_signals_1.drawSignals)(state, action.payload);\\n        case screen_actions_1.UpdateDisplayRateActionType:\\n            return (0, screen_reducer_1.initializeScreen)(state, action.payload);\\n        case signal_actions_1.ZoomSignalsActionType:\\n            return (0, signal_reducer_1.zoomSignals)(state, action.payload);\\n        case signal_actions_1.PositionSignalActionType:\\n            return (0, signal_reducer_1.positionSignal)(state, action.payload);\\n        case screen_actions_1.SwitchModeActionType:\\n            return (0, screen_reducer_1.switchDrawingMode)(state, action.payload);\\n        case screen_actions_1.MoveScreenActionType:\\n            return (0, screen_reducer_1.moveScreen)(state, action.payload);\\n        case signal_actions_1.DestroyAllSignalActionType:\\n            return (0, signal_reducer_1.destroySignalBuffers)(state);\\n        case measure_actions_1.AddMeasureActionType:\\n            return (0, measure_reducer_1.addMeasure)(state, action.payload);\\n        case measure_actions_1.RemoveMeasureActionType:\\n            return (0, measure_reducer_1.removeMeasure)(state, action.payload);\\n        case measure_actions_1.ReplaceMeasuresActionType:\\n            return (0, measure_reducer_1.replaceMeasures)(state, action.payload);\\n        case measure_actions_1.DestroyAllMeasureActionType:\\n            return (0, measure_reducer_1.destroyMeasures)(state);\\n        case measure_actions_1.DrawMeasuresActionType:\\n            return (0, measure_reducer_1.drawMeasures)(state, action.payload);\\n        default:\\n            return state;\\n    }\\n};\\nexports.reducer = reducer;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/store/reducer.ts?\");\n\n/***/ }),\n\n/***/ \"./src/store/reducers/data/data-reducer.ts\":\n/*!*************************************************!*\\\n  !*** ./src/store/reducers/data/data-reducer.ts ***!\n  \\*************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __assign = (this && this.__assign) || function () {\\n    __assign = Object.assign || function(t) {\\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\\n            s = arguments[i];\\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\\n                t[p] = s[p];\\n        }\\n        return t;\\n    };\\n    return __assign.apply(this, arguments);\\n};\\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\\n        if (ar || !(i in from)) {\\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\\n            ar[i] = from[i];\\n        }\\n    }\\n    return to.concat(ar || Array.prototype.slice.call(from));\\n};\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.bufferData = void 0;\\nvar gpu_buffers_1 = __webpack_require__(/*! @src/signal/gpu-buffers */ \\\"./src/signal/gpu-buffers.ts\\\");\\nvar vertices_1 = __webpack_require__(/*! @src/signal/vertices */ \\\"./src/signal/vertices.ts\\\");\\nvar bufferData = function (state, payload) {\\n    var channelId = payload.channelId, gl = payload.gl;\\n    var vertices = (0, vertices_1.pointsToLineVertices)(payload.points);\\n    var gpuBufferState = (0, gpu_buffers_1.uploadVerticesToGpu)(state, channelId, vertices, gl);\\n    return __assign(__assign({}, state), { gpuBuffers: __spreadArray(__spreadArray([], state.gpuBuffers.filter(function (buffer) { return buffer.channelId !== channelId; }), true), [\\n            gpuBufferState,\\n        ], false) });\\n};\\nexports.bufferData = bufferData;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/store/reducers/data/data-reducer.ts?\");\n\n/***/ }),\n\n/***/ \"./src/store/reducers/measure/measure-reducer.ts\":\n/*!*******************************************************!*\\\n  !*** ./src/store/reducers/measure/measure-reducer.ts ***!\n  \\*******************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __assign = (this && this.__assign) || function () {\\n    __assign = Object.assign || function(t) {\\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\\n            s = arguments[i];\\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\\n                t[p] = s[p];\\n        }\\n        return t;\\n    };\\n    return __assign.apply(this, arguments);\\n};\\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\\n        if (ar || !(i in from)) {\\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\\n            ar[i] = from[i];\\n        }\\n    }\\n    return to.concat(ar || Array.prototype.slice.call(from));\\n};\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.drawMeasures = exports.destroyMeasures = exports.replaceMeasures = exports.removeMeasure = exports.addMeasure = void 0;\\nvar drawer_automove_1 = __webpack_require__(/*! @src/measure/drawers/drawer-automove */ \\\"./src/measure/drawers/drawer-automove.ts\\\");\\nvar drawer_manual_1 = __webpack_require__(/*! @src/measure/drawers/drawer-manual */ \\\"./src/measure/drawers/drawer-manual.ts\\\");\\nvar drawer_rotating_1 = __webpack_require__(/*! @src/measure/drawers/drawer-rotating */ \\\"./src/measure/drawers/drawer-rotating.ts\\\");\\nvar measure_shader_1 = __webpack_require__(/*! @src/measure/gl/measure-shader */ \\\"./src/measure/gl/measure-shader.ts\\\");\\nvar gpu_buffer_1 = __webpack_require__(/*! @src/measure/gpu-buffer */ \\\"./src/measure/gpu-buffer.ts\\\");\\nvar ram_buffer_1 = __webpack_require__(/*! @src/measure/ram-buffer */ \\\"./src/measure/ram-buffer.ts\\\");\\nvar color_1 = __webpack_require__(/*! @src/utils/color */ \\\"./src/utils/color.ts\\\");\\nvar conversions_1 = __webpack_require__(/*! @src/utils/conversions */ \\\"./src/utils/conversions.ts\\\");\\nvar mapMeasureConfig = function (state, _a) {\\n    var id = _a.id, pixelTop = _a.pixelTop, timestamp = _a.timestamp, pixelWidth = _a.pixelWidth, color = _a.color;\\n    var screenState = state.screenState;\\n    var containerHeight = screenState.containerHeight;\\n    var width = (0, conversions_1.pixelSizeToPointSize)(screenState, pixelWidth);\\n    var middleLineWidth = 1 / containerHeight;\\n    var middleLinePosition = 1 - (pixelTop * 1) / containerHeight + middleLineWidth / 2;\\n    return {\\n        id: id,\\n        pointX: timestamp,\\n        middleLinePosition: middleLinePosition,\\n        width: width,\\n        middleLineWidth: middleLineWidth,\\n        text: \\\"\\\".concat(Math.abs(Math.round(width)), \\\"ms\\\"),\\n        color: (0, color_1.colorToGlColor)(color),\\n    };\\n};\\nvar addMeasure = function (state, payload) {\\n    var measure = mapMeasureConfig(state, payload);\\n    return __assign(__assign({}, state), { measureRamBuffer: (0, ram_buffer_1.addMeasureVertices)(state.measureRamBuffer, measure), measures: __spreadArray(__spreadArray([], state.measures, true), [measure], false) });\\n};\\nexports.addMeasure = addMeasure;\\nvar removeMeasure = function (state, _a) {\\n    var id = _a.id;\\n    var newMeasures = state.measures.filter(function (measure) { return measure.id !== id; });\\n    return __assign(__assign({}, state), { measureRamBuffer: (0, ram_buffer_1.replaceMeasureVertices)(state.measureRamBuffer, newMeasures), measures: newMeasures });\\n};\\nexports.removeMeasure = removeMeasure;\\nvar replaceMeasures = function (state, _a) {\\n    var measures = _a.measures;\\n    var newMeasures = measures.map(function (measure) {\\n        return mapMeasureConfig(state, measure);\\n    });\\n    return __assign(__assign({}, state), { measureRamBuffer: (0, ram_buffer_1.replaceMeasureVertices)(state.measureRamBuffer, newMeasures), measures: newMeasures });\\n};\\nexports.replaceMeasures = replaceMeasures;\\nvar destroyMeasures = function (state) {\\n    (0, ram_buffer_1.resetMeasureVertices)();\\n    return __assign(__assign({}, state), { measures: [], measureGpuBuffer: __assign(__assign({}, state.measureGpuBuffer), { scheduledForDeletion: true }) });\\n};\\nexports.destroyMeasures = destroyMeasures;\\nvar drawMeasures = function (state, _a) {\\n    var gl = _a.gl, textContext = _a.textContext;\\n    var nextState = executeScheduledDestroy(state, gl);\\n    var newGpuState = (0, gpu_buffer_1.bindAndUploadMeasures)(nextState.measureRamBuffer, nextState.measureGpuBuffer, gl);\\n    nextState = __assign(__assign({}, nextState), { measureGpuBuffer: newGpuState });\\n    switch (state.screenState.drawingMode) {\\n        case 'AUTOMOVE':\\n            (0, drawer_automove_1.drawAutomoveMeasures)(state, gl, textContext);\\n            break;\\n        case 'MANUAL':\\n            (0, drawer_manual_1.drawManualMeasures)(state, gl, textContext);\\n            break;\\n        default:\\n            (0, drawer_rotating_1.drawRotatingMeasures)(state, gl, textContext);\\n            break;\\n    }\\n    return nextState;\\n};\\nexports.drawMeasures = drawMeasures;\\nvar executeScheduledDestroy = function (state, gl) {\\n    var measureGpuBuffer = state.measureGpuBuffer;\\n    if (measureGpuBuffer.scheduledForDeletion) {\\n        (0, gpu_buffer_1.deleteMeasureBuffer)(gl);\\n        measure_shader_1.measureShader.delete(gl);\\n    }\\n    return __assign(__assign({}, state), { measureGpuBuffer: __assign(__assign({}, state.measureGpuBuffer), { scheduledForDeletion: false }) });\\n};\\n\\n\\n//# sourceURL=webpack://glplotter/./src/store/reducers/measure/measure-reducer.ts?\");\n\n/***/ }),\n\n/***/ \"./src/store/reducers/screen/screen-reducer.ts\":\n/*!*****************************************************!*\\\n  !*** ./src/store/reducers/screen/screen-reducer.ts ***!\n  \\*****************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __assign = (this && this.__assign) || function () {\\n    __assign = Object.assign || function(t) {\\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\\n            s = arguments[i];\\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\\n                t[p] = s[p];\\n        }\\n        return t;\\n    };\\n    return __assign.apply(this, arguments);\\n};\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.moveScreen = exports.switchDrawingMode = exports.applyContainerChanges = exports.initializeScreen = void 0;\\nvar screen_utils_1 = __webpack_require__(/*! @src/screen/screen-utils */ \\\"./src/screen/screen-utils.ts\\\");\\nvar initializeScreen = function (state, _a) {\\n    var container = _a.container, displayRate = _a.displayRate;\\n    var newScreenState = setStateFromContainer(__assign(__assign({}, state.screenState), { displayRate: displayRate }), container);\\n    return __assign(__assign({}, state), { screenState: newScreenState });\\n};\\nexports.initializeScreen = initializeScreen;\\nvar applyContainerChanges = function (state, _a) {\\n    var container = _a.container;\\n    var newScreenState = setStateFromContainer(__assign({}, state.screenState), container);\\n    return __assign(__assign({}, state), { screenState: newScreenState });\\n};\\nexports.applyContainerChanges = applyContainerChanges;\\nvar switchDrawingMode = function (state, _a) {\\n    var mode = _a.mode;\\n    var screenState = state.screenState;\\n    var translationReset = \\n    //No translation in rotating mode\\n    mode === 'ROTATE'\\n        ? 0\\n        : //Switching to manual, go to the end minus 1 screen\\n            //(last point is on the right of the screen)\\n            mode === 'MANUAL'\\n                ? -(screenState.containerWidth - 1) * (0, screen_utils_1.getTotalRotations)(screenState)\\n                : 0;\\n    var newMatrix = __assign(__assign({}, screenState.matrixes), { xTranslation: translationReset });\\n    return __assign(__assign({}, state), { screenState: __assign(__assign({}, screenState), { drawingMode: mode, matrixes: newMatrix }) });\\n};\\nexports.switchDrawingMode = switchDrawingMode;\\nvar moveScreen = function (state, _a) {\\n    var translation = _a.translation;\\n    var newMatrix = __assign(__assign({}, state.screenState.matrixes), { xTranslation: state.screenState.matrixes.xTranslation + translation });\\n    return __assign(__assign({}, state), { screenState: __assign(__assign({}, state.screenState), { matrixes: newMatrix }) });\\n};\\nexports.moveScreen = moveScreen;\\nvar setStateFromContainer = function (state, newContainer) {\\n    var mmToPx = state.mmToPx;\\n    if (mmToPx === 0) {\\n        //Get the reference mmToPx\\n        var element = document.createElement('div');\\n        element.id = 'mmToPx';\\n        element.style.width = '1mm';\\n        document.body.appendChild(element);\\n        mmToPx = 1 / element.getBoundingClientRect().width;\\n        document.body.removeChild(element);\\n    }\\n    var newState = __assign(__assign({}, state), { mmToPx: mmToPx, containerWidth: newContainer.getBoundingClientRect().width, containerHeight: newContainer.getBoundingClientRect().height });\\n    return newState;\\n};\\n\\n\\n//# sourceURL=webpack://glplotter/./src/store/reducers/screen/screen-reducer.ts?\");\n\n/***/ }),\n\n/***/ \"./src/store/reducers/signal/draw-signals.ts\":\n/*!***************************************************!*\\\n  !*** ./src/store/reducers/signal/draw-signals.ts ***!\n  \\***************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __assign = (this && this.__assign) || function () {\\n    __assign = Object.assign || function(t) {\\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\\n            s = arguments[i];\\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\\n                t[p] = s[p];\\n        }\\n        return t;\\n    };\\n    return __assign.apply(this, arguments);\\n};\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.drawSignals = void 0;\\nvar gpu_buffers_1 = __webpack_require__(/*! @src/signal/gpu-buffers */ \\\"./src/signal/gpu-buffers.ts\\\");\\nvar screen_transitions_1 = __webpack_require__(/*! @src/screen/screen-transitions */ \\\"./src/screen/screen-transitions.ts\\\");\\nvar signal_shader_1 = __webpack_require__(/*! @src/signal/gl/signal-shader */ \\\"./src/signal/gl/signal-shader.ts\\\");\\nvar drawer_rotating_1 = __webpack_require__(/*! @src/signal/drawers/drawer-rotating */ \\\"./src/signal/drawers/drawer-rotating.ts\\\");\\nvar drawer_manual_1 = __webpack_require__(/*! @src/signal/drawers/drawer-manual */ \\\"./src/signal/drawers/drawer-manual.ts\\\");\\nvar drawer_automove_1 = __webpack_require__(/*! @src/signal/drawers/drawer-automove */ \\\"./src/signal/drawers/drawer-automove.ts\\\");\\nvar drawSignals = function (state, _a) {\\n    var gl = _a.gl;\\n    var nextState = executeScheduledDestroy(state, gl);\\n    if (state.gpuBuffers.length === 0) {\\n        //if no more buffers, also delete the shader\\n        signal_shader_1.signalShader.delete(gl);\\n    }\\n    return drawVisibleSignals(nextState, gl) || state;\\n};\\nexports.drawSignals = drawSignals;\\nvar executeScheduledDestroy = function (state, gl) {\\n    state.gpuBuffers\\n        .filter(function (buffer) { return !!buffer.scheduledForDeletion; })\\n        .forEach(function (buffer) {\\n        (0, gpu_buffers_1.deleteGpuBuffer)(buffer, gl);\\n    });\\n    return __assign(__assign({}, state), { gpuBuffers: state.gpuBuffers.filter(function (buffer) { return !buffer.scheduledForDeletion; }) });\\n};\\nvar drawVisibleSignals = function (state, gl) {\\n    //We want to keep all signals in sync\\n    //so we start by checking how many points\\n    //each buffer is able to draw\\n    var nbrCoordonatesToDraw = (0, gpu_buffers_1.calculateDrawBatchSize)(state);\\n    var totalCoordonatesAvailable = state.screenState.totalCoordonatesDrawn + nbrCoordonatesToDraw;\\n    state.gpuBuffers.forEach(function (gpuBufferState) {\\n        //for all signals of that channel\\n        //draw the buffer with the corresponding shader configuration\\n        //Do that here so that we do not have to rebing the buffer\\n        var channelId = gpuBufferState.channelId;\\n        var buffer = (0, gpu_buffers_1.getGpuBuffer)(channelId);\\n        gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\\n        var channelSignals = gatherChannelSignalsToDraw(state, channelId);\\n        channelSignals.forEach(function (signal) {\\n            drawSignal(state, signal, totalCoordonatesAvailable, gl);\\n        });\\n    });\\n    var screenState = (0, screen_transitions_1.applyPostDrawScreenTransition)(state.screenState, totalCoordonatesAvailable);\\n    return __assign(__assign({}, state), { screenState: screenState });\\n};\\nvar gatherChannelSignalsToDraw = function (state, channelId) {\\n    return state.signals\\n        .filter(function (signal) { return signal.channelId === channelId; })\\n        .filter(function (signal) { return !!signal.visible; });\\n};\\nvar drawSignal = function (state, signal, totalCoordonatesAvailable, gl) {\\n    switch (state.screenState.drawingMode) {\\n        case 'AUTOMOVE':\\n            return (0, drawer_automove_1.drawAutomoveSignal)(state, signal, totalCoordonatesAvailable, gl);\\n        case 'MANUAL':\\n            return (0, drawer_manual_1.drawManualSignal)(state, signal, totalCoordonatesAvailable, gl);\\n            break;\\n        default:\\n            return (0, drawer_rotating_1.drawRotatingSignal)(state, signal, totalCoordonatesAvailable, gl);\\n    }\\n};\\n\\n\\n//# sourceURL=webpack://glplotter/./src/store/reducers/signal/draw-signals.ts?\");\n\n/***/ }),\n\n/***/ \"./src/store/reducers/signal/signal-reducer.ts\":\n/*!*****************************************************!*\\\n  !*** ./src/store/reducers/signal/signal-reducer.ts ***!\n  \\*****************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __assign = (this && this.__assign) || function () {\\n    __assign = Object.assign || function(t) {\\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\\n            s = arguments[i];\\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\\n                t[p] = s[p];\\n        }\\n        return t;\\n    };\\n    return __assign.apply(this, arguments);\\n};\\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\\n        if (ar || !(i in from)) {\\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\\n            ar[i] = from[i];\\n        }\\n    }\\n    return to.concat(ar || Array.prototype.slice.call(from));\\n};\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.destroySignalBuffers = exports.positionSignal = exports.zoomSignals = exports.replaceSignals = exports.removeSignal = exports.addSignal = void 0;\\nvar gpu_buffers_1 = __webpack_require__(/*! @src/signal/gpu-buffers */ \\\"./src/signal/gpu-buffers.ts\\\");\\nvar values_1 = __webpack_require__(/*! @src/store/values */ \\\"./src/store/values.ts\\\");\\nvar color_1 = __webpack_require__(/*! @src/utils/color */ \\\"./src/utils/color.ts\\\");\\nvar addSignal = function (state, _a) {\\n    var id = _a.id, channelId = _a.channelId, color = _a.color, visible = _a.visible, amplitude = _a.amplitude, pitch = _a.pitch, chartHeight = _a.chartHeight, yPosition = _a.yPosition;\\n    //if we already have the same id, do not add it again\\n    if (state.signals.find(function (signal) { return signal.id === id; }) !== undefined) {\\n        return state;\\n    }\\n    var initialState = __assign(__assign({}, values_1.initialSignalState), { id: id, channelId: channelId, visible: visible, amplitude: amplitude, pitch: pitch, chartHeight: chartHeight, yPosition: yPosition, color: (0, color_1.colorToGlColor)(color) });\\n    return __assign(__assign({}, state), { signals: __spreadArray(__spreadArray([], state.signals, true), [initialState], false) });\\n};\\nexports.addSignal = addSignal;\\nvar removeSignal = function (state, _a) {\\n    var id = _a.id;\\n    return __assign(__assign({}, state), { signals: state.signals.filter(function (signal) { return signal.id !== id; }) });\\n};\\nexports.removeSignal = removeSignal;\\nvar replaceSignals = function (state, _a) {\\n    var signals = _a.signals;\\n    return __assign(__assign({}, state), { signals: signals.map(function (signal) {\\n            var existingSignal = state.signals.find(function (sig) { return sig.id === signal.id; }) || {};\\n            return __assign(__assign(__assign(__assign({}, values_1.initialSignalState), existingSignal), signal), { color: (0, color_1.colorToGlColor)(signal.color) });\\n        }) });\\n};\\nexports.replaceSignals = replaceSignals;\\nvar zoomSignals = function (state, _a) {\\n    var signalIds = _a.signalIds, ratio = _a.ratio;\\n    var signals = state.signals.map(function (signal) {\\n        if (!signalIds.includes(signal.id)) {\\n            return signal;\\n        }\\n        return __assign(__assign({}, signal), { zoomRatio: ratio });\\n    });\\n    return __assign(__assign({}, state), { signals: signals });\\n};\\nexports.zoomSignals = zoomSignals;\\nvar positionSignal = function (state, _a) {\\n    var signalId = _a.signalId, yPosition = _a.yPosition;\\n    var signals = state.signals.map(function (signal) {\\n        if (signalId !== signal.id) {\\n            return signal;\\n        }\\n        return __assign(__assign({}, signal), { yPosition: yPosition });\\n    });\\n    return __assign(__assign({}, state), { signals: signals });\\n};\\nexports.positionSignal = positionSignal;\\nvar destroySignalBuffers = function (state) {\\n    (0, gpu_buffers_1.resetGpuBuffers)();\\n    return __assign(__assign({}, state), { signals: [], gpuBuffers: state.gpuBuffers.map(function (buffer) { return (__assign(__assign({}, buffer), { scheduledForDeletion: true })); }) });\\n};\\nexports.destroySignalBuffers = destroySignalBuffers;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/store/reducers/signal/signal-reducer.ts?\");\n\n/***/ }),\n\n/***/ \"./src/store/store.ts\":\n/*!****************************!*\\\n  !*** ./src/store/store.ts ***!\n  \\****************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.createStore = void 0;\\nvar reducer_1 = __webpack_require__(/*! ./reducer */ \\\"./src/store/reducer.ts\\\");\\nvar values_1 = __webpack_require__(/*! ./values */ \\\"./src/store/values.ts\\\");\\nvar deepFreeze = function (item) {\\n    var complex = Object(item) === item;\\n    if (Object.isFrozen(item) || !complex)\\n        return item;\\n    Object.values(item).forEach(deepFreeze);\\n    return Object.freeze(item);\\n};\\nvar createStore = function (initState) {\\n    if (initState === void 0) { initState = values_1.initialState; }\\n    var state = deepFreeze(initState);\\n    return {\\n        getState: function () { return state; },\\n        dispatch: function (action) {\\n            return (state = deepFreeze((0, reducer_1.reducer)(state, action)));\\n        },\\n    };\\n};\\nexports.createStore = createStore;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/store/store.ts?\");\n\n/***/ }),\n\n/***/ \"./src/store/values.ts\":\n/*!*****************************!*\\\n  !*** ./src/store/values.ts ***!\n  \\*****************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.initialSignalState = exports.initialState = exports.initialMeasureGpuState = exports.initialMeasureRamState = exports.DOMAIN_HEIGHT = exports.BASE_MATRIX = void 0;\\n//TODO, reuse\\nexports.BASE_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\\nexports.DOMAIN_HEIGHT = 2; //Gl domain: -1 to 1\\nvar initialScreenMatrixes = {\\n    projectionMatrix: [\\n        //Initial matrix with camera at 0,0,1,1\\n        2, 0, 0, 0, 0, 2, 0, 0, 0, 0, -2, 0, -1, -1, -1, 1,\\n    ],\\n    modelMatrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],\\n    xTranslation: 0,\\n};\\nvar initialScreenState = {\\n    totalCoordonatesDrawn: 0,\\n    drawingMode: 'ROTATE',\\n    mmToPx: 0,\\n    displayRate: 50,\\n    containerHeight: 0,\\n    containerWidth: 0,\\n    pitch: 1,\\n    matrixes: initialScreenMatrixes,\\n};\\nexports.initialMeasureRamState = {\\n    isDirty: false,\\n    measureIndexes: [],\\n};\\nexports.initialMeasureGpuState = {\\n    scheduledForDeletion: false,\\n};\\nexports.initialState = {\\n    gpuBuffers: [],\\n    signals: [],\\n    measures: [],\\n    measureRamBuffer: exports.initialMeasureRamState,\\n    measureGpuBuffer: exports.initialMeasureGpuState,\\n    screenState: initialScreenState,\\n    samplingFrequency: 1000,\\n};\\nexports.initialSignalState = {\\n    id: '',\\n    channelId: '',\\n    color: [0, 0, 0, 1],\\n    visible: true,\\n    amplitude: 1,\\n    pitch: 1,\\n    chartHeight: 20,\\n    yPosition: 0,\\n    zoomRatio: 1,\\n};\\n\\n\\n//# sourceURL=webpack://glplotter/./src/store/values.ts?\");\n\n/***/ }),\n\n/***/ \"./src/structures/GLError.ts\":\n/*!***********************************!*\\\n  !*** ./src/structures/GLError.ts ***!\n  \\***********************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\neval(\"\\nvar __extends = (this && this.__extends) || (function () {\\n    var extendStatics = function (d, b) {\\n        extendStatics = Object.setPrototypeOf ||\\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\\n        return extendStatics(d, b);\\n    };\\n    return function (d, b) {\\n        if (typeof b !== \\\"function\\\" && b !== null)\\n            throw new TypeError(\\\"Class extends value \\\" + String(b) + \\\" is not a constructor or null\\\");\\n        extendStatics(d, b);\\n        function __() { this.constructor = d; }\\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\\n    };\\n})();\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.GLError = void 0;\\nvar GLError = /** @class */ (function (_super) {\\n    __extends(GLError, _super);\\n    function GLError(message) {\\n        return _super.call(this, message) || this;\\n    }\\n    return GLError;\\n}(Error));\\nexports.GLError = GLError;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/structures/GLError.ts?\");\n\n/***/ }),\n\n/***/ \"./src/utils/color.ts\":\n/*!****************************!*\\\n  !*** ./src/utils/color.ts ***!\n  \\****************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __importDefault = (this && this.__importDefault) || function (mod) {\\n    return (mod && mod.__esModule) ? mod : { \\\"default\\\": mod };\\n};\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.colorToGlColor = void 0;\\nvar hex_rgb_1 = __importDefault(__webpack_require__(/*! hex-rgb */ \\\"./node_modules/hex-rgb/index.js\\\"));\\nvar hexRegexp = new RegExp(/^#/);\\nvar colorToGlColor = function (color) {\\n    var rgba = {\\n        red: 255,\\n        green: 255,\\n        blue: 255,\\n        alpha: 1,\\n    };\\n    //defined as rgba array\\n    if (Array.isArray(color) && color.length === 4) {\\n        rgba = {\\n            red: color[0],\\n            green: color[1],\\n            blue: color[2],\\n            alpha: color[3],\\n        };\\n    }\\n    var hexColor = color;\\n    if (color && hexRegexp.test(hexColor)) {\\n        rgba = (0, hex_rgb_1.default)(hexColor);\\n    }\\n    return [rgba.red / 255, rgba.green / 255, rgba.blue / 255, rgba.alpha];\\n};\\nexports.colorToGlColor = colorToGlColor;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/utils/color.ts?\");\n\n/***/ }),\n\n/***/ \"./src/utils/conversions.ts\":\n/*!**********************************!*\\\n  !*** ./src/utils/conversions.ts ***!\n  \\**********************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\neval(\"\\n/**\\n * Units:\\n * - Point : 1 unit of signal data as sent by the simulator. This is a decimal\\n * representation. The width of the screen for instance if expressed in points,\\n * which is not an integer\\n *\\n * - Vertice: 1 unit of signal data in the javascript buffer. This is an integer\\n *\\n * - Coordonate:  1 unit of signal data in the vertex buffer.\\n *   Each vertex is represented by three floating-point numbers that correspond to the x, y, and z coordinates\\n *\\n * - Clipspace: unit of screen in webgl canvas. 0-2\\n *\\n */\\nObject.defineProperty(exports, \\\"__esModule\\\", ({ value: true }));\\nexports.screenSizeToPointSize = exports.pixelSizeToVerticeSize = exports.pixelSizeToClipspaceSize = exports.pixelSizeToPointSize = exports.pointSizeToPixelSize = exports.pointSizeToCoordonateSize = exports.coordonateSizeToVerticeSize = exports.verticeSizeToCoordonateSize = void 0;\\nfunction verticeSizeToCoordonateSize(size) {\\n    return size * 3;\\n}\\nexports.verticeSizeToCoordonateSize = verticeSizeToCoordonateSize;\\nfunction coordonateSizeToVerticeSize(size) {\\n    return size / 3;\\n}\\nexports.coordonateSizeToVerticeSize = coordonateSizeToVerticeSize;\\n// A point is represented by 3 coordonates (x,y,z)\\n// A point is a decimal value\\n// A coordonate is the nearest integer multiple of 3\\nfunction pointSizeToCoordonateSize(size) {\\n    var decimalValue = 3 * size;\\n    return 3 * Math.floor(Math.abs(decimalValue) / 3);\\n}\\nexports.pointSizeToCoordonateSize = pointSizeToCoordonateSize;\\nfunction pointSizeToPixelSize(screenState, pointSize) {\\n    var pointsPerWindow = (0, exports.screenSizeToPointSize)(screenState);\\n    var ratio = screenState.containerWidth / pointsPerWindow;\\n    return pointSize * ratio;\\n}\\nexports.pointSizeToPixelSize = pointSizeToPixelSize;\\nfunction pixelSizeToPointSize(screenState, pixelSize) {\\n    var pointsPerWindow = (0, exports.screenSizeToPointSize)(screenState);\\n    var ratio = pointsPerWindow / screenState.containerWidth;\\n    return pixelSize * ratio;\\n}\\nexports.pixelSizeToPointSize = pixelSizeToPointSize;\\nfunction pixelSizeToClipspaceSize(screenState, pixelSize) {\\n    var pixelToClipspace = 2 / screenState.containerWidth;\\n    return pixelSize * pixelToClipspace;\\n}\\nexports.pixelSizeToClipspaceSize = pixelSizeToClipspaceSize;\\nfunction pixelSizeToVerticeSize(screenState, pixelSize) {\\n    var nbrVertices = -(pixelSize * (0, exports.screenSizeToPointSize)(screenState)) /\\n        screenState.containerWidth;\\n    return Math.round(nbrVertices);\\n}\\nexports.pixelSizeToVerticeSize = pixelSizeToVerticeSize;\\nvar screenSizeToPointSize = function (_a) {\\n    var mmToPx = _a.mmToPx, containerWidth = _a.containerWidth, displayRate = _a.displayRate, pitch = _a.pitch;\\n    var windowWidthInMm = mmToPx * containerWidth;\\n    var pointsPerSecond = windowWidthInMm / displayRate;\\n    return (pointsPerSecond * 1000) / pitch;\\n};\\nexports.screenSizeToPointSize = screenSizeToPointSize;\\n\\n\\n//# sourceURL=webpack://glplotter/./src/utils/conversions.ts?\");\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module is referenced by other modules so it can't be inlined\n/******/ \tvar __webpack_exports__ = __webpack_require__(\"./src/gl-plotter.ts\");\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"]}