{"version":3,"sources":["jsdelivr-header.js","/npm/webgl-fluid@0.3.7/src/dat.gui.min.js","/npm/webgl-fluid@0.3.7/src/index.js"],"names":[],"mappings":"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","file":"/npm/webgl-fluid@0.3.7/dist/webgl-fluid.umd.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.19.2.\n * Original file: /npm/webgl-fluid@0.3.7/dist/webgl-fluid.umd.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 * dat-gui JavaScript Controller Library\n * http://code.google.com/p/dat-gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t(e.dat={})}(this,function(e){\"use strict\";function t(e,t){var n=e.__state.conversionName.toString(),o=Math.round(e.r),i=Math.round(e.g),r=Math.round(e.b),s=e.a,a=Math.round(e.h),l=e.s.toFixed(1),d=e.v.toFixed(1);if(t||\"THREE_CHAR_HEX\"===n||\"SIX_CHAR_HEX\"===n){for(var c=e.hex.toString(16);c.length<6;)c=\"0\"+c;return\"#\"+c}return\"CSS_RGB\"===n?\"rgb(\"+o+\",\"+i+\",\"+r+\")\":\"CSS_RGBA\"===n?\"rgba(\"+o+\",\"+i+\",\"+r+\",\"+s+\")\":\"HEX\"===n?\"0x\"+e.hex.toString(16):\"RGB_ARRAY\"===n?\"[\"+o+\",\"+i+\",\"+r+\"]\":\"RGBA_ARRAY\"===n?\"[\"+o+\",\"+i+\",\"+r+\",\"+s+\"]\":\"RGB_OBJ\"===n?\"{r:\"+o+\",g:\"+i+\",b:\"+r+\"}\":\"RGBA_OBJ\"===n?\"{r:\"+o+\",g:\"+i+\",b:\"+r+\",a:\"+s+\"}\":\"HSV_OBJ\"===n?\"{h:\"+a+\",s:\"+l+\",v:\"+d+\"}\":\"HSVA_OBJ\"===n?\"{h:\"+a+\",s:\"+l+\",v:\"+d+\",a:\"+s+\"}\":\"unknown format\"}function n(e,t,n){Object.defineProperty(e,t,{get:function(){return\"RGB\"===this.__state.space?this.__state[t]:(I.recalculateRGB(this,t,n),this.__state[t])},set:function(e){\"RGB\"!==this.__state.space&&(I.recalculateRGB(this,t,n),this.__state.space=\"RGB\"),this.__state[t]=e}})}function o(e,t){Object.defineProperty(e,t,{get:function(){return\"HSV\"===this.__state.space?this.__state[t]:(I.recalculateHSV(this),this.__state[t])},set:function(e){\"HSV\"!==this.__state.space&&(I.recalculateHSV(this),this.__state.space=\"HSV\"),this.__state[t]=e}})}function i(e){if(\"0\"===e||S.isUndefined(e))return 0;var t=e.match(U);return S.isNull(t)?0:parseFloat(t[1])}function r(e){var t=e.toString();return t.indexOf(\".\")>-1?t.length-t.indexOf(\".\")-1:0}function s(e,t){var n=Math.pow(10,t);return Math.round(e*n)/n}function a(e,t,n,o,i){return o+(e-t)/(n-t)*(i-o)}function l(e,t,n,o){e.style.background=\"\",S.each(ee,function(i){e.style.cssText+=\"background: \"+i+\"linear-gradient(\"+t+\", \"+n+\" 0%, \"+o+\" 100%); \"})}function d(e){e.style.background=\"\",e.style.cssText+=\"background: -moz-linear-gradient(top,  #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);\",e.style.cssText+=\"background: -webkit-linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);\",e.style.cssText+=\"background: -o-linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);\",e.style.cssText+=\"background: -ms-linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);\",e.style.cssText+=\"background: linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);\"}function c(e,t,n){var o=document.createElement(\"li\");return t&&o.appendChild(t),n?e.__ul.insertBefore(o,n):e.__ul.appendChild(o),e.onResize(),o}function u(e){X.unbind(window,\"resize\",e.__resizeHandler),e.saveToLocalStorageIfPossible&&X.unbind(window,\"unload\",e.saveToLocalStorageIfPossible)}function _(e,t){var n=e.__preset_select[e.__preset_select.selectedIndex];n.innerHTML=t?n.value+\"*\":n.value}function h(e,t,n){if(n.__li=t,n.__gui=e,S.extend(n,{options:function(t){if(arguments.length>1){var o=n.__li.nextElementSibling;return n.remove(),f(e,n.object,n.property,{before:o,factoryArgs:[S.toArray(arguments)]})}if(S.isArray(t)||S.isObject(t)){var i=n.__li.nextElementSibling;return n.remove(),f(e,n.object,n.property,{before:i,factoryArgs:[t]})}},name:function(e){return n.__li.firstElementChild.firstElementChild.innerHTML=e,n},listen:function(){return n.__gui.listen(n),n},remove:function(){return n.__gui.remove(n),n}}),n instanceof q){var o=new Q(n.object,n.property,{min:n.__min,max:n.__max,step:n.__step});S.each([\"updateDisplay\",\"onChange\",\"onFinishChange\",\"step\"],function(e){var t=n[e],i=o[e];n[e]=o[e]=function(){var e=Array.prototype.slice.call(arguments);return i.apply(o,e),t.apply(n,e)}}),X.addClass(t,\"has-slider\"),n.domElement.insertBefore(o.domElement,n.domElement.firstElementChild)}else if(n instanceof Q){var i=function(t){if(S.isNumber(n.__min)&&S.isNumber(n.__max)){var o=n.__li.firstElementChild.firstElementChild.innerHTML,i=n.__gui.__listening.indexOf(n)>-1;n.remove();var r=f(e,n.object,n.property,{before:n.__li.nextElementSibling,factoryArgs:[n.__min,n.__max,n.__step]});return r.name(o),i&&r.listen(),r}return t};n.min=S.compose(i,n.min),n.max=S.compose(i,n.max)}else n instanceof K?(X.bind(t,\"click\",function(){X.fakeEvent(n.__checkbox,\"click\")}),X.bind(n.__checkbox,\"click\",function(e){e.stopPropagation()})):n instanceof Z?(X.bind(t,\"click\",function(){X.fakeEvent(n.__button,\"click\")}),X.bind(t,\"mouseover\",function(){X.addClass(n.__button,\"hover\")}),X.bind(t,\"mouseout\",function(){X.removeClass(n.__button,\"hover\")})):n instanceof $&&(X.addClass(t,\"color\"),n.updateDisplay=S.compose(function(e){return t.style.borderLeftColor=n.__color.toString(),e},n.updateDisplay),n.updateDisplay());n.setValue=S.compose(function(t){return e.getRoot().__preset_select&&n.isModified()&&_(e.getRoot(),!0),t},n.setValue)}function p(e,t){var n=e.getRoot(),o=n.__rememberedObjects.indexOf(t.object);if(-1!==o){var i=n.__rememberedObjectIndecesToControllers[o];if(void 0===i&&(i={},n.__rememberedObjectIndecesToControllers[o]=i),i[t.property]=t,n.load&&n.load.remembered){var r=n.load.remembered,s=void 0;if(r[e.preset])s=r[e.preset];else{if(!r[se])return;s=r[se]}if(s[o]&&void 0!==s[o][t.property]){var a=s[o][t.property];t.initialValue=a,t.setValue(a)}}}}function f(e,t,n,o){if(void 0===t[n])throw new Error('Object \"'+t+'\" has no property \"'+n+'\"');var i=void 0;if(o.color)i=new $(t,n);else{var r=[t,n].concat(o.factoryArgs);i=ne.apply(e,r)}o.before instanceof z&&(o.before=o.before.__li),p(e,i),X.addClass(i.domElement,\"c\");var s=document.createElement(\"span\");X.addClass(s,\"property-name\"),s.innerHTML=i.property;var a=document.createElement(\"div\");a.appendChild(s),a.appendChild(i.domElement);var l=c(e,a,o.before);return X.addClass(l,he.CLASS_CONTROLLER_ROW),i instanceof $?X.addClass(l,\"color\"):X.addClass(l,H(i.getValue())),h(e,l,i),e.__controllers.push(i),i}function m(e,t){return document.location.href+\".\"+t}function g(e,t,n){var o=document.createElement(\"option\");o.innerHTML=t,o.value=t,e.__preset_select.appendChild(o),n&&(e.__preset_select.selectedIndex=e.__preset_select.length-1)}function b(e,t){t.style.display=e.useLocalStorage?\"block\":\"none\"}function v(e){var t=e.__save_row=document.createElement(\"li\");X.addClass(e.domElement,\"has-save\"),e.__ul.insertBefore(t,e.__ul.firstChild),X.addClass(t,\"save-row\");var n=document.createElement(\"span\");n.innerHTML=\"&nbsp;\",X.addClass(n,\"button gears\");var o=document.createElement(\"span\");o.innerHTML=\"Save\",X.addClass(o,\"button\"),X.addClass(o,\"save\");var i=document.createElement(\"span\");i.innerHTML=\"New\",X.addClass(i,\"button\"),X.addClass(i,\"save-as\");var r=document.createElement(\"span\");r.innerHTML=\"Revert\",X.addClass(r,\"button\"),X.addClass(r,\"revert\");var s=e.__preset_select=document.createElement(\"select\");if(e.load&&e.load.remembered?S.each(e.load.remembered,function(t,n){g(e,n,n===e.preset)}):g(e,se,!1),X.bind(s,\"change\",function(){for(var t=0;t<e.__preset_select.length;t++)e.__preset_select[t].innerHTML=e.__preset_select[t].value;e.preset=this.value}),t.appendChild(s),t.appendChild(n),t.appendChild(o),t.appendChild(i),t.appendChild(r),ae){var a=document.getElementById(\"dg-local-explain\"),l=document.getElementById(\"dg-local-storage\");document.getElementById(\"dg-save-locally\").style.display=\"block\",\"true\"===localStorage.getItem(m(e,\"isLocal\"))&&l.setAttribute(\"checked\",\"checked\"),b(e,a),X.bind(l,\"change\",function(){e.useLocalStorage=!e.useLocalStorage,b(e,a)})}var d=document.getElementById(\"dg-new-constructor\");X.bind(d,\"keydown\",function(e){!e.metaKey||67!==e.which&&67!==e.keyCode||le.hide()}),X.bind(n,\"click\",function(){d.innerHTML=JSON.stringify(e.getSaveObject(),void 0,2),le.show(),d.focus(),d.select()}),X.bind(o,\"click\",function(){e.save()}),X.bind(i,\"click\",function(){var t=prompt(\"Enter a new preset name.\");t&&e.saveAs(t)}),X.bind(r,\"click\",function(){e.revert()})}function y(e){function t(t){return t.preventDefault(),e.width+=i-t.clientX,e.onResize(),i=t.clientX,!1}function n(){X.removeClass(e.__closeButton,he.CLASS_DRAG),X.unbind(window,\"mousemove\",t),X.unbind(window,\"mouseup\",n)}function o(o){return o.preventDefault(),i=o.clientX,X.addClass(e.__closeButton,he.CLASS_DRAG),X.bind(window,\"mousemove\",t),X.bind(window,\"mouseup\",n),!1}var i=void 0;e.__resize_handle=document.createElement(\"div\"),S.extend(e.__resize_handle.style,{width:\"6px\",marginLeft:\"-3px\",height:\"200px\",cursor:\"ew-resize\",position:\"absolute\"}),X.bind(e.__resize_handle,\"mousedown\",o),X.bind(e.__closeButton,\"mousedown\",o),e.domElement.insertBefore(e.__resize_handle,e.domElement.firstElementChild)}function w(e,t){e.domElement.style.width=t+\"px\",e.__save_row&&e.autoPlace&&(e.__save_row.style.width=t+\"px\"),e.__closeButton&&(e.__closeButton.style.width=t+\"px\")}function x(e,t){var n={};return S.each(e.__rememberedObjects,function(o,i){var r={},s=e.__rememberedObjectIndecesToControllers[i];S.each(s,function(e,n){r[n]=t?e.initialValue:e.getValue()}),n[i]=r}),n}function E(e){for(var t=0;t<e.__preset_select.length;t++)e.__preset_select[t].value===e.preset&&(e.__preset_select.selectedIndex=t)}function C(e){0!==e.length&&oe.call(window,function(){C(e)}),S.each(e,function(e){e.updateDisplay()})}var A=Array.prototype.forEach,k=Array.prototype.slice,S={BREAK:{},extend:function(e){return this.each(k.call(arguments,1),function(t){(this.isObject(t)?Object.keys(t):[]).forEach(function(n){this.isUndefined(t[n])||(e[n]=t[n])}.bind(this))},this),e},defaults:function(e){return this.each(k.call(arguments,1),function(t){(this.isObject(t)?Object.keys(t):[]).forEach(function(n){this.isUndefined(e[n])&&(e[n]=t[n])}.bind(this))},this),e},compose:function(){var e=k.call(arguments);return function(){for(var t=k.call(arguments),n=e.length-1;n>=0;n--)t=[e[n].apply(this,t)];return t[0]}},each:function(e,t,n){if(e)if(A&&e.forEach&&e.forEach===A)e.forEach(t,n);else if(e.length===e.length+0){var o=void 0,i=void 0;for(o=0,i=e.length;o<i;o++)if(o in e&&t.call(n,e[o],o)===this.BREAK)return}else for(var r in e)if(t.call(n,e[r],r)===this.BREAK)return},defer:function(e){setTimeout(e,0)},debounce:function(e,t,n){var o=void 0;return function(){var i=this,r=arguments,s=n||!o;clearTimeout(o),o=setTimeout(function(){o=null,n||e.apply(i,r)},t),s&&e.apply(i,r)}},toArray:function(e){return e.toArray?e.toArray():k.call(e)},isUndefined:function(e){return void 0===e},isNull:function(e){return null===e},isNaN:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e){return isNaN(e)}),isArray:Array.isArray||function(e){return e.constructor===Array},isObject:function(e){return e===Object(e)},isNumber:function(e){return e===e+0},isString:function(e){return e===e+\"\"},isBoolean:function(e){return!1===e||!0===e},isFunction:function(e){return\"[object Function]\"===Object.prototype.toString.call(e)}},O=[{litmus:S.isString,conversions:{THREE_CHAR_HEX:{read:function(e){var t=e.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);return null!==t&&{space:\"HEX\",hex:parseInt(\"0x\"+t[1].toString()+t[1].toString()+t[2].toString()+t[2].toString()+t[3].toString()+t[3].toString(),0)}},write:t},SIX_CHAR_HEX:{read:function(e){var t=e.match(/^#([A-F0-9]{6})$/i);return null!==t&&{space:\"HEX\",hex:parseInt(\"0x\"+t[1].toString(),0)}},write:t},CSS_RGB:{read:function(e){var t=e.match(/^rgb\\(\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*\\)/);return null!==t&&{space:\"RGB\",r:parseFloat(t[1]),g:parseFloat(t[2]),b:parseFloat(t[3])}},write:t},CSS_RGBA:{read:function(e){var t=e.match(/^rgba\\(\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*\\)/);return null!==t&&{space:\"RGB\",r:parseFloat(t[1]),g:parseFloat(t[2]),b:parseFloat(t[3]),a:parseFloat(t[4])}},write:t}}},{litmus:S.isNumber,conversions:{HEX:{read:function(e){return{space:\"HEX\",hex:e,conversionName:\"HEX\"}},write:function(e){return e.hex}}}},{litmus:S.isArray,conversions:{RGB_ARRAY:{read:function(e){return 3===e.length&&{space:\"RGB\",r:e[0],g:e[1],b:e[2]}},write:function(e){return[e.r,e.g,e.b]}},RGBA_ARRAY:{read:function(e){return 4===e.length&&{space:\"RGB\",r:e[0],g:e[1],b:e[2],a:e[3]}},write:function(e){return[e.r,e.g,e.b,e.a]}}}},{litmus:S.isObject,conversions:{RGBA_OBJ:{read:function(e){return!!(S.isNumber(e.r)&&S.isNumber(e.g)&&S.isNumber(e.b)&&S.isNumber(e.a))&&{space:\"RGB\",r:e.r,g:e.g,b:e.b,a:e.a}},write:function(e){return{r:e.r,g:e.g,b:e.b,a:e.a}}},RGB_OBJ:{read:function(e){return!!(S.isNumber(e.r)&&S.isNumber(e.g)&&S.isNumber(e.b))&&{space:\"RGB\",r:e.r,g:e.g,b:e.b}},write:function(e){return{r:e.r,g:e.g,b:e.b}}},HSVA_OBJ:{read:function(e){return!!(S.isNumber(e.h)&&S.isNumber(e.s)&&S.isNumber(e.v)&&S.isNumber(e.a))&&{space:\"HSV\",h:e.h,s:e.s,v:e.v,a:e.a}},write:function(e){return{h:e.h,s:e.s,v:e.v,a:e.a}}},HSV_OBJ:{read:function(e){return!!(S.isNumber(e.h)&&S.isNumber(e.s)&&S.isNumber(e.v))&&{space:\"HSV\",h:e.h,s:e.s,v:e.v}},write:function(e){return{h:e.h,s:e.s,v:e.v}}}}}],T=void 0,L=void 0,R=function(){L=!1;var e=arguments.length>1?S.toArray(arguments):arguments[0];return S.each(O,function(t){if(t.litmus(e))return S.each(t.conversions,function(t,n){if(T=t.read(e),!1===L&&!1!==T)return L=T,T.conversionName=n,T.conversion=t,S.BREAK}),S.BREAK}),L},B=void 0,N={hsv_to_rgb:function(e,t,n){var o=Math.floor(e/60)%6,i=e/60-Math.floor(e/60),r=n*(1-t),s=n*(1-i*t),a=n*(1-(1-i)*t),l=[[n,a,r],[s,n,r],[r,n,a],[r,s,n],[a,r,n],[n,r,s]][o];return{r:255*l[0],g:255*l[1],b:255*l[2]}},rgb_to_hsv:function(e,t,n){var o=Math.min(e,t,n),i=Math.max(e,t,n),r=i-o,s=void 0,a=void 0;return 0===i?{h:NaN,s:0,v:0}:(a=r/i,s=e===i?(t-n)/r:t===i?2+(n-e)/r:4+(e-t)/r,(s/=6)<0&&(s+=1),{h:360*s,s:a,v:i/255})},rgb_to_hex:function(e,t,n){var o=this.hex_with_component(0,2,e);return o=this.hex_with_component(o,1,t),o=this.hex_with_component(o,0,n)},component_from_hex:function(e,t){return e>>8*t&255},hex_with_component:function(e,t,n){return n<<(B=8*t)|e&~(255<<B)}},H=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},F=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")},P=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),j=function e(t,n,o){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var r=Object.getPrototypeOf(t);return null===r?void 0:e(r,n,o)}if(\"value\"in i)return i.value;var s=i.get;if(void 0!==s)return s.call(o)},D=function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)},V=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t},I=function(){function e(){if(F(this,e),this.__state=R.apply(this,arguments),!1===this.__state)throw new Error(\"Failed to interpret color arguments\");this.__state.a=this.__state.a||1}return P(e,[{key:\"toString\",value:function(){return t(this)}},{key:\"toHexString\",value:function(){return t(this,!0)}},{key:\"toOriginal\",value:function(){return this.__state.conversion.write(this)}}]),e}();I.recalculateRGB=function(e,t,n){if(\"HEX\"===e.__state.space)e.__state[t]=N.component_from_hex(e.__state.hex,n);else{if(\"HSV\"!==e.__state.space)throw new Error(\"Corrupted color state\");S.extend(e.__state,N.hsv_to_rgb(e.__state.h,e.__state.s,e.__state.v))}},I.recalculateHSV=function(e){var t=N.rgb_to_hsv(e.r,e.g,e.b);S.extend(e.__state,{s:t.s,v:t.v}),S.isNaN(t.h)?S.isUndefined(e.__state.h)&&(e.__state.h=0):e.__state.h=t.h},I.COMPONENTS=[\"r\",\"g\",\"b\",\"h\",\"s\",\"v\",\"hex\",\"a\"],n(I.prototype,\"r\",2),n(I.prototype,\"g\",1),n(I.prototype,\"b\",0),o(I.prototype,\"h\"),o(I.prototype,\"s\"),o(I.prototype,\"v\"),Object.defineProperty(I.prototype,\"a\",{get:function(){return this.__state.a},set:function(e){this.__state.a=e}}),Object.defineProperty(I.prototype,\"hex\",{get:function(){return\"HEX\"!==!this.__state.space&&(this.__state.hex=N.rgb_to_hex(this.r,this.g,this.b)),this.__state.hex},set:function(e){this.__state.space=\"HEX\",this.__state.hex=e}});var z=function(){function e(t,n){F(this,e),this.initialValue=t[n],this.domElement=document.createElement(\"div\"),this.object=t,this.property=n,this.__onChange=void 0,this.__onFinishChange=void 0}return P(e,[{key:\"onChange\",value:function(e){return this.__onChange=e,this}},{key:\"onFinishChange\",value:function(e){return this.__onFinishChange=e,this}},{key:\"setValue\",value:function(e){return this.object[this.property]=e,this.__onChange&&this.__onChange.call(this,e),this.updateDisplay(),this}},{key:\"getValue\",value:function(){return this.object[this.property]}},{key:\"updateDisplay\",value:function(){return this}},{key:\"isModified\",value:function(){return this.initialValue!==this.getValue()}}]),e}(),M={HTMLEvents:[\"change\"],MouseEvents:[\"click\",\"mousemove\",\"mousedown\",\"mouseup\",\"mouseover\"],KeyboardEvents:[\"keydown\"]},G={};S.each(M,function(e,t){S.each(e,function(e){G[e]=t})});var U=/(\\d+(\\.\\d+)?)px/,X={makeSelectable:function(e,t){void 0!==e&&void 0!==e.style&&(e.onselectstart=t?function(){return!1}:function(){},e.style.MozUserSelect=t?\"auto\":\"none\",e.style.KhtmlUserSelect=t?\"auto\":\"none\",e.unselectable=t?\"on\":\"off\")},makeFullscreen:function(e,t,n){var o=n,i=t;S.isUndefined(i)&&(i=!0),S.isUndefined(o)&&(o=!0),e.style.position=\"absolute\",i&&(e.style.left=0,e.style.right=0),o&&(e.style.top=0,e.style.bottom=0)},fakeEvent:function(e,t,n,o){var i=n||{},r=G[t];if(!r)throw new Error(\"Event type \"+t+\" not supported.\");var s=document.createEvent(r);switch(r){case\"MouseEvents\":var a=i.x||i.clientX||0,l=i.y||i.clientY||0;s.initMouseEvent(t,i.bubbles||!1,i.cancelable||!0,window,i.clickCount||1,0,0,a,l,!1,!1,!1,!1,0,null);break;case\"KeyboardEvents\":var d=s.initKeyboardEvent||s.initKeyEvent;S.defaults(i,{cancelable:!0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,keyCode:void 0,charCode:void 0}),d(t,i.bubbles||!1,i.cancelable,window,i.ctrlKey,i.altKey,i.shiftKey,i.metaKey,i.keyCode,i.charCode);break;default:s.initEvent(t,i.bubbles||!1,i.cancelable||!0)}S.defaults(s,o),e.dispatchEvent(s)},bind:function(e,t,n,o){var i=o||!1;return e.addEventListener?e.addEventListener(t,n,i):e.attachEvent&&e.attachEvent(\"on\"+t,n),X},unbind:function(e,t,n,o){var i=o||!1;return e.removeEventListener?e.removeEventListener(t,n,i):e.detachEvent&&e.detachEvent(\"on\"+t,n),X},addClass:function(e,t){if(void 0===e.className)e.className=t;else if(e.className!==t){var n=e.className.split(/ +/);-1===n.indexOf(t)&&(n.push(t),e.className=n.join(\" \").replace(/^\\s+/,\"\").replace(/\\s+$/,\"\"))}return X},removeClass:function(e,t){if(t)if(e.className===t)e.removeAttribute(\"class\");else{var n=e.className.split(/ +/),o=n.indexOf(t);-1!==o&&(n.splice(o,1),e.className=n.join(\" \"))}else e.className=void 0;return X},hasClass:function(e,t){return new RegExp(\"(?:^|\\\\s+)\"+t+\"(?:\\\\s+|$)\").test(e.className)||!1},getWidth:function(e){var t=getComputedStyle(e);return i(t[\"border-left-width\"])+i(t[\"border-right-width\"])+i(t[\"padding-left\"])+i(t[\"padding-right\"])+i(t.width)},getHeight:function(e){var t=getComputedStyle(e);return i(t[\"border-top-width\"])+i(t[\"border-bottom-width\"])+i(t[\"padding-top\"])+i(t[\"padding-bottom\"])+i(t.height)},getOffset:function(e){var t=e,n={left:0,top:0};if(t.offsetParent)do{n.left+=t.offsetLeft,n.top+=t.offsetTop,t=t.offsetParent}while(t);return n},isActive:function(e){return e===document.activeElement&&(e.type||e.href)}},K=function(e){function t(e,n){F(this,t);var o=V(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n)),i=o;return o.__prev=o.getValue(),o.__checkbox=document.createElement(\"input\"),o.__checkbox.setAttribute(\"type\",\"checkbox\"),X.bind(o.__checkbox,\"change\",function(){i.setValue(!i.__prev)},!1),o.domElement.appendChild(o.__checkbox),o.updateDisplay(),o}return D(t,z),P(t,[{key:\"setValue\",value:function(e){var n=j(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"setValue\",this).call(this,e);return this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue()),this.__prev=this.getValue(),n}},{key:\"updateDisplay\",value:function(){return!0===this.getValue()?(this.__checkbox.setAttribute(\"checked\",\"checked\"),this.__checkbox.checked=!0,this.__prev=!0):(this.__checkbox.checked=!1,this.__prev=!1),j(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"updateDisplay\",this).call(this)}}]),t}(),Y=function(e){function t(e,n,o){F(this,t);var i=V(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n)),r=o,s=i;if(i.__select=document.createElement(\"select\"),S.isArray(r)){var a={};S.each(r,function(e){a[e]=e}),r=a}return S.each(r,function(e,t){var n=document.createElement(\"option\");n.innerHTML=t,n.setAttribute(\"value\",e),s.__select.appendChild(n)}),i.updateDisplay(),X.bind(i.__select,\"change\",function(){var e=this.options[this.selectedIndex].value;s.setValue(e)}),i.domElement.appendChild(i.__select),i}return D(t,z),P(t,[{key:\"setValue\",value:function(e){var n=j(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"setValue\",this).call(this,e);return this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue()),n}},{key:\"updateDisplay\",value:function(){return X.isActive(this.__select)?this:(this.__select.value=this.getValue(),j(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"updateDisplay\",this).call(this))}}]),t}(),J=function(e){function t(e,n){function o(){r.setValue(r.__input.value)}F(this,t);var i=V(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n)),r=i;return i.__input=document.createElement(\"input\"),i.__input.setAttribute(\"type\",\"text\"),X.bind(i.__input,\"keyup\",o),X.bind(i.__input,\"change\",o),X.bind(i.__input,\"blur\",function(){r.__onFinishChange&&r.__onFinishChange.call(r,r.getValue())}),X.bind(i.__input,\"keydown\",function(e){13===e.keyCode&&this.blur()}),i.updateDisplay(),i.domElement.appendChild(i.__input),i}return D(t,z),P(t,[{key:\"updateDisplay\",value:function(){return X.isActive(this.__input)||(this.__input.value=this.getValue()),j(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"updateDisplay\",this).call(this)}}]),t}(),W=function(e){function t(e,n,o){F(this,t);var i=V(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n)),s=o||{};return i.__min=s.min,i.__max=s.max,i.__step=s.step,S.isUndefined(i.__step)?0===i.initialValue?i.__impliedStep=1:i.__impliedStep=Math.pow(10,Math.floor(Math.log(Math.abs(i.initialValue))/Math.LN10))/10:i.__impliedStep=i.__step,i.__precision=r(i.__impliedStep),i}return D(t,z),P(t,[{key:\"setValue\",value:function(e){var n=e;return void 0!==this.__min&&n<this.__min?n=this.__min:void 0!==this.__max&&n>this.__max&&(n=this.__max),void 0!==this.__step&&n%this.__step!=0&&(n=Math.round(n/this.__step)*this.__step),j(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"setValue\",this).call(this,n)}},{key:\"min\",value:function(e){return this.__min=e,this}},{key:\"max\",value:function(e){return this.__max=e,this}},{key:\"step\",value:function(e){return this.__step=e,this.__impliedStep=e,this.__precision=r(e),this}}]),t}(),Q=function(e){function t(e,n,o){function i(){l.__onFinishChange&&l.__onFinishChange.call(l,l.getValue())}function r(e){var t=d-e.clientY;l.setValue(l.getValue()+t*l.__impliedStep),d=e.clientY}function s(){X.unbind(window,\"mousemove\",r),X.unbind(window,\"mouseup\",s),i()}F(this,t);var a=V(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,o));a.__truncationSuspended=!1;var l=a,d=void 0;return a.__input=document.createElement(\"input\"),a.__input.setAttribute(\"type\",\"text\"),X.bind(a.__input,\"change\",function(){var e=parseFloat(l.__input.value);S.isNaN(e)||l.setValue(e)}),X.bind(a.__input,\"blur\",function(){i()}),X.bind(a.__input,\"mousedown\",function(e){X.bind(window,\"mousemove\",r),X.bind(window,\"mouseup\",s),d=e.clientY}),X.bind(a.__input,\"keydown\",function(e){13===e.keyCode&&(l.__truncationSuspended=!0,this.blur(),l.__truncationSuspended=!1,i())}),a.updateDisplay(),a.domElement.appendChild(a.__input),a}return D(t,W),P(t,[{key:\"updateDisplay\",value:function(){return this.__input.value=this.__truncationSuspended?this.getValue():s(this.getValue(),this.__precision),j(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"updateDisplay\",this).call(this)}}]),t}(),q=function(e){function t(e,n,o,i,r){function s(e){e.preventDefault();var t=_.__background.getBoundingClientRect();return _.setValue(a(e.clientX,t.left,t.right,_.__min,_.__max)),!1}function l(){X.unbind(window,\"mousemove\",s),X.unbind(window,\"mouseup\",l),_.__onFinishChange&&_.__onFinishChange.call(_,_.getValue())}function d(e){var t=e.touches[0].clientX,n=_.__background.getBoundingClientRect();_.setValue(a(t,n.left,n.right,_.__min,_.__max))}function c(){X.unbind(window,\"touchmove\",d),X.unbind(window,\"touchend\",c),_.__onFinishChange&&_.__onFinishChange.call(_,_.getValue())}F(this,t);var u=V(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,{min:o,max:i,step:r})),_=u;return u.__background=document.createElement(\"div\"),u.__foreground=document.createElement(\"div\"),X.bind(u.__background,\"mousedown\",function(e){document.activeElement.blur(),X.bind(window,\"mousemove\",s),X.bind(window,\"mouseup\",l),s(e)}),X.bind(u.__background,\"touchstart\",function(e){1===e.touches.length&&(X.bind(window,\"touchmove\",d),X.bind(window,\"touchend\",c),d(e))}),X.addClass(u.__background,\"slider\"),X.addClass(u.__foreground,\"slider-fg\"),u.updateDisplay(),u.__background.appendChild(u.__foreground),u.domElement.appendChild(u.__background),u}return D(t,W),P(t,[{key:\"updateDisplay\",value:function(){var e=(this.getValue()-this.__min)/(this.__max-this.__min);return this.__foreground.style.width=100*e+\"%\",j(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"updateDisplay\",this).call(this)}}]),t}(),Z=function(e){function t(e,n,o){F(this,t);var i=V(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n)),r=i;return i.__button=document.createElement(\"div\"),i.__button.innerHTML=void 0===o?\"Fire\":o,X.bind(i.__button,\"click\",function(e){return e.preventDefault(),r.fire(),!1}),X.addClass(i.__button,\"button\"),i.domElement.appendChild(i.__button),i}return D(t,z),P(t,[{key:\"fire\",value:function(){this.__onChange&&this.__onChange.call(this),this.getValue().call(this.object),this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue())}}]),t}(),$=function(e){function t(e,n){function o(e){u(e),X.bind(window,\"mousemove\",u),X.bind(window,\"touchmove\",u),X.bind(window,\"mouseup\",r),X.bind(window,\"touchend\",r)}function i(e){_(e),X.bind(window,\"mousemove\",_),X.bind(window,\"touchmove\",_),X.bind(window,\"mouseup\",s),X.bind(window,\"touchend\",s)}function r(){X.unbind(window,\"mousemove\",u),X.unbind(window,\"touchmove\",u),X.unbind(window,\"mouseup\",r),X.unbind(window,\"touchend\",r),c()}function s(){X.unbind(window,\"mousemove\",_),X.unbind(window,\"touchmove\",_),X.unbind(window,\"mouseup\",s),X.unbind(window,\"touchend\",s),c()}function a(){var e=R(this.value);!1!==e?(p.__color.__state=e,p.setValue(p.__color.toOriginal())):this.value=p.__color.toString()}function c(){p.__onFinishChange&&p.__onFinishChange.call(p,p.__color.toOriginal())}function u(e){-1===e.type.indexOf(\"touch\")&&e.preventDefault();var t=p.__saturation_field.getBoundingClientRect(),n=e.touches&&e.touches[0]||e,o=n.clientX,i=n.clientY,r=(o-t.left)/(t.right-t.left),s=1-(i-t.top)/(t.bottom-t.top);return s>1?s=1:s<0&&(s=0),r>1?r=1:r<0&&(r=0),p.__color.v=s,p.__color.s=r,p.setValue(p.__color.toOriginal()),!1}function _(e){-1===e.type.indexOf(\"touch\")&&e.preventDefault();var t=p.__hue_field.getBoundingClientRect(),n=1-((e.touches&&e.touches[0]||e).clientY-t.top)/(t.bottom-t.top);return n>1?n=1:n<0&&(n=0),p.__color.h=360*n,p.setValue(p.__color.toOriginal()),!1}F(this,t);var h=V(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));h.__color=new I(h.getValue()),h.__temp=new I(0);var p=h;h.domElement=document.createElement(\"div\"),X.makeSelectable(h.domElement,!1),h.__selector=document.createElement(\"div\"),h.__selector.className=\"selector\",h.__saturation_field=document.createElement(\"div\"),h.__saturation_field.className=\"saturation-field\",h.__field_knob=document.createElement(\"div\"),h.__field_knob.className=\"field-knob\",h.__field_knob_border=\"2px solid \",h.__hue_knob=document.createElement(\"div\"),h.__hue_knob.className=\"hue-knob\",h.__hue_field=document.createElement(\"div\"),h.__hue_field.className=\"hue-field\",h.__input=document.createElement(\"input\"),h.__input.type=\"text\",h.__input_textShadow=\"0 1px 1px \",X.bind(h.__input,\"keydown\",function(e){13===e.keyCode&&a.call(this)}),X.bind(h.__input,\"blur\",a),X.bind(h.__selector,\"mousedown\",function(){X.addClass(this,\"drag\").bind(window,\"mouseup\",function(){X.removeClass(p.__selector,\"drag\")})}),X.bind(h.__selector,\"touchstart\",function(){X.addClass(this,\"drag\").bind(window,\"touchend\",function(){X.removeClass(p.__selector,\"drag\")})});var f=document.createElement(\"div\");return S.extend(h.__selector.style,{width:\"122px\",height:\"102px\",padding:\"3px\",backgroundColor:\"#222\",boxShadow:\"0px 1px 3px rgba(0,0,0,0.3)\"}),S.extend(h.__field_knob.style,{position:\"absolute\",width:\"12px\",height:\"12px\",border:h.__field_knob_border+(h.__color.v<.5?\"#fff\":\"#000\"),boxShadow:\"0px 1px 3px rgba(0,0,0,0.5)\",borderRadius:\"12px\",zIndex:1}),S.extend(h.__hue_knob.style,{position:\"absolute\",width:\"15px\",height:\"2px\",borderRight:\"4px solid #fff\",zIndex:1}),S.extend(h.__saturation_field.style,{width:\"100px\",height:\"100px\",border:\"1px solid #555\",marginRight:\"3px\",display:\"inline-block\",cursor:\"pointer\"}),S.extend(f.style,{width:\"100%\",height:\"100%\",background:\"none\"}),l(f,\"top\",\"rgba(0,0,0,0)\",\"#000\"),S.extend(h.__hue_field.style,{width:\"15px\",height:\"100px\",border:\"1px solid #555\",cursor:\"ns-resize\",position:\"absolute\",top:\"3px\",right:\"3px\"}),d(h.__hue_field),S.extend(h.__input.style,{outline:\"none\",textAlign:\"center\",color:\"#fff\",border:0,fontWeight:\"bold\",textShadow:h.__input_textShadow+\"rgba(0,0,0,0.7)\"}),X.bind(h.__saturation_field,\"mousedown\",o),X.bind(h.__saturation_field,\"touchstart\",o),X.bind(h.__field_knob,\"mousedown\",o),X.bind(h.__field_knob,\"touchstart\",o),X.bind(h.__hue_field,\"mousedown\",i),X.bind(h.__hue_field,\"touchstart\",i),h.__saturation_field.appendChild(f),h.__selector.appendChild(h.__field_knob),h.__selector.appendChild(h.__saturation_field),h.__selector.appendChild(h.__hue_field),h.__hue_field.appendChild(h.__hue_knob),h.domElement.appendChild(h.__input),h.domElement.appendChild(h.__selector),h.updateDisplay(),h}return D(t,z),P(t,[{key:\"updateDisplay\",value:function(){var e=R(this.getValue());if(!1!==e){var t=!1;S.each(I.COMPONENTS,function(n){if(!S.isUndefined(e[n])&&!S.isUndefined(this.__color.__state[n])&&e[n]!==this.__color.__state[n])return t=!0,{}},this),t&&S.extend(this.__color.__state,e)}S.extend(this.__temp.__state,this.__color.__state),this.__temp.a=1;var n=this.__color.v<.5||this.__color.s>.5?255:0,o=255-n;S.extend(this.__field_knob.style,{marginLeft:100*this.__color.s-7+\"px\",marginTop:100*(1-this.__color.v)-7+\"px\",backgroundColor:this.__temp.toHexString(),border:this.__field_knob_border+\"rgb(\"+n+\",\"+n+\",\"+n+\")\"}),this.__hue_knob.style.marginTop=100*(1-this.__color.h/360)+\"px\",this.__temp.s=1,this.__temp.v=1,l(this.__saturation_field,\"left\",\"#fff\",this.__temp.toHexString()),this.__input.value=this.__color.toString(),S.extend(this.__input.style,{backgroundColor:this.__color.toHexString(),color:\"rgb(\"+n+\",\"+n+\",\"+n+\")\",textShadow:this.__input_textShadow+\"rgba(\"+o+\",\"+o+\",\"+o+\",.7)\"})}}]),t}(),ee=[\"-moz-\",\"-o-\",\"-webkit-\",\"-ms-\",\"\"],te={load:function(e,t){var n=t||document,o=n.createElement(\"link\");o.type=\"text/css\",o.rel=\"stylesheet\",o.href=e,n.getElementsByTagName(\"head\")[0].appendChild(o)},inject:function(e,t){var n=t||document,o=document.createElement(\"style\");o.type=\"text/css\",o.innerHTML=e;var i=n.getElementsByTagName(\"head\")[0];try{i.appendChild(o)}catch(e){}}},ne=function(e,t){var n=e[t];return S.isArray(arguments[2])||S.isObject(arguments[2])?new Y(e,t,arguments[2]):S.isNumber(n)?S.isNumber(arguments[2])&&S.isNumber(arguments[3])?S.isNumber(arguments[4])?new q(e,t,arguments[2],arguments[3],arguments[4]):new q(e,t,arguments[2],arguments[3]):S.isNumber(arguments[4])?new Q(e,t,{min:arguments[2],max:arguments[3],step:arguments[4]}):new Q(e,t,{min:arguments[2],max:arguments[3]}):S.isString(n)?new J(e,t):S.isFunction(n)?new Z(e,t,\"\"):S.isBoolean(n)?new K(e,t):null},oe=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){setTimeout(e,1e3/60)},ie=function(){function e(){F(this,e),this.backgroundElement=document.createElement(\"div\"),S.extend(this.backgroundElement.style,{backgroundColor:\"rgba(0,0,0,0.8)\",top:0,left:0,display:\"none\",zIndex:\"1000\",opacity:0,WebkitTransition:\"opacity 0.2s linear\",transition:\"opacity 0.2s linear\"}),X.makeFullscreen(this.backgroundElement),this.backgroundElement.style.position=\"fixed\",this.domElement=document.createElement(\"div\"),S.extend(this.domElement.style,{position:\"fixed\",display:\"none\",zIndex:\"1001\",opacity:0,WebkitTransition:\"-webkit-transform 0.2s ease-out, opacity 0.2s linear\",transition:\"transform 0.2s ease-out, opacity 0.2s linear\"}),document.body.appendChild(this.backgroundElement),document.body.appendChild(this.domElement);var t=this;X.bind(this.backgroundElement,\"click\",function(){t.hide()})}return P(e,[{key:\"show\",value:function(){var e=this;this.backgroundElement.style.display=\"block\",this.domElement.style.display=\"block\",this.domElement.style.opacity=0,this.domElement.style.webkitTransform=\"scale(1.1)\",this.layout(),S.defer(function(){e.backgroundElement.style.opacity=1,e.domElement.style.opacity=1,e.domElement.style.webkitTransform=\"scale(1)\"})}},{key:\"hide\",value:function(){var e=this,t=function t(){e.domElement.style.display=\"none\",e.backgroundElement.style.display=\"none\",X.unbind(e.domElement,\"webkitTransitionEnd\",t),X.unbind(e.domElement,\"transitionend\",t),X.unbind(e.domElement,\"oTransitionEnd\",t)};X.bind(this.domElement,\"webkitTransitionEnd\",t),X.bind(this.domElement,\"transitionend\",t),X.bind(this.domElement,\"oTransitionEnd\",t),this.backgroundElement.style.opacity=0,this.domElement.style.opacity=0,this.domElement.style.webkitTransform=\"scale(1.1)\"}},{key:\"layout\",value:function(){this.domElement.style.left=window.innerWidth/2-X.getWidth(this.domElement)/2+\"px\",this.domElement.style.top=window.innerHeight/2-X.getHeight(this.domElement)/2+\"px\"}}]),e}(),re=function(e){if(e&&\"undefined\"!=typeof window){var t=document.createElement(\"style\");return t.setAttribute(\"type\",\"text/css\"),t.innerHTML=e,document.head.appendChild(t),e}}(\".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\\n\");te.inject(re);var se=\"Default\",ae=function(){try{return!!window.localStorage}catch(e){return!1}}(),le=void 0,de=!0,ce=void 0,ue=!1,_e=[],he=function e(t){var n=this,o=t||{};this.domElement=document.createElement(\"div\"),this.__ul=document.createElement(\"ul\"),this.domElement.appendChild(this.__ul),X.addClass(this.domElement,\"dg\"),this.__folders={},this.__controllers=[],this.__rememberedObjects=[],this.__rememberedObjectIndecesToControllers=[],this.__listening=[],o=S.defaults(o,{closeOnTop:!1,autoPlace:!0,width:e.DEFAULT_WIDTH}),o=S.defaults(o,{resizable:o.autoPlace,hideable:o.autoPlace}),S.isUndefined(o.load)?o.load={preset:se}:o.preset&&(o.load.preset=o.preset),S.isUndefined(o.parent)&&o.hideable&&_e.push(this),o.resizable=S.isUndefined(o.parent)&&o.resizable,o.autoPlace&&S.isUndefined(o.scrollable)&&(o.scrollable=!0);var i=ae&&\"true\"===localStorage.getItem(m(this,\"isLocal\")),r=void 0,s=void 0;if(Object.defineProperties(this,{parent:{get:function(){return o.parent}},scrollable:{get:function(){return o.scrollable}},autoPlace:{get:function(){return o.autoPlace}},closeOnTop:{get:function(){return o.closeOnTop}},preset:{get:function(){return n.parent?n.getRoot().preset:o.load.preset},set:function(e){n.parent?n.getRoot().preset=e:o.load.preset=e,E(this),n.revert()}},width:{get:function(){return o.width},set:function(e){o.width=e,w(n,e)}},name:{get:function(){return o.name},set:function(e){o.name=e,s&&(s.innerHTML=o.name)}},closed:{get:function(){return o.closed},set:function(t){o.closed=t,o.closed?X.addClass(n.__ul,e.CLASS_CLOSED):X.removeClass(n.__ul,e.CLASS_CLOSED),this.onResize(),n.__closeButton&&(n.__closeButton.innerHTML=t?e.TEXT_OPEN:e.TEXT_CLOSED)}},load:{get:function(){return o.load}},useLocalStorage:{get:function(){return i},set:function(e){ae&&(i=e,e?X.bind(window,\"unload\",r):X.unbind(window,\"unload\",r),localStorage.setItem(m(n,\"isLocal\"),e))}}}),S.isUndefined(o.parent)){if(o.closed=!1,X.addClass(this.domElement,e.CLASS_MAIN),X.makeSelectable(this.domElement,!1),ae&&i){n.useLocalStorage=!0;var a=localStorage.getItem(m(this,\"gui\"));a&&(o.load=JSON.parse(a))}this.__closeButton=document.createElement(\"div\"),this.__closeButton.innerHTML=e.TEXT_CLOSED,X.addClass(this.__closeButton,e.CLASS_CLOSE_BUTTON),o.closeOnTop?(X.addClass(this.__closeButton,e.CLASS_CLOSE_TOP),this.domElement.insertBefore(this.__closeButton,this.domElement.childNodes[0])):(X.addClass(this.__closeButton,e.CLASS_CLOSE_BOTTOM),this.domElement.appendChild(this.__closeButton)),X.bind(this.__closeButton,\"click\",function(){n.closed=!n.closed})}else{void 0===o.closed&&(o.closed=!0);var l=document.createTextNode(o.name);X.addClass(l,\"controller-name\"),s=c(n,l);X.addClass(this.__ul,e.CLASS_CLOSED),X.addClass(s,\"title\"),X.bind(s,\"click\",function(e){return e.preventDefault(),n.closed=!n.closed,!1}),o.closed||(this.closed=!1)}o.autoPlace&&(S.isUndefined(o.parent)&&(de&&(ce=document.createElement(\"div\"),X.addClass(ce,\"dg\"),X.addClass(ce,e.CLASS_AUTO_PLACE_CONTAINER),document.body.appendChild(ce),de=!1),ce.appendChild(this.domElement),X.addClass(this.domElement,e.CLASS_AUTO_PLACE)),this.parent||w(n,o.width)),this.__resizeHandler=function(){n.onResizeDebounced()},X.bind(window,\"resize\",this.__resizeHandler),X.bind(this.__ul,\"webkitTransitionEnd\",this.__resizeHandler),X.bind(this.__ul,\"transitionend\",this.__resizeHandler),X.bind(this.__ul,\"oTransitionEnd\",this.__resizeHandler),this.onResize(),o.resizable&&y(this),r=function(){ae&&\"true\"===localStorage.getItem(m(n,\"isLocal\"))&&localStorage.setItem(m(n,\"gui\"),JSON.stringify(n.getSaveObject()))},this.saveToLocalStorageIfPossible=r,o.parent||function(){var e=n.getRoot();e.width+=1,S.defer(function(){e.width-=1})}()};he.toggleHide=function(){ue=!ue,S.each(_e,function(e){e.domElement.style.display=ue?\"none\":\"\"})},he.CLASS_AUTO_PLACE=\"a\",he.CLASS_AUTO_PLACE_CONTAINER=\"ac\",he.CLASS_MAIN=\"main\",he.CLASS_CONTROLLER_ROW=\"cr\",he.CLASS_TOO_TALL=\"taller-than-window\",he.CLASS_CLOSED=\"closed\",he.CLASS_CLOSE_BUTTON=\"close-button\",he.CLASS_CLOSE_TOP=\"close-top\",he.CLASS_CLOSE_BOTTOM=\"close-bottom\",he.CLASS_DRAG=\"drag\",he.DEFAULT_WIDTH=245,he.TEXT_CLOSED=\"Close Controls\",he.TEXT_OPEN=\"Open Controls\",he._keydownHandler=function(e){\"text\"===document.activeElement.type||72!==e.which&&72!==e.keyCode||he.toggleHide()},X.bind(window,\"keydown\",he._keydownHandler,!1),S.extend(he.prototype,{add:function(e,t){return f(this,e,t,{factoryArgs:Array.prototype.slice.call(arguments,2)})},addColor:function(e,t){return f(this,e,t,{color:!0})},remove:function(e){this.__ul.removeChild(e.__li),this.__controllers.splice(this.__controllers.indexOf(e),1);var t=this;S.defer(function(){t.onResize()})},destroy:function(){if(this.parent)throw new Error(\"Only the root GUI should be removed with .destroy(). For subfolders, use gui.removeFolder(folder) instead.\");this.autoPlace&&ce.removeChild(this.domElement);var e=this;S.each(this.__folders,function(t){e.removeFolder(t)}),X.unbind(window,\"keydown\",he._keydownHandler,!1),u(this)},addFolder:function(e){if(void 0!==this.__folders[e])throw new Error('You already have a folder in this GUI by the name \"'+e+'\"');var t={name:e,parent:this};t.autoPlace=this.autoPlace,this.load&&this.load.folders&&this.load.folders[e]&&(t.closed=this.load.folders[e].closed,t.load=this.load.folders[e]);var n=new he(t);this.__folders[e]=n;var o=c(this,n.domElement);return X.addClass(o,\"folder\"),n},removeFolder:function(e){this.__ul.removeChild(e.domElement.parentElement),delete this.__folders[e.name],this.load&&this.load.folders&&this.load.folders[e.name]&&delete this.load.folders[e.name],u(e);var t=this;S.each(e.__folders,function(t){e.removeFolder(t)}),S.defer(function(){t.onResize()})},open:function(){this.closed=!1},close:function(){this.closed=!0},onResize:function(){var e=this.getRoot();if(e.scrollable){var t=X.getOffset(e.__ul).top,n=0;S.each(e.__ul.childNodes,function(t){e.autoPlace&&t===e.__save_row||(n+=X.getHeight(t))}),window.innerHeight-t-20<n?(X.addClass(e.domElement,he.CLASS_TOO_TALL),e.__ul.style.height=window.innerHeight-t-20+\"px\"):(X.removeClass(e.domElement,he.CLASS_TOO_TALL),e.__ul.style.height=\"auto\")}e.__resize_handle&&S.defer(function(){e.__resize_handle.style.height=e.__ul.offsetHeight+\"px\"}),e.__closeButton&&(e.__closeButton.style.width=e.width+\"px\")},onResizeDebounced:S.debounce(function(){this.onResize()},50),remember:function(){if(S.isUndefined(le)&&((le=new ie).domElement.innerHTML='<div id=\"dg-save\" class=\"dg dialogue\">\\n\\n  Here\\'s the new load parameter for your <code>GUI</code>\\'s constructor:\\n\\n  <textarea id=\"dg-new-constructor\"></textarea>\\n\\n  <div id=\"dg-save-locally\">\\n\\n    <input id=\"dg-local-storage\" type=\"checkbox\"/> Automatically save\\n    values to <code>localStorage</code> on exit.\\n\\n    <div id=\"dg-local-explain\">The values saved to <code>localStorage</code> will\\n      override those passed to <code>dat.GUI</code>\\'s constructor. This makes it\\n      easier to work incrementally, but <code>localStorage</code> is fragile,\\n      and your friends may not see the same values you do.\\n\\n    </div>\\n\\n  </div>\\n\\n</div>'),this.parent)throw new Error(\"You can only call remember on a top level GUI.\");var e=this;S.each(Array.prototype.slice.call(arguments),function(t){0===e.__rememberedObjects.length&&v(e),-1===e.__rememberedObjects.indexOf(t)&&e.__rememberedObjects.push(t)}),this.autoPlace&&w(this,this.width)},getRoot:function(){for(var e=this;e.parent;)e=e.parent;return e},getSaveObject:function(){var e=this.load;return e.closed=this.closed,this.__rememberedObjects.length>0&&(e.preset=this.preset,e.remembered||(e.remembered={}),e.remembered[this.preset]=x(this)),e.folders={},S.each(this.__folders,function(t,n){e.folders[n]=t.getSaveObject()}),e},save:function(){this.load.remembered||(this.load.remembered={}),this.load.remembered[this.preset]=x(this),_(this,!1),this.saveToLocalStorageIfPossible()},saveAs:function(e){this.load.remembered||(this.load.remembered={},this.load.remembered[se]=x(this,!0)),this.load.remembered[e]=x(this),this.preset=e,g(this,e,!0),this.saveToLocalStorageIfPossible()},revert:function(e){S.each(this.__controllers,function(t){this.getRoot().load.remembered?p(e||this.getRoot(),t):t.setValue(t.initialValue),t.__onFinishChange&&t.__onFinishChange.call(t,t.getValue())},this),S.each(this.__folders,function(e){e.revert(e)}),e||_(this.getRoot(),!1)},listen:function(e){var t=0===this.__listening.length;this.__listening.push(e),t&&C(this.__listening)},updateDisplay:function(){S.each(this.__controllers,function(e){e.updateDisplay()}),S.each(this.__folders,function(e){e.updateDisplay()})}});var pe={Color:I,math:N,interpret:R},fe={Controller:z,BooleanController:K,OptionController:Y,StringController:J,NumberController:W,NumberControllerBox:Q,NumberControllerSlider:q,FunctionController:Z,ColorController:$},me={dom:X},ge={GUI:he},be=he,ve={color:pe,controllers:fe,dom:me,gui:ge,GUI:be};e.color=pe,e.controllers=fe,e.dom=me,e.gui=ge,e.GUI=be,e.default=ve,Object.defineProperty(e,\"__esModule\",{value:!0})});","/*\nMIT License\nCopyright (c) 2017 Pavel Dobryakov\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\n'use strict'\n\nimport './dat.gui.min'\n\nfunction ga() {\n\n}\n\nexport default function (el, config) {\n  const canvas = el\n  resizeCanvas()\n\n  config = {\n    IMMEDIATE: true,\n    TRIGGER: 'hover',\n    SIM_RESOLUTION: 128,\n    DYE_RESOLUTION: 1024,\n    CAPTURE_RESOLUTION: 512,\n    DENSITY_DISSIPATION: 1,\n    VELOCITY_DISSIPATION: 0.2,\n    PRESSURE: 0.8,\n    PRESSURE_ITERATIONS: 20,\n    CURL: 30,\n    SPLAT_RADIUS: 0.25,\n    SPLAT_FORCE: 6000,\n    SPLAT_COUNT: parseInt(Math.random() * 20) + 5,\n    SHADING: true,\n    COLORFUL: true,\n    COLOR_UPDATE_SPEED: 10,\n    PAUSED: false,\n    BACK_COLOR: { r: 0, g: 0, b: 0 },\n    TRANSPARENT: false,\n    BLOOM: true,\n    BLOOM_ITERATIONS: 8,\n    BLOOM_RESOLUTION: 256,\n    BLOOM_INTENSITY: 0.8,\n    BLOOM_THRESHOLD: 0.6,\n    BLOOM_SOFT_KNEE: 0.7,\n    SUNRAYS: true,\n    SUNRAYS_RESOLUTION: 196,\n    SUNRAYS_WEIGHT: 1.0,\n    ...config,\n  }\n\n  function pointerPrototype() {\n    this.id = -1\n    this.texcoordX = 0\n    this.texcoordY = 0\n    this.prevTexcoordX = 0\n    this.prevTexcoordY = 0\n    this.deltaX = 0\n    this.deltaY = 0\n    this.down = false\n    this.moved = false\n    this.color = [30, 0, 300]\n  }\n\n  let pointers = []\n  let splatStack = []\n  let bloomFramebuffers = []\n  pointers.push(new pointerPrototype())\n\n  const { gl, ext } = getWebGLContext(canvas)\n\n  if (isMobile()) {\n    config.DYE_RESOLUTION = 512\n  }\n  if (!ext.supportLinearFiltering) {\n    config.DYE_RESOLUTION = 512\n    config.SHADING = false\n    config.BLOOM = false\n    config.SUNRAYS = false\n  }\n\n  // startGUI()\n\n  function getWebGLContext(canvas) {\n    const params = { alpha: true, depth: false, stencil: false, antialias: false, preserveDrawingBuffer: false }\n\n    let gl = canvas.getContext('webgl2', params)\n    const isWebGL2 = !!gl\n    if (!isWebGL2)\n      gl = canvas.getContext('webgl', params) || canvas.getContext('experimental-webgl', params)\n\n    let halfFloat\n    let supportLinearFiltering\n    if (isWebGL2) {\n      gl.getExtension('EXT_color_buffer_float')\n      supportLinearFiltering = gl.getExtension('OES_texture_float_linear')\n    } else {\n      halfFloat = gl.getExtension('OES_texture_half_float')\n      supportLinearFiltering = gl.getExtension('OES_texture_half_float_linear')\n    }\n\n    gl.clearColor(0.0, 0.0, 0.0, 1.0)\n\n    const halfFloatTexType = isWebGL2 ? gl.HALF_FLOAT : halfFloat.HALF_FLOAT_OES\n    let formatRGBA\n    let formatRG\n    let formatR\n\n    if (isWebGL2) {\n      formatRGBA = getSupportedFormat(gl, gl.RGBA16F, gl.RGBA, halfFloatTexType)\n      formatRG = getSupportedFormat(gl, gl.RG16F, gl.RG, halfFloatTexType)\n      formatR = getSupportedFormat(gl, gl.R16F, gl.RED, halfFloatTexType)\n    } else {\n      formatRGBA = getSupportedFormat(gl, gl.RGBA, gl.RGBA, halfFloatTexType)\n      formatRG = getSupportedFormat(gl, gl.RGBA, gl.RGBA, halfFloatTexType)\n      formatR = getSupportedFormat(gl, gl.RGBA, gl.RGBA, halfFloatTexType)\n    }\n\n    ga('send', 'event', isWebGL2 ? 'webgl2' : 'webgl', formatRGBA == null ? 'not supported' : 'supported')\n\n    return {\n      gl,\n      ext: {\n        formatRGBA,\n        formatRG,\n        formatR,\n        halfFloatTexType,\n        supportLinearFiltering\n      }\n    }\n  }\n\n  function getSupportedFormat(gl, internalFormat, format, type) {\n    if (!supportRenderTextureFormat(gl, internalFormat, format, type)) {\n      switch (internalFormat) {\n        case gl.R16F:\n          return getSupportedFormat(gl, gl.RG16F, gl.RG, type)\n        case gl.RG16F:\n          return getSupportedFormat(gl, gl.RGBA16F, gl.RGBA, type)\n        default:\n          return null\n      }\n    }\n\n    return {\n      internalFormat,\n      format\n    }\n  }\n\n  function supportRenderTextureFormat(gl, internalFormat, format, type) {\n    let texture = gl.createTexture()\n    gl.bindTexture(gl.TEXTURE_2D, texture)\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n    gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, 4, 4, 0, format, type, null)\n\n    let fbo = gl.createFramebuffer()\n    gl.bindFramebuffer(gl.FRAMEBUFFER, fbo)\n    gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0)\n\n    const status = gl.checkFramebufferStatus(gl.FRAMEBUFFER)\n    return status == gl.FRAMEBUFFER_COMPLETE\n  }\n\n  function startGUI() {\n    var gui = new dat.GUI({ width: 300 })\n    gui.add(config, 'DYE_RESOLUTION', {\n      'high': 1024,\n      'medium': 512,\n      'low': 256,\n      'very low': 128\n    }).name('quality').onFinishChange(initFramebuffers)\n    gui.add(config, 'SIM_RESOLUTION', {\n      '32': 32,\n      '64': 64,\n      '128': 128,\n      '256': 256\n    }).name('sim resolution').onFinishChange(initFramebuffers)\n    gui.add(config, 'DENSITY_DISSIPATION', 0, 4.0).name('density diffusion')\n    gui.add(config, 'VELOCITY_DISSIPATION', 0, 4.0).name('velocity diffusion')\n    gui.add(config, 'PRESSURE', 0.0, 1.0).name('pressure')\n    gui.add(config, 'CURL', 0, 50).name('vorticity').step(1)\n    gui.add(config, 'SPLAT_RADIUS', 0.01, 1.0).name('splat radius')\n    gui.add(config, 'SHADING').name('shading').onFinishChange(updateKeywords)\n    gui.add(config, 'COLORFUL').name('colorful')\n    gui.add(config, 'PAUSED').name('paused').listen()\n\n    gui.add({\n      fun: () => {\n        splatStack.push(parseInt(Math.random() * 20) + 5)\n      }\n    }, 'fun').name('Random splats')\n\n    let bloomFolder = gui.addFolder('Bloom')\n    bloomFolder.add(config, 'BLOOM').name('enabled').onFinishChange(updateKeywords)\n    bloomFolder.add(config, 'BLOOM_INTENSITY', 0.1, 2.0).name('intensity')\n    bloomFolder.add(config, 'BLOOM_THRESHOLD', 0.0, 1.0).name('threshold')\n\n    let sunraysFolder = gui.addFolder('Sunrays')\n    sunraysFolder.add(config, 'SUNRAYS').name('enabled').onFinishChange(updateKeywords)\n    sunraysFolder.add(config, 'SUNRAYS_WEIGHT', 0.3, 1.0).name('weight')\n\n    let captureFolder = gui.addFolder('Capture')\n    captureFolder.addColor(config, 'BACK_COLOR').name('background color')\n    captureFolder.add(config, 'TRANSPARENT').name('transparent')\n    captureFolder.add({ fun: captureScreenshot }, 'fun').name('take screenshot')\n\n    let github = gui.add({\n      fun: () => {\n        window.open('https://github.com/PavelDoGreat/WebGL-Fluid-Simulation')\n        ga('send', 'event', 'link button', 'github')\n      }\n    }, 'fun').name('Github')\n    github.__li.className = 'cr function bigFont'\n    github.__li.style.borderLeft = '3px solid #8C8C8C'\n    let githubIcon = document.createElement('span')\n    github.domElement.parentElement.appendChild(githubIcon)\n    githubIcon.className = 'icon github'\n\n    let twitter = gui.add({\n      fun: () => {\n        ga('send', 'event', 'link button', 'twitter')\n        window.open('https://twitter.com/PavelDoGreat')\n      }\n    }, 'fun').name('Twitter')\n    twitter.__li.className = 'cr function bigFont'\n    twitter.__li.style.borderLeft = '3px solid #8C8C8C'\n    let twitterIcon = document.createElement('span')\n    twitter.domElement.parentElement.appendChild(twitterIcon)\n    twitterIcon.className = 'icon twitter'\n\n    let discord = gui.add({\n      fun: () => {\n        ga('send', 'event', 'link button', 'discord')\n        window.open('https://discordapp.com/invite/CeqZDDE')\n      }\n    }, 'fun').name('Discord')\n    discord.__li.className = 'cr function bigFont'\n    discord.__li.style.borderLeft = '3px solid #8C8C8C'\n    let discordIcon = document.createElement('span')\n    discord.domElement.parentElement.appendChild(discordIcon)\n    discordIcon.className = 'icon discord'\n\n    let app = gui.add({\n      fun: () => {\n        ga('send', 'event', 'link button', 'app')\n        window.open('http://onelink.to/5b58bn')\n      }\n    }, 'fun').name('Check out mobile app')\n    app.__li.className = 'cr function appBigFont'\n    app.__li.style.borderLeft = '3px solid #00FF7F'\n    let appIcon = document.createElement('span')\n    app.domElement.parentElement.appendChild(appIcon)\n    appIcon.className = 'icon app'\n\n    if (isMobile())\n      gui.close()\n  }\n\n  function isMobile() {\n    return /Mobi|Android/i.test(navigator.userAgent)\n  }\n\n  function captureScreenshot() {\n    let res = getResolution(config.CAPTURE_RESOLUTION)\n    let target = createFBO(res.width, res.height, ext.formatRGBA.internalFormat, ext.formatRGBA.format, ext.halfFloatTexType, gl.NEAREST)\n    render(target)\n\n    let texture = framebufferToTexture(target)\n    texture = normalizeTexture(texture, target.width, target.height)\n\n    let captureCanvas = textureToCanvas(texture, target.width, target.height)\n    let datauri = captureCanvas.toDataURL()\n    downloadURI('fluid.png', datauri)\n    URL.revokeObjectURL(datauri)\n  }\n\n  function framebufferToTexture(target) {\n    gl.bindFramebuffer(gl.FRAMEBUFFER, target.fbo)\n    let length = target.width * target.height * 4\n    let texture = new Float32Array(length)\n    gl.readPixels(0, 0, target.width, target.height, gl.RGBA, gl.FLOAT, texture)\n    return texture\n  }\n\n  function normalizeTexture(texture, width, height) {\n    let result = new Uint8Array(texture.length)\n    let id = 0\n    for (let i = height - 1; i >= 0; i--) {\n      for (let j = 0; j < width; j++) {\n        let nid = i * width * 4 + j * 4\n        result[nid + 0] = clamp01(texture[id + 0]) * 255\n        result[nid + 1] = clamp01(texture[id + 1]) * 255\n        result[nid + 2] = clamp01(texture[id + 2]) * 255\n        result[nid + 3] = clamp01(texture[id + 3]) * 255\n        id += 4\n      }\n    }\n    return result\n  }\n\n  function clamp01(input) {\n    return Math.min(Math.max(input, 0), 1)\n  }\n\n  function textureToCanvas(texture, width, height) {\n    let captureCanvas = document.createElement('canvas')\n    let ctx = captureCanvas.getContext('2d')\n    captureCanvas.width = width\n    captureCanvas.height = height\n\n    let imageData = ctx.createImageData(width, height)\n    imageData.data.set(texture)\n    ctx.putImageData(imageData, 0, 0)\n\n    return captureCanvas\n  }\n\n  function downloadURI(filename, uri) {\n    let link = document.createElement('a')\n    link.download = filename\n    link.href = uri\n    document.body.appendChild(link)\n    link.click()\n    document.body.removeChild(link)\n  }\n\n  class Material {\n    constructor(vertexShader, fragmentShaderSource) {\n      this.vertexShader = vertexShader\n      this.fragmentShaderSource = fragmentShaderSource\n      this.programs = []\n      this.activeProgram = null\n      this.uniforms = []\n    }\n\n    setKeywords(keywords) {\n      let hash = 0\n      for (let i = 0; i < keywords.length; i++)\n        hash += hashCode(keywords[i])\n\n      let program = this.programs[hash]\n      if (program == null) {\n        let fragmentShader = compileShader(gl.FRAGMENT_SHADER, this.fragmentShaderSource, keywords)\n        program = createProgram(this.vertexShader, fragmentShader)\n        this.programs[hash] = program\n      }\n\n      if (program == this.activeProgram) return\n\n      this.uniforms = getUniforms(program)\n      this.activeProgram = program\n    }\n\n    bind() {\n      gl.useProgram(this.activeProgram)\n    }\n  }\n\n  class Program {\n    constructor(vertexShader, fragmentShader) {\n      this.uniforms = {}\n      this.program = createProgram(vertexShader, fragmentShader)\n      this.uniforms = getUniforms(this.program)\n    }\n\n    bind() {\n      gl.useProgram(this.program)\n    }\n  }\n\n  function createProgram(vertexShader, fragmentShader) {\n    let program = gl.createProgram()\n    gl.attachShader(program, vertexShader)\n    gl.attachShader(program, fragmentShader)\n    gl.linkProgram(program)\n\n    if (!gl.getProgramParameter(program, gl.LINK_STATUS))\n      throw gl.getProgramInfoLog(program)\n\n    return program\n  }\n\n  function getUniforms(program) {\n    let uniforms = []\n    let uniformCount = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS)\n    for (let i = 0; i < uniformCount; i++) {\n      let uniformName = gl.getActiveUniform(program, i).name\n      uniforms[uniformName] = gl.getUniformLocation(program, uniformName)\n    }\n    return uniforms\n  }\n\n  function compileShader(type, source, keywords) {\n    source = addKeywords(source, keywords)\n\n    const shader = gl.createShader(type)\n    gl.shaderSource(shader, source)\n    gl.compileShader(shader)\n\n    if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS))\n      throw gl.getShaderInfoLog(shader)\n\n    return shader\n  }\n\n  function addKeywords(source, keywords) {\n    if (keywords == null) return source\n    let keywordsString = ''\n    keywords.forEach(keyword => {\n      keywordsString += '#define ' + keyword + '\\n'\n    })\n    return keywordsString + source\n  }\n\n  const baseVertexShader = compileShader(gl.VERTEX_SHADER, `\n    precision highp float;\n    attribute vec2 aPosition;\n    varying vec2 vUv;\n    varying vec2 vL;\n    varying vec2 vR;\n    varying vec2 vT;\n    varying vec2 vB;\n    uniform vec2 texelSize;\n    void main () {\n        vUv = aPosition * 0.5 + 0.5;\n        vL = vUv - vec2(texelSize.x, 0.0);\n        vR = vUv + vec2(texelSize.x, 0.0);\n        vT = vUv + vec2(0.0, texelSize.y);\n        vB = vUv - vec2(0.0, texelSize.y);\n        gl_Position = vec4(aPosition, 0.0, 1.0);\n    }\n`)\n\n  const blurVertexShader = compileShader(gl.VERTEX_SHADER, `\n    precision highp float;\n    attribute vec2 aPosition;\n    varying vec2 vUv;\n    varying vec2 vL;\n    varying vec2 vR;\n    uniform vec2 texelSize;\n    void main () {\n        vUv = aPosition * 0.5 + 0.5;\n        float offset = 1.33333333;\n        vL = vUv - texelSize * offset;\n        vR = vUv + texelSize * offset;\n        gl_Position = vec4(aPosition, 0.0, 1.0);\n    }\n`)\n\n  const blurShader = compileShader(gl.FRAGMENT_SHADER, `\n    precision mediump float;\n    precision mediump sampler2D;\n    varying vec2 vUv;\n    varying vec2 vL;\n    varying vec2 vR;\n    uniform sampler2D uTexture;\n    void main () {\n        vec4 sum = texture2D(uTexture, vUv) * 0.29411764;\n        sum += texture2D(uTexture, vL) * 0.35294117;\n        sum += texture2D(uTexture, vR) * 0.35294117;\n        gl_FragColor = sum;\n    }\n`)\n\n  const copyShader = compileShader(gl.FRAGMENT_SHADER, `\n    precision mediump float;\n    precision mediump sampler2D;\n    varying highp vec2 vUv;\n    uniform sampler2D uTexture;\n    void main () {\n        gl_FragColor = texture2D(uTexture, vUv);\n    }\n`)\n\n  const clearShader = compileShader(gl.FRAGMENT_SHADER, `\n    precision mediump float;\n    precision mediump sampler2D;\n    varying highp vec2 vUv;\n    uniform sampler2D uTexture;\n    uniform float value;\n    void main () {\n        gl_FragColor = value * texture2D(uTexture, vUv);\n    }\n`)\n\n  const colorShader = compileShader(gl.FRAGMENT_SHADER, `\n    precision mediump float;\n    uniform vec4 color;\n    void main () {\n        gl_FragColor = color;\n    }\n`)\n\n  const checkerboardShader = compileShader(gl.FRAGMENT_SHADER, config.TRANSPARENT ? `\n    precision highp float;\n    precision highp sampler2D;\n    varying vec2 vUv;\n    uniform sampler2D uTexture;\n    uniform float aspectRatio;\n    #define SCALE 25.0\n    void main () {\n        vec2 uv = floor(vUv * SCALE * vec2(aspectRatio, 1.0));\n        float v = mod(uv.x + uv.y, 2.0);\n        v = v * 0.1 + 0.8;\n        gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n    }\n` : `\n    precision highp float;\n    precision highp sampler2D;\n    varying vec2 vUv;\n    uniform sampler2D uTexture;\n    uniform float aspectRatio;\n    #define SCALE 25.0\n    void main () {\n        vec2 uv = floor(vUv * SCALE * vec2(aspectRatio, 1.0));\n        float v = mod(uv.x + uv.y, 2.0);\n        v = v * 0.1 + 0.8;\n        gl_FragColor = vec4(vec3(v), 1.0);\n    }\n`)\n\n  const displayShaderSource = `\n    precision highp float;\n    precision highp sampler2D;\n    varying vec2 vUv;\n    varying vec2 vL;\n    varying vec2 vR;\n    varying vec2 vT;\n    varying vec2 vB;\n    uniform sampler2D uTexture;\n    uniform sampler2D uBloom;\n    uniform sampler2D uSunrays;\n    uniform sampler2D uDithering;\n    uniform vec2 ditherScale;\n    uniform vec2 texelSize;\n    vec3 linearToGamma (vec3 color) {\n        color = max(color, vec3(0));\n        return max(1.055 * pow(color, vec3(0.416666667)) - 0.055, vec3(0));\n    }\n    void main () {\n        vec3 c = texture2D(uTexture, vUv).rgb;\n    #ifdef SHADING\n        vec3 lc = texture2D(uTexture, vL).rgb;\n        vec3 rc = texture2D(uTexture, vR).rgb;\n        vec3 tc = texture2D(uTexture, vT).rgb;\n        vec3 bc = texture2D(uTexture, vB).rgb;\n        float dx = length(rc) - length(lc);\n        float dy = length(tc) - length(bc);\n        vec3 n = normalize(vec3(dx, dy, length(texelSize)));\n        vec3 l = vec3(0.0, 0.0, 1.0);\n        float diffuse = clamp(dot(n, l) + 0.7, 0.7, 1.0);\n        c *= diffuse;\n    #endif\n    #ifdef BLOOM\n        vec3 bloom = texture2D(uBloom, vUv).rgb;\n    #endif\n    #ifdef SUNRAYS\n        float sunrays = texture2D(uSunrays, vUv).r;\n        c *= sunrays;\n    #ifdef BLOOM\n        bloom *= sunrays;\n    #endif\n    #endif\n    #ifdef BLOOM\n        float noise = texture2D(uDithering, vUv * ditherScale).r;\n        noise = noise * 2.0 - 1.0;\n        bloom += noise / 255.0;\n        bloom = linearToGamma(bloom);\n        c += bloom;\n    #endif\n        float a = max(c.r, max(c.g, c.b));\n        gl_FragColor = vec4(c, a);\n    }\n`\n\n  const bloomPrefilterShader = compileShader(gl.FRAGMENT_SHADER, `\n    precision mediump float;\n    precision mediump sampler2D;\n    varying vec2 vUv;\n    uniform sampler2D uTexture;\n    uniform vec3 curve;\n    uniform float threshold;\n    void main () {\n        vec3 c = texture2D(uTexture, vUv).rgb;\n        float br = max(c.r, max(c.g, c.b));\n        float rq = clamp(br - curve.x, 0.0, curve.y);\n        rq = curve.z * rq * rq;\n        c *= max(rq, br - threshold) / max(br, 0.0001);\n        gl_FragColor = vec4(c, 0.0);\n    }\n`)\n\n  const bloomBlurShader = compileShader(gl.FRAGMENT_SHADER, `\n    precision mediump float;\n    precision mediump sampler2D;\n    varying vec2 vL;\n    varying vec2 vR;\n    varying vec2 vT;\n    varying vec2 vB;\n    uniform sampler2D uTexture;\n    void main () {\n        vec4 sum = vec4(0.0);\n        sum += texture2D(uTexture, vL);\n        sum += texture2D(uTexture, vR);\n        sum += texture2D(uTexture, vT);\n        sum += texture2D(uTexture, vB);\n        sum *= 0.25;\n        gl_FragColor = sum;\n    }\n`)\n\n  const bloomFinalShader = compileShader(gl.FRAGMENT_SHADER, `\n    precision mediump float;\n    precision mediump sampler2D;\n    varying vec2 vL;\n    varying vec2 vR;\n    varying vec2 vT;\n    varying vec2 vB;\n    uniform sampler2D uTexture;\n    uniform float intensity;\n    void main () {\n        vec4 sum = vec4(0.0);\n        sum += texture2D(uTexture, vL);\n        sum += texture2D(uTexture, vR);\n        sum += texture2D(uTexture, vT);\n        sum += texture2D(uTexture, vB);\n        sum *= 0.25;\n        gl_FragColor = sum * intensity;\n    }\n`)\n\n  const sunraysMaskShader = compileShader(gl.FRAGMENT_SHADER, `\n    precision highp float;\n    precision highp sampler2D;\n    varying vec2 vUv;\n    uniform sampler2D uTexture;\n    void main () {\n        vec4 c = texture2D(uTexture, vUv);\n        float br = max(c.r, max(c.g, c.b));\n        c.a = 1.0 - min(max(br * 20.0, 0.0), 0.8);\n        gl_FragColor = c;\n    }\n`)\n\n  const sunraysShader = compileShader(gl.FRAGMENT_SHADER, `\n    precision highp float;\n    precision highp sampler2D;\n    varying vec2 vUv;\n    uniform sampler2D uTexture;\n    uniform float weight;\n    #define ITERATIONS 16\n    void main () {\n        float Density = 0.3;\n        float Decay = 0.95;\n        float Exposure = 0.7;\n        vec2 coord = vUv;\n        vec2 dir = vUv - 0.5;\n        dir *= 1.0 / float(ITERATIONS) * Density;\n        float illuminationDecay = 1.0;\n        float color = texture2D(uTexture, vUv).a;\n        for (int i = 0; i < ITERATIONS; i++)\n        {\n            coord -= dir;\n            float col = texture2D(uTexture, coord).a;\n            color += col * illuminationDecay * weight;\n            illuminationDecay *= Decay;\n        }\n        gl_FragColor = vec4(color * Exposure, 0.0, 0.0, 1.0);\n    }\n`)\n\n  const splatShader = compileShader(gl.FRAGMENT_SHADER, `\n    precision highp float;\n    precision highp sampler2D;\n    varying vec2 vUv;\n    uniform sampler2D uTarget;\n    uniform float aspectRatio;\n    uniform vec3 color;\n    uniform vec2 point;\n    uniform float radius;\n    void main () {\n        vec2 p = vUv - point.xy;\n        p.x *= aspectRatio;\n        vec3 splat = exp(-dot(p, p) / radius) * color;\n        vec3 base = texture2D(uTarget, vUv).xyz;\n        gl_FragColor = vec4(base + splat, 1.0);\n    }\n`)\n\n  const advectionShader = compileShader(gl.FRAGMENT_SHADER, `\n    precision highp float;\n    precision highp sampler2D;\n    varying vec2 vUv;\n    uniform sampler2D uVelocity;\n    uniform sampler2D uSource;\n    uniform vec2 texelSize;\n    uniform vec2 dyeTexelSize;\n    uniform float dt;\n    uniform float dissipation;\n    vec4 bilerp (sampler2D sam, vec2 uv, vec2 tsize) {\n        vec2 st = uv / tsize - 0.5;\n        vec2 iuv = floor(st);\n        vec2 fuv = fract(st);\n        vec4 a = texture2D(sam, (iuv + vec2(0.5, 0.5)) * tsize);\n        vec4 b = texture2D(sam, (iuv + vec2(1.5, 0.5)) * tsize);\n        vec4 c = texture2D(sam, (iuv + vec2(0.5, 1.5)) * tsize);\n        vec4 d = texture2D(sam, (iuv + vec2(1.5, 1.5)) * tsize);\n        return mix(mix(a, b, fuv.x), mix(c, d, fuv.x), fuv.y);\n    }\n    void main () {\n    #ifdef MANUAL_FILTERING\n        vec2 coord = vUv - dt * bilerp(uVelocity, vUv, texelSize).xy * texelSize;\n        vec4 result = bilerp(uSource, coord, dyeTexelSize);\n    #else\n        vec2 coord = vUv - dt * texture2D(uVelocity, vUv).xy * texelSize;\n        vec4 result = texture2D(uSource, coord);\n    #endif\n        float decay = 1.0 + dissipation * dt;\n        gl_FragColor = result / decay;\n    }`,\n    ext.supportLinearFiltering ? null : ['MANUAL_FILTERING']\n  )\n\n  const divergenceShader = compileShader(gl.FRAGMENT_SHADER, `\n    precision mediump float;\n    precision mediump sampler2D;\n    varying highp vec2 vUv;\n    varying highp vec2 vL;\n    varying highp vec2 vR;\n    varying highp vec2 vT;\n    varying highp vec2 vB;\n    uniform sampler2D uVelocity;\n    void main () {\n        float L = texture2D(uVelocity, vL).x;\n        float R = texture2D(uVelocity, vR).x;\n        float T = texture2D(uVelocity, vT).y;\n        float B = texture2D(uVelocity, vB).y;\n        vec2 C = texture2D(uVelocity, vUv).xy;\n        if (vL.x < 0.0) { L = -C.x; }\n        if (vR.x > 1.0) { R = -C.x; }\n        if (vT.y > 1.0) { T = -C.y; }\n        if (vB.y < 0.0) { B = -C.y; }\n        float div = 0.5 * (R - L + T - B);\n        gl_FragColor = vec4(div, 0.0, 0.0, 1.0);\n    }\n`)\n\n  const curlShader = compileShader(gl.FRAGMENT_SHADER, `\n    precision mediump float;\n    precision mediump sampler2D;\n    varying highp vec2 vUv;\n    varying highp vec2 vL;\n    varying highp vec2 vR;\n    varying highp vec2 vT;\n    varying highp vec2 vB;\n    uniform sampler2D uVelocity;\n    void main () {\n        float L = texture2D(uVelocity, vL).y;\n        float R = texture2D(uVelocity, vR).y;\n        float T = texture2D(uVelocity, vT).x;\n        float B = texture2D(uVelocity, vB).x;\n        float vorticity = R - L - T + B;\n        gl_FragColor = vec4(0.5 * vorticity, 0.0, 0.0, 1.0);\n    }\n`)\n\n  const vorticityShader = compileShader(gl.FRAGMENT_SHADER, `\n    precision highp float;\n    precision highp sampler2D;\n    varying vec2 vUv;\n    varying vec2 vL;\n    varying vec2 vR;\n    varying vec2 vT;\n    varying vec2 vB;\n    uniform sampler2D uVelocity;\n    uniform sampler2D uCurl;\n    uniform float curl;\n    uniform float dt;\n    void main () {\n        float L = texture2D(uCurl, vL).x;\n        float R = texture2D(uCurl, vR).x;\n        float T = texture2D(uCurl, vT).x;\n        float B = texture2D(uCurl, vB).x;\n        float C = texture2D(uCurl, vUv).x;\n        vec2 force = 0.5 * vec2(abs(T) - abs(B), abs(R) - abs(L));\n        force /= length(force) + 0.0001;\n        force *= curl * C;\n        force.y *= -1.0;\n        vec2 vel = texture2D(uVelocity, vUv).xy;\n        gl_FragColor = vec4(vel + force * dt, 0.0, 1.0);\n    }\n`)\n\n  const pressureShader = compileShader(gl.FRAGMENT_SHADER, `\n    precision mediump float;\n    precision mediump sampler2D;\n    varying highp vec2 vUv;\n    varying highp vec2 vL;\n    varying highp vec2 vR;\n    varying highp vec2 vT;\n    varying highp vec2 vB;\n    uniform sampler2D uPressure;\n    uniform sampler2D uDivergence;\n    void main () {\n        float L = texture2D(uPressure, vL).x;\n        float R = texture2D(uPressure, vR).x;\n        float T = texture2D(uPressure, vT).x;\n        float B = texture2D(uPressure, vB).x;\n        float C = texture2D(uPressure, vUv).x;\n        float divergence = texture2D(uDivergence, vUv).x;\n        float pressure = (L + R + B + T - divergence) * 0.25;\n        gl_FragColor = vec4(pressure, 0.0, 0.0, 1.0);\n    }\n`)\n\n  const gradientSubtractShader = compileShader(gl.FRAGMENT_SHADER, `\n    precision mediump float;\n    precision mediump sampler2D;\n    varying highp vec2 vUv;\n    varying highp vec2 vL;\n    varying highp vec2 vR;\n    varying highp vec2 vT;\n    varying highp vec2 vB;\n    uniform sampler2D uPressure;\n    uniform sampler2D uVelocity;\n    void main () {\n        float L = texture2D(uPressure, vL).x;\n        float R = texture2D(uPressure, vR).x;\n        float T = texture2D(uPressure, vT).x;\n        float B = texture2D(uPressure, vB).x;\n        vec2 velocity = texture2D(uVelocity, vUv).xy;\n        velocity.xy -= vec2(R - L, T - B);\n        gl_FragColor = vec4(velocity, 0.0, 1.0);\n    }\n`)\n\n  const blit = (() => {\n    gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer())\n    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, -1, 1, 1, 1, 1, -1]), gl.STATIC_DRAW)\n    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, gl.createBuffer())\n    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array([0, 1, 2, 0, 2, 3]), gl.STATIC_DRAW)\n    gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0)\n    gl.enableVertexAttribArray(0)\n\n    return (destination) => {\n      gl.bindFramebuffer(gl.FRAMEBUFFER, destination)\n      gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0)\n    }\n  })()\n\n  let dye\n  let velocity\n  let divergence\n  let curl\n  let pressure\n  let bloom\n  let sunrays\n  let sunraysTemp\n\n  let ditheringTexture = createTextureAsync()\n\n  const blurProgram = new Program(blurVertexShader, blurShader)\n  const copyProgram = new Program(baseVertexShader, copyShader)\n  const clearProgram = new Program(baseVertexShader, clearShader)\n  const colorProgram = new Program(baseVertexShader, colorShader)\n  const checkerboardProgram = new Program(baseVertexShader, checkerboardShader)\n  const bloomPrefilterProgram = new Program(baseVertexShader, bloomPrefilterShader)\n  const bloomBlurProgram = new Program(baseVertexShader, bloomBlurShader)\n  const bloomFinalProgram = new Program(baseVertexShader, bloomFinalShader)\n  const sunraysMaskProgram = new Program(baseVertexShader, sunraysMaskShader)\n  const sunraysProgram = new Program(baseVertexShader, sunraysShader)\n  const splatProgram = new Program(baseVertexShader, splatShader)\n  const advectionProgram = new Program(baseVertexShader, advectionShader)\n  const divergenceProgram = new Program(baseVertexShader, divergenceShader)\n  const curlProgram = new Program(baseVertexShader, curlShader)\n  const vorticityProgram = new Program(baseVertexShader, vorticityShader)\n  const pressureProgram = new Program(baseVertexShader, pressureShader)\n  const gradienSubtractProgram = new Program(baseVertexShader, gradientSubtractShader)\n\n  const displayMaterial = new Material(baseVertexShader, displayShaderSource)\n\n  function initFramebuffers() {\n    let simRes = getResolution(config.SIM_RESOLUTION)\n    let dyeRes = getResolution(config.DYE_RESOLUTION)\n\n    const texType = ext.halfFloatTexType\n    const rgba = ext.formatRGBA\n    const rg = ext.formatRG\n    const r = ext.formatR\n    const filtering = ext.supportLinearFiltering ? gl.LINEAR : gl.NEAREST\n\n    if (dye == null)\n      dye = createDoubleFBO(dyeRes.width, dyeRes.height, rgba.internalFormat, rgba.format, texType, filtering)\n    else\n      dye = resizeDoubleFBO(dye, dyeRes.width, dyeRes.height, rgba.internalFormat, rgba.format, texType, filtering)\n\n    if (velocity == null)\n      velocity = createDoubleFBO(simRes.width, simRes.height, rg.internalFormat, rg.format, texType, filtering)\n    else\n      velocity = resizeDoubleFBO(velocity, simRes.width, simRes.height, rg.internalFormat, rg.format, texType, filtering)\n\n    divergence = createFBO(simRes.width, simRes.height, r.internalFormat, r.format, texType, gl.NEAREST)\n    curl = createFBO(simRes.width, simRes.height, r.internalFormat, r.format, texType, gl.NEAREST)\n    pressure = createDoubleFBO(simRes.width, simRes.height, r.internalFormat, r.format, texType, gl.NEAREST)\n\n    initBloomFramebuffers()\n    initSunraysFramebuffers()\n  }\n\n  function initBloomFramebuffers() {\n    let res = getResolution(config.BLOOM_RESOLUTION)\n\n    const texType = ext.halfFloatTexType\n    const rgba = ext.formatRGBA\n    const filtering = ext.supportLinearFiltering ? gl.LINEAR : gl.NEAREST\n\n    bloom = createFBO(res.width, res.height, rgba.internalFormat, rgba.format, texType, filtering)\n\n    bloomFramebuffers.length = 0\n    for (let i = 0; i < config.BLOOM_ITERATIONS; i++) {\n      let width = res.width >> (i + 1)\n      let height = res.height >> (i + 1)\n\n      if (width < 2 || height < 2) break\n\n      let fbo = createFBO(width, height, rgba.internalFormat, rgba.format, texType, filtering)\n      bloomFramebuffers.push(fbo)\n    }\n  }\n\n  function initSunraysFramebuffers() {\n    let res = getResolution(config.SUNRAYS_RESOLUTION)\n\n    const texType = ext.halfFloatTexType\n    const r = ext.formatR\n    const filtering = ext.supportLinearFiltering ? gl.LINEAR : gl.NEAREST\n\n    sunrays = createFBO(res.width, res.height, r.internalFormat, r.format, texType, filtering)\n    sunraysTemp = createFBO(res.width, res.height, r.internalFormat, r.format, texType, filtering)\n  }\n\n  function createFBO(w, h, internalFormat, format, type, param) {\n    gl.activeTexture(gl.TEXTURE0)\n    let texture = gl.createTexture()\n    gl.bindTexture(gl.TEXTURE_2D, texture)\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, param)\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, param)\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n    gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, w, h, 0, format, type, null)\n\n    let fbo = gl.createFramebuffer()\n    gl.bindFramebuffer(gl.FRAMEBUFFER, fbo)\n    gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0)\n    gl.viewport(0, 0, w, h)\n    gl.clear(gl.COLOR_BUFFER_BIT)\n\n    let texelSizeX = 1.0 / w\n    let texelSizeY = 1.0 / h\n\n    return {\n      texture,\n      fbo,\n      width: w,\n      height: h,\n      texelSizeX,\n      texelSizeY,\n      attach(id) {\n        gl.activeTexture(gl.TEXTURE0 + id)\n        gl.bindTexture(gl.TEXTURE_2D, texture)\n        return id\n      }\n    }\n  }\n\n  function createDoubleFBO(w, h, internalFormat, format, type, param) {\n    let fbo1 = createFBO(w, h, internalFormat, format, type, param)\n    let fbo2 = createFBO(w, h, internalFormat, format, type, param)\n\n    return {\n      width: w,\n      height: h,\n      texelSizeX: fbo1.texelSizeX,\n      texelSizeY: fbo1.texelSizeY,\n      get read() {\n        return fbo1\n      },\n      set read(value) {\n        fbo1 = value\n      },\n      get write() {\n        return fbo2\n      },\n      set write(value) {\n        fbo2 = value\n      },\n      swap() {\n        let temp = fbo1\n        fbo1 = fbo2\n        fbo2 = temp\n      }\n    }\n  }\n\n  function resizeFBO(target, w, h, internalFormat, format, type, param) {\n    let newFBO = createFBO(w, h, internalFormat, format, type, param)\n    copyProgram.bind()\n    gl.uniform1i(copyProgram.uniforms.uTexture, target.attach(0))\n    blit(newFBO.fbo)\n    return newFBO\n  }\n\n  function resizeDoubleFBO(target, w, h, internalFormat, format, type, param) {\n    if (target.width == w && target.height == h)\n      return target\n    target.read = resizeFBO(target.read, w, h, internalFormat, format, type, param)\n    target.write = createFBO(w, h, internalFormat, format, type, param)\n    target.width = w\n    target.height = h\n    target.texelSizeX = 1.0 / w\n    target.texelSizeY = 1.0 / h\n    return target\n  }\n\n  function createTextureAsync(url) {\n    let texture = gl.createTexture()\n    gl.bindTexture(gl.TEXTURE_2D, texture)\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT)\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT)\n    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, 1, 1, 0, gl.RGB, gl.UNSIGNED_BYTE, new Uint8Array([255, 255, 255]))\n\n    let obj = {\n      texture,\n      width: 1,\n      height: 1,\n      attach(id) {\n        gl.activeTexture(gl.TEXTURE0 + id)\n        gl.bindTexture(gl.TEXTURE_2D, texture)\n        return id\n      }\n    }\n\n    let image = new Image()\n    image.onload = () => {\n      obj.width = image.width\n      obj.height = image.height\n      gl.bindTexture(gl.TEXTURE_2D, texture)\n      gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, gl.RGB, gl.UNSIGNED_BYTE, image)\n    }\n    url && (image.src = url)\n\n    return obj\n  }\n\n  function updateKeywords() {\n    let displayKeywords = []\n    if (config.SHADING) displayKeywords.push('SHADING')\n    if (config.BLOOM) displayKeywords.push('BLOOM')\n    if (config.SUNRAYS) displayKeywords.push('SUNRAYS')\n    displayMaterial.setKeywords(displayKeywords)\n  }\n\n  updateKeywords()\n  initFramebuffers()\n  config.IMMEDIATE && multipleSplats(config.SPLAT_COUNT)\n\n  let lastUpdateTime = Date.now()\n  let colorUpdateTimer = 0.0\n  update()\n\n  function update() {\n    const dt = calcDeltaTime()\n    if (resizeCanvas())\n      initFramebuffers()\n    updateColors(dt)\n    applyInputs()\n    if (!config.PAUSED)\n      step(dt)\n    render(null)\n    requestAnimationFrame(update)\n  }\n\n  function calcDeltaTime() {\n    let now = Date.now()\n    let dt = (now - lastUpdateTime) / 1000\n    dt = Math.min(dt, 0.016666)\n    lastUpdateTime = now\n    return dt\n  }\n\n  function resizeCanvas() {\n    let width = scaleByPixelRatio(canvas.clientWidth)\n    let height = scaleByPixelRatio(canvas.clientHeight)\n    if (canvas.width != width || canvas.height != height) {\n      canvas.width = width\n      canvas.height = height\n      return true\n    }\n    return false\n  }\n\n  function updateColors(dt) {\n    if (!config.COLORFUL) return\n\n    colorUpdateTimer += dt * config.COLOR_UPDATE_SPEED\n    if (colorUpdateTimer >= 1) {\n      colorUpdateTimer = wrap(colorUpdateTimer, 0, 1)\n      pointers.forEach(p => {\n        p.color = generateColor()\n      })\n    }\n  }\n\n  function applyInputs() {\n    if (splatStack.length > 0)\n      multipleSplats(splatStack.pop())\n\n    pointers.forEach(p => {\n      if (p.moved) {\n        p.moved = false\n        splatPointer(p)\n      }\n    })\n  }\n\n  function step(dt) {\n    gl.disable(gl.BLEND)\n    gl.viewport(0, 0, velocity.width, velocity.height)\n\n    curlProgram.bind()\n    gl.uniform2f(curlProgram.uniforms.texelSize, velocity.texelSizeX, velocity.texelSizeY)\n    gl.uniform1i(curlProgram.uniforms.uVelocity, velocity.read.attach(0))\n    blit(curl.fbo)\n\n    vorticityProgram.bind()\n    gl.uniform2f(vorticityProgram.uniforms.texelSize, velocity.texelSizeX, velocity.texelSizeY)\n    gl.uniform1i(vorticityProgram.uniforms.uVelocity, velocity.read.attach(0))\n    gl.uniform1i(vorticityProgram.uniforms.uCurl, curl.attach(1))\n    gl.uniform1f(vorticityProgram.uniforms.curl, config.CURL)\n    gl.uniform1f(vorticityProgram.uniforms.dt, dt)\n    blit(velocity.write.fbo)\n    velocity.swap()\n\n    divergenceProgram.bind()\n    gl.uniform2f(divergenceProgram.uniforms.texelSize, velocity.texelSizeX, velocity.texelSizeY)\n    gl.uniform1i(divergenceProgram.uniforms.uVelocity, velocity.read.attach(0))\n    blit(divergence.fbo)\n\n    clearProgram.bind()\n    gl.uniform1i(clearProgram.uniforms.uTexture, pressure.read.attach(0))\n    gl.uniform1f(clearProgram.uniforms.value, config.PRESSURE)\n    blit(pressure.write.fbo)\n    pressure.swap()\n\n    pressureProgram.bind()\n    gl.uniform2f(pressureProgram.uniforms.texelSize, velocity.texelSizeX, velocity.texelSizeY)\n    gl.uniform1i(pressureProgram.uniforms.uDivergence, divergence.attach(0))\n    for (let i = 0; i < config.PRESSURE_ITERATIONS; i++) {\n      gl.uniform1i(pressureProgram.uniforms.uPressure, pressure.read.attach(1))\n      blit(pressure.write.fbo)\n      pressure.swap()\n    }\n\n    gradienSubtractProgram.bind()\n    gl.uniform2f(gradienSubtractProgram.uniforms.texelSize, velocity.texelSizeX, velocity.texelSizeY)\n    gl.uniform1i(gradienSubtractProgram.uniforms.uPressure, pressure.read.attach(0))\n    gl.uniform1i(gradienSubtractProgram.uniforms.uVelocity, velocity.read.attach(1))\n    blit(velocity.write.fbo)\n    velocity.swap()\n\n    advectionProgram.bind()\n    gl.uniform2f(advectionProgram.uniforms.texelSize, velocity.texelSizeX, velocity.texelSizeY)\n    if (!ext.supportLinearFiltering)\n      gl.uniform2f(advectionProgram.uniforms.dyeTexelSize, velocity.texelSizeX, velocity.texelSizeY)\n    let velocityId = velocity.read.attach(0)\n    gl.uniform1i(advectionProgram.uniforms.uVelocity, velocityId)\n    gl.uniform1i(advectionProgram.uniforms.uSource, velocityId)\n    gl.uniform1f(advectionProgram.uniforms.dt, dt)\n    gl.uniform1f(advectionProgram.uniforms.dissipation, config.VELOCITY_DISSIPATION)\n    blit(velocity.write.fbo)\n    velocity.swap()\n\n    gl.viewport(0, 0, dye.width, dye.height)\n\n    if (!ext.supportLinearFiltering)\n      gl.uniform2f(advectionProgram.uniforms.dyeTexelSize, dye.texelSizeX, dye.texelSizeY)\n    gl.uniform1i(advectionProgram.uniforms.uVelocity, velocity.read.attach(0))\n    gl.uniform1i(advectionProgram.uniforms.uSource, dye.read.attach(1))\n    gl.uniform1f(advectionProgram.uniforms.dissipation, config.DENSITY_DISSIPATION)\n    blit(dye.write.fbo)\n    dye.swap()\n  }\n\n  function render(target) {\n    if (config.BLOOM)\n      applyBloom(dye.read, bloom)\n    if (config.SUNRAYS) {\n      applySunrays(dye.read, dye.write, sunrays)\n      blur(sunrays, sunraysTemp, 1)\n    }\n\n    if (target == null || !config.TRANSPARENT) {\n      gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA)\n      gl.enable(gl.BLEND)\n    } else {\n      gl.disable(gl.BLEND)\n    }\n\n    let width = target == null ? gl.drawingBufferWidth : target.width\n    let height = target == null ? gl.drawingBufferHeight : target.height\n    gl.viewport(0, 0, width, height)\n\n    let fbo = target == null ? null : target.fbo\n    if (!config.TRANSPARENT)\n      drawColor(fbo, normalizeColor(config.BACK_COLOR))\n    if (target == null && config.TRANSPARENT)\n      drawCheckerboard(fbo)\n    drawDisplay(fbo, width, height)\n  }\n\n  function drawColor(fbo, color) {\n    colorProgram.bind()\n    gl.uniform4f(colorProgram.uniforms.color, color.r, color.g, color.b, 1)\n    blit(fbo)\n  }\n\n  function drawCheckerboard(fbo) {\n    checkerboardProgram.bind()\n    gl.uniform1f(checkerboardProgram.uniforms.aspectRatio, canvas.width / canvas.height)\n    blit(fbo)\n  }\n\n  function drawDisplay(fbo, width, height) {\n    displayMaterial.bind()\n    if (config.SHADING)\n      gl.uniform2f(displayMaterial.uniforms.texelSize, 1.0 / width, 1.0 / height)\n    gl.uniform1i(displayMaterial.uniforms.uTexture, dye.read.attach(0))\n    if (config.BLOOM) {\n      gl.uniform1i(displayMaterial.uniforms.uBloom, bloom.attach(1))\n      gl.uniform1i(displayMaterial.uniforms.uDithering, ditheringTexture.attach(2))\n      let scale = getTextureScale(ditheringTexture, width, height)\n      gl.uniform2f(displayMaterial.uniforms.ditherScale, scale.x, scale.y)\n    }\n    if (config.SUNRAYS)\n      gl.uniform1i(displayMaterial.uniforms.uSunrays, sunrays.attach(3))\n    blit(fbo)\n  }\n\n  function applyBloom(source, destination) {\n    if (bloomFramebuffers.length < 2)\n      return\n\n    let last = destination\n\n    gl.disable(gl.BLEND)\n    bloomPrefilterProgram.bind()\n    let knee = config.BLOOM_THRESHOLD * config.BLOOM_SOFT_KNEE + 0.0001\n    let curve0 = config.BLOOM_THRESHOLD - knee\n    let curve1 = knee * 2\n    let curve2 = 0.25 / knee\n    gl.uniform3f(bloomPrefilterProgram.uniforms.curve, curve0, curve1, curve2)\n    gl.uniform1f(bloomPrefilterProgram.uniforms.threshold, config.BLOOM_THRESHOLD)\n    gl.uniform1i(bloomPrefilterProgram.uniforms.uTexture, source.attach(0))\n    gl.viewport(0, 0, last.width, last.height)\n    blit(last.fbo)\n\n    bloomBlurProgram.bind()\n    for (let i = 0; i < bloomFramebuffers.length; i++) {\n      let dest = bloomFramebuffers[i]\n      gl.uniform2f(bloomBlurProgram.uniforms.texelSize, last.texelSizeX, last.texelSizeY)\n      gl.uniform1i(bloomBlurProgram.uniforms.uTexture, last.attach(0))\n      gl.viewport(0, 0, dest.width, dest.height)\n      blit(dest.fbo)\n      last = dest\n    }\n\n    gl.blendFunc(gl.ONE, gl.ONE)\n    gl.enable(gl.BLEND)\n\n    for (let i = bloomFramebuffers.length - 2; i >= 0; i--) {\n      let baseTex = bloomFramebuffers[i]\n      gl.uniform2f(bloomBlurProgram.uniforms.texelSize, last.texelSizeX, last.texelSizeY)\n      gl.uniform1i(bloomBlurProgram.uniforms.uTexture, last.attach(0))\n      gl.viewport(0, 0, baseTex.width, baseTex.height)\n      blit(baseTex.fbo)\n      last = baseTex\n    }\n\n    gl.disable(gl.BLEND)\n    bloomFinalProgram.bind()\n    gl.uniform2f(bloomFinalProgram.uniforms.texelSize, last.texelSizeX, last.texelSizeY)\n    gl.uniform1i(bloomFinalProgram.uniforms.uTexture, last.attach(0))\n    gl.uniform1f(bloomFinalProgram.uniforms.intensity, config.BLOOM_INTENSITY)\n    gl.viewport(0, 0, destination.width, destination.height)\n    blit(destination.fbo)\n  }\n\n  function applySunrays(source, mask, destination) {\n    gl.disable(gl.BLEND)\n    sunraysMaskProgram.bind()\n    gl.uniform1i(sunraysMaskProgram.uniforms.uTexture, source.attach(0))\n    gl.viewport(0, 0, mask.width, mask.height)\n    blit(mask.fbo)\n\n    sunraysProgram.bind()\n    gl.uniform1f(sunraysProgram.uniforms.weight, config.SUNRAYS_WEIGHT)\n    gl.uniform1i(sunraysProgram.uniforms.uTexture, mask.attach(0))\n    gl.viewport(0, 0, destination.width, destination.height)\n    blit(destination.fbo)\n  }\n\n  function blur(target, temp, iterations) {\n    blurProgram.bind()\n    for (let i = 0; i < iterations; i++) {\n      gl.uniform2f(blurProgram.uniforms.texelSize, target.texelSizeX, 0.0)\n      gl.uniform1i(blurProgram.uniforms.uTexture, target.attach(0))\n      blit(temp.fbo)\n\n      gl.uniform2f(blurProgram.uniforms.texelSize, 0.0, target.texelSizeY)\n      gl.uniform1i(blurProgram.uniforms.uTexture, temp.attach(0))\n      blit(target.fbo)\n    }\n  }\n\n  function splatPointer(pointer) {\n    let dx = pointer.deltaX * config.SPLAT_FORCE\n    let dy = pointer.deltaY * config.SPLAT_FORCE\n    splat(pointer.texcoordX, pointer.texcoordY, dx, dy, pointer.color)\n  }\n\n  function multipleSplats(amount) {\n    for (let i = 0; i < amount; i++) {\n      const color = generateColor()\n      color.r *= 10.0\n      color.g *= 10.0\n      color.b *= 10.0\n      const x = Math.random()\n      const y = Math.random()\n      const dx = 1000 * (Math.random() - 0.5)\n      const dy = 1000 * (Math.random() - 0.5)\n      splat(x, y, dx, dy, color)\n    }\n  }\n\n  function splat(x, y, dx, dy, color) {\n    gl.viewport(0, 0, velocity.width, velocity.height)\n    splatProgram.bind()\n    gl.uniform1i(splatProgram.uniforms.uTarget, velocity.read.attach(0))\n    gl.uniform1f(splatProgram.uniforms.aspectRatio, canvas.width / canvas.height)\n    gl.uniform2f(splatProgram.uniforms.point, x, y)\n    gl.uniform3f(splatProgram.uniforms.color, dx, dy, 0.0)\n    gl.uniform1f(splatProgram.uniforms.radius, correctRadius(config.SPLAT_RADIUS / 100.0))\n    blit(velocity.write.fbo)\n    velocity.swap()\n\n    gl.viewport(0, 0, dye.width, dye.height)\n    gl.uniform1i(splatProgram.uniforms.uTarget, dye.read.attach(0))\n    gl.uniform3f(splatProgram.uniforms.color, color.r, color.g, color.b)\n    blit(dye.write.fbo)\n    dye.swap()\n  }\n\n  function correctRadius(radius) {\n    let aspectRatio = canvas.width / canvas.height\n    if (aspectRatio > 1)\n      radius *= aspectRatio\n    return radius\n  }\n\n  canvas.addEventListener('mousedown', e => {\n    let posX = scaleByPixelRatio(e.offsetX)\n    let posY = scaleByPixelRatio(e.offsetY)\n    let pointer = pointers.find(p => p.id == -1)\n    if (pointer == null)\n      pointer = new pointerPrototype()\n    updatePointerDownData(pointer, -1, posX, posY)\n  })\n\n  setTimeout(() => {\n    canvas.addEventListener('mousemove', e => {\n      let posX = scaleByPixelRatio(e.offsetX)\n      let posY = scaleByPixelRatio(e.offsetY)\n      updatePointerMoveData(pointers[0], posX, posY)\n    })\n  }, 500)\n\n  window.addEventListener('mouseup', () => {\n    updatePointerUpData(pointers[0])\n  })\n\n  canvas.addEventListener('touchstart', e => {\n    e.preventDefault()\n    const touches = e.targetTouches\n    while (touches.length >= pointers.length)\n      pointers.push(new pointerPrototype())\n    for (let i = 0; i < touches.length; i++) {\n      let posX = scaleByPixelRatio(touches[i].pageX)\n      let posY = scaleByPixelRatio(touches[i].pageY)\n      updatePointerDownData(pointers[i + 1], touches[i].identifier, posX, posY)\n    }\n  })\n\n  canvas.addEventListener('touchmove', e => {\n    e.preventDefault()\n    const touches = e.targetTouches\n    for (let i = 0; i < touches.length; i++) {\n      let posX = scaleByPixelRatio(touches[i].pageX)\n      let posY = scaleByPixelRatio(touches[i].pageY)\n      updatePointerMoveData(pointers[i + 1], posX, posY)\n    }\n  }, false)\n\n  window.addEventListener('touchend', e => {\n    const touches = e.changedTouches\n    for (let i = 0; i < touches.length; i++) {\n      let pointer = pointers.find(p => p.id == touches[i].identifier)\n      updatePointerUpData(pointer)\n    }\n  })\n\n  window.addEventListener('keydown', e => {\n    if (e.code === 'KeyP')\n      config.PAUSED = !config.PAUSED\n    if (e.key === ' ')\n      splatStack.push(parseInt(Math.random() * 20) + 5)\n  })\n\n  function updatePointerDownData(pointer, id, posX, posY) {\n    pointer.id = id\n    pointer.down = true\n    pointer.moved = false\n    pointer.texcoordX = posX / canvas.width\n    pointer.texcoordY = 1.0 - posY / canvas.height\n    pointer.prevTexcoordX = pointer.texcoordX\n    pointer.prevTexcoordY = pointer.texcoordY\n    pointer.deltaX = 0\n    pointer.deltaY = 0\n    pointer.color = generateColor()\n  }\n\n  function updatePointerMoveData(pointer, posX, posY) {\n    if (config.TRIGGER === 'click') {\n      pointer.moved = pointer.down\n    }\n    pointer.prevTexcoordX = pointer.texcoordX\n    pointer.prevTexcoordY = pointer.texcoordY\n    pointer.texcoordX = posX / canvas.width\n    pointer.texcoordY = 1.0 - posY / canvas.height\n    pointer.deltaX = correctDeltaX(pointer.texcoordX - pointer.prevTexcoordX)\n    pointer.deltaY = correctDeltaY(pointer.texcoordY - pointer.prevTexcoordY)\n    if (config.TRIGGER === 'hover') {\n      pointer.moved = Math.abs(pointer.deltaX) > 0 || Math.abs(pointer.deltaY) > 0\n    }\n  }\n\n  function updatePointerUpData(pointer) {\n    pointer.down = false\n  }\n\n  function correctDeltaX(delta) {\n    let aspectRatio = canvas.width / canvas.height\n    if (aspectRatio < 1) delta *= aspectRatio\n    return delta\n  }\n\n  function correctDeltaY(delta) {\n    let aspectRatio = canvas.width / canvas.height\n    if (aspectRatio > 1) delta /= aspectRatio\n    return delta\n  }\n\n  function generateColor() {\n    let c = HSVtoRGB(Math.random(), 1.0, 1.0)\n    c.r *= 0.15\n    c.g *= 0.15\n    c.b *= 0.15\n    return c\n  }\n\n  function HSVtoRGB(h, s, v) {\n    let r, g, b, i, f, p, q, t\n    i = Math.floor(h * 6)\n    f = h * 6 - i\n    p = v * (1 - s)\n    q = v * (1 - f * s)\n    t = v * (1 - (1 - f) * s)\n\n    switch (i % 6) {\n      case 0:\n        r = v, g = t, b = p\n        break\n      case 1:\n        r = q, g = v, b = p\n        break\n      case 2:\n        r = p, g = v, b = t\n        break\n      case 3:\n        r = p, g = q, b = v\n        break\n      case 4:\n        r = t, g = p, b = v\n        break\n      case 5:\n        r = v, g = p, b = q\n        break\n    }\n\n    return {\n      r,\n      g,\n      b\n    }\n  }\n\n  function normalizeColor(input) {\n    let output = {\n      r: input.r / 255,\n      g: input.g / 255,\n      b: input.b / 255\n    }\n    return output\n  }\n\n  function wrap(value, min, max) {\n    let range = max - min\n    if (range == 0) return min\n    return (value - min) % range + min\n  }\n\n  function getResolution(resolution) {\n    let aspectRatio = gl.drawingBufferWidth / gl.drawingBufferHeight\n    if (aspectRatio < 1)\n      aspectRatio = 1.0 / aspectRatio\n\n    let min = Math.round(resolution)\n    let max = Math.round(resolution * aspectRatio)\n\n    if (gl.drawingBufferWidth > gl.drawingBufferHeight)\n      return { width: max, height: min }\n    else\n      return { width: min, height: max }\n  }\n\n  function getTextureScale(texture, width, height) {\n    return {\n      x: width / texture.width,\n      y: height / texture.height\n    }\n  }\n\n  function scaleByPixelRatio(input) {\n    let pixelRatio = window.devicePixelRatio || 1\n    return Math.floor(input * pixelRatio)\n  }\n\n  function hashCode(s) {\n    if (s.length == 0) return 0\n    let hash = 0\n    for (let i = 0; i < s.length; i++) {\n      hash = (hash << 5) - hash + s.charCodeAt(i)\n      hash |= 0 // Convert to 32bit integer\n    }\n    return hash\n  }\n}\n"]}