Commit 1231aa278a6925840764a4ab054dd29cb85755fa

Authored by wuxw
1 parent 27dcfde5

移动端图片

Showing 120 changed files with 2649 additions and 2 deletions
package.json
... ... @@ -12,7 +12,6 @@
12 12 "axios": "^0.21.1",
13 13 "echarts": "^5.6.0",
14 14 "element-ui": "^2.15.6",
15   - "formiojs": "^4.21.7",
16 15 "qrcodejs2": "^0.0.2",
17 16 "tinymce": "^5.10.7",
18 17 "vue": "^2.6.14",
... ...
public/h5/.DS_Store 0 → 100644
No preview for this file type
public/h5/images/bed.png 0 → 100644

3.19 KB

public/h5/images/camera.png 0 → 100644

4.22 KB

public/h5/images/chair.png 0 → 100644

7.18 KB

public/h5/images/chargeMachine.jpg 0 → 100644

64.1 KB

public/h5/images/communityPublicity.jpg 0 → 100644

17.1 KB

public/h5/images/cookerhood.png 0 → 100644

6.42 KB

public/h5/images/coupon.png 0 → 100644

33.9 KB

public/h5/images/cupboard.png 0 → 100644

5.98 KB

public/h5/images/desk.png 0 → 100644

3.15 KB

public/h5/images/dining.png 0 → 100644

35.1 KB

public/h5/images/down.png 0 → 100644

2.22 KB

public/h5/images/entranceguard.png 0 → 100644

4.97 KB

public/h5/images/fridge.png 0 → 100644

3.38 KB

public/h5/images/geyser.png 0 → 100644

6.58 KB

public/h5/images/home-selected.png 0 → 100644

5.63 KB

public/h5/images/home.png 0 → 100644

6.34 KB

public/h5/images/homekey.png 0 → 100644

15.6 KB

public/h5/images/index_Voting.png 0 → 100644

1.64 KB

public/h5/images/index_carCharges.png 0 → 100644

2.81 KB

public/h5/images/index_complaint.png 0 → 100644

23.8 KB

public/h5/images/index_contractCost.png 0 → 100644

2.43 KB

public/h5/images/index_emptyRoom.png 0 → 100644

1.72 KB

public/h5/images/index_fitment.png 0 → 100644

2.77 KB

public/h5/images/index_member.png 0 → 100644

27.8 KB

public/h5/images/index_notice.png 0 → 100644

8.64 KB

public/h5/images/index_openDoor.png 0 → 100644

20.4 KB

public/h5/images/index_park.png 0 → 100644

22.2 KB

public/h5/images/index_parking.png 0 → 100644

10.3 KB

public/h5/images/index_payFee.png 0 → 100644

6.38 KB

public/h5/images/index_persion.png 0 → 100644

8.12 KB

public/h5/images/index_property.png 0 → 100644

5.62 KB

public/h5/images/index_repair.png 0 → 100644

8.74 KB

public/h5/images/location.png 0 → 100644

4.82 KB

public/h5/images/login.png 0 → 100644

5.64 KB

public/h5/images/mall_market.png 0 → 100644

6.69 KB

public/h5/images/market-selected.png 0 → 100644

4.79 KB

public/h5/images/market.png 0 → 100644

5.44 KB

public/h5/images/market_add.png 0 → 100644

6.12 KB

public/h5/images/market_my.png 0 → 100644

6.89 KB

public/h5/images/my.png 0 → 100644

6.33 KB

public/h5/images/mySelected.png 0 → 100644

5.92 KB

public/h5/images/network.png 0 → 100644

6.45 KB

public/h5/images/noPhoto.jpg 0 → 100644

35.7 KB

public/h5/images/noPic.png 0 → 100644

7.6 KB

public/h5/images/openDoorTop.png 0 → 100644

19.2 KB

public/h5/images/order-selected.png 0 → 100644

1.77 KB

public/h5/images/order.png 0 → 100644

1.72 KB

public/h5/images/rent-selected.png 0 → 100644

6.03 KB

public/h5/images/rent.png 0 → 100644

6.62 KB

public/h5/images/rentimage.jpg 0 → 100644

18.8 KB

public/h5/images/sad.png 0 → 100644

5.94 KB

public/h5/images/sad1.png 0 → 100644

10.3 KB

public/h5/images/search.png 0 → 100644

472 Bytes

public/h5/images/serve/1.png 0 → 100644

5.24 KB

public/h5/images/serve/10.png 0 → 100644

1.63 KB

public/h5/images/serve/11.png 0 → 100644

2.45 KB

public/h5/images/serve/12.png 0 → 100644

3.95 KB

public/h5/images/serve/13.png 0 → 100644

4.49 KB

public/h5/images/serve/14.png 0 → 100644

2.79 KB

public/h5/images/serve/15.png 0 → 100644

2.29 KB

public/h5/images/serve/2.png 0 → 100644

4.4 KB

public/h5/images/serve/3.png 0 → 100644

4.96 KB

public/h5/images/serve/4.png 0 → 100644

2.47 KB

public/h5/images/serve/5.png 0 → 100644

3.31 KB

public/h5/images/serve/6.png 0 → 100644

3.71 KB

public/h5/images/serve/7.png 0 → 100644

4.14 KB

public/h5/images/serve/8.png 0 → 100644

1.75 KB

public/h5/images/serve/9.png 0 → 100644

4.87 KB

public/h5/images/serve/banner1.jpg 0 → 100644

16.3 KB

public/h5/images/serve/banner2.jpg 0 → 100644

12.5 KB

public/h5/images/serve/bg.png 0 → 100644

30.2 KB

public/h5/images/serve/empty.png 0 → 100644

42 KB

public/h5/images/serve/head.png 0 → 100644

31.2 KB

public/h5/images/serve/home-selected.png 0 → 100644

2.44 KB

public/h5/images/serve/home.png 0 → 100644

2.37 KB

public/h5/images/serve/market-selected.png 0 → 100644

3.54 KB

public/h5/images/serve/market.png 0 → 100644

3.41 KB

public/h5/images/serve/my-selected.png 0 → 100644

3.15 KB

public/h5/images/serve/my.png 0 → 100644

3 KB

public/h5/images/serve/my1.png 0 → 100644

2.68 KB

public/h5/images/serve/my10.png 0 → 100644

4.12 KB

public/h5/images/serve/my2.png 0 → 100644

1.46 KB

public/h5/images/serve/my3.png 0 → 100644

1.76 KB

public/h5/images/serve/my4.png 0 → 100644

3.04 KB

public/h5/images/serve/my5.png 0 → 100644

5.24 KB

public/h5/images/serve/my6.png 0 → 100644

1.94 KB

public/h5/images/serve/my7.png 0 → 100644

4.31 KB

public/h5/images/serve/my8.png 0 → 100644

1.6 KB

public/h5/images/serve/my9.png 0 → 100644

2.12 KB

public/h5/images/serve/new1.png 0 → 100644

19.4 KB

public/h5/images/serve/new2.png 0 → 100644

24.3 KB

public/h5/images/serve/news.png 0 → 100644

1.86 KB

public/h5/images/serve/order1.png 0 → 100644

2.35 KB

public/h5/images/serve/order2.png 0 → 100644

1.69 KB

public/h5/images/serve/order3.png 0 → 100644

3.08 KB

public/h5/images/serve/order4.png 0 → 100644

2.54 KB

public/h5/images/serve/rent-selected.png 0 → 100644

3.84 KB

public/h5/images/serve/rent.png 0 → 100644

3.65 KB

public/h5/images/serve/已付款.png 0 → 100644

3.6 KB

public/h5/images/serve/收货.png 0 → 100644

2.39 KB

public/h5/images/serve/等待发货.png 0 → 100644

4.77 KB

public/h5/images/sofa.png 0 → 100644

5.43 KB

public/h5/images/st_star.png 0 → 100644

1.05 KB

public/h5/images/st_star_active.png 0 → 100644

910 Bytes

public/h5/images/wardrob.png 0 → 100644

4.06 KB

public/h5/images/washingmachine.png 0 → 100644

5.87 KB

public/h5/jessibuca/decoder.js 0 → 100644
  1 +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(require("path"),require("fs"),require("crypto")):"function"==typeof define&&define.amd?define(["path","fs","crypto"],r):r((e="undefined"!=typeof globalThis?globalThis:e||self).path,e.fs,e.crypto$1)}(this,(function(e,r,t){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=n(e),i=n(r),a=n(t);function s(e,r){return e(r={exports:{}},r.exports),r.exports}var l=s((function(e){var r=void 0!==r?r:{},t=(r={print:function(e){console.log("Jessibuca: [worker]:",e)},printErr:function(e){console.warn("Jessibuca: [worker]:",e),postMessage({cmd:"wasmError",message:e})}},Object.assign({},r)),n="./this.program",s="object"==typeof window,l="function"==typeof importScripts,u="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,c=!s&&!u&&!l;if(r.ENVIRONMENT)throw new Error("Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)");var d,f,p,m,h,g,v="";if(u){if("object"!=typeof process)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");v=l?o.default.dirname(v)+"/":__dirname+"/",g=()=>{h||(m=i.default,h=o.default)},d=function(e,r){return g(),e=h.normalize(e),m.readFileSync(e,r?void 0:"utf8")},p=e=>{var r=d(e,!0);return r.buffer||(r=new Uint8Array(r)),F(r.buffer),r},f=(e,r,t)=>{g(),e=h.normalize(e),m.readFile(e,(function(e,n){e?t(e):r(n.buffer)}))},process.argv.length>1&&(n=process.argv[1].replace(/\\/g,"/")),process.argv.slice(2),e.exports=r,process.on("uncaughtException",(function(e){if(!(e instanceof St))throw e})),process.on("unhandledRejection",(function(e){throw e})),r.inspect=function(){return"[Emscripten Module object]"}}else if(c){if("object"==typeof process||"object"==typeof window||"function"==typeof importScripts)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");"undefined"!=typeof read&&(d=function(e){return read(e)}),p=function(e){let r;return"function"==typeof readbuffer?new Uint8Array(readbuffer(e)):(r=read(e,"binary"),F("object"==typeof r),r)},f=function(e,r,t){setTimeout((()=>r(p(e))),0)},"undefined"!=typeof scriptArgs&&scriptArgs,"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)}else{if(!s&&!l)throw new Error("environment detection error");if(l?v=self.location.href:"undefined"!=typeof document&&document.currentScript&&(v=document.currentScript.src),v=0!==v.indexOf("blob:")?v.substr(0,v.replace(/[?#].*/,"").lastIndexOf("/")+1):"","object"!=typeof window&&"function"!=typeof importScripts)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");d=e=>{var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},l&&(p=e=>{var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),f=(e,r,t)=>{var n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="arraybuffer",n.onload=()=>{200==n.status||0==n.status&&n.response?r(n.response):t()},n.onerror=t,n.send(null)}}var y,E,w,b=r.print||console.log.bind(console),_=r.printErr||console.warn.bind(console);function T(e){T.shown||(T.shown={}),T.shown[e]||(T.shown[e]=1,_(e))}function k(e,t){Object.getOwnPropertyDescriptor(r,e)||Object.defineProperty(r,e,{configurable:!0,get:function(){ge("Module."+e+" has been replaced with plain "+t+" (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}function S(e,r){var t="'"+e+"' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)";return r&&(t+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),t}function C(e,t){Object.getOwnPropertyDescriptor(r,e)||Object.defineProperty(r,e,{configurable:!0,get:function(){ge(S(e,t))}})}function P(e,t){Object.getOwnPropertyDescriptor(r,e)||(r[e]=()=>ge(S(e,t)))}Object.assign(r,t),t=null,y="fetchSettings",Object.getOwnPropertyDescriptor(r,y)&&ge("`Module."+y+"` was supplied but `"+y+"` not included in INCOMING_MODULE_JS_API"),r.arguments,k("arguments","arguments_"),r.thisProgram&&(n=r.thisProgram),k("thisProgram","thisProgram"),r.quit,k("quit","quit_"),F(void 0===r.memoryInitializerPrefixURL,"Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),F(void 0===r.pthreadMainPrefixURL,"Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),F(void 0===r.cdInitializerPrefixURL,"Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),F(void 0===r.filePackagePrefixURL,"Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),F(void 0===r.read,"Module.read option was removed (modify read_ in JS)"),F(void 0===r.readAsync,"Module.readAsync option was removed (modify readAsync in JS)"),F(void 0===r.readBinary,"Module.readBinary option was removed (modify readBinary in JS)"),F(void 0===r.setWindowTitle,"Module.setWindowTitle option was removed (modify setWindowTitle in JS)"),F(void 0===r.TOTAL_MEMORY,"Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),k("read","read_"),k("readAsync","readAsync"),k("readBinary","readBinary"),k("setWindowTitle","setWindowTitle"),F(!c,"shell environment detected but not enabled at build time. Add 'shell' to `-sENVIRONMENT` to enable."),r.wasmBinary&&(E=r.wasmBinary),k("wasmBinary","wasmBinary"),r.noExitRuntime,k("noExitRuntime","noExitRuntime"),"object"!=typeof WebAssembly&&ge("no native wasm support detected");var A=!1;function F(e,r){e||ge("Assertion failed"+(r?": "+r:""))}var D="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function O(e,r,t){for(var n=r+t,o=r;e[o]&&!(o>=n);)++o;if(o-r>16&&e.buffer&&D)return D.decode(e.subarray(r,o));for(var i="";r<o;){var a=e[r++];if(128&a){var s=63&e[r++];if(192!=(224&a)){var l=63&e[r++];if(224==(240&a)?a=(15&a)<<12|s<<6|l:(240!=(248&a)&&T("Invalid UTF-8 leading byte 0x"+a.toString(16)+" encountered when deserializing a UTF-8 string in wasm memory to a JS string!"),a=(7&a)<<18|s<<12|l<<6|63&e[r++]),a<65536)i+=String.fromCharCode(a);else{var u=a-65536;i+=String.fromCharCode(55296|u>>10,56320|1023&u)}}else i+=String.fromCharCode((31&a)<<6|s)}else i+=String.fromCharCode(a)}return i}function R(e,r){return e?O(U,e,r):""}function M(e,r,t,n){if(!(n>0))return 0;for(var o=t,i=t+n-1,a=0;a<e.length;++a){var s=e.charCodeAt(a);if(s>=55296&&s<=57343)s=65536+((1023&s)<<10)|1023&e.charCodeAt(++a);if(s<=127){if(t>=i)break;r[t++]=s}else if(s<=2047){if(t+1>=i)break;r[t++]=192|s>>6,r[t++]=128|63&s}else if(s<=65535){if(t+2>=i)break;r[t++]=224|s>>12,r[t++]=128|s>>6&63,r[t++]=128|63&s}else{if(t+3>=i)break;s>1114111&&T("Invalid Unicode code point 0x"+s.toString(16)+" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF)."),r[t++]=240|s>>18,r[t++]=128|s>>12&63,r[t++]=128|s>>6&63,r[t++]=128|63&s}}return r[t]=0,t-o}function N(e,r,t){return F("number"==typeof t,"stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"),M(e,U,r,t)}function I(e){for(var r=0,t=0;t<e.length;++t){var n=e.charCodeAt(t);n>=55296&&n<=57343&&(n=65536+((1023&n)<<10)|1023&e.charCodeAt(++t)),n<=127?++r:r+=n<=2047?2:n<=65535?3:4}return r}var L,x,U,B,j,$,W,z,H,G="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0;function V(e,r){F(e%2==0,"Pointer passed to UTF16ToString must be aligned to two bytes!");for(var t=e,n=t>>1,o=n+r/2;!(n>=o)&&j[n];)++n;if((t=n<<1)-e>32&&G)return G.decode(U.subarray(e,t));for(var i="",a=0;!(a>=r/2);++a){var s=B[e+2*a>>1];if(0==s)break;i+=String.fromCharCode(s)}return i}function Y(e,r,t){if(F(r%2==0,"Pointer passed to stringToUTF16 must be aligned to two bytes!"),F("number"==typeof t,"stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"),void 0===t&&(t=2147483647),t<2)return 0;for(var n=r,o=(t-=2)<2*e.length?t/2:e.length,i=0;i<o;++i){var a=e.charCodeAt(i);B[r>>1]=a,r+=2}return B[r>>1]=0,r-n}function q(e){return 2*e.length}function X(e,r){F(e%4==0,"Pointer passed to UTF32ToString must be aligned to four bytes!");for(var t=0,n="";!(t>=r/4);){var o=$[e+4*t>>2];if(0==o)break;if(++t,o>=65536){var i=o-65536;n+=String.fromCharCode(55296|i>>10,56320|1023&i)}else n+=String.fromCharCode(o)}return n}function K(e,r,t){if(F(r%4==0,"Pointer passed to stringToUTF32 must be aligned to four bytes!"),F("number"==typeof t,"stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"),void 0===t&&(t=2147483647),t<4)return 0;for(var n=r,o=n+t-4,i=0;i<e.length;++i){var a=e.charCodeAt(i);if(a>=55296&&a<=57343)a=65536+((1023&a)<<10)|1023&e.charCodeAt(++i);if($[r>>2]=a,(r+=4)+4>o)break}return $[r>>2]=0,r-n}function J(e){for(var r=0,t=0;t<e.length;++t){var n=e.charCodeAt(t);n>=55296&&n<=57343&&++t,r+=4}return r}function Q(e){var r=I(e)+1,t=gt(r);return t&&M(e,x,t,r),t}function Z(e){L=e,r.HEAP8=x=new Int8Array(e),r.HEAP16=B=new Int16Array(e),r.HEAP32=$=new Int32Array(e),r.HEAPU8=U=new Uint8Array(e),r.HEAPU16=j=new Uint16Array(e),r.HEAPU32=W=new Uint32Array(e),r.HEAPF32=z=new Float32Array(e),r.HEAPF64=H=new Float64Array(e)}var ee=5242880;r.TOTAL_STACK&&F(ee===r.TOTAL_STACK,"the stack size can no longer be determined at runtime");var re,te=r.INITIAL_MEMORY||67108864;function ne(){var e=kt();F(0==(3&e)),$[e>>2]=34821223,$[e+4>>2]=2310721022,$[0]=1668509029}function oe(){if(!A){var e=kt(),r=W[e>>2],t=W[e+4>>2];34821223==r&&2310721022==t||ge("Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x2135467, but received 0x"+t.toString(16)+" 0x"+r.toString(16)),1668509029!==$[0]&&ge("Runtime error: The application has corrupted its heap memory area (address zero)!")}}k("INITIAL_MEMORY","INITIAL_MEMORY"),F(te>=ee,"INITIAL_MEMORY should be larger than TOTAL_STACK, was "+te+"! (TOTAL_STACK="+"5242880)"),F("undefined"!=typeof Int32Array&&"undefined"!=typeof Float64Array&&null!=Int32Array.prototype.subarray&&null!=Int32Array.prototype.set,"JS engine does not provide full typed array support"),F(!r.wasmMemory,"Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally"),F(67108864==te,"Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically"),function(){var e=new Int16Array(1),r=new Int8Array(e.buffer);if(e[0]=25459,115!==r[0]||99!==r[1])throw"Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)"}();var ie=[],ae=[],se=[],le=!1;F(Math.imul,"This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),F(Math.fround,"This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),F(Math.clz32,"This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),F(Math.trunc,"This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");var ue=0,ce=null,de=null,fe={};function pe(e){for(var r=e;;){if(!fe[e])return e;e=r+Math.random()}}function me(e){ue++,r.monitorRunDependencies&&r.monitorRunDependencies(ue),e?(F(!fe[e]),fe[e]=1,null===ce&&"undefined"!=typeof setInterval&&(ce=setInterval((function(){if(A)return clearInterval(ce),void(ce=null);var e=!1;for(var r in fe)e||(e=!0,_("still waiting on run dependencies:")),_("dependency: "+r);e&&_("(end of list)")}),1e4))):_("warning: run dependency added without ID")}function he(e){if(ue--,r.monitorRunDependencies&&r.monitorRunDependencies(ue),e?(F(fe[e]),delete fe[e]):_("warning: run dependency removed without ID"),0==ue&&(null!==ce&&(clearInterval(ce),ce=null),de)){var t=de;de=null,t()}}function ge(e){throw r.onAbort&&r.onAbort(e),_(e="Aborted("+e+")"),A=!0,new WebAssembly.RuntimeError(e)}var ve,ye,Ee;function we(e){return e.startsWith("data:application/octet-stream;base64,")}function be(e){return e.startsWith("file://")}function _e(e,t){return function(){var n=e,o=t;return t||(o=r.asm),F(le,"native function `"+n+"` called before runtime initialization"),o[e]||F(o[e],"exported native function `"+n+"` not found"),o[e].apply(null,arguments)}}function Te(e){try{if(e==ve&&E)return new Uint8Array(E);if(p)return p(e);throw"both async and sync fetching of the wasm failed"}catch(e){ge(e)}}function ke(e){for(;e.length>0;){var t=e.shift();if("function"!=typeof t){var n=t.func;"number"==typeof n?void 0===t.arg?Ce(n)():Ce(n)(t.arg):n(void 0===t.arg?null:t.arg)}else t(r)}}function Se(e){return e.replace(/\b_Z[\w\d_]+/g,(function(e){var r,t=(r=e,T("warning: build with -sDEMANGLE_SUPPORT to link in libcxxabi demangling"),r);return e===t?e:t+" ["+e+"]"}))}function Ce(e){return re.get(e)}function Pe(){var e=new Error;if(!e.stack){try{throw new Error}catch(r){e=r}if(!e.stack)return"(no stack trace available)"}return e.stack.toString()}we(ve="decoder.wasm")||(ve=function(e){return r.locateFile?r.locateFile(e,v):v+e}(ve));var Ae={isAbs:e=>"/"===e.charAt(0),splitPath:e=>/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1),normalizeArray:(e,r)=>{for(var t=0,n=e.length-1;n>=0;n--){var o=e[n];"."===o?e.splice(n,1):".."===o?(e.splice(n,1),t++):t&&(e.splice(n,1),t--)}if(r)for(;t;t--)e.unshift("..");return e},normalize:e=>{var r=Ae.isAbs(e),t="/"===e.substr(-1);return(e=Ae.normalizeArray(e.split("/").filter((e=>!!e)),!r).join("/"))||r||(e="."),e&&t&&(e+="/"),(r?"/":"")+e},dirname:e=>{var r=Ae.splitPath(e),t=r[0],n=r[1];return t||n?(n&&(n=n.substr(0,n.length-1)),t+n):"."},basename:e=>{if("/"===e)return"/";var r=(e=(e=Ae.normalize(e)).replace(/\/$/,"")).lastIndexOf("/");return-1===r?e:e.substr(r+1)},join:function(){var e=Array.prototype.slice.call(arguments,0);return Ae.normalize(e.join("/"))},join2:(e,r)=>Ae.normalize(e+"/"+r)};var Fe={resolve:function(){for(var e="",r=!1,t=arguments.length-1;t>=-1&&!r;t--){var n=t>=0?arguments[t]:Ie.cwd();if("string"!=typeof n)throw new TypeError("Arguments to path.resolve must be strings");if(!n)return"";e=n+"/"+e,r=Ae.isAbs(n)}return(r?"/":"")+(e=Ae.normalizeArray(e.split("/").filter((e=>!!e)),!r).join("/"))||"."},relative:(e,r)=>{function t(e){for(var r=0;r<e.length&&""===e[r];r++);for(var t=e.length-1;t>=0&&""===e[t];t--);return r>t?[]:e.slice(r,t-r+1)}e=Fe.resolve(e).substr(1),r=Fe.resolve(r).substr(1);for(var n=t(e.split("/")),o=t(r.split("/")),i=Math.min(n.length,o.length),a=i,s=0;s<i;s++)if(n[s]!==o[s]){a=s;break}var l=[];for(s=a;s<n.length;s++)l.push("..");return(l=l.concat(o.slice(a))).join("/")}},De={ttys:[],init:function(){},shutdown:function(){},register:function(e,r){De.ttys[e]={input:[],output:[],ops:r},Ie.registerDevice(e,De.stream_ops)},stream_ops:{open:function(e){var r=De.ttys[e.node.rdev];if(!r)throw new Ie.ErrnoError(43);e.tty=r,e.seekable=!1},close:function(e){e.tty.ops.flush(e.tty)},flush:function(e){e.tty.ops.flush(e.tty)},read:function(e,r,t,n,o){if(!e.tty||!e.tty.ops.get_char)throw new Ie.ErrnoError(60);for(var i=0,a=0;a<n;a++){var s;try{s=e.tty.ops.get_char(e.tty)}catch(e){throw new Ie.ErrnoError(29)}if(void 0===s&&0===i)throw new Ie.ErrnoError(6);if(null==s)break;i++,r[t+a]=s}return i&&(e.node.timestamp=Date.now()),i},write:function(e,r,t,n,o){if(!e.tty||!e.tty.ops.put_char)throw new Ie.ErrnoError(60);try{for(var i=0;i<n;i++)e.tty.ops.put_char(e.tty,r[t+i])}catch(e){throw new Ie.ErrnoError(29)}return n&&(e.node.timestamp=Date.now()),i}},default_tty_ops:{get_char:function(e){if(!e.input.length){var r=null;if(u){var t=Buffer.alloc(256),n=0;try{n=m.readSync(process.stdin.fd,t,0,256,-1)}catch(e){if(!e.toString().includes("EOF"))throw e;n=0}r=n>0?t.slice(0,n).toString("utf-8"):null}else"undefined"!=typeof window&&"function"==typeof window.prompt?null!==(r=window.prompt("Input: "))&&(r+="\n"):"function"==typeof readline&&null!==(r=readline())&&(r+="\n");if(!r)return null;e.input=pt(r,!0)}return e.input.shift()},put_char:function(e,r){null===r||10===r?(b(O(e.output,0)),e.output=[]):0!=r&&e.output.push(r)},flush:function(e){e.output&&e.output.length>0&&(b(O(e.output,0)),e.output=[])}},default_tty1_ops:{put_char:function(e,r){null===r||10===r?(_(O(e.output,0)),e.output=[]):0!=r&&e.output.push(r)},flush:function(e){e.output&&e.output.length>0&&(_(O(e.output,0)),e.output=[])}}};function Oe(e){e=function(e,r){return F(r,"alignment argument is required"),Math.ceil(e/r)*r}(e,65536);var r=bt(65536,e);return r?(function(e,r){U.fill(0,e,e+r)}(r,e),r):0}var Re={ops_table:null,mount:function(e){return Re.createNode(null,"/",16895,0)},createNode:function(e,r,t,n){if(Ie.isBlkdev(t)||Ie.isFIFO(t))throw new Ie.ErrnoError(63);Re.ops_table||(Re.ops_table={dir:{node:{getattr:Re.node_ops.getattr,setattr:Re.node_ops.setattr,lookup:Re.node_ops.lookup,mknod:Re.node_ops.mknod,rename:Re.node_ops.rename,unlink:Re.node_ops.unlink,rmdir:Re.node_ops.rmdir,readdir:Re.node_ops.readdir,symlink:Re.node_ops.symlink},stream:{llseek:Re.stream_ops.llseek}},file:{node:{getattr:Re.node_ops.getattr,setattr:Re.node_ops.setattr},stream:{llseek:Re.stream_ops.llseek,read:Re.stream_ops.read,write:Re.stream_ops.write,allocate:Re.stream_ops.allocate,mmap:Re.stream_ops.mmap,msync:Re.stream_ops.msync}},link:{node:{getattr:Re.node_ops.getattr,setattr:Re.node_ops.setattr,readlink:Re.node_ops.readlink},stream:{}},chrdev:{node:{getattr:Re.node_ops.getattr,setattr:Re.node_ops.setattr},stream:Ie.chrdev_stream_ops}});var o=Ie.createNode(e,r,t,n);return Ie.isDir(o.mode)?(o.node_ops=Re.ops_table.dir.node,o.stream_ops=Re.ops_table.dir.stream,o.contents={}):Ie.isFile(o.mode)?(o.node_ops=Re.ops_table.file.node,o.stream_ops=Re.ops_table.file.stream,o.usedBytes=0,o.contents=null):Ie.isLink(o.mode)?(o.node_ops=Re.ops_table.link.node,o.stream_ops=Re.ops_table.link.stream):Ie.isChrdev(o.mode)&&(o.node_ops=Re.ops_table.chrdev.node,o.stream_ops=Re.ops_table.chrdev.stream),o.timestamp=Date.now(),e&&(e.contents[r]=o,e.timestamp=o.timestamp),o},getFileDataAsTypedArray:function(e){return e.contents?e.contents.subarray?e.contents.subarray(0,e.usedBytes):new Uint8Array(e.contents):new Uint8Array(0)},expandFileStorage:function(e,r){var t=e.contents?e.contents.length:0;if(!(t>=r)){r=Math.max(r,t*(t<1048576?2:1.125)>>>0),0!=t&&(r=Math.max(r,256));var n=e.contents;e.contents=new Uint8Array(r),e.usedBytes>0&&e.contents.set(n.subarray(0,e.usedBytes),0)}},resizeFileStorage:function(e,r){if(e.usedBytes!=r)if(0==r)e.contents=null,e.usedBytes=0;else{var t=e.contents;e.contents=new Uint8Array(r),t&&e.contents.set(t.subarray(0,Math.min(r,e.usedBytes))),e.usedBytes=r}},node_ops:{getattr:function(e){var r={};return r.dev=Ie.isChrdev(e.mode)?e.id:1,r.ino=e.id,r.mode=e.mode,r.nlink=1,r.uid=0,r.gid=0,r.rdev=e.rdev,Ie.isDir(e.mode)?r.size=4096:Ie.isFile(e.mode)?r.size=e.usedBytes:Ie.isLink(e.mode)?r.size=e.link.length:r.size=0,r.atime=new Date(e.timestamp),r.mtime=new Date(e.timestamp),r.ctime=new Date(e.timestamp),r.blksize=4096,r.blocks=Math.ceil(r.size/r.blksize),r},setattr:function(e,r){void 0!==r.mode&&(e.mode=r.mode),void 0!==r.timestamp&&(e.timestamp=r.timestamp),void 0!==r.size&&Re.resizeFileStorage(e,r.size)},lookup:function(e,r){throw Ie.genericErrors[44]},mknod:function(e,r,t,n){return Re.createNode(e,r,t,n)},rename:function(e,r,t){if(Ie.isDir(e.mode)){var n;try{n=Ie.lookupNode(r,t)}catch(e){}if(n)for(var o in n.contents)throw new Ie.ErrnoError(55)}delete e.parent.contents[e.name],e.parent.timestamp=Date.now(),e.name=t,r.contents[t]=e,r.timestamp=e.parent.timestamp,e.parent=r},unlink:function(e,r){delete e.contents[r],e.timestamp=Date.now()},rmdir:function(e,r){var t=Ie.lookupNode(e,r);for(var n in t.contents)throw new Ie.ErrnoError(55);delete e.contents[r],e.timestamp=Date.now()},readdir:function(e){var r=[".",".."];for(var t in e.contents)e.contents.hasOwnProperty(t)&&r.push(t);return r},symlink:function(e,r,t){var n=Re.createNode(e,r,41471,0);return n.link=t,n},readlink:function(e){if(!Ie.isLink(e.mode))throw new Ie.ErrnoError(28);return e.link}},stream_ops:{read:function(e,r,t,n,o){var i=e.node.contents;if(o>=e.node.usedBytes)return 0;var a=Math.min(e.node.usedBytes-o,n);if(F(a>=0),a>8&&i.subarray)r.set(i.subarray(o,o+a),t);else for(var s=0;s<a;s++)r[t+s]=i[o+s];return a},write:function(e,r,t,n,o,i){if(F(!(r instanceof ArrayBuffer)),r.buffer===x.buffer&&(i=!1),!n)return 0;var a=e.node;if(a.timestamp=Date.now(),r.subarray&&(!a.contents||a.contents.subarray)){if(i)return F(0===o,"canOwn must imply no weird position inside the file"),a.contents=r.subarray(t,t+n),a.usedBytes=n,n;if(0===a.usedBytes&&0===o)return a.contents=r.slice(t,t+n),a.usedBytes=n,n;if(o+n<=a.usedBytes)return a.contents.set(r.subarray(t,t+n),o),n}if(Re.expandFileStorage(a,o+n),a.contents.subarray&&r.subarray)a.contents.set(r.subarray(t,t+n),o);else for(var s=0;s<n;s++)a.contents[o+s]=r[t+s];return a.usedBytes=Math.max(a.usedBytes,o+n),n},llseek:function(e,r,t){var n=r;if(1===t?n+=e.position:2===t&&Ie.isFile(e.node.mode)&&(n+=e.node.usedBytes),n<0)throw new Ie.ErrnoError(28);return n},allocate:function(e,r,t){Re.expandFileStorage(e.node,r+t),e.node.usedBytes=Math.max(e.node.usedBytes,r+t)},mmap:function(e,r,t,n,o,i){if(0!==r)throw new Ie.ErrnoError(28);if(!Ie.isFile(e.node.mode))throw new Ie.ErrnoError(43);var a,s,l=e.node.contents;if(2&i||l.buffer!==L){if((n>0||n+t<l.length)&&(l=l.subarray?l.subarray(n,n+t):Array.prototype.slice.call(l,n,n+t)),s=!0,!(a=Oe(t)))throw new Ie.ErrnoError(48);x.set(l,a)}else s=!1,a=l.byteOffset;return{ptr:a,allocated:s}},msync:function(e,r,t,n,o){if(!Ie.isFile(e.node.mode))throw new Ie.ErrnoError(43);return 2&o||Re.stream_ops.write(e,r,0,n,t,!1),0}}};var Me={0:"Success",1:"Arg list too long",2:"Permission denied",3:"Address already in use",4:"Address not available",5:"Address family not supported by protocol family",6:"No more processes",7:"Socket already connected",8:"Bad file number",9:"Trying to read unreadable message",10:"Mount device busy",11:"Operation canceled",12:"No children",13:"Connection aborted",14:"Connection refused",15:"Connection reset by peer",16:"File locking deadlock error",17:"Destination address required",18:"Math arg out of domain of func",19:"Quota exceeded",20:"File exists",21:"Bad address",22:"File too large",23:"Host is unreachable",24:"Identifier removed",25:"Illegal byte sequence",26:"Connection already in progress",27:"Interrupted system call",28:"Invalid argument",29:"I/O error",30:"Socket is already connected",31:"Is a directory",32:"Too many symbolic links",33:"Too many open files",34:"Too many links",35:"Message too long",36:"Multihop attempted",37:"File or path name too long",38:"Network interface is not configured",39:"Connection reset by network",40:"Network is unreachable",41:"Too many open files in system",42:"No buffer space available",43:"No such device",44:"No such file or directory",45:"Exec format error",46:"No record locks available",47:"The link has been severed",48:"Not enough core",49:"No message of desired type",50:"Protocol not available",51:"No space left on device",52:"Function not implemented",53:"Socket is not connected",54:"Not a directory",55:"Directory not empty",56:"State not recoverable",57:"Socket operation on non-socket",59:"Not a typewriter",60:"No such device or address",61:"Value too large for defined data type",62:"Previous owner died",63:"Not super-user",64:"Broken pipe",65:"Protocol error",66:"Unknown protocol",67:"Protocol wrong type for socket",68:"Math result not representable",69:"Read only file system",70:"Illegal seek",71:"No such process",72:"Stale file handle",73:"Connection timed out",74:"Text file busy",75:"Cross-device link",100:"Device not a stream",101:"Bad font file fmt",102:"Invalid slot",103:"Invalid request code",104:"No anode",105:"Block device required",106:"Channel number out of range",107:"Level 3 halted",108:"Level 3 reset",109:"Link number out of range",110:"Protocol driver not attached",111:"No CSI structure available",112:"Level 2 halted",113:"Invalid exchange",114:"Invalid request descriptor",115:"Exchange full",116:"No data (for no delay io)",117:"Timer expired",118:"Out of streams resources",119:"Machine is not on the network",120:"Package not installed",121:"The object is remote",122:"Advertise error",123:"Srmount error",124:"Communication error on send",125:"Cross mount point (not really error)",126:"Given log. name not unique",127:"f.d. invalid for this operation",128:"Remote address changed",129:"Can access a needed shared lib",130:"Accessing a corrupted shared lib",131:".lib section in a.out corrupted",132:"Attempting to link in too many libs",133:"Attempting to exec a shared library",135:"Streams pipe error",136:"Too many users",137:"Socket type not supported",138:"Not supported",139:"Protocol family not supported",140:"Can't send after socket shutdown",141:"Too many references",142:"Host is down",148:"No medium (in tape drive)",156:"Level 2 not synchronized"},Ne={},Ie={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(e=Fe.resolve(Ie.cwd(),e)))return{path:"",node:null};var t={follow_mount:!0,recurse_count:0};if(r=Object.assign(t,r),r.recurse_count>8)throw new Ie.ErrnoError(32);for(var n=Ae.normalizeArray(e.split("/").filter((e=>!!e)),!1),o=Ie.root,i="/",a=0;a<n.length;a++){var s=a===n.length-1;if(s&&r.parent)break;if(o=Ie.lookupNode(o,n[a]),i=Ae.join2(i,n[a]),Ie.isMountpoint(o)&&(!s||s&&r.follow_mount)&&(o=o.mounted.root),!s||r.follow)for(var l=0;Ie.isLink(o.mode);){var u=Ie.readlink(i);i=Fe.resolve(Ae.dirname(i),u);var c=Ie.lookupPath(i,{recurse_count:r.recurse_count+1});if(o=c.node,l++>40)throw new Ie.ErrnoError(32)}}return{path:i,node:o}},getPath:e=>{for(var r;;){if(Ie.isRoot(e)){var t=e.mount.mountpoint;return r?"/"!==t[t.length-1]?t+"/"+r:t+r:t}r=r?e.name+"/"+r:e.name,e=e.parent}},hashName:(e,r)=>{for(var t=0,n=0;n<r.length;n++)t=(t<<5)-t+r.charCodeAt(n)|0;return(e+t>>>0)%Ie.nameTable.length},hashAddNode:e=>{var r=Ie.hashName(e.parent.id,e.name);e.name_next=Ie.nameTable[r],Ie.nameTable[r]=e},hashRemoveNode:e=>{var r=Ie.hashName(e.parent.id,e.name);if(Ie.nameTable[r]===e)Ie.nameTable[r]=e.name_next;else for(var t=Ie.nameTable[r];t;){if(t.name_next===e){t.name_next=e.name_next;break}t=t.name_next}},lookupNode:(e,r)=>{var t=Ie.mayLookup(e);if(t)throw new Ie.ErrnoError(t,e);for(var n=Ie.hashName(e.id,r),o=Ie.nameTable[n];o;o=o.name_next){var i=o.name;if(o.parent.id===e.id&&i===r)return o}return Ie.lookup(e,r)},createNode:(e,r,t,n)=>{F("object"==typeof e);var o=new Ie.FSNode(e,r,t,n);return Ie.hashAddNode(o),o},destroyNode:e=>{Ie.hashRemoveNode(e)},isRoot:e=>e===e.parent,isMountpoint:e=>!!e.mounted,isFile:e=>32768==(61440&e),isDir:e=>16384==(61440&e),isLink:e=>40960==(61440&e),isChrdev:e=>8192==(61440&e),isBlkdev:e=>24576==(61440&e),isFIFO:e=>4096==(61440&e),isSocket:e=>49152==(49152&e),flagModes:{r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},modeStringToFlags:e=>{var r=Ie.flagModes[e];if(void 0===r)throw new Error("Unknown file open mode: "+e);return r},flagsToPermissionString:e=>{var r=["r","w","rw"][3&e];return 512&e&&(r+="w"),r},nodePermissions:(e,r)=>Ie.ignorePermissions||(!r.includes("r")||292&e.mode)&&(!r.includes("w")||146&e.mode)&&(!r.includes("x")||73&e.mode)?0:2,mayLookup:e=>{var r=Ie.nodePermissions(e,"x");return r||(e.node_ops.lookup?0:2)},mayCreate:(e,r)=>{try{Ie.lookupNode(e,r);return 20}catch(e){}return Ie.nodePermissions(e,"wx")},mayDelete:(e,r,t)=>{var n;try{n=Ie.lookupNode(e,r)}catch(e){return e.errno}var o=Ie.nodePermissions(e,"wx");if(o)return o;if(t){if(!Ie.isDir(n.mode))return 54;if(Ie.isRoot(n)||Ie.getPath(n)===Ie.cwd())return 10}else if(Ie.isDir(n.mode))return 31;return 0},mayOpen:(e,r)=>e?Ie.isLink(e.mode)?32:Ie.isDir(e.mode)&&("r"!==Ie.flagsToPermissionString(r)||512&r)?31:Ie.nodePermissions(e,Ie.flagsToPermissionString(r)):44,MAX_OPEN_FDS:4096,nextfd:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Ie.MAX_OPEN_FDS;for(var t=e;t<=r;t++)if(!Ie.streams[t])return t;throw new Ie.ErrnoError(33)},getStream:e=>Ie.streams[e],createStream:(e,r,t)=>{Ie.FSStream||(Ie.FSStream=function(){this.shared={}},Ie.FSStream.prototype={object:{get:function(){return this.node},set:function(e){this.node=e}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return 0!=(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}},flags:{get:function(){return this.shared.flags},set:function(e){this.shared.flags=e}},position:{get function(){return this.shared.position},set:function(e){this.shared.position=e}}}),e=Object.assign(new Ie.FSStream,e);var n=Ie.nextfd(r,t);return e.fd=n,Ie.streams[n]=e,e},closeStream:e=>{Ie.streams[e]=null},chrdev_stream_ops:{open:e=>{var r=Ie.getDevice(e.node.rdev);e.stream_ops=r.stream_ops,e.stream_ops.open&&e.stream_ops.open(e)},llseek:()=>{throw new Ie.ErrnoError(70)}},major:e=>e>>8,minor:e=>255&e,makedev:(e,r)=>e<<8|r,registerDevice:(e,r)=>{Ie.devices[e]={stream_ops:r}},getDevice:e=>Ie.devices[e],getMounts:e=>{for(var r=[],t=[e];t.length;){var n=t.pop();r.push(n),t.push.apply(t,n.mounts)}return r},syncfs:(e,r)=>{"function"==typeof e&&(r=e,e=!1),Ie.syncFSRequests++,Ie.syncFSRequests>1&&_("warning: "+Ie.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work");var t=Ie.getMounts(Ie.root.mount),n=0;function o(e){return F(Ie.syncFSRequests>0),Ie.syncFSRequests--,r(e)}function i(e){if(e)return i.errored?void 0:(i.errored=!0,o(e));++n>=t.length&&o(null)}t.forEach((r=>{if(!r.type.syncfs)return i(null);r.type.syncfs(r,e,i)}))},mount:(e,r,t)=>{if("string"==typeof e)throw e;var n,o="/"===t,i=!t;if(o&&Ie.root)throw new Ie.ErrnoError(10);if(!o&&!i){var a=Ie.lookupPath(t,{follow_mount:!1});if(t=a.path,n=a.node,Ie.isMountpoint(n))throw new Ie.ErrnoError(10);if(!Ie.isDir(n.mode))throw new Ie.ErrnoError(54)}var s={type:e,opts:r,mountpoint:t,mounts:[]},l=e.mount(s);return l.mount=s,s.root=l,o?Ie.root=l:n&&(n.mounted=s,n.mount&&n.mount.mounts.push(s)),l},unmount:e=>{var r=Ie.lookupPath(e,{follow_mount:!1});if(!Ie.isMountpoint(r.node))throw new Ie.ErrnoError(28);var t=r.node,n=t.mounted,o=Ie.getMounts(n);Object.keys(Ie.nameTable).forEach((e=>{for(var r=Ie.nameTable[e];r;){var t=r.name_next;o.includes(r.mount)&&Ie.destroyNode(r),r=t}})),t.mounted=null;var i=t.mount.mounts.indexOf(n);F(-1!==i),t.mount.mounts.splice(i,1)},lookup:(e,r)=>e.node_ops.lookup(e,r),mknod:(e,r,t)=>{var n=Ie.lookupPath(e,{parent:!0}).node,o=Ae.basename(e);if(!o||"."===o||".."===o)throw new Ie.ErrnoError(28);var i=Ie.mayCreate(n,o);if(i)throw new Ie.ErrnoError(i);if(!n.node_ops.mknod)throw new Ie.ErrnoError(63);return n.node_ops.mknod(n,o,r,t)},create:(e,r)=>(r=void 0!==r?r:438,r&=4095,r|=32768,Ie.mknod(e,r,0)),mkdir:(e,r)=>(r=void 0!==r?r:511,r&=1023,r|=16384,Ie.mknod(e,r,0)),mkdirTree:(e,r)=>{for(var t=e.split("/"),n="",o=0;o<t.length;++o)if(t[o]){n+="/"+t[o];try{Ie.mkdir(n,r)}catch(e){if(20!=e.errno)throw e}}},mkdev:(e,r,t)=>(void 0===t&&(t=r,r=438),r|=8192,Ie.mknod(e,r,t)),symlink:(e,r)=>{if(!Fe.resolve(e))throw new Ie.ErrnoError(44);var t=Ie.lookupPath(r,{parent:!0}).node;if(!t)throw new Ie.ErrnoError(44);var n=Ae.basename(r),o=Ie.mayCreate(t,n);if(o)throw new Ie.ErrnoError(o);if(!t.node_ops.symlink)throw new Ie.ErrnoError(63);return t.node_ops.symlink(t,n,e)},rename:(e,r)=>{var t,n,o=Ae.dirname(e),i=Ae.dirname(r),a=Ae.basename(e),s=Ae.basename(r);if(t=Ie.lookupPath(e,{parent:!0}).node,n=Ie.lookupPath(r,{parent:!0}).node,!t||!n)throw new Ie.ErrnoError(44);if(t.mount!==n.mount)throw new Ie.ErrnoError(75);var l,u=Ie.lookupNode(t,a),c=Fe.relative(e,i);if("."!==c.charAt(0))throw new Ie.ErrnoError(28);if("."!==(c=Fe.relative(r,o)).charAt(0))throw new Ie.ErrnoError(55);try{l=Ie.lookupNode(n,s)}catch(e){}if(u!==l){var d=Ie.isDir(u.mode),f=Ie.mayDelete(t,a,d);if(f)throw new Ie.ErrnoError(f);if(f=l?Ie.mayDelete(n,s,d):Ie.mayCreate(n,s))throw new Ie.ErrnoError(f);if(!t.node_ops.rename)throw new Ie.ErrnoError(63);if(Ie.isMountpoint(u)||l&&Ie.isMountpoint(l))throw new Ie.ErrnoError(10);if(n!==t&&(f=Ie.nodePermissions(t,"w")))throw new Ie.ErrnoError(f);Ie.hashRemoveNode(u);try{t.node_ops.rename(u,n,s)}catch(e){throw e}finally{Ie.hashAddNode(u)}}},rmdir:e=>{var r=Ie.lookupPath(e,{parent:!0}).node,t=Ae.basename(e),n=Ie.lookupNode(r,t),o=Ie.mayDelete(r,t,!0);if(o)throw new Ie.ErrnoError(o);if(!r.node_ops.rmdir)throw new Ie.ErrnoError(63);if(Ie.isMountpoint(n))throw new Ie.ErrnoError(10);r.node_ops.rmdir(r,t),Ie.destroyNode(n)},readdir:e=>{var r=Ie.lookupPath(e,{follow:!0}).node;if(!r.node_ops.readdir)throw new Ie.ErrnoError(54);return r.node_ops.readdir(r)},unlink:e=>{var r=Ie.lookupPath(e,{parent:!0}).node;if(!r)throw new Ie.ErrnoError(44);var t=Ae.basename(e),n=Ie.lookupNode(r,t),o=Ie.mayDelete(r,t,!1);if(o)throw new Ie.ErrnoError(o);if(!r.node_ops.unlink)throw new Ie.ErrnoError(63);if(Ie.isMountpoint(n))throw new Ie.ErrnoError(10);r.node_ops.unlink(r,t),Ie.destroyNode(n)},readlink:e=>{var r=Ie.lookupPath(e).node;if(!r)throw new Ie.ErrnoError(44);if(!r.node_ops.readlink)throw new Ie.ErrnoError(28);return Fe.resolve(Ie.getPath(r.parent),r.node_ops.readlink(r))},stat:(e,r)=>{var t=Ie.lookupPath(e,{follow:!r}).node;if(!t)throw new Ie.ErrnoError(44);if(!t.node_ops.getattr)throw new Ie.ErrnoError(63);return t.node_ops.getattr(t)},lstat:e=>Ie.stat(e,!0),chmod:(e,r,t)=>{var n;"string"==typeof e?n=Ie.lookupPath(e,{follow:!t}).node:n=e;if(!n.node_ops.setattr)throw new Ie.ErrnoError(63);n.node_ops.setattr(n,{mode:4095&r|-4096&n.mode,timestamp:Date.now()})},lchmod:(e,r)=>{Ie.chmod(e,r,!0)},fchmod:(e,r)=>{var t=Ie.getStream(e);if(!t)throw new Ie.ErrnoError(8);Ie.chmod(t.node,r)},chown:(e,r,t,n)=>{var o;"string"==typeof e?o=Ie.lookupPath(e,{follow:!n}).node:o=e;if(!o.node_ops.setattr)throw new Ie.ErrnoError(63);o.node_ops.setattr(o,{timestamp:Date.now()})},lchown:(e,r,t)=>{Ie.chown(e,r,t,!0)},fchown:(e,r,t)=>{var n=Ie.getStream(e);if(!n)throw new Ie.ErrnoError(8);Ie.chown(n.node,r,t)},truncate:(e,r)=>{if(r<0)throw new Ie.ErrnoError(28);var t;"string"==typeof e?t=Ie.lookupPath(e,{follow:!0}).node:t=e;if(!t.node_ops.setattr)throw new Ie.ErrnoError(63);if(Ie.isDir(t.mode))throw new Ie.ErrnoError(31);if(!Ie.isFile(t.mode))throw new Ie.ErrnoError(28);var n=Ie.nodePermissions(t,"w");if(n)throw new Ie.ErrnoError(n);t.node_ops.setattr(t,{size:r,timestamp:Date.now()})},ftruncate:(e,r)=>{var t=Ie.getStream(e);if(!t)throw new Ie.ErrnoError(8);if(0==(2097155&t.flags))throw new Ie.ErrnoError(28);Ie.truncate(t.node,r)},utime:(e,r,t)=>{var n=Ie.lookupPath(e,{follow:!0}).node;n.node_ops.setattr(n,{timestamp:Math.max(r,t)})},open:(e,t,n,o,i)=>{if(""===e)throw new Ie.ErrnoError(44);var a;if(n=void 0===n?438:n,n=64&(t="string"==typeof t?Ie.modeStringToFlags(t):t)?4095&n|32768:0,"object"==typeof e)a=e;else{e=Ae.normalize(e);try{a=Ie.lookupPath(e,{follow:!(131072&t)}).node}catch(e){}}var s=!1;if(64&t)if(a){if(128&t)throw new Ie.ErrnoError(20)}else a=Ie.mknod(e,n,0),s=!0;if(!a)throw new Ie.ErrnoError(44);if(Ie.isChrdev(a.mode)&&(t&=-513),65536&t&&!Ie.isDir(a.mode))throw new Ie.ErrnoError(54);if(!s){var l=Ie.mayOpen(a,t);if(l)throw new Ie.ErrnoError(l)}512&t&&Ie.truncate(a,0),t&=-131713;var u=Ie.createStream({node:a,path:Ie.getPath(a),flags:t,seekable:!0,position:0,stream_ops:a.stream_ops,ungotten:[],error:!1},o,i);return u.stream_ops.open&&u.stream_ops.open(u),!r.logReadFiles||1&t||(Ie.readFiles||(Ie.readFiles={}),e in Ie.readFiles||(Ie.readFiles[e]=1)),u},close:e=>{if(Ie.isClosed(e))throw new Ie.ErrnoError(8);e.getdents&&(e.getdents=null);try{e.stream_ops.close&&e.stream_ops.close(e)}catch(e){throw e}finally{Ie.closeStream(e.fd)}e.fd=null},isClosed:e=>null===e.fd,llseek:(e,r,t)=>{if(Ie.isClosed(e))throw new Ie.ErrnoError(8);if(!e.seekable||!e.stream_ops.llseek)throw new Ie.ErrnoError(70);if(0!=t&&1!=t&&2!=t)throw new Ie.ErrnoError(28);return e.position=e.stream_ops.llseek(e,r,t),e.ungotten=[],e.position},read:(e,r,t,n,o)=>{if(n<0||o<0)throw new Ie.ErrnoError(28);if(Ie.isClosed(e))throw new Ie.ErrnoError(8);if(1==(2097155&e.flags))throw new Ie.ErrnoError(8);if(Ie.isDir(e.node.mode))throw new Ie.ErrnoError(31);if(!e.stream_ops.read)throw new Ie.ErrnoError(28);var i=void 0!==o;if(i){if(!e.seekable)throw new Ie.ErrnoError(70)}else o=e.position;var a=e.stream_ops.read(e,r,t,n,o);return i||(e.position+=a),a},write:(e,r,t,n,o,i)=>{if(n<0||o<0)throw new Ie.ErrnoError(28);if(Ie.isClosed(e))throw new Ie.ErrnoError(8);if(0==(2097155&e.flags))throw new Ie.ErrnoError(8);if(Ie.isDir(e.node.mode))throw new Ie.ErrnoError(31);if(!e.stream_ops.write)throw new Ie.ErrnoError(28);e.seekable&&1024&e.flags&&Ie.llseek(e,0,2);var a=void 0!==o;if(a){if(!e.seekable)throw new Ie.ErrnoError(70)}else o=e.position;var s=e.stream_ops.write(e,r,t,n,o,i);return a||(e.position+=s),s},allocate:(e,r,t)=>{if(Ie.isClosed(e))throw new Ie.ErrnoError(8);if(r<0||t<=0)throw new Ie.ErrnoError(28);if(0==(2097155&e.flags))throw new Ie.ErrnoError(8);if(!Ie.isFile(e.node.mode)&&!Ie.isDir(e.node.mode))throw new Ie.ErrnoError(43);if(!e.stream_ops.allocate)throw new Ie.ErrnoError(138);e.stream_ops.allocate(e,r,t)},mmap:(e,r,t,n,o,i)=>{if(0!=(2&o)&&0==(2&i)&&2!=(2097155&e.flags))throw new Ie.ErrnoError(2);if(1==(2097155&e.flags))throw new Ie.ErrnoError(2);if(!e.stream_ops.mmap)throw new Ie.ErrnoError(43);return e.stream_ops.mmap(e,r,t,n,o,i)},msync:(e,r,t,n,o)=>e&&e.stream_ops.msync?e.stream_ops.msync(e,r,t,n,o):0,munmap:e=>0,ioctl:(e,r,t)=>{if(!e.stream_ops.ioctl)throw new Ie.ErrnoError(59);return e.stream_ops.ioctl(e,r,t)},readFile:function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(r.flags=r.flags||0,r.encoding=r.encoding||"binary","utf8"!==r.encoding&&"binary"!==r.encoding)throw new Error('Invalid encoding type "'+r.encoding+'"');var t,n=Ie.open(e,r.flags),o=Ie.stat(e),i=o.size,a=new Uint8Array(i);return Ie.read(n,a,0,i,0),"utf8"===r.encoding?t=O(a,0):"binary"===r.encoding&&(t=a),Ie.close(n),t},writeFile:function(e,r){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};t.flags=t.flags||577;var n=Ie.open(e,t.flags,t.mode);if("string"==typeof r){var o=new Uint8Array(I(r)+1),i=M(r,o,0,o.length);Ie.write(n,o,0,i,void 0,t.canOwn)}else{if(!ArrayBuffer.isView(r))throw new Error("Unsupported data type");Ie.write(n,r,0,r.byteLength,void 0,t.canOwn)}Ie.close(n)},cwd:()=>Ie.currentPath,chdir:e=>{var r=Ie.lookupPath(e,{follow:!0});if(null===r.node)throw new Ie.ErrnoError(44);if(!Ie.isDir(r.node.mode))throw new Ie.ErrnoError(54);var t=Ie.nodePermissions(r.node,"x");if(t)throw new Ie.ErrnoError(t);Ie.currentPath=r.path},createDefaultDirectories:()=>{Ie.mkdir("/tmp"),Ie.mkdir("/home"),Ie.mkdir("/home/web_user")},createDefaultDevices:()=>{Ie.mkdir("/dev"),Ie.registerDevice(Ie.makedev(1,3),{read:()=>0,write:(e,r,t,n,o)=>n}),Ie.mkdev("/dev/null",Ie.makedev(1,3)),De.register(Ie.makedev(5,0),De.default_tty_ops),De.register(Ie.makedev(6,0),De.default_tty1_ops),Ie.mkdev("/dev/tty",Ie.makedev(5,0)),Ie.mkdev("/dev/tty1",Ie.makedev(6,0));var e=function(){if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues){var e=new Uint8Array(1);return function(){return crypto.getRandomValues(e),e[0]}}if(u)try{var r=a.default;return function(){return r.randomBytes(1)[0]}}catch(e){}return function(){ge("no cryptographic support found for randomDevice. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: function(array) { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };")}}();Ie.createDevice("/dev","random",e),Ie.createDevice("/dev","urandom",e),Ie.mkdir("/dev/shm"),Ie.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{Ie.mkdir("/proc");var e=Ie.mkdir("/proc/self");Ie.mkdir("/proc/self/fd"),Ie.mount({mount:()=>{var r=Ie.createNode(e,"fd",16895,73);return r.node_ops={lookup:(e,r)=>{var t=+r,n=Ie.getStream(t);if(!n)throw new Ie.ErrnoError(8);var o={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>n.path}};return o.parent=o,o}},r}},{},"/proc/self/fd")},createStandardStreams:()=>{r.stdin?Ie.createDevice("/dev","stdin",r.stdin):Ie.symlink("/dev/tty","/dev/stdin"),r.stdout?Ie.createDevice("/dev","stdout",null,r.stdout):Ie.symlink("/dev/tty","/dev/stdout"),r.stderr?Ie.createDevice("/dev","stderr",null,r.stderr):Ie.symlink("/dev/tty1","/dev/stderr");var e=Ie.open("/dev/stdin",0),t=Ie.open("/dev/stdout",1),n=Ie.open("/dev/stderr",1);F(0===e.fd,"invalid handle for stdin ("+e.fd+")"),F(1===t.fd,"invalid handle for stdout ("+t.fd+")"),F(2===n.fd,"invalid handle for stderr ("+n.fd+")")},ensureErrnoError:()=>{Ie.ErrnoError||(Ie.ErrnoError=function(e,r){this.node=r,this.setErrno=function(e){for(var r in this.errno=e,Ne)if(Ne[r]===e){this.code=r;break}},this.setErrno(e),this.message=Me[e],this.stack&&(Object.defineProperty(this,"stack",{value:(new Error).stack,writable:!0}),this.stack=Se(this.stack))},Ie.ErrnoError.prototype=new Error,Ie.ErrnoError.prototype.constructor=Ie.ErrnoError,[44].forEach((e=>{Ie.genericErrors[e]=new Ie.ErrnoError(e),Ie.genericErrors[e].stack="<generic error, no stack>"})))},staticInit:()=>{Ie.ensureErrnoError(),Ie.nameTable=new Array(4096),Ie.mount(Re,{},"/"),Ie.createDefaultDirectories(),Ie.createDefaultDevices(),Ie.createSpecialDirectories(),Ie.filesystems={MEMFS:Re}},init:(e,t,n)=>{F(!Ie.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)"),Ie.init.initialized=!0,Ie.ensureErrnoError(),r.stdin=e||r.stdin,r.stdout=t||r.stdout,r.stderr=n||r.stderr,Ie.createStandardStreams()},quit:()=>{Ie.init.initialized=!1,wt();for(var e=0;e<Ie.streams.length;e++){var r=Ie.streams[e];r&&Ie.close(r)}},getMode:(e,r)=>{var t=0;return e&&(t|=365),r&&(t|=146),t},findObject:(e,r)=>{var t=Ie.analyzePath(e,r);return t.exists?t.object:null},analyzePath:(e,r)=>{try{e=(n=Ie.lookupPath(e,{follow:!r})).path}catch(e){}var t={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var n=Ie.lookupPath(e,{parent:!0});t.parentExists=!0,t.parentPath=n.path,t.parentObject=n.node,t.name=Ae.basename(e),n=Ie.lookupPath(e,{follow:!r}),t.exists=!0,t.path=n.path,t.object=n.node,t.name=n.node.name,t.isRoot="/"===n.path}catch(e){t.error=e.errno}return t},createPath:(e,r,t,n)=>{e="string"==typeof e?e:Ie.getPath(e);for(var o=r.split("/").reverse();o.length;){var i=o.pop();if(i){var a=Ae.join2(e,i);try{Ie.mkdir(a)}catch(e){}e=a}}return a},createFile:(e,r,t,n,o)=>{var i=Ae.join2("string"==typeof e?e:Ie.getPath(e),r),a=Ie.getMode(n,o);return Ie.create(i,a)},createDataFile:(e,r,t,n,o,i)=>{var a=r;e&&(e="string"==typeof e?e:Ie.getPath(e),a=r?Ae.join2(e,r):e);var s=Ie.getMode(n,o),l=Ie.create(a,s);if(t){if("string"==typeof t){for(var u=new Array(t.length),c=0,d=t.length;c<d;++c)u[c]=t.charCodeAt(c);t=u}Ie.chmod(l,146|s);var f=Ie.open(l,577);Ie.write(f,t,0,t.length,0,i),Ie.close(f),Ie.chmod(l,s)}return l},createDevice:(e,r,t,n)=>{var o=Ae.join2("string"==typeof e?e:Ie.getPath(e),r),i=Ie.getMode(!!t,!!n);Ie.createDevice.major||(Ie.createDevice.major=64);var a=Ie.makedev(Ie.createDevice.major++,0);return Ie.registerDevice(a,{open:e=>{e.seekable=!1},close:e=>{n&&n.buffer&&n.buffer.length&&n(10)},read:(e,r,n,o,i)=>{for(var a=0,s=0;s<o;s++){var l;try{l=t()}catch(e){throw new Ie.ErrnoError(29)}if(void 0===l&&0===a)throw new Ie.ErrnoError(6);if(null==l)break;a++,r[n+s]=l}return a&&(e.node.timestamp=Date.now()),a},write:(e,r,t,o,i)=>{for(var a=0;a<o;a++)try{n(r[t+a])}catch(e){throw new Ie.ErrnoError(29)}return o&&(e.node.timestamp=Date.now()),a}}),Ie.mkdev(o,i,a)},forceLoadFile:e=>{if(e.isDevice||e.isFolder||e.link||e.contents)return!0;if("undefined"!=typeof XMLHttpRequest)throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");if(!d)throw new Error("Cannot load without read() or XMLHttpRequest.");try{e.contents=pt(d(e.url),!0),e.usedBytes=e.contents.length}catch(e){throw new Ie.ErrnoError(29)}},createLazyFile:(e,r,t,n,o)=>{function i(){this.lengthKnown=!1,this.chunks=[]}if(i.prototype.get=function(e){if(!(e>this.length-1||e<0)){var r=e%this.chunkSize,t=e/this.chunkSize|0;return this.getter(t)[r]}},i.prototype.setDataGetter=function(e){this.getter=e},i.prototype.cacheLength=function(){var e=new XMLHttpRequest;if(e.open("HEAD",t,!1),e.send(null),!(e.status>=200&&e.status<300||304===e.status))throw new Error("Couldn't load "+t+". Status: "+e.status);var r,n=Number(e.getResponseHeader("Content-length")),o=(r=e.getResponseHeader("Accept-Ranges"))&&"bytes"===r,i=(r=e.getResponseHeader("Content-Encoding"))&&"gzip"===r,a=1048576;o||(a=n);var s=this;s.setDataGetter((e=>{var r=e*a,o=(e+1)*a-1;if(o=Math.min(o,n-1),void 0===s.chunks[e]&&(s.chunks[e]=((e,r)=>{if(e>r)throw new Error("invalid range ("+e+", "+r+") or no bytes requested!");if(r>n-1)throw new Error("only "+n+" bytes available! programmer error!");var o=new XMLHttpRequest;if(o.open("GET",t,!1),n!==a&&o.setRequestHeader("Range","bytes="+e+"-"+r),o.responseType="arraybuffer",o.overrideMimeType&&o.overrideMimeType("text/plain; charset=x-user-defined"),o.send(null),!(o.status>=200&&o.status<300||304===o.status))throw new Error("Couldn't load "+t+". Status: "+o.status);return void 0!==o.response?new Uint8Array(o.response||[]):pt(o.responseText||"",!0)})(r,o)),void 0===s.chunks[e])throw new Error("doXHR failed!");return s.chunks[e]})),!i&&n||(a=n=1,n=this.getter(0).length,a=n,b("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=n,this._chunkSize=a,this.lengthKnown=!0},"undefined"!=typeof XMLHttpRequest){if(!l)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var a=new i;Object.defineProperties(a,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var s={isDevice:!1,contents:a}}else s={isDevice:!1,url:t};var u=Ie.createFile(e,r,s,n,o);s.contents?u.contents=s.contents:s.url&&(u.contents=null,u.url=s.url),Object.defineProperties(u,{usedBytes:{get:function(){return this.contents.length}}});var c={};return Object.keys(u.stream_ops).forEach((e=>{var r=u.stream_ops[e];c[e]=function(){return Ie.forceLoadFile(u),r.apply(null,arguments)}})),c.read=(e,r,t,n,o)=>{Ie.forceLoadFile(u);var i=e.node.contents;if(o>=i.length)return 0;var a=Math.min(i.length-o,n);if(F(a>=0),i.slice)for(var s=0;s<a;s++)r[t+s]=i[o+s];else for(s=0;s<a;s++)r[t+s]=i.get(o+s);return a},u.stream_ops=c,u},createPreloadedFile:(e,r,t,n,o,i,a,s,l,u)=>{var c=r?Fe.resolve(Ae.join2(e,r)):e,d=pe("cp "+c);function p(t){function f(t){u&&u(),s||Ie.createDataFile(e,r,t,n,o,l),i&&i(),he(d)}Browser.handledByPreloadPlugin(t,c,f,(()=>{a&&a(),he(d)}))||f(t)}me(d),"string"==typeof t?function(e,r,t,n){var o=n?"":pe("al "+e);f(e,(function(t){F(t,'Loading data file "'+e+'" failed (no arrayBuffer).'),r(new Uint8Array(t)),o&&he(o)}),(function(r){if(!t)throw'Loading data file "'+e+'" failed.';t()})),o&&me(o)}(t,(e=>p(e)),a):p(t)},indexedDB:()=>window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB,DB_NAME:()=>"EM_FS_"+window.location.pathname,DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(e,r,t)=>{r=r||(()=>{}),t=t||(()=>{});var n=Ie.indexedDB();try{var o=n.open(Ie.DB_NAME(),Ie.DB_VERSION)}catch(e){return t(e)}o.onupgradeneeded=()=>{b("creating db"),o.result.createObjectStore(Ie.DB_STORE_NAME)},o.onsuccess=()=>{var n=o.result.transaction([Ie.DB_STORE_NAME],"readwrite"),i=n.objectStore(Ie.DB_STORE_NAME),a=0,s=0,l=e.length;function u(){0==s?r():t()}e.forEach((e=>{var r=i.put(Ie.analyzePath(e).object.contents,e);r.onsuccess=()=>{++a+s==l&&u()},r.onerror=()=>{s++,a+s==l&&u()}})),n.onerror=t},o.onerror=t},loadFilesFromDB:(e,r,t)=>{r=r||(()=>{}),t=t||(()=>{});var n=Ie.indexedDB();try{var o=n.open(Ie.DB_NAME(),Ie.DB_VERSION)}catch(e){return t(e)}o.onupgradeneeded=t,o.onsuccess=()=>{var n=o.result;try{var i=n.transaction([Ie.DB_STORE_NAME],"readonly")}catch(e){return void t(e)}var a=i.objectStore(Ie.DB_STORE_NAME),s=0,l=0,u=e.length;function c(){0==l?r():t()}e.forEach((e=>{var r=a.get(e);r.onsuccess=()=>{Ie.analyzePath(e).exists&&Ie.unlink(e),Ie.createDataFile(Ae.dirname(e),Ae.basename(e),r.result,!0,!0,!0),++s+l==u&&c()},r.onerror=()=>{l++,s+l==u&&c()}})),i.onerror=t},o.onerror=t},absolutePath:()=>{ge("FS.absolutePath has been removed; use PATH_FS.resolve instead")},createFolder:()=>{ge("FS.createFolder has been removed; use FS.mkdir instead")},createLink:()=>{ge("FS.createLink has been removed; use FS.symlink instead")},joinPath:()=>{ge("FS.joinPath has been removed; use PATH.join instead")},mmapAlloc:()=>{ge("FS.mmapAlloc has been replaced by the top level function mmapAlloc")},standardizePath:()=>{ge("FS.standardizePath has been removed; use PATH.normalize instead")}},Le={DEFAULT_POLLMASK:5,calculateAt:function(e,r,t){if(Ae.isAbs(r))return r;var n;if(-100===e)n=Ie.cwd();else{var o=Ie.getStream(e);if(!o)throw new Ie.ErrnoError(8);n=o.path}if(0==r.length){if(!t)throw new Ie.ErrnoError(44);return n}return Ae.join2(n,r)},doStat:function(e,r,t){try{var n=e(r)}catch(e){if(e&&e.node&&Ae.normalize(r)!==Ae.normalize(Ie.getPath(e.node)))return-54;throw e}return $[t>>2]=n.dev,$[t+4>>2]=0,$[t+8>>2]=n.ino,$[t+12>>2]=n.mode,$[t+16>>2]=n.nlink,$[t+20>>2]=n.uid,$[t+24>>2]=n.gid,$[t+28>>2]=n.rdev,$[t+32>>2]=0,Ee=[n.size>>>0,(ye=n.size,+Math.abs(ye)>=1?ye>0?(0|Math.min(+Math.floor(ye/4294967296),4294967295))>>>0:~~+Math.ceil((ye-+(~~ye>>>0))/4294967296)>>>0:0)],$[t+40>>2]=Ee[0],$[t+44>>2]=Ee[1],$[t+48>>2]=4096,$[t+52>>2]=n.blocks,$[t+56>>2]=n.atime.getTime()/1e3|0,$[t+60>>2]=0,$[t+64>>2]=n.mtime.getTime()/1e3|0,$[t+68>>2]=0,$[t+72>>2]=n.ctime.getTime()/1e3|0,$[t+76>>2]=0,Ee=[n.ino>>>0,(ye=n.ino,+Math.abs(ye)>=1?ye>0?(0|Math.min(+Math.floor(ye/4294967296),4294967295))>>>0:~~+Math.ceil((ye-+(~~ye>>>0))/4294967296)>>>0:0)],$[t+80>>2]=Ee[0],$[t+84>>2]=Ee[1],0},doMsync:function(e,r,t,n,o){var i=U.slice(e,e+t);Ie.msync(r,i,o,t,n)},doMknod:function(e,r,t){switch(61440&r){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return Ie.mknod(e,r,t),0},doReadlink:function(e,r,t){if(t<=0)return-28;var n=Ie.readlink(e),o=Math.min(t,I(n)),i=x[r+o];return N(n,r,t+1),x[r+o]=i,o},doAccess:function(e,r){if(-8&r)return-28;var t=Ie.lookupPath(e,{follow:!0}).node;if(!t)return-44;var n="";return 4&r&&(n+="r"),2&r&&(n+="w"),1&r&&(n+="x"),n&&Ie.nodePermissions(t,n)?-2:0},doReadv:function(e,r,t,n){for(var o=0,i=0;i<t;i++){var a=$[r>>2],s=$[r+4>>2];r+=8;var l=Ie.read(e,x,a,s,n);if(l<0)return-1;if(o+=l,l<s)break}return o},doWritev:function(e,r,t,n){for(var o=0,i=0;i<t;i++){var a=$[r>>2],s=$[r+4>>2];r+=8;var l=Ie.write(e,x,a,s,n);if(l<0)return-1;o+=l}return o},varargs:void 0,get:function(){return F(null!=Le.varargs),Le.varargs+=4,$[Le.varargs-4>>2]},getStr:function(e){return R(e)},getStreamFromFD:function(e){var r=Ie.getStream(e);if(!r)throw new Ie.ErrnoError(8);return r}};function xe(e){switch(e){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+e)}}var Ue=void 0;function Be(e){for(var r="",t=e;U[t];)r+=Ue[U[t++]];return r}var je={},$e={},We={};function ze(e){if(void 0===e)return"_unknown";var r=(e=e.replace(/[^a-zA-Z0-9_]/g,"$")).charCodeAt(0);return r>=48&&r<=57?"_"+e:e}function He(e,r){return e=ze(e),new Function("body","return function "+e+'() {\n "use strict"; return body.apply(this, arguments);\n};\n')(r)}function Ge(e,r){var t=He(r,(function(e){this.name=r,this.message=e;var t=new Error(e).stack;void 0!==t&&(this.stack=this.toString()+"\n"+t.replace(/^Error(:[^\n]*)?\n/,""))}));return t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message},t}var Ve=void 0;function Ye(e){throw new Ve(e)}var qe=void 0;function Xe(e){throw new qe(e)}function Ke(e,r,t){function n(r){var n=t(r);n.length!==e.length&&Xe("Mismatched type converter count");for(var o=0;o<e.length;++o)Je(e[o],n[o])}e.forEach((function(e){We[e]=r}));var o=new Array(r.length),i=[],a=0;r.forEach(((e,r)=>{$e.hasOwnProperty(e)?o[r]=$e[e]:(i.push(e),je.hasOwnProperty(e)||(je[e]=[]),je[e].push((()=>{o[r]=$e[e],++a===i.length&&n(o)})))})),0===i.length&&n(o)}function Je(e,r){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!("argPackAdvance"in r))throw new TypeError("registerType registeredInstance requires argPackAdvance");var n=r.name;if(e||Ye('type "'+n+'" must have a positive integer typeid pointer'),$e.hasOwnProperty(e)){if(t.ignoreDuplicateRegistrations)return;Ye("Cannot register type '"+n+"' twice")}if($e[e]=r,delete We[e],je.hasOwnProperty(e)){var o=je[e];delete je[e],o.forEach((e=>e()))}}function Qe(e){if(!(this instanceof wr))return!1;if(!(e instanceof wr))return!1;for(var r=this.$$.ptrType.registeredClass,t=this.$$.ptr,n=e.$$.ptrType.registeredClass,o=e.$$.ptr;r.baseClass;)t=r.upcast(t),r=r.baseClass;for(;n.baseClass;)o=n.upcast(o),n=n.baseClass;return r===n&&t===o}function Ze(e){Ye(e.$$.ptrType.registeredClass.name+" instance already deleted")}var er=!1;function rr(e){}function tr(e){e.count.value-=1,0===e.count.value&&function(e){e.smartPtr?e.smartPtrType.rawDestructor(e.smartPtr):e.ptrType.registeredClass.rawDestructor(e.ptr)}(e)}function nr(e,r,t){if(r===t)return e;if(void 0===t.baseClass)return null;var n=nr(e,r,t.baseClass);return null===n?null:t.downcast(n)}var or={};function ir(){return Object.keys(dr).length}function ar(){var e=[];for(var r in dr)dr.hasOwnProperty(r)&&e.push(dr[r]);return e}var sr=[];function lr(){for(;sr.length;){var e=sr.pop();e.$$.deleteScheduled=!1,e.delete()}}var ur=void 0;function cr(e){ur=e,sr.length&&ur&&ur(lr)}var dr={};function fr(e,r){return r=function(e,r){for(void 0===r&&Ye("ptr should not be undefined");e.baseClass;)r=e.upcast(r),e=e.baseClass;return r}(e,r),dr[r]}function pr(e,r){return r.ptrType&&r.ptr||Xe("makeClassHandle requires ptr and ptrType"),!!r.smartPtrType!==!!r.smartPtr&&Xe("Both smartPtrType and smartPtr must be specified"),r.count={value:1},hr(Object.create(e,{$$:{value:r}}))}function mr(e){var r=this.getPointee(e);if(!r)return this.destructor(e),null;var t=fr(this.registeredClass,r);if(void 0!==t){if(0===t.$$.count.value)return t.$$.ptr=r,t.$$.smartPtr=e,t.clone();var n=t.clone();return this.destructor(e),n}function o(){return this.isSmartPointer?pr(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:r,smartPtrType:this,smartPtr:e}):pr(this.registeredClass.instancePrototype,{ptrType:this,ptr:e})}var i,a=this.registeredClass.getActualType(r),s=or[a];if(!s)return o.call(this);i=this.isConst?s.constPointerType:s.pointerType;var l=nr(r,this.registeredClass,i.registeredClass);return null===l?o.call(this):this.isSmartPointer?pr(i.registeredClass.instancePrototype,{ptrType:i,ptr:l,smartPtrType:this,smartPtr:e}):pr(i.registeredClass.instancePrototype,{ptrType:i,ptr:l})}function hr(e){return"undefined"==typeof FinalizationRegistry?(hr=e=>e,e):(er=new FinalizationRegistry((e=>{console.warn(e.leakWarning.stack.replace(/^Error: /,"")),tr(e.$$)})),hr=e=>{var r=e.$$;if(!!r.smartPtr){var t={$$:r},n=r.ptrType.registeredClass;t.leakWarning=new Error("Embind found a leaked C++ instance "+n.name+" <0x"+r.ptr.toString(16)+">.\nWe'll free it automatically in this case, but this functionality is not reliable across various environments.\nMake sure to invoke .delete() manually once you're done with the instance instead.\nOriginally allocated"),"captureStackTrace"in Error&&Error.captureStackTrace(t.leakWarning,mr),er.register(e,t,e)}return e},rr=e=>er.unregister(e),hr(e))}function gr(){if(this.$$.ptr||Ze(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var e,r=hr(Object.create(Object.getPrototypeOf(this),{$$:{value:(e=this.$$,{count:e.count,deleteScheduled:e.deleteScheduled,preservePointerOnDelete:e.preservePointerOnDelete,ptr:e.ptr,ptrType:e.ptrType,smartPtr:e.smartPtr,smartPtrType:e.smartPtrType})}}));return r.$$.count.value+=1,r.$$.deleteScheduled=!1,r}function vr(){this.$$.ptr||Ze(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&Ye("Object already scheduled for deletion"),rr(this),tr(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)}function yr(){return!this.$$.ptr}function Er(){return this.$$.ptr||Ze(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&Ye("Object already scheduled for deletion"),sr.push(this),1===sr.length&&ur&&ur(lr),this.$$.deleteScheduled=!0,this}function wr(){}function br(e,r,t){if(void 0===e[r].overloadTable){var n=e[r];e[r]=function(){return e[r].overloadTable.hasOwnProperty(arguments.length)||Ye("Function '"+t+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+e[r].overloadTable+")!"),e[r].overloadTable[arguments.length].apply(this,arguments)},e[r].overloadTable=[],e[r].overloadTable[n.argCount]=n}}function _r(e,r,t,n,o,i,a,s){this.name=e,this.constructor=r,this.instancePrototype=t,this.rawDestructor=n,this.baseClass=o,this.getActualType=i,this.upcast=a,this.downcast=s,this.pureVirtualFunctions=[]}function Tr(e,r,t){for(;r!==t;)r.upcast||Ye("Expected null or instance of "+t.name+", got an instance of "+r.name),e=r.upcast(e),r=r.baseClass;return e}function kr(e,r){if(null===r)return this.isReference&&Ye("null is not a valid "+this.name),0;r.$$||Ye('Cannot pass "'+qr(r)+'" as a '+this.name),r.$$.ptr||Ye("Cannot pass deleted object as a pointer of type "+this.name);var t=r.$$.ptrType.registeredClass;return Tr(r.$$.ptr,t,this.registeredClass)}function Sr(e,r){var t;if(null===r)return this.isReference&&Ye("null is not a valid "+this.name),this.isSmartPointer?(t=this.rawConstructor(),null!==e&&e.push(this.rawDestructor,t),t):0;r.$$||Ye('Cannot pass "'+qr(r)+'" as a '+this.name),r.$$.ptr||Ye("Cannot pass deleted object as a pointer of type "+this.name),!this.isConst&&r.$$.ptrType.isConst&&Ye("Cannot convert argument of type "+(r.$$.smartPtrType?r.$$.smartPtrType.name:r.$$.ptrType.name)+" to parameter type "+this.name);var n=r.$$.ptrType.registeredClass;if(t=Tr(r.$$.ptr,n,this.registeredClass),this.isSmartPointer)switch(void 0===r.$$.smartPtr&&Ye("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:r.$$.smartPtrType===this?t=r.$$.smartPtr:Ye("Cannot convert argument of type "+(r.$$.smartPtrType?r.$$.smartPtrType.name:r.$$.ptrType.name)+" to parameter type "+this.name);break;case 1:t=r.$$.smartPtr;break;case 2:if(r.$$.smartPtrType===this)t=r.$$.smartPtr;else{var o=r.clone();t=this.rawShare(t,Yr.toHandle((function(){o.delete()}))),null!==e&&e.push(this.rawDestructor,t)}break;default:Ye("Unsupporting sharing policy")}return t}function Cr(e,r){if(null===r)return this.isReference&&Ye("null is not a valid "+this.name),0;r.$$||Ye('Cannot pass "'+qr(r)+'" as a '+this.name),r.$$.ptr||Ye("Cannot pass deleted object as a pointer of type "+this.name),r.$$.ptrType.isConst&&Ye("Cannot convert argument of type "+r.$$.ptrType.name+" to parameter type "+this.name);var t=r.$$.ptrType.registeredClass;return Tr(r.$$.ptr,t,this.registeredClass)}function Pr(e){return this.fromWireType(W[e>>2])}function Ar(e){return this.rawGetPointee&&(e=this.rawGetPointee(e)),e}function Fr(e){this.rawDestructor&&this.rawDestructor(e)}function Dr(e){null!==e&&e.delete()}function Or(e,r,t,n,o,i,a,s,l,u,c){this.name=e,this.registeredClass=r,this.isReference=t,this.isConst=n,this.isSmartPointer=o,this.pointeeType=i,this.sharingPolicy=a,this.rawGetPointee=s,this.rawConstructor=l,this.rawShare=u,this.rawDestructor=c,o||void 0!==r.baseClass?this.toWireType=Sr:n?(this.toWireType=kr,this.destructorFunction=null):(this.toWireType=Cr,this.destructorFunction=null)}function Rr(e,t,n){return e.includes("j")?function(e,t,n){F("dynCall_"+e in r,"bad function pointer type - no table for sig '"+e+"'"),n&&n.length?F(n.length===e.substring(1).replace(/j/g,"--").length):F(1==e.length);var o=r["dynCall_"+e];return n&&n.length?o.apply(null,[t].concat(n)):o.call(null,t)}(e,t,n):(F(Ce(t),"missing table entry in dynCall: "+t),Ce(t).apply(null,n))}function Mr(e,r){var t=(e=Be(e)).includes("j")?function(e,r){F(e.includes("j"),"getDynCaller should only be called with i64 sigs");var t=[];return function(){return t.length=0,Object.assign(t,arguments),Rr(e,r,t)}}(e,r):Ce(r);return"function"!=typeof t&&Ye("unknown function pointer with signature "+e+": "+r),t}var Nr=void 0;function Ir(e){var r=Et(e),t=Be(r);return ht(r),t}function Lr(e,r){var t=[],n={};throw r.forEach((function e(r){n[r]||$e[r]||(We[r]?We[r].forEach(e):(t.push(r),n[r]=!0))})),new Nr(e+": "+t.map(Ir).join([", "]))}function xr(e,r){for(var t=[],n=0;n<e;n++)t.push($[(r>>2)+n]);return t}function Ur(e){for(;e.length;){var r=e.pop();e.pop()(r)}}function Br(e,r){if(!(e instanceof Function))throw new TypeError("new_ called with constructor type "+typeof e+" which is not a function");var t=He(e.name||"unknownFunctionName",(function(){}));t.prototype=e.prototype;var n=new t,o=e.apply(n,r);return o instanceof Object?o:n}function jr(e,r,t,n,o){var i=r.length;i<2&&Ye("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var a=null!==r[1]&&null!==t,s=!1,l=1;l<r.length;++l)if(null!==r[l]&&void 0===r[l].destructorFunction){s=!0;break}var u="void"!==r[0].name,c="",d="";for(l=0;l<i-2;++l)c+=(0!==l?", ":"")+"arg"+l,d+=(0!==l?", ":"")+"arg"+l+"Wired";var f="return function "+ze(e)+"("+c+") {\nif (arguments.length !== "+(i-2)+") {\nthrowBindingError('function "+e+" called with ' + arguments.length + ' arguments, expected "+(i-2)+" args!');\n}\n";s&&(f+="var destructors = [];\n");var p=s?"destructors":"null",m=["throwBindingError","invoker","fn","runDestructors","retType","classParam"],h=[Ye,n,o,Ur,r[0],r[1]];a&&(f+="var thisWired = classParam.toWireType("+p+", this);\n");for(l=0;l<i-2;++l)f+="var arg"+l+"Wired = argType"+l+".toWireType("+p+", arg"+l+"); // "+r[l+2].name+"\n",m.push("argType"+l),h.push(r[l+2]);if(a&&(d="thisWired"+(d.length>0?", ":"")+d),f+=(u?"var rv = ":"")+"invoker(fn"+(d.length>0?", ":"")+d+");\n",s)f+="runDestructors(destructors);\n";else for(l=a?1:2;l<r.length;++l){var g=1===l?"thisWired":"arg"+(l-2)+"Wired";null!==r[l].destructorFunction&&(f+=g+"_dtor("+g+"); // "+r[l].name+"\n",m.push(g+"_dtor"),h.push(r[l].destructorFunction))}return u&&(f+="var ret = retType.fromWireType(rv);\nreturn ret;\n"),f+="}\n",m.push(f),Br(Function,m).apply(null,h)}function $r(e,r,t){return e instanceof Object||Ye(t+' with invalid "this": '+e),e instanceof r.registeredClass.constructor||Ye(t+' incompatible with "this" of type '+e.constructor.name),e.$$.ptr||Ye("cannot call emscripten binding method "+t+" on deleted object"),Tr(e.$$.ptr,e.$$.ptrType.registeredClass,r.registeredClass)}var Wr=[],zr=[{},{value:void 0},{value:null},{value:!0},{value:!1}];function Hr(e){e>4&&0==--zr[e].refcount&&(zr[e]=void 0,Wr.push(e))}function Gr(){for(var e=0,r=5;r<zr.length;++r)void 0!==zr[r]&&++e;return e}function Vr(){for(var e=5;e<zr.length;++e)if(void 0!==zr[e])return zr[e];return null}var Yr={toValue:e=>(e||Ye("Cannot use deleted val. handle = "+e),zr[e].value),toHandle:e=>{switch(e){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:var r=Wr.length?Wr.pop():zr.length;return zr[r]={refcount:1,value:e},r}}};function qr(e){if(null===e)return"null";var r=typeof e;return"object"===r||"array"===r||"function"===r?e.toString():""+e}function Xr(e,r){switch(r){case 2:return function(e){return this.fromWireType(z[e>>2])};case 3:return function(e){return this.fromWireType(H[e>>3])};default:throw new TypeError("Unknown float type: "+e)}}function Kr(e,r,t){switch(r){case 0:return t?function(e){return x[e]}:function(e){return U[e]};case 1:return t?function(e){return B[e>>1]}:function(e){return j[e>>1]};case 2:return t?function(e){return $[e>>2]}:function(e){return W[e>>2]};default:throw new TypeError("Unknown integer type: "+e)}}function Jr(e,r){var t=$e[e];return void 0===t&&Ye(r+" has unknown type "+Ir(e)),t}var Qr={};var Zr=[];var et=[];function rt(e,r){return F(r===(0|r)),(e>>>0)+4294967296*r}function tt(e,r){if(e<=0)return e;var t=r<=32?Math.abs(1<<r-1):Math.pow(2,r-1);return e>=t&&(r<=32||e>t)&&(e=-2*t+e),e}function nt(e,r){return e>=0?e:r<=32?2*Math.abs(1<<r-1)+e:Math.pow(2,r)+e}function ot(e,r){F(0==(3&r));var t=e,n=r;function o(e){var r;return n=function(e,r){return"double"===r||"i64"===r?7&e&&(F(4==(7&e)),e+=4):F(0==(3&e)),e}(n,e),"double"===e?(r=Number(H[n>>3]),n+=8):"i64"==e?(r=[$[n>>2],$[n+4>>2]],n+=8):(F(0==(3&n)),e="i32",r=$[n>>2],n+=4),r}for(var i,a,s,l,u,c,d=[];;){var f=t;if(0===(i=x[t>>0]))break;if(a=x[t+1>>0],37==i){var p=!1,m=!1,h=!1,g=!1,v=!1;e:for(;;){switch(a){case 43:p=!0;break;case 45:m=!0;break;case 35:h=!0;break;case 48:if(g)break e;g=!0;break;case 32:v=!0;break;default:break e}t++,a=x[t+1>>0]}var y=0;if(42==a)y=o("i32"),t++,a=x[t+1>>0];else for(;a>=48&&a<=57;)y=10*y+(a-48),t++,a=x[t+1>>0];var E,w=!1,b=-1;if(46==a){if(b=0,w=!0,t++,42==(a=x[t+1>>0]))b=o("i32"),t++;else for(;;){var _=x[t+1>>0];if(_<48||_>57)break;b=10*b+(_-48),t++}a=x[t+1>>0]}switch(b<0&&(b=6,w=!1),String.fromCharCode(a)){case"h":104==x[t+2>>0]?(t++,E=1):E=2;break;case"l":108==x[t+2>>0]?(t++,E=8):E=4;break;case"L":case"q":case"j":E=8;break;case"z":case"t":case"I":E=4;break;default:E=null}switch(E&&t++,a=x[t+1>>0],String.fromCharCode(a)){case"d":case"i":case"u":case"o":case"x":case"X":case"p":var T=100==a||105==a;if(s=o("i"+8*(E=E||4)),8==E&&(s=117==a?(u=s[0],c=s[1],(u>>>0)+4294967296*(c>>>0)):rt(s[0],s[1])),E<=4)s=(T?tt:nt)(s&Math.pow(256,E)-1,8*E);var k=Math.abs(s),S="";if(100==a||105==a)A=tt(s,8*E).toString(10);else if(117==a)A=nt(s,8*E).toString(10),s=Math.abs(s);else if(111==a)A=(h?"0":"")+k.toString(8);else if(120==a||88==a){if(S=h&&0!=s?"0x":"",s<0){s=-s,A=(k-1).toString(16);for(var C=[],P=0;P<A.length;P++)C.push((15-parseInt(A[P],16)).toString(16));for(A=C.join("");A.length<2*E;)A="f"+A}else A=k.toString(16);88==a&&(S=S.toUpperCase(),A=A.toUpperCase())}else 112==a&&(0===k?A="(nil)":(S="0x",A=k.toString(16)));if(w)for(;A.length<b;)A="0"+A;for(s>=0&&(p?S="+"+S:v&&(S=" "+S)),"-"==A.charAt(0)&&(S="-"+S,A=A.substr(1));S.length+A.length<y;)m?A+=" ":g?A="0"+A:S=" "+S;(A=S+A).split("").forEach((function(e){d.push(e.charCodeAt(0))}));break;case"f":case"F":case"e":case"E":case"g":case"G":var A;if(s=o("double"),isNaN(s))A="nan",g=!1;else if(isFinite(s)){var D=!1,O=Math.min(b,20);if(103==a||71==a){D=!0,b=b||1;var R=parseInt(s.toExponential(O).split("e")[1],10);b>R&&R>=-4?(a=(103==a?"f":"F").charCodeAt(0),b-=R+1):(a=(103==a?"e":"E").charCodeAt(0),b--),O=Math.min(b,20)}101==a||69==a?(A=s.toExponential(O),/[eE][-+]\d$/.test(A)&&(A=A.slice(0,-1)+"0"+A.slice(-1))):102!=a&&70!=a||(A=s.toFixed(O),0===s&&((l=s)<0||0===l&&1/l==-1/0)&&(A="-"+A));var M=A.split("e");if(D&&!h)for(;M[0].length>1&&M[0].includes(".")&&("0"==M[0].slice(-1)||"."==M[0].slice(-1));)M[0]=M[0].slice(0,-1);else for(h&&-1==A.indexOf(".")&&(M[0]+=".");b>O++;)M[0]+="0";A=M[0]+(M.length>1?"e"+M[1]:""),69==a&&(A=A.toUpperCase()),s>=0&&(p?A="+"+A:v&&(A=" "+A))}else A=(s<0?"-":"")+"inf",g=!1;for(;A.length<y;)m?A+=" ":A=!g||"-"!=A[0]&&"+"!=A[0]?(g?"0":" ")+A:A[0]+"0"+A.slice(1);a<97&&(A=A.toUpperCase()),A.split("").forEach((function(e){d.push(e.charCodeAt(0))}));break;case"s":var N=o("i8*"),I=N?vt(N):"(null)".length;if(w&&(I=Math.min(I,b)),!m)for(;I<y--;)d.push(32);if(N)for(P=0;P<I;P++)d.push(U[N++>>0]);else d=d.concat(pt("(null)".substr(0,I),!0));if(m)for(;I<y--;)d.push(32);break;case"c":for(m&&d.push(o("i8"));--y>0;)d.push(32);m||d.push(o("i8"));break;case"n":var L=o("i32*");$[L>>2]=d.length;break;case"%":d.push(i);break;default:for(P=f;P<t+2;P++)d.push(x[P>>0])}t+=2}else d.push(i),t+=1}return d}function it(e){if(!e||!e.callee||!e.callee.name)return[null,"",""];e.callee.toString();var r=e.callee.name,t="(",n=!0;for(var o in e){var i=e[o];n||(t+=", "),n=!1,t+="number"==typeof i||"string"==typeof i?i:"("+typeof i+")"}t+=")";var a=e.callee.caller;return n&&(t=""),[e=a?a.arguments:[],r,t]}function at(e,r){24&e&&(r=r.replace(/\s+$/,""),r+=(r.length>0?"\n":"")+function(e){var r=Pe(),t=r.lastIndexOf("_emscripten_log"),n=r.lastIndexOf("_emscripten_get_callstack"),o=r.indexOf("\n",Math.max(t,n))+1;r=r.slice(o),32&e&&T("EM_LOG_DEMANGLE is deprecated; ignoring"),8&e&&"undefined"==typeof emscripten_source_map&&(T('Source map information is not available, emscripten_log with EM_LOG_C_STACK will be ignored. Build with "--pre-js $EMSCRIPTEN/src/emscripten-source-map.min.js" linker flag to add source map loading to code.'),e^=8,e|=16);var i=null;if(128&e)for(i=it(arguments);i[1].includes("_emscripten_");)i=it(i[0]);var a=r.split("\n");r="";var s=new RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)"),l=new RegExp("\\s*(.*?)@(.*):(.*)(:(.*))?"),u=new RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)");for(var c in a){var d=a[c],f="",p="",m=0,h=0,g=u.exec(d);if(g&&5==g.length)f=g[1],p=g[2],m=g[3],h=g[4];else{if((g=s.exec(d))||(g=l.exec(d)),!(g&&g.length>=4)){r+=d+"\n";continue}f=g[1],p=g[2],m=g[3],h=0|g[4]}var v=!1;if(8&e){var y=emscripten_source_map.originalPositionFor({line:m,column:h});(v=y&&y.source)&&(64&e&&(y.source=y.source.substring(y.source.replace(/\\/g,"/").lastIndexOf("/")+1)),r+=" at "+f+" ("+y.source+":"+y.line+":"+y.column+")\n")}(16&e||!v)&&(64&e&&(p=p.substring(p.replace(/\\/g,"/").lastIndexOf("/")+1)),r+=(v?" = "+f:" at "+f)+" ("+p+":"+m+":"+h+")\n"),128&e&&i[0]&&(i[1]==f&&i[2].length>0&&(r=r.replace(/\s+$/,""),r+=" with values: "+i[1]+i[2]+"\n"),i=it(i[0]))}return r.replace(/\s+$/,"")}(e)),1&e?4&e?console.error(r):2&e?console.warn(r):512&e?console.info(r):256&e?console.debug(r):console.log(r):6&e?_(r):b(r)}function st(e){try{return w.grow(e-L.byteLength+65535>>>16),Z(w.buffer),1}catch(r){_("emscripten_realloc_buffer: Attempted to grow heap from "+L.byteLength+" bytes to "+e+" bytes, but got error: "+r)}}var lt={};function ut(){if(!ut.strings){var e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:n||"./this.program"};for(var r in lt)void 0===lt[r]?delete e[r]:e[r]=lt[r];var t=[];for(var r in e)t.push(r+"="+e[r]);ut.strings=t}return ut.strings}var ct=function(e,r,t,n){e||(e=this),this.parent=e,this.mount=e.mount,this.mounted=null,this.id=Ie.nextInode++,this.name=r,this.mode=t,this.node_ops={},this.stream_ops={},this.rdev=n},dt=365,ft=146;function pt(e,r,t){var n=t>0?t:I(e)+1,o=new Array(n),i=M(e,o,0,o.length);return r&&(o.length=i),o}Object.defineProperties(ct.prototype,{read:{get:function(){return(this.mode&dt)===dt},set:function(e){e?this.mode|=dt:this.mode&=-366}},write:{get:function(){return(this.mode&ft)===ft},set:function(e){e?this.mode|=ft:this.mode&=-147}},isFolder:{get:function(){return Ie.isDir(this.mode)}},isDevice:{get:function(){return Ie.isChrdev(this.mode)}}}),Ie.FSNode=ct,Ie.staticInit(),Ne={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},function(){for(var e=new Array(256),r=0;r<256;++r)e[r]=String.fromCharCode(r);Ue=e}(),Ve=r.BindingError=Ge(Error,"BindingError"),qe=r.InternalError=Ge(Error,"InternalError"),wr.prototype.isAliasOf=Qe,wr.prototype.clone=gr,wr.prototype.delete=vr,wr.prototype.isDeleted=yr,wr.prototype.deleteLater=Er,r.getInheritedInstanceCount=ir,r.getLiveInheritedInstances=ar,r.flushPendingDeletes=lr,r.setDelayFunction=cr,Or.prototype.getPointee=Ar,Or.prototype.destructor=Fr,Or.prototype.argPackAdvance=8,Or.prototype.readValueFromPointer=Pr,Or.prototype.deleteObject=Dr,Or.prototype.fromWireType=mr,Nr=r.UnboundTypeError=Ge(Error,"UnboundTypeError"),r.count_emval_handles=Gr,r.get_first_emval=Vr;var mt={__syscall_fcntl64:function(e,r,t){Le.varargs=t;try{var n=Le.getStreamFromFD(e);switch(r){case 0:return(o=Le.get())<0?-28:Ie.createStream(n,o).fd;case 1:case 2:case 6:case 7:return 0;case 3:return n.flags;case 4:var o=Le.get();return n.flags|=o,0;case 5:o=Le.get();return B[o+0>>1]=2,0;case 16:case 8:default:return-28;case 9:return i=28,$[yt()>>2]=i,-1}}catch(e){if(void 0===Ie||!(e instanceof Ie.ErrnoError))throw e;return-e.errno}var i},__syscall_openat:function(e,r,t,n){Le.varargs=n;try{r=Le.getStr(r),r=Le.calculateAt(e,r);var o=n?Le.get():0;return Ie.open(r,t,o).fd}catch(e){if(void 0===Ie||!(e instanceof Ie.ErrnoError))throw e;return-e.errno}},_embind_register_bigint:function(e,r,t,n,o){},_embind_register_bool:function(e,r,t,n,o){var i=xe(t);Je(e,{name:r=Be(r),fromWireType:function(e){return!!e},toWireType:function(e,r){return r?n:o},argPackAdvance:8,readValueFromPointer:function(e){var n;if(1===t)n=x;else if(2===t)n=B;else{if(4!==t)throw new TypeError("Unknown boolean type size: "+r);n=$}return this.fromWireType(n[e>>i])},destructorFunction:null})},_embind_register_class:function(e,t,n,o,i,a,s,l,u,c,d,f,p){d=Be(d),a=Mr(i,a),l&&(l=Mr(s,l)),c&&(c=Mr(u,c)),p=Mr(f,p);var m=ze(d);!function(e,t,n){r.hasOwnProperty(e)?((void 0===n||void 0!==r[e].overloadTable&&void 0!==r[e].overloadTable[n])&&Ye("Cannot register public name '"+e+"' twice"),br(r,e,e),r.hasOwnProperty(n)&&Ye("Cannot register multiple overloads of a function with the same number of arguments ("+n+")!"),r[e].overloadTable[n]=t):(r[e]=t,void 0!==n&&(r[e].numArguments=n))}(m,(function(){Lr("Cannot construct "+d+" due to unbound types",[o])})),Ke([e,t,n],o?[o]:[],(function(t){var n,i;t=t[0],i=o?(n=t.registeredClass).instancePrototype:wr.prototype;var s=He(m,(function(){if(Object.getPrototypeOf(this)!==u)throw new Ve("Use 'new' to construct "+d);if(void 0===f.constructor_body)throw new Ve(d+" has no accessible constructor");var e=f.constructor_body[arguments.length];if(void 0===e)throw new Ve("Tried to invoke ctor of "+d+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(f.constructor_body).toString()+") parameters instead!");return e.apply(this,arguments)})),u=Object.create(i,{constructor:{value:s}});s.prototype=u;var f=new _r(d,s,u,p,n,a,l,c),h=new Or(d,f,!0,!1,!1),g=new Or(d+"*",f,!1,!1,!1),v=new Or(d+" const*",f,!1,!0,!1);return or[e]={pointerType:g,constPointerType:v},function(e,t,n){r.hasOwnProperty(e)||Xe("Replacing nonexistant public symbol"),void 0!==r[e].overloadTable&&void 0!==n?r[e].overloadTable[n]=t:(r[e]=t,r[e].argCount=n)}(m,s),[h,g,v]}))},_embind_register_class_constructor:function(e,r,t,n,o,i){F(r>0);var a=xr(r,t);o=Mr(n,o),Ke([],[e],(function(e){var t="constructor "+(e=e[0]).name;if(void 0===e.registeredClass.constructor_body&&(e.registeredClass.constructor_body=[]),void 0!==e.registeredClass.constructor_body[r-1])throw new Ve("Cannot register multiple constructors with identical number of parameters ("+(r-1)+") for class '"+e.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!");return e.registeredClass.constructor_body[r-1]=()=>{Lr("Cannot construct "+e.name+" due to unbound types",a)},Ke([],a,(function(n){return n.splice(1,0,null),e.registeredClass.constructor_body[r-1]=jr(t,n,null,o,i),[]})),[]}))},_embind_register_class_function:function(e,r,t,n,o,i,a,s){var l=xr(t,n);r=Be(r),i=Mr(o,i),Ke([],[e],(function(e){var n=(e=e[0]).name+"."+r;function o(){Lr("Cannot call "+n+" due to unbound types",l)}r.startsWith("@@")&&(r=Symbol[r.substring(2)]),s&&e.registeredClass.pureVirtualFunctions.push(r);var u=e.registeredClass.instancePrototype,c=u[r];return void 0===c||void 0===c.overloadTable&&c.className!==e.name&&c.argCount===t-2?(o.argCount=t-2,o.className=e.name,u[r]=o):(br(u,r,n),u[r].overloadTable[t-2]=o),Ke([],l,(function(o){var s=jr(n,o,e,i,a);return void 0===u[r].overloadTable?(s.argCount=t-2,u[r]=s):u[r].overloadTable[t-2]=s,[]})),[]}))},_embind_register_class_property:function(e,r,t,n,o,i,a,s,l,u){r=Be(r),o=Mr(n,o),Ke([],[e],(function(e){var n=(e=e[0]).name+"."+r,c={get:function(){Lr("Cannot access "+n+" due to unbound types",[t,a])},enumerable:!0,configurable:!0};return c.set=l?()=>{Lr("Cannot access "+n+" due to unbound types",[t,a])}:e=>{Ye(n+" is a read-only property")},Object.defineProperty(e.registeredClass.instancePrototype,r,c),Ke([],l?[t,a]:[t],(function(t){var a=t[0],c={get:function(){var r=$r(this,e,n+" getter");return a.fromWireType(o(i,r))},enumerable:!0};if(l){l=Mr(s,l);var d=t[1];c.set=function(r){var t=$r(this,e,n+" setter"),o=[];l(u,t,d.toWireType(o,r)),Ur(o)}}return Object.defineProperty(e.registeredClass.instancePrototype,r,c),[]})),[]}))},_embind_register_emval:function(e,r){Je(e,{name:r=Be(r),fromWireType:function(e){var r=Yr.toValue(e);return Hr(e),r},toWireType:function(e,r){return Yr.toHandle(r)},argPackAdvance:8,readValueFromPointer:Pr,destructorFunction:null})},_embind_register_float:function(e,r,t){var n=xe(t);Je(e,{name:r=Be(r),fromWireType:function(e){return e},toWireType:function(e,r){if("number"!=typeof r&&"boolean"!=typeof r)throw new TypeError('Cannot convert "'+qr(r)+'" to '+this.name);return r},argPackAdvance:8,readValueFromPointer:Xr(r,n),destructorFunction:null})},_embind_register_integer:function(e,r,t,n,o){r=Be(r),-1===o&&(o=4294967295);var i=xe(t),a=e=>e;if(0===n){var s=32-8*t;a=e=>e<<s>>>s}var l=r.includes("unsigned"),u=(e,t)=>{if("number"!=typeof e&&"boolean"!=typeof e)throw new TypeError('Cannot convert "'+qr(e)+'" to '+t);if(e<n||e>o)throw new TypeError('Passing a number "'+qr(e)+'" from JS side to C/C++ side to an argument of type "'+r+'", which is outside the valid range ['+n+", "+o+"]!")};Je(e,{name:r,fromWireType:a,toWireType:l?function(e,r){return u(r,this.name),r>>>0}:function(e,r){return u(r,this.name),r},argPackAdvance:8,readValueFromPointer:Kr(r,i,0!==n),destructorFunction:null})},_embind_register_memory_view:function(e,r,t){var n=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][r];function o(e){var r=W,t=r[e>>=2],o=r[e+1];return new n(L,o,t)}Je(e,{name:t=Be(t),fromWireType:o,argPackAdvance:8,readValueFromPointer:o},{ignoreDuplicateRegistrations:!0})},_embind_register_std_string:function(e,r){var t="std::string"===(r=Be(r));Je(e,{name:r,fromWireType:function(e){var r,n=W[e>>2];if(t)for(var o=e+4,i=0;i<=n;++i){var a=e+4+i;if(i==n||0==U[a]){var s=R(o,a-o);void 0===r?r=s:(r+=String.fromCharCode(0),r+=s),o=a+1}}else{var l=new Array(n);for(i=0;i<n;++i)l[i]=String.fromCharCode(U[e+4+i]);r=l.join("")}return ht(e),r},toWireType:function(e,r){r instanceof ArrayBuffer&&(r=new Uint8Array(r));var n="string"==typeof r;n||r instanceof Uint8Array||r instanceof Uint8ClampedArray||r instanceof Int8Array||Ye("Cannot pass non-string to std::string");var o=(t&&n?()=>I(r):()=>r.length)(),i=gt(4+o+1);if(W[i>>2]=o,t&&n)N(r,i+4,o+1);else if(n)for(var a=0;a<o;++a){var s=r.charCodeAt(a);s>255&&(ht(i),Ye("String has UTF-16 code units that do not fit in 8 bits")),U[i+4+a]=s}else for(a=0;a<o;++a)U[i+4+a]=r[a];return null!==e&&e.push(ht,i),i},argPackAdvance:8,readValueFromPointer:Pr,destructorFunction:function(e){ht(e)}})},_embind_register_std_wstring:function(e,r,t){var n,o,i,a,s;t=Be(t),2===r?(n=V,o=Y,a=q,i=()=>j,s=1):4===r&&(n=X,o=K,a=J,i=()=>W,s=2),Je(e,{name:t,fromWireType:function(e){for(var t,o=W[e>>2],a=i(),l=e+4,u=0;u<=o;++u){var c=e+4+u*r;if(u==o||0==a[c>>s]){var d=n(l,c-l);void 0===t?t=d:(t+=String.fromCharCode(0),t+=d),l=c+r}}return ht(e),t},toWireType:function(e,n){"string"!=typeof n&&Ye("Cannot pass non-string to C++ string type "+t);var i=a(n),l=gt(4+i+r);return W[l>>2]=i>>s,o(n,l+4,i+r),null!==e&&e.push(ht,l),l},argPackAdvance:8,readValueFromPointer:Pr,destructorFunction:function(e){ht(e)}})},_embind_register_void:function(e,r){Je(e,{isVoid:!0,name:r=Be(r),argPackAdvance:0,fromWireType:function(){},toWireType:function(e,r){}})},_emscripten_date_now:function(){return Date.now()},_emval_as:function(e,r,t){e=Yr.toValue(e),r=Jr(r,"emval::as");var n=[],o=Yr.toHandle(n);return $[t>>2]=o,r.toWireType(n,e)},_emval_call_void_method:function(e,r,t,n){var o,i;(e=Zr[e])(r=Yr.toValue(r),t=void 0===(i=Qr[o=t])?Be(o):i,null,n)},_emval_decref:Hr,_emval_get_method_caller:function(e,r){var t=function(e,r){for(var t=new Array(e),n=0;n<e;++n)t[n]=Jr($[(r>>2)+n],"parameter "+n);return t}(e,r),n=t[0],o=n.name+"_$"+t.slice(1).map((function(e){return e.name})).join("_")+"$",i=et[o];if(void 0!==i)return i;for(var a=["retType"],s=[n],l="",u=0;u<e-1;++u)l+=(0!==u?", ":"")+"arg"+u,a.push("argType"+u),s.push(t[1+u]);var c="return function "+ze("methodCaller_"+o)+"(handle, name, destructors, args) {\n",d=0;for(u=0;u<e-1;++u)c+=" var arg"+u+" = argType"+u+".readValueFromPointer(args"+(d?"+"+d:"")+");\n",d+=t[u+1].argPackAdvance;for(c+=" var rv = handle[name]("+l+");\n",u=0;u<e-1;++u)t[u+1].deleteObject&&(c+=" argType"+u+".deleteObject(arg"+u+");\n");n.isVoid||(c+=" return retType.toWireType(destructors, rv);\n"),c+="};\n",a.push(c);var f,p,m=Br(Function,a).apply(null,s);return f=m,p=Zr.length,Zr.push(f),i=p,et[o]=i,i},_emval_incref:function(e){e>4&&(zr[e].refcount+=1)},_emval_run_destructors:function(e){Ur(Yr.toValue(e)),Hr(e)},_emval_take_value:function(e,r){var t=(e=Jr(e,"_emval_take_value")).readValueFromPointer(r);return Yr.toHandle(t)},_gmtime_js:function(e,r){var t=new Date(1e3*$[e>>2]);$[r>>2]=t.getUTCSeconds(),$[r+4>>2]=t.getUTCMinutes(),$[r+8>>2]=t.getUTCHours(),$[r+12>>2]=t.getUTCDate(),$[r+16>>2]=t.getUTCMonth(),$[r+20>>2]=t.getUTCFullYear()-1900,$[r+24>>2]=t.getUTCDay();var n=Date.UTC(t.getUTCFullYear(),0,1,0,0,0,0),o=(t.getTime()-n)/864e5|0;$[r+28>>2]=o},_localtime_js:function(e,r){var t=new Date(1e3*$[e>>2]);$[r>>2]=t.getSeconds(),$[r+4>>2]=t.getMinutes(),$[r+8>>2]=t.getHours(),$[r+12>>2]=t.getDate(),$[r+16>>2]=t.getMonth(),$[r+20>>2]=t.getFullYear()-1900,$[r+24>>2]=t.getDay();var n=new Date(t.getFullYear(),0,1),o=(t.getTime()-n.getTime())/864e5|0;$[r+28>>2]=o,$[r+36>>2]=-60*t.getTimezoneOffset();var i=new Date(t.getFullYear(),6,1).getTimezoneOffset(),a=n.getTimezoneOffset(),s=0|(i!=a&&t.getTimezoneOffset()==Math.min(a,i));$[r+32>>2]=s},_mktime_js:function(e){var r=new Date($[e+20>>2]+1900,$[e+16>>2],$[e+12>>2],$[e+8>>2],$[e+4>>2],$[e>>2],0),t=$[e+32>>2],n=r.getTimezoneOffset(),o=new Date(r.getFullYear(),0,1),i=new Date(r.getFullYear(),6,1).getTimezoneOffset(),a=o.getTimezoneOffset(),s=Math.min(a,i);if(t<0)$[e+32>>2]=Number(i!=a&&s==n);else if(t>0!=(s==n)){var l=Math.max(a,i),u=t>0?s:l;r.setTime(r.getTime()+6e4*(u-n))}$[e+24>>2]=r.getDay();var c=(r.getTime()-o.getTime())/864e5|0;return $[e+28>>2]=c,$[e>>2]=r.getSeconds(),$[e+4>>2]=r.getMinutes(),$[e+8>>2]=r.getHours(),$[e+12>>2]=r.getDate(),$[e+16>>2]=r.getMonth(),r.getTime()/1e3|0},_tzset_js:function e(r,t,n){e.called||(e.called=!0,function(e,r,t){var n=(new Date).getFullYear(),o=new Date(n,0,1),i=new Date(n,6,1),a=o.getTimezoneOffset(),s=i.getTimezoneOffset(),l=Math.max(a,s);function u(e){var r=e.toTimeString().match(/\(([A-Za-z ]+)\)$/);return r?r[1]:"GMT"}$[e>>2]=60*l,$[r>>2]=Number(a!=s);var c=u(o),d=u(i),f=Q(c),p=Q(d);s<a?($[t>>2]=f,$[t+4>>2]=p):($[t>>2]=p,$[t+4>>2]=f)}(r,t,n))},abort:function(){ge("native code called abort()")},emscripten_log:function(e,r,t){at(e,O(ot(r,t),0))},emscripten_resize_heap:function(e){var r=U.length;F((e>>>=0)>r);var t,n,o=2147483648;if(e>o)return _("Cannot enlarge memory, asked to go up to "+e+" bytes, but the limit is "+"2147483648 bytes!"),!1;for(var i=1;i<=4;i*=2){var a=r*(1+.2/i);a=Math.min(a,e+100663296);var s=Math.min(o,(t=Math.max(e,a))+((n=65536)-t%n)%n);if(st(s))return!0}return _("Failed to grow the heap from "+r+" bytes to "+s+" bytes, not enough memory!"),!1},environ_get:function(e,r){var t=0;return ut().forEach((function(n,o){var i=r+t;$[e+4*o>>2]=i,function(e,r,t){for(var n=0;n<e.length;++n)F(e.charCodeAt(n)===(255&e.charCodeAt(n))),x[r++>>0]=e.charCodeAt(n);t||(x[r>>0]=0)}(n,i),t+=n.length+1})),0},environ_sizes_get:function(e,r){var t=ut();$[e>>2]=t.length;var n=0;return t.forEach((function(e){n+=e.length+1})),$[r>>2]=n,0},fd_close:function(e){try{var r=Le.getStreamFromFD(e);return Ie.close(r),0}catch(e){if(void 0===Ie||!(e instanceof Ie.ErrnoError))throw e;return e.errno}},fd_fdstat_get:function(e,r){try{var t=Le.getStreamFromFD(e),n=t.tty?2:Ie.isDir(t.mode)?3:Ie.isLink(t.mode)?7:4;return x[r>>0]=n,0}catch(e){if(void 0===Ie||!(e instanceof Ie.ErrnoError))throw e;return e.errno}},fd_read:function(e,r,t,n){try{var o=Le.getStreamFromFD(e),i=Le.doReadv(o,r,t);return $[n>>2]=i,0}catch(e){if(void 0===Ie||!(e instanceof Ie.ErrnoError))throw e;return e.errno}},fd_seek:function(e,r,t,n,o){try{var i=Le.getStreamFromFD(e),a=4294967296*t+(r>>>0),s=9007199254740992;return a<=-s||a>=s?-61:(Ie.llseek(i,a,n),Ee=[i.position>>>0,(ye=i.position,+Math.abs(ye)>=1?ye>0?(0|Math.min(+Math.floor(ye/4294967296),4294967295))>>>0:~~+Math.ceil((ye-+(~~ye>>>0))/4294967296)>>>0:0)],$[o>>2]=Ee[0],$[o+4>>2]=Ee[1],i.getdents&&0===a&&0===n&&(i.getdents=null),0)}catch(e){if(void 0===Ie||!(e instanceof Ie.ErrnoError))throw e;return e.errno}},fd_write:function(e,r,t,n){try{var o=Le.getStreamFromFD(e),i=Le.doWritev(o,r,t);return $[n>>2]=i,0}catch(e){if(void 0===Ie||!(e instanceof Ie.ErrnoError))throw e;return e.errno}},setTempRet0:function(e){}};!function(){var e={env:mt,wasi_snapshot_preview1:mt};function t(e,t){var n,o=e.exports;r.asm=o,F(w=r.asm.memory,"memory not found in wasm exports"),Z(w.buffer),F(re=r.asm.__indirect_function_table,"table not found in wasm exports"),n=r.asm.__wasm_call_ctors,ae.unshift(n),he("wasm-instantiate")}me("wasm-instantiate");var n=r;function o(e){F(r===n,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"),n=null,t(e.instance)}function i(r){return function(){if(!E&&(s||l)){if("function"==typeof fetch&&!be(ve))return fetch(ve,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+ve+"'";return e.arrayBuffer()})).catch((function(){return Te(ve)}));if(f)return new Promise((function(e,r){f(ve,(function(r){e(new Uint8Array(r))}),r)}))}return Promise.resolve().then((function(){return Te(ve)}))}().then((function(r){return WebAssembly.instantiate(r,e)})).then((function(e){return e})).then(r,(function(e){_("failed to asynchronously prepare wasm: "+e),be(ve)&&_("warning: Loading from a file URI ("+ve+") is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing"),ge(e)}))}if(r.instantiateWasm)try{return r.instantiateWasm(e,t)}catch(e){return _("Module.instantiateWasm callback failed with error: "+e),!1}E||"function"!=typeof WebAssembly.instantiateStreaming||we(ve)||be(ve)||"function"!=typeof fetch?i(o):fetch(ve,{credentials:"same-origin"}).then((function(r){return WebAssembly.instantiateStreaming(r,e).then(o,(function(e){return _("wasm streaming compile failed: "+e),_("falling back to ArrayBuffer instantiation"),i(o)}))}))}(),r.___wasm_call_ctors=_e("__wasm_call_ctors");var ht=r._free=_e("free"),gt=r._malloc=_e("malloc"),vt=r._strlen=_e("strlen"),yt=r.___errno_location=_e("__errno_location"),Et=r.___getTypeName=_e("__getTypeName");r.___embind_register_native_and_builtin_types=_e("__embind_register_native_and_builtin_types");var wt=r.___stdio_exit=_e("__stdio_exit"),bt=r._emscripten_builtin_memalign=_e("emscripten_builtin_memalign"),_t=r._emscripten_stack_init=function(){return(_t=r._emscripten_stack_init=r.asm.emscripten_stack_init).apply(null,arguments)};r._emscripten_stack_get_free=function(){return(r._emscripten_stack_get_free=r.asm.emscripten_stack_get_free).apply(null,arguments)},r._emscripten_stack_get_base=function(){return(r._emscripten_stack_get_base=r.asm.emscripten_stack_get_base).apply(null,arguments)};var Tt,kt=r._emscripten_stack_get_end=function(){return(kt=r._emscripten_stack_get_end=r.asm.emscripten_stack_get_end).apply(null,arguments)};function St(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}function Ct(e){function t(){Tt||(Tt=!0,r.calledRun=!0,A||(oe(),F(!le),le=!0,r.noFSInit||Ie.init.initialized||Ie.init(),Ie.ignorePermissions=!1,ke(ae),r.onRuntimeInitialized&&r.onRuntimeInitialized(),F(!r._main,'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'),function(){if(oe(),r.postRun)for("function"==typeof r.postRun&&(r.postRun=[r.postRun]);r.postRun.length;)e=r.postRun.shift(),se.unshift(e);var e;ke(se)}()))}ue>0||(_t(),ne(),function(){if(r.preRun)for("function"==typeof r.preRun&&(r.preRun=[r.preRun]);r.preRun.length;)e=r.preRun.shift(),ie.unshift(e);var e;ke(ie)}(),ue>0||(r.setStatus?(r.setStatus("Running..."),setTimeout((function(){setTimeout((function(){r.setStatus("")}),1),t()}),1)):t(),oe()))}if(r.stackSave=_e("stackSave"),r.stackRestore=_e("stackRestore"),r.stackAlloc=_e("stackAlloc"),r.dynCall_ijiii=_e("dynCall_ijiii"),r.dynCall_viiijj=_e("dynCall_viiijj"),r.dynCall_jij=_e("dynCall_jij"),r.dynCall_jii=_e("dynCall_jii"),r.dynCall_jiji=_e("dynCall_jiji"),r._ff_h264_cabac_tables=112940,P("intArrayFromString",!1),P("intArrayToString",!1),P("ccall",!1),P("cwrap",!1),P("setValue",!1),P("getValue",!1),P("allocate",!1),P("UTF8ArrayToString",!1),P("UTF8ToString",!1),P("stringToUTF8Array",!1),P("stringToUTF8",!1),P("lengthBytesUTF8",!1),P("stackTrace",!1),P("addOnPreRun",!1),P("addOnInit",!1),P("addOnPreMain",!1),P("addOnExit",!1),P("addOnPostRun",!1),P("writeStringToMemory",!1),P("writeArrayToMemory",!1),P("writeAsciiToMemory",!1),P("addRunDependency",!0),P("removeRunDependency",!0),P("FS_createFolder",!1),P("FS_createPath",!0),P("FS_createDataFile",!0),P("FS_createPreloadedFile",!0),P("FS_createLazyFile",!0),P("FS_createLink",!1),P("FS_createDevice",!0),P("FS_unlink",!0),P("getLEB",!1),P("getFunctionTables",!1),P("alignFunctionTables",!1),P("registerFunctions",!1),P("addFunction",!1),P("removeFunction",!1),P("prettyPrint",!1),P("dynCall",!1),P("getCompilerSetting",!1),P("print",!1),P("printErr",!1),P("getTempRet0",!1),P("setTempRet0",!1),P("callMain",!1),P("abort",!1),P("keepRuntimeAlive",!1),P("ptrToString",!1),P("zeroMemory",!1),P("stringToNewUTF8",!1),P("emscripten_realloc_buffer",!1),P("ENV",!1),P("ERRNO_CODES",!1),P("ERRNO_MESSAGES",!1),P("setErrNo",!1),P("inetPton4",!1),P("inetNtop4",!1),P("inetPton6",!1),P("inetNtop6",!1),P("readSockaddr",!1),P("writeSockaddr",!1),P("DNS",!1),P("getHostByName",!1),P("Protocols",!1),P("Sockets",!1),P("getRandomDevice",!1),P("traverseStack",!1),P("UNWIND_CACHE",!1),P("convertPCtoSourceLocation",!1),P("readAsmConstArgsArray",!1),P("readAsmConstArgs",!1),P("mainThreadEM_ASM",!1),P("jstoi_q",!1),P("jstoi_s",!1),P("getExecutableName",!1),P("listenOnce",!1),P("autoResumeAudioContext",!1),P("dynCallLegacy",!1),P("getDynCaller",!1),P("dynCall",!1),P("setWasmTableEntry",!1),P("getWasmTableEntry",!1),P("handleException",!1),P("runtimeKeepalivePush",!1),P("runtimeKeepalivePop",!1),P("callUserCallback",!1),P("maybeExit",!1),P("safeSetTimeout",!1),P("asmjsMangle",!1),P("asyncLoad",!1),P("alignMemory",!1),P("mmapAlloc",!1),P("reallyNegative",!1),P("unSign",!1),P("reSign",!1),P("formatString",!1),P("PATH",!1),P("PATH_FS",!1),P("SYSCALLS",!1),P("getSocketFromFD",!1),P("getSocketAddress",!1),P("JSEvents",!1),P("registerKeyEventCallback",!1),P("specialHTMLTargets",!1),P("maybeCStringToJsString",!1),P("findEventTarget",!1),P("findCanvasEventTarget",!1),P("getBoundingClientRect",!1),P("fillMouseEventData",!1),P("registerMouseEventCallback",!1),P("registerWheelEventCallback",!1),P("registerUiEventCallback",!1),P("registerFocusEventCallback",!1),P("fillDeviceOrientationEventData",!1),P("registerDeviceOrientationEventCallback",!1),P("fillDeviceMotionEventData",!1),P("registerDeviceMotionEventCallback",!1),P("screenOrientation",!1),P("fillOrientationChangeEventData",!1),P("registerOrientationChangeEventCallback",!1),P("fillFullscreenChangeEventData",!1),P("registerFullscreenChangeEventCallback",!1),P("registerRestoreOldStyle",!1),P("hideEverythingExceptGivenElement",!1),P("restoreHiddenElements",!1),P("setLetterbox",!1),P("currentFullscreenStrategy",!1),P("restoreOldWindowedStyle",!1),P("softFullscreenResizeWebGLRenderTarget",!1),P("doRequestFullscreen",!1),P("fillPointerlockChangeEventData",!1),P("registerPointerlockChangeEventCallback",!1),P("registerPointerlockErrorEventCallback",!1),P("requestPointerLock",!1),P("fillVisibilityChangeEventData",!1),P("registerVisibilityChangeEventCallback",!1),P("registerTouchEventCallback",!1),P("fillGamepadEventData",!1),P("registerGamepadEventCallback",!1),P("registerBeforeUnloadEventCallback",!1),P("fillBatteryEventData",!1),P("battery",!1),P("registerBatteryEventCallback",!1),P("setCanvasElementSize",!1),P("getCanvasElementSize",!1),P("demangle",!1),P("demangleAll",!1),P("jsStackTrace",!1),P("stackTrace",!1),P("getEnvStrings",!1),P("checkWasiClock",!1),P("writeI53ToI64",!1),P("writeI53ToI64Clamped",!1),P("writeI53ToI64Signaling",!1),P("writeI53ToU64Clamped",!1),P("writeI53ToU64Signaling",!1),P("readI53FromI64",!1),P("readI53FromU64",!1),P("convertI32PairToI53",!1),P("convertU32PairToI53",!1),P("dlopenMissingError",!1),P("setImmediateWrapped",!1),P("clearImmediateWrapped",!1),P("polyfillSetImmediate",!1),P("uncaughtExceptionCount",!1),P("exceptionLast",!1),P("exceptionCaught",!1),P("ExceptionInfo",!1),P("exception_addRef",!1),P("exception_decRef",!1),P("Browser",!1),P("setMainLoop",!1),P("wget",!1),P("FS",!1),P("MEMFS",!1),P("TTY",!1),P("PIPEFS",!1),P("SOCKFS",!1),P("_setNetworkCallback",!1),P("tempFixedLengthArray",!1),P("miniTempWebGLFloatBuffers",!1),P("heapObjectForWebGLType",!1),P("heapAccessShiftForWebGLHeap",!1),P("GL",!1),P("emscriptenWebGLGet",!1),P("computeUnpackAlignedImageSize",!1),P("emscriptenWebGLGetTexPixelData",!1),P("emscriptenWebGLGetUniform",!1),P("webglGetUniformLocation",!1),P("webglPrepareUniformLocationsBeforeFirstUse",!1),P("webglGetLeftBracePos",!1),P("emscriptenWebGLGetVertexAttrib",!1),P("writeGLArray",!1),P("AL",!1),P("SDL_unicode",!1),P("SDL_ttfContext",!1),P("SDL_audio",!1),P("SDL",!1),P("SDL_gfx",!1),P("GLUT",!1),P("EGL",!1),P("GLFW_Window",!1),P("GLFW",!1),P("GLEW",!1),P("IDBStore",!1),P("runAndAbortIfError",!1),P("InternalError",!1),P("BindingError",!1),P("UnboundTypeError",!1),P("PureVirtualError",!1),P("init_embind",!1),P("throwInternalError",!1),P("throwBindingError",!1),P("throwUnboundTypeError",!1),P("ensureOverloadTable",!1),P("exposePublicSymbol",!1),P("replacePublicSymbol",!1),P("extendError",!1),P("createNamedFunction",!1),P("registeredInstances",!1),P("getBasestPointer",!1),P("registerInheritedInstance",!1),P("unregisterInheritedInstance",!1),P("getInheritedInstance",!1),P("getInheritedInstanceCount",!1),P("getLiveInheritedInstances",!1),P("registeredTypes",!1),P("awaitingDependencies",!1),P("typeDependencies",!1),P("registeredPointers",!1),P("registerType",!1),P("whenDependentTypesAreResolved",!1),P("embind_charCodes",!1),P("embind_init_charCodes",!1),P("readLatin1String",!1),P("getTypeName",!1),P("heap32VectorToArray",!1),P("requireRegisteredType",!1),P("getShiftFromSize",!1),P("integerReadValueFromPointer",!1),P("enumReadValueFromPointer",!1),P("floatReadValueFromPointer",!1),P("simpleReadValueFromPointer",!1),P("runDestructors",!1),P("new_",!1),P("craftInvokerFunction",!1),P("embind__requireFunction",!1),P("tupleRegistrations",!1),P("structRegistrations",!1),P("genericPointerToWireType",!1),P("constNoSmartPtrRawPointerToWireType",!1),P("nonConstNoSmartPtrRawPointerToWireType",!1),P("init_RegisteredPointer",!1),P("RegisteredPointer",!1),P("RegisteredPointer_getPointee",!1),P("RegisteredPointer_destructor",!1),P("RegisteredPointer_deleteObject",!1),P("RegisteredPointer_fromWireType",!1),P("runDestructor",!1),P("releaseClassHandle",!1),P("finalizationRegistry",!1),P("detachFinalizer_deps",!1),P("detachFinalizer",!1),P("attachFinalizer",!1),P("makeClassHandle",!1),P("init_ClassHandle",!1),P("ClassHandle",!1),P("ClassHandle_isAliasOf",!1),P("throwInstanceAlreadyDeleted",!1),P("ClassHandle_clone",!1),P("ClassHandle_delete",!1),P("deletionQueue",!1),P("ClassHandle_isDeleted",!1),P("ClassHandle_deleteLater",!1),P("flushPendingDeletes",!1),P("delayFunction",!1),P("setDelayFunction",!1),P("RegisteredClass",!1),P("shallowCopyInternalPointer",!1),P("downcastPointer",!1),P("upcastPointer",!1),P("validateThis",!1),P("char_0",!1),P("char_9",!1),P("makeLegalFunctionName",!1),P("emval_handle_array",!1),P("emval_free_list",!1),P("emval_symbols",!1),P("init_emval",!1),P("count_emval_handles",!1),P("get_first_emval",!1),P("getStringOrSymbol",!1),P("Emval",!1),P("emval_newers",!1),P("craftEmvalAllocator",!1),P("emval_get_global",!1),P("emval_methodCallers",!1),P("emval_registeredMethods",!1),P("warnOnce",!1),P("stackSave",!1),P("stackRestore",!1),P("stackAlloc",!1),P("AsciiToString",!1),P("stringToAscii",!1),P("UTF16ToString",!1),P("stringToUTF16",!1),P("lengthBytesUTF16",!1),P("UTF32ToString",!1),P("stringToUTF32",!1),P("lengthBytesUTF32",!1),P("allocateUTF8",!1),P("allocateUTF8OnStack",!1),r.writeStackCookie=ne,r.checkStackCookie=oe,C("ALLOC_NORMAL",!1),C("ALLOC_STACK",!1),de=function e(){Tt||Ct(),Tt||(de=e)},r.run=Ct,r.preInit)for("function"==typeof r.preInit&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();Ct(),e.exports=r}));const u=1e3,c=1e3,d=!1,f=!1,p=!1,m=!1,h="initVideo",g="render",v="playAudio",y="initAudio",E="audioCode",w="videoCode",b=1,_=2,T="init",k="decode",S="audioDecode",C="videoDecode",P="close",A="updateConfig",F="key",D="delta";s((function(e){!function(){var r="undefined"!=typeof window&&void 0!==window.document?window.document:{},t=e.exports,n=function(){for(var e,t=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],n=0,o=t.length,i={};n<o;n++)if((e=t[n])&&e[1]in r){for(n=0;n<e.length;n++)i[t[0][n]]=e[n];return i}return!1}(),o={change:n.fullscreenchange,error:n.fullscreenerror},i={request:function(e,t){return new Promise(function(o,i){var a=function(){this.off("change",a),o()}.bind(this);this.on("change",a);var s=(e=e||r.documentElement)[n.requestFullscreen](t);s instanceof Promise&&s.then(a).catch(i)}.bind(this))},exit:function(){return new Promise(function(e,t){if(this.isFullscreen){var o=function(){this.off("change",o),e()}.bind(this);this.on("change",o);var i=r[n.exitFullscreen]();i instanceof Promise&&i.then(o).catch(t)}else e()}.bind(this))},toggle:function(e,r){return this.isFullscreen?this.exit():this.request(e,r)},onchange:function(e){this.on("change",e)},onerror:function(e){this.on("error",e)},on:function(e,t){var n=o[e];n&&r.addEventListener(n,t,!1)},off:function(e,t){var n=o[e];n&&r.removeEventListener(n,t,!1)},raw:n};n?(Object.defineProperties(i,{isFullscreen:{get:function(){return Boolean(r[n.fullscreenElement])}},element:{enumerable:!0,get:function(){return r[n.fullscreenElement]}},isEnabled:{enumerable:!0,get:function(){return Boolean(r[n.fullscreenEnabled])}}}),t?e.exports=i:window.screenfull=i):t?e.exports={isEnabled:!1}:window.screenfull={isEnabled:!1}}()})).isEnabled,(()=>{try{if("object"==typeof WebAssembly&&"function"==typeof WebAssembly.instantiate){const e=new WebAssembly.Module(Uint8Array.of(0,97,115,109,1,0,0,0));if(e instanceof WebAssembly.Module)return new WebAssembly.Instance(e)instanceof WebAssembly.Instance}}catch(e){}})(),Date.now||(Date.now=function(){return(new Date).getTime()}),l.postRun=function(){var e=[],r=[],t={};"VideoEncoder"in self&&(t={hasInit:!1,isEmitInfo:!1,offscreenCanvas:null,offscreenCanvasCtx:null,decoder:new VideoDecoder({output:function(e){t.isEmitInfo||(n.opt.debug&&console.log("Jessibuca: [worker] Webcodecs Video Decoder initSize"),postMessage({cmd:h,w:e.codedWidth,h:e.codedHeight}),t.isEmitInfo=!0,t.offscreenCanvas=new OffscreenCanvas(e.codedWidth,e.codedHeight),t.offscreenCanvasCtx=t.offscreenCanvas.getContext("2d")),t.offscreenCanvasCtx.drawImage(e,0,0,e.codedWidth,e.codedHeight);let r=t.offscreenCanvas.transferToImageBitmap();postMessage({cmd:g,buffer:r,delay:n.delay,ts:0},[r]),setTimeout((function(){e.close?e.close():e.destroy()}),100)},error:function(e){console.error(e)}}),decode:function(e,r){const o=e[0]>>4==1;if(t.hasInit){const n=new EncodedVideoChunk({data:e.slice(5),timestamp:r,type:o?F:D});t.decoder.decode(n)}else if(o&&0===e[1]){const r=15&e[0];n.setVideoCodec(r);const o=function(e){let r=e.subarray(1,4),t="avc1.";for(let e=0;e<3;e++){let n=r[e].toString(16);n.length<2&&(n="0"+n),t+=n}return{codec:t,description:e}}(e.slice(5));t.decoder.configure(o),t.hasInit=!0}},reset(){t.hasInit=!1,t.isEmitInfo=!1,t.offscreenCanvas=null,t.offscreenCanvasCtx=null}});var n={opt:{debug:d,useOffscreen:p,useWCS:f,videoBuffer:u,openWebglAlignment:m,videoBufferDelay:c},useOffscreen:function(){return n.opt.useOffscreen&&"undefined"!=typeof OffscreenCanvas},initAudioPlanar:function(e,t){postMessage({cmd:y,sampleRate:t,channels:e});var n=[],o=0;this.playAudioPlanar=function(t,i,a){for(var s=i,u=[],c=0,d=0;d<2;d++){var f=l.HEAPU32[(t>>2)+d]>>2;u[d]=l.HEAPF32.subarray(f,f+s)}if(o){if(!(s>=(i=1024-o)))return o+=s,r[0]=Float32Array.of(...r[0],...u[0]),void(2==e&&(r[1]=Float32Array.of(...r[1],...u[1])));n[0]=Float32Array.of(...r[0],...u[0].subarray(0,i)),2==e&&(n[1]=Float32Array.of(...r[1],...u[1].subarray(0,i))),postMessage({cmd:v,buffer:n,ts:a},n.map((e=>e.buffer))),c=i,s-=i}for(o=s;o>=1024;o-=1024)n[0]=u[0].slice(c,c+=1024),2==e&&(n[1]=u[1].slice(c-1024,c)),postMessage({cmd:v,buffer:n,ts:a},n.map((e=>e.buffer)));o&&(r[0]=u[0].slice(c),2==e&&(r[1]=u[1].slice(c)))}},setVideoCodec:function(e){postMessage({cmd:w,code:e})},setAudioCodec:function(e){postMessage({cmd:E,code:e})},setVideoSize:function(e,r){postMessage({cmd:h,w:e,h:r});var t=e*r,o=t>>2;n.useOffscreen()?(this.offscreenCanvas=new OffscreenCanvas(e,r),this.offscreenCanvasGL=this.offscreenCanvas.getContext("webgl"),this.webglObj=((e,r)=>{var t=["attribute vec4 vertexPos;","attribute vec4 texturePos;","varying vec2 textureCoord;","void main()","{","gl_Position = vertexPos;","textureCoord = texturePos.xy;","}"].join("\n"),n=["precision highp float;","varying highp vec2 textureCoord;","uniform sampler2D ySampler;","uniform sampler2D uSampler;","uniform sampler2D vSampler;","const mat4 YUV2RGB = mat4","(","1.1643828125, 0, 1.59602734375, -.87078515625,","1.1643828125, -.39176171875, -.81296875, .52959375,","1.1643828125, 2.017234375, 0, -1.081390625,","0, 0, 0, 1",");","void main(void) {","highp float y = texture2D(ySampler, textureCoord).r;","highp float u = texture2D(uSampler, textureCoord).r;","highp float v = texture2D(vSampler, textureCoord).r;","gl_FragColor = vec4(y, u, v, 1) * YUV2RGB;","}"].join("\n");r&&e.pixelStorei(e.UNPACK_ALIGNMENT,1);var o=e.createShader(e.VERTEX_SHADER);e.shaderSource(o,t),e.compileShader(o),e.getShaderParameter(o,e.COMPILE_STATUS)||console.log("Vertex shader failed to compile: "+e.getShaderInfoLog(o));var i=e.createShader(e.FRAGMENT_SHADER);e.shaderSource(i,n),e.compileShader(i),e.getShaderParameter(i,e.COMPILE_STATUS)||console.log("Fragment shader failed to compile: "+e.getShaderInfoLog(i));var a=e.createProgram();e.attachShader(a,o),e.attachShader(a,i),e.linkProgram(a),e.getProgramParameter(a,e.LINK_STATUS)||console.log("Program failed to compile: "+e.getProgramInfoLog(a)),e.useProgram(a);var s=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,s),e.bufferData(e.ARRAY_BUFFER,new Float32Array([1,1,-1,1,1,-1,-1,-1]),e.STATIC_DRAW);var l=e.getAttribLocation(a,"vertexPos");e.enableVertexAttribArray(l),e.vertexAttribPointer(l,2,e.FLOAT,!1,0,0);var u=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,u),e.bufferData(e.ARRAY_BUFFER,new Float32Array([1,0,0,0,1,1,0,1]),e.STATIC_DRAW);var c=e.getAttribLocation(a,"texturePos");function d(r,t){var n=e.createTexture();return e.bindTexture(e.TEXTURE_2D,n),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),e.uniform1i(e.getUniformLocation(a,r),t),n}e.enableVertexAttribArray(c),e.vertexAttribPointer(c,2,e.FLOAT,!1,0,0);var f=d("ySampler",0),p=d("uSampler",1),m=d("vSampler",2);return{render:function(r,t,n,o,i){e.viewport(0,0,r,t),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,f),e.texImage2D(e.TEXTURE_2D,0,e.LUMINANCE,r,t,0,e.LUMINANCE,e.UNSIGNED_BYTE,n),e.activeTexture(e.TEXTURE1),e.bindTexture(e.TEXTURE_2D,p),e.texImage2D(e.TEXTURE_2D,0,e.LUMINANCE,r/2,t/2,0,e.LUMINANCE,e.UNSIGNED_BYTE,o),e.activeTexture(e.TEXTURE2),e.bindTexture(e.TEXTURE_2D,m),e.texImage2D(e.TEXTURE_2D,0,e.LUMINANCE,r/2,t/2,0,e.LUMINANCE,e.UNSIGNED_BYTE,i),e.drawArrays(e.TRIANGLE_STRIP,0,4)},destroy:function(){try{e.deleteProgram(a),e.deleteBuffer(s),e.deleteBuffer(u),e.deleteTexture(f),e.deleteTexture(p),e.deleteTexture(m)}catch(e){}}}})(this.offscreenCanvasGL,n.opt.openWebglAlignment),this.draw=function(n,i,a,s){const u=l.HEAPU8.subarray(i,i+t),c=l.HEAPU8.subarray(a,a+o),d=l.HEAPU8.subarray(s,s+o);this.webglObj.render(e,r,u,c,d);let f=this.offscreenCanvas.transferToImageBitmap();postMessage({cmd:g,buffer:f,delay:this.delay,ts:n},[f])}):this.draw=function(e,r,n,i){const a=[Uint8Array.from(l.HEAPU8.subarray(r,r+t)),Uint8Array.from(l.HEAPU8.subarray(n,n+o)),Uint8Array.from(l.HEAPU8.subarray(i,i+o))];postMessage({cmd:g,output:a,delay:this.delay,ts:e},a.map((e=>e.buffer)))}},getDelay:function(e){if(!e)return-1;if(this.firstTimestamp){if(e){const r=Date.now()-this.startTimestamp,t=e-this.firstTimestamp;this.delay=r>=t?r-t:t-r}}else this.firstTimestamp=e,this.startTimestamp=Date.now(),this.delay=-1;return this.delay},resetDelay:function(){this.firstTimestamp=null,this.startTimestamp=null,this.delay=-1},init:function(){n.opt.debug&&console.log("Jessibuca: [worker] init");const r=e=>{n.opt.useWCS&&n.useOffscreen()&&e.type===_&&t.decode?t.decode(e.payload,e.ts):e.decoder.decode(e.payload,e.ts)};this.stopId=setInterval((()=>{if(e.length)if(this.dropping){for((t=e.shift()).type===b&&0===t.payload[1]&&r(t);!t.isIFrame&&e.length;)(t=e.shift()).type===b&&0===t.payload[1]&&r(t);t.isIFrame&&(this.dropping=!1,r(t))}else{var t=e[0];if(-1===this.getDelay(t.ts))e.shift(),r(t);else if(this.delay>n.opt.videoBuffer+n.opt.videoBufferDelay)this.resetDelay(),this.dropping=!0;else for(;e.length&&(t=e[0],this.getDelay(t.ts)>n.opt.videoBuffer);)e.shift(),r(t)}}),10)},close:function(){n.opt.debug&&console.log("Jessibuca: [worker]: close"),clearInterval(this.stopId),this.stopId=null,o.clear&&o.clear(),i.clear&&i.clear(),t.reset&&t.reset(),this.firstTimestamp=null,this.startTimestamp=null,this.delay=-1,this.dropping=!1,this.webglObj&&(this.webglObj.destroy(),this.offscreenCanvas=null,this.offscreenCanvasGL=null,this.offscreenCanvasCtx=null),e=[],r=[],delete this.playAudioPlanar,delete this.draw},pushBuffer:function(r,t){t.type===b?e.push({ts:t.ts,payload:r,decoder:o,type:b}):t.type===_&&e.push({ts:t.ts,payload:r,decoder:i,type:_,isIFrame:t.isIFrame})}},o=new l.AudioDecoder(n),i=new l.VideoDecoder(n);postMessage({cmd:T}),self.onmessage=function(e){var r=e.data;switch(r.cmd){case T:try{n.opt=Object.assign(n.opt,JSON.parse(r.opt))}catch(e){}o.sample_rate=r.sampleRate,n.init();break;case k:n.pushBuffer(r.buffer,r.options);break;case S:o.decode(r.buffer,r.ts);break;case C:i.decode(r.buffer,r.ts);break;case P:n.close();break;case A:n.opt[r.key]=r.value}}}}));
... ...
public/h5/jessibuca/decoder.wasm 0 → 100644
No preview for this file type
public/h5/jessibuca/demo.html 0 → 100644
  1 +<!DOCTYPE html>
  2 +<html lang="en">
  3 +<head>
  4 + <meta charset="UTF-8">
  5 + <title>Title</title>
  6 + <script src="./jessibuca.js"></script>
  7 + <style>
  8 + .root {
  9 + display: flex;
  10 + place-content: center;
  11 + margin-top: 3rem;
  12 + }
  13 +
  14 + .container-shell {
  15 + backdrop-filter: blur(5px);
  16 + background: hsla(0, 0%, 50%, 0.5);
  17 + padding: 30px 4px 10px 4px;
  18 + /* border: 2px solid black; */
  19 + width: auto;
  20 + position: relative;
  21 + border-radius: 5px;
  22 + box-shadow: 0 10px 20px;
  23 + }
  24 +
  25 + .container-shell:before {
  26 + content: "jessibuca demo player";
  27 + position: absolute;
  28 + color: darkgray;
  29 + top: 4px;
  30 + left: 10px;
  31 + text-shadow: 1px 1px black;
  32 + }
  33 +
  34 + #container {
  35 + background: rgba(13, 14, 27, 0.7);
  36 + width: 640px;
  37 + height: 398px;
  38 + }
  39 +
  40 + .input {
  41 + display: flex;
  42 + margin-top: 10px;
  43 + color: white;
  44 + place-content: stretch;
  45 + }
  46 +
  47 + .input2 {
  48 + bottom: 0px;
  49 + }
  50 +
  51 + .input input {
  52 + flex: auto;
  53 + }
  54 +
  55 + .err {
  56 + position: absolute;
  57 + top: 40px;
  58 + left: 10px;
  59 + color: red;
  60 + }
  61 +
  62 + .option {
  63 + position: absolute;
  64 + top: 4px;
  65 + right: 10px;
  66 + display: flex;
  67 + place-content: center;
  68 + font-size: 12px;
  69 + }
  70 +
  71 + .option span {
  72 + color: white;
  73 + }
  74 +
  75 + .page {
  76 + background: url('./bg.jpg');
  77 + background-repeat: no-repeat;
  78 + background-position: top;
  79 + }
  80 +
  81 + @media (max-width: 720px) {
  82 + #container {
  83 + width: 90vw;
  84 + height: 52.7vw;
  85 + }
  86 + }
  87 + </style>
  88 +</head>
  89 +<body class="page">
  90 +<div class="root">
  91 + <div class="container-shell">
  92 + <div id="container"></div>
  93 + <div class="input">
  94 + <div>输入URL:</div>
  95 + <input
  96 + autocomplete="on"
  97 + id="playUrl"
  98 + value=""
  99 + />
  100 + <button id="play">播放</button>
  101 + <button id="pause" style="display: none">停止</button>
  102 + </div>
  103 + <div class="input" style="line-height: 30px">
  104 + <button id="destroy">销毁</button>
  105 + </div>
  106 + </div>
  107 +</div>
  108 +
  109 +<script>
  110 + var $player = document.getElementById('play');
  111 + var $pause = document.getElementById('pause');
  112 + var $playHref = document.getElementById('playUrl');
  113 + var $container = document.getElementById('container');
  114 + var $destroy = document.getElementById('destroy');
  115 +
  116 + var showOperateBtns = false; // 是否显示按钮
  117 + var forceNoOffscreen = true; //
  118 + var jessibuca = null;
  119 +
  120 + function create() {
  121 + jessibuca = new Jessibuca({
  122 + container: $container,
  123 + videoBuffer: 0.2, // 缓存时长
  124 + isResize: false,
  125 + text: "",
  126 + loadingText: "",
  127 + useMSE: false,
  128 + debug: true,
  129 + showBandwidth: showOperateBtns, // 显示网速
  130 + operateBtns: {
  131 + fullscreen: showOperateBtns,
  132 + screenshot: showOperateBtns,
  133 + play: showOperateBtns,
  134 + audio: false,
  135 + recorder: false
  136 + },
  137 + forceNoOffscreen: forceNoOffscreen,
  138 + isNotMute: false,
  139 + },);
  140 +
  141 + jessibuca.on('audioInfo', function (audioInfo) {
  142 + console.log('audioInfo',audioInfo);
  143 + })
  144 +
  145 + jessibuca.on('videoInfo', function (videoInfo) {
  146 + console.log('videoInfo',videoInfo);
  147 + })
  148 +
  149 + $player.style.display = 'inline-block';
  150 + $pause.style.display = 'none';
  151 + $destroy.style.display = 'none';
  152 + }
  153 +
  154 +
  155 + create();
  156 +
  157 + $player.addEventListener('click', function () {
  158 + var href = $playHref.value;
  159 + if (href) {
  160 + jessibuca.play(href);
  161 + $player.style.display = 'none';
  162 + $pause.style.display = 'inline-block';
  163 + $destroy.style.display = 'inline-block';
  164 + }
  165 + }, false)
  166 +
  167 +
  168 + $pause.addEventListener('click', function () {
  169 + $player.style.display = 'inline-block';
  170 + $pause.style.display = 'none';
  171 + jessibuca.pause();
  172 + })
  173 +
  174 + $destroy.addEventListener('click', function () {
  175 + if (jessibuca) {
  176 + jessibuca.destroy();
  177 + }
  178 + create();
  179 + })
  180 +
  181 +</script>
  182 +
  183 +</body>
  184 +</html>
  185 +
... ...
public/h5/jessibuca/hybrid_html_uni.webview.1.5.5.js 0 → 100644
  1 +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e=e||self).uni=n()}(this,(function(){"use strict";try{var e={};Object.defineProperty(e,"passive",{get:function(){!0}}),window.addEventListener("test-passive",null,e)}catch(e){}var n=Object.prototype.hasOwnProperty;function i(e,i){return n.call(e,i)}var t=[];function o(){return window.__dcloud_weex_postMessage||window.__dcloud_weex_}function a(){return window.__uniapp_x_postMessage||window.__uniapp_x_}var r=function(e,n){var i={options:{timestamp:+new Date},name:e,arg:n};if(a()){if("postMessage"===e){var r={data:n};return window.__uniapp_x_postMessage?window.__uniapp_x_postMessage(r):window.__uniapp_x_.postMessage(JSON.stringify(r))}var d={type:"WEB_INVOKE_APPSERVICE",args:{data:i,webviewIds:t}};window.__uniapp_x_postMessage?window.__uniapp_x_postMessageToService(d):window.__uniapp_x_.postMessageToService(JSON.stringify(d))}else if(o()){if("postMessage"===e){var s={data:[n]};return window.__dcloud_weex_postMessage?window.__dcloud_weex_postMessage(s):window.__dcloud_weex_.postMessage(JSON.stringify(s))}var w={type:"WEB_INVOKE_APPSERVICE",args:{data:i,webviewIds:t}};window.__dcloud_weex_postMessage?window.__dcloud_weex_postMessageToService(w):window.__dcloud_weex_.postMessageToService(JSON.stringify(w))}else{if(!window.plus)return window.parent.postMessage({type:"WEB_INVOKE_APPSERVICE",data:i,pageId:""},"*");if(0===t.length){var u=plus.webview.currentWebview();if(!u)throw new Error("plus.webview.currentWebview() is undefined");var g=u.parent(),v="";v=g?g.id:u.id,t.push(v)}if(plus.webview.getWebviewById("__uniapp__service"))plus.webview.postMessageToUniNView({type:"WEB_INVOKE_APPSERVICE",args:{data:i,webviewIds:t}},"__uniapp__service");else{var c=JSON.stringify(i);plus.webview.getLaunchWebview().evalJS('UniPlusBridge.subscribeHandler("'.concat("WEB_INVOKE_APPSERVICE",'",').concat(c,",").concat(JSON.stringify(t),");"))}}},d={navigateTo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("navigateTo",{url:encodeURI(n)})},navigateBack:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.delta;r("navigateBack",{delta:parseInt(n)||1})},switchTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("switchTab",{url:encodeURI(n)})},reLaunch:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("reLaunch",{url:encodeURI(n)})},redirectTo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("redirectTo",{url:encodeURI(n)})},getEnv:function(e){a()?e({uvue:!0}):o()?e({nvue:!0}):window.plus?e({plus:!0}):e({h5:!0})},postMessage:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r("postMessage",e.data||{})}},s=/uni-app/i.test(navigator.userAgent),w=/Html5Plus/i.test(navigator.userAgent),u=/complete|loaded|interactive/;var g=window.my&&navigator.userAgent.indexOf(["t","n","e","i","l","C","y","a","p","i","l","A"].reverse().join(""))>-1;var v=window.swan&&window.swan.webView&&/swan/i.test(navigator.userAgent);var c=window.qq&&window.qq.miniProgram&&/QQ/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var p=window.tt&&window.tt.miniProgram&&/toutiaomicroapp/i.test(navigator.userAgent);var _=window.wx&&window.wx.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var m=window.qa&&/quickapp/i.test(navigator.userAgent);var f=window.ks&&window.ks.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var l=window.tt&&window.tt.miniProgram&&/Lark|Feishu/i.test(navigator.userAgent);var E=window.jd&&window.jd.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var x=window.xhs&&window.xhs.miniProgram&&/xhsminiapp/i.test(navigator.userAgent);for(var S,h=function(){window.UniAppJSBridge=!0,document.dispatchEvent(new CustomEvent("UniAppJSBridgeReady",{bubbles:!0,cancelable:!0}))},y=[function(e){if(s||w)return window.__uniapp_x_postMessage||window.__uniapp_x_||window.__dcloud_weex_postMessage||window.__dcloud_weex_?document.addEventListener("DOMContentLoaded",e):window.plus&&u.test(document.readyState)?setTimeout(e,0):document.addEventListener("plusready",e),d},function(e){if(_)return window.WeixinJSBridge&&window.WeixinJSBridge.invoke?setTimeout(e,0):document.addEventListener("WeixinJSBridgeReady",e),window.wx.miniProgram},function(e){if(c)return window.QQJSBridge&&window.QQJSBridge.invoke?setTimeout(e,0):document.addEventListener("QQJSBridgeReady",e),window.qq.miniProgram},function(e){if(g){document.addEventListener("DOMContentLoaded",e);var n=window.my;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){if(v)return document.addEventListener("DOMContentLoaded",e),window.swan.webView},function(e){if(p)return document.addEventListener("DOMContentLoaded",e),window.tt.miniProgram},function(e){if(m){window.QaJSBridge&&window.QaJSBridge.invoke?setTimeout(e,0):document.addEventListener("QaJSBridgeReady",e);var n=window.qa;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){if(f)return window.WeixinJSBridge&&window.WeixinJSBridge.invoke?setTimeout(e,0):document.addEventListener("WeixinJSBridgeReady",e),window.ks.miniProgram},function(e){if(l)return document.addEventListener("DOMContentLoaded",e),window.tt.miniProgram},function(e){if(E)return window.JDJSBridgeReady&&window.JDJSBridgeReady.invoke?setTimeout(e,0):document.addEventListener("JDJSBridgeReady",e),window.jd.miniProgram},function(e){if(x)return window.xhs.miniProgram},function(e){return document.addEventListener("DOMContentLoaded",e),d}],M=0;M<y.length&&!(S=y[M](h));M++);S||(S={});var P="undefined"!=typeof uni?uni:{};if(!P.navigateTo)for(var b in S)i(S,b)&&(P[b]=S[b]);return P.webView=S,P}));
... ...
public/h5/jessibuca/jessibuca.d.ts 0 → 100644
  1 +declare namespace Jessibuca {
  2 +
  3 + /** 超时信息 */
  4 + enum TIMEOUT {
  5 + /** 当play()的时候,如果没有数据返回 */
  6 + loadingTimeout = 'loadingTimeout',
  7 + /** 当播放过程中,如果超过timeout之后没有数据渲染 */
  8 + delayTimeout = 'delayTimeout',
  9 + }
  10 +
  11 + /** 错误信息 */
  12 + enum ERROR {
  13 + /** 播放错误,url 为空的时候,调用 play 方法 */
  14 + playError = 'playError',
  15 + /** http 请求失败 */
  16 + fetchError = 'fetchError',
  17 + /** websocket 请求失败 */
  18 + websocketError = 'websocketError',
  19 + /** webcodecs 解码 h265 失败 */
  20 + webcodecsH265NotSupport = 'webcodecsH265NotSupport',
  21 + /** mediaSource 解码 h265 失败 */
  22 + mediaSourceH265NotSupport = 'mediaSourceH265NotSupport',
  23 + /** wasm 解码失败 */
  24 + wasmDecodeError = 'wasmDecodeError',
  25 + }
  26 +
  27 + interface Config {
  28 + /**
  29 + * 播放器容器
  30 + * * 若为 string ,则底层调用的是 document.getElementById('id')
  31 + * */
  32 + container: HTMLElement | string;
  33 + /**
  34 + * 设置最大缓冲时长,单位秒,播放器会自动消除延迟
  35 + */
  36 + videoBuffer?: number;
  37 + /**
  38 + * worker地址
  39 + * * 默认引用的是根目录下面的decoder.js文件 ,decoder.js 与 decoder.wasm文件必须是放在同一个目录下面。 */
  40 + decoder?: string;
  41 + /**
  42 + * 是否不使用离屏模式(提升渲染能力)
  43 + */
  44 + forceNoOffscreen?: boolean;
  45 + /**
  46 + * 是否开启当页面的'visibilityState'变为'hidden'的时候,自动暂停播放。
  47 + */
  48 + hiddenAutoPause?: boolean;
  49 + /**
  50 + * 是否有音频,如果设置`false`,则不对音频数据解码,提升性能。
  51 + */
  52 + hasAudio?: boolean;
  53 + /**
  54 + * 设置旋转角度,只支持,0(默认),180,270 三个值
  55 + */
  56 + rotate?: boolean;
  57 + /**
  58 + * 1. 当为`true`的时候:视频画面做等比缩放后,高或宽对齐canvas区域,画面不被拉伸,但有黑边。 等同于 `setScaleMode(1)`
  59 + * 2. 当为`false`的时候:视频画面完全填充canvas区域,画面会被拉伸。等同于 `setScaleMode(0)`
  60 + */
  61 + isResize?: boolean;
  62 + /**
  63 + * 1. 当为`true`的时候:视频画面做等比缩放后,完全填充canvas区域,画面不被拉伸,没有黑边,但画面显示不全。等同于 `setScaleMode(2)`
  64 + */
  65 + isFullResize?: boolean;
  66 + /**
  67 + * 1. 当为`true`的时候:ws协议不检验是否以.flv为依据,进行协议解析。
  68 + */
  69 + isFlv?: boolean;
  70 + /**
  71 + * 是否开启控制台调试打
  72 + */
  73 + debug?: boolean;
  74 + /**
  75 + * 1. 设置超时时长, 单位秒
  76 + * 2. 在连接成功之前(loading)和播放中途(heart),如果超过设定时长无数据返回,则回调timeout事件
  77 + */
  78 + timeout?: number;
  79 + /**
  80 + * 1. 设置超时时长, 单位秒
  81 + * 2. 在连接成功之前,如果超过设定时长无数据返回,则回调timeout事件
  82 + */
  83 + heartTimeout?: number;
  84 + /**
  85 + * 1. 设置超时时长, 单位秒
  86 + * 2. 在连接成功之前,如果超过设定时长无数据返回,则回调timeout事件
  87 + */
  88 + loadingTimeout?: number;
  89 + /**
  90 + * 是否支持屏幕的双击事件,触发全屏,取消全屏事件
  91 + */
  92 + supportDblclickFullscreen?: boolean;
  93 + /**
  94 + * 是否显示网
  95 + */
  96 + showBandwidth?: boolean;
  97 + /**
  98 + * 配置操作按钮
  99 + */
  100 + operateBtns?: {
  101 + /** 是否显示全屏按钮 */
  102 + fullscreen?: boolean;
  103 + /** 是否显示截图按钮 */
  104 + screenshot?: boolean;
  105 + /** 是否显示播放暂停按钮 */
  106 + play?: boolean;
  107 + /** 是否显示声音按钮 */
  108 + audio?: boolean;
  109 + /** 是否显示录制按 */
  110 + record?: boolean;
  111 + };
  112 + /**
  113 + * 开启屏幕常亮,在手机浏览器上, canvas标签渲染视频并不会像video标签那样保持屏幕常亮
  114 + */
  115 + keepScreenOn?: boolean;
  116 + /**
  117 + * 是否开启声音,默认是关闭声音播放的
  118 + */
  119 + isNotMute?: boolean;
  120 + /**
  121 + * 加载过程中文案
  122 + */
  123 + loadingText?: string;
  124 + /**
  125 + * 背景图片
  126 + */
  127 + background?: string;
  128 + /**
  129 + * 是否开启MediaSource硬解码
  130 + * * 视频编码只支持H.264视频(Safari on iOS不支持)
  131 + * * 不支持 forceNoOffscreen 为 false (开启离屏渲染)
  132 + */
  133 + useMSE?: boolean;
  134 + /**
  135 + * 是否开启Webcodecs硬解码
  136 + * * 视频编码只支持H.264视频 (需在chrome 94版本以上,需要https或者localhost环境)
  137 + * * 支持 forceNoOffscreen 为 false (开启离屏渲染)
  138 + * */
  139 + useWCS?: boolean;
  140 + /**
  141 + * 是否开启键盘快捷键
  142 + * 目前支持的键盘快捷键有:esc -> 退出全屏;arrowUp -> 声音增加;arrowDown -> 声音减少;
  143 + */
  144 + hotKey?: boolean;
  145 + /**
  146 + * 在使用MSE或者Webcodecs 播放H265的时候,是否自动降级到wasm模式。
  147 + * 设置为false 则直接关闭播放,抛出Error 异常,设置为true 则会自动切换成wasm模式播放。
  148 + */
  149 + autoWasm?: boolean;
  150 + /**
  151 + * heartTimeout 心跳超时之后自动再播放,不再抛出异常,而直接重新播放视频地址。
  152 + */
  153 + heartTimeoutReplay?: boolean,
  154 + /**
  155 + * heartTimeoutReplay 从试次数,超过之后,不再自动播放
  156 + */
  157 + heartTimeoutReplayTimes?: number,
  158 + /**
  159 + * loadingTimeout loading之后自动再播放,不再抛出异常,而直接重新播放视频地址。
  160 + */
  161 + loadingTimeoutReplay?: boolean,
  162 + /**
  163 + * heartTimeoutReplay 从试次数,超过之后,不再自动播放
  164 + */
  165 + loadingTimeoutReplayTimes?: number
  166 + /**
  167 + * wasm解码报错之后,不再抛出异常,而是直接重新播放视频地址。
  168 + */
  169 + wasmDecodeErrorReplay?: boolean,
  170 + /**
  171 + * https://github.com/langhuihui/jessibuca/issues/152 解决方案
  172 + * 例如:WebGL图像预处理默认每次取4字节的数据,但是540x960分辨率下的U、V分量宽度是540/2=270不能被4整除,导致绿屏。
  173 + */
  174 + openWebglAlignment?: boolean
  175 + }
  176 +}
  177 +
  178 +
  179 +declare class Jessibuca {
  180 +
  181 + constructor(config?: Jessibuca.Config);
  182 +
  183 + /**
  184 + * 是否开启控制台调试打印
  185 + @example
  186 + // 开启
  187 + jessibuca.setDebug(true)
  188 + // 关闭
  189 + jessibuca.setDebug(false)
  190 + */
  191 + setDebug(flag: boolean): void;
  192 +
  193 + /**
  194 + * 静音
  195 + @example
  196 + jessibuca.mute()
  197 + */
  198 + mute(): void;
  199 +
  200 + /**
  201 + * 取消静音
  202 + @example
  203 + jessibuca.cancelMute()
  204 + */
  205 + cancelMute(): void;
  206 +
  207 + /**
  208 + * 留给上层用户操作来触发音频恢复的方法。
  209 + *
  210 + * iPhone,chrome等要求自动播放时,音频必须静音,需要由一个真实的用户交互操作来恢复,不能使用代码。
  211 + *
  212 + * https://developers.google.com/web/updates/2017/09/autoplay-policy-changes
  213 + */
  214 + audioResume(): void;
  215 +
  216 + /**
  217 + *
  218 + * 设置超时时长, 单位秒
  219 + * 在连接成功之前和播放中途,如果超过设定时长无数据返回,则回调timeout事件
  220 +
  221 + @example
  222 + jessibuca.setTimeout(10)
  223 +
  224 + jessibuca.on('timeout',function(){
  225 + //
  226 + });
  227 + */
  228 + setTimeout(): void;
  229 +
  230 + /**
  231 + * @param mode
  232 + * 0 视频画面完全填充canvas区域,画面会被拉伸 等同于参数 `isResize` 为false
  233 + *
  234 + * 1 视频画面做等比缩放后,高或宽对齐canvas区域,画面不被拉伸,但有黑边 等同于参数 `isResize` 为true
  235 + *
  236 + * 2 视频画面做等比缩放后,完全填充canvas区域,画面不被拉伸,没有黑边,但画面显示不全 等同于参数 `isFullResize` 为true
  237 + @example
  238 + jessibuca.setScaleMode(0)
  239 +
  240 + jessibuca.setScaleMode(1)
  241 +
  242 + jessibuca.setScaleMode(2)
  243 + */
  244 + setScaleMode(mode: number): void;
  245 +
  246 + /**
  247 + * 暂停播放
  248 + *
  249 + * 可以在pause 之后,再调用 `play()`方法就继续播放之前的流。
  250 + @example
  251 + jessibuca.pause().then(()=>{
  252 + console.log('pause success')
  253 +
  254 + jessibuca.play().then(()=>{
  255 +
  256 + }).catch((e)=>{
  257 +
  258 + })
  259 +
  260 + }).catch((e)=>{
  261 + console.log('pause error',e);
  262 + })
  263 + */
  264 + pause(): Promise<void>;
  265 +
  266 + /**
  267 + * 关闭视频,不释放底层资源
  268 + @example
  269 + jessibuca.close();
  270 + */
  271 + close(): void;
  272 +
  273 + /**
  274 + * 关闭视频,释放底层资源
  275 + @example
  276 + jessibuca.destroy()
  277 + */
  278 + destroy(): void;
  279 +
  280 + /**
  281 + * 清理画布为黑色背景
  282 + @example
  283 + jessibuca.clearView()
  284 + */
  285 + clearView(): void;
  286 +
  287 + /**
  288 + * 播放视频
  289 + @example
  290 +
  291 + jessibuca.play('url').then(()=>{
  292 + console.log('play success')
  293 + }).catch((e)=>{
  294 + console.log('play error',e)
  295 + })
  296 + //
  297 + jessibuca.play()
  298 + */
  299 + play(url?: string): Promise<void>;
  300 +
  301 + /**
  302 + * 重新调整视图大小
  303 + */
  304 + resize(): void;
  305 +
  306 + /**
  307 + * 设置最大缓冲时长,单位秒,播放器会自动消除延迟。
  308 + *
  309 + * 等同于 `videoBuffer` 参数。
  310 + *
  311 + @example
  312 + // 设置 200ms 缓冲
  313 + jessibuca.setBufferTime(0.2)
  314 + */
  315 + setBufferTime(time: number): void;
  316 +
  317 + /**
  318 + * 设置旋转角度,只支持,0(默认) ,180,270 三个值。
  319 + *
  320 + * > 可用于实现监控画面小窗和全屏效果,由于iOS没有全屏API,此方法可以模拟页面内全屏效果而且多端效果一致。 *
  321 + @example
  322 + jessibuca.setRotate(0)
  323 +
  324 + jessibuca.setRotate(90)
  325 +
  326 + jessibuca.setRotate(270)
  327 + */
  328 + setRotate(deg: number): void;
  329 +
  330 + /**
  331 + *
  332 + * 设置音量大小,取值0 — 1
  333 + *
  334 + * > 区别于 mute 和 cancelMute 方法,虽然设置setVolume(0) 也能达到 mute方法,但是mute 方法是不调用底层播放音频的,能提高性能。而setVolume(0)只是把声音设置为0 ,以达到效果。
  335 + * @param volume 当为0时,完全无声;当为1时,最大音量,默认值
  336 + @example
  337 + jessibuca.setVolume(0.2)
  338 +
  339 + jessibuca.setVolume(0)
  340 +
  341 + jessibuca.setVolume(1)
  342 + */
  343 + setVolume(volume: number): void;
  344 +
  345 + /**
  346 + * 返回是否加载完毕
  347 + @example
  348 + var result = jessibuca.hasLoaded()
  349 + console.log(result) // true
  350 + */
  351 + hasLoaded(): boolean;
  352 +
  353 + /**
  354 + * 开启屏幕常亮,在手机浏览器上, canvas标签渲染视频并不会像video标签那样保持屏幕常亮。
  355 + * H5目前在chrome\edge 84, android chrome 84及以上有原生亮屏API, 需要是https页面
  356 + * 其余平台为模拟实现,此时为兼容实现,并不保证所有浏览器都支持
  357 + @example
  358 + jessibuca.setKeepScreenOn()
  359 + */
  360 + setKeepScreenOn(): boolean;
  361 +
  362 + /**
  363 + * 全屏(取消全屏)播放视频
  364 + @example
  365 + jessibuca.setFullscreen(true)
  366 + //
  367 + jessibuca.setFullscreen(false)
  368 + */
  369 + setFullscreen(flag: boolean): void;
  370 +
  371 + /**
  372 + *
  373 + * 截图,调用后弹出下载框保存截图
  374 + * @param filename 可选参数, 保存的文件名, 默认 `时间戳`
  375 + * @param format 可选参数, 截图的格式,可选png或jpeg或者webp ,默认 `png`
  376 + * @param quality 可选参数, 当格式是jpeg或者webp时,压缩质量,取值0 ~ 1 ,默认 `0.92`
  377 + * @param type 可选参数, 可选download或者base64或者blob,默认`download`
  378 +
  379 + @example
  380 +
  381 + jessibuca.screenshot("test","png",0.5)
  382 +
  383 + const base64 = jessibuca.screenshot("test","png",0.5,'base64')
  384 +
  385 + const fileBlob = jessibuca.screenshot("test",'blob')
  386 + */
  387 + screenshot(filename?: string, format?: string, quality?: number, type?: string): void;
  388 +
  389 + /**
  390 + * 开始录制。
  391 + * @param fileName 可选,默认时间戳
  392 + * @param fileType 可选,默认webm,支持webm 和mp4 格式
  393 +
  394 + @example
  395 + jessibuca.startRecord('xxx','webm')
  396 + */
  397 + startRecord(fileName: string, fileType: string): void;
  398 +
  399 + /**
  400 + * 暂停录制并下载。
  401 + @example
  402 + jessibuca.stopRecordAndSave()
  403 + */
  404 + stopRecordAndSave(): void;
  405 +
  406 + /**
  407 + * 返回是否正在播放中状态。
  408 + @example
  409 + var result = jessibuca.isPlaying()
  410 + console.log(result) // true
  411 + */
  412 + isPlaying(): boolean;
  413 +
  414 + /**
  415 + * 返回是否静音。
  416 + @example
  417 + var result = jessibuca.isMute()
  418 + console.log(result) // true
  419 + */
  420 + isMute(): boolean;
  421 +
  422 + /**
  423 + * 返回是否正在录制。
  424 + @example
  425 + var result = jessibuca.isRecording()
  426 + console.log(result) // true
  427 + */
  428 + isRecording(): boolean;
  429 +
  430 +
  431 + /**
  432 + * 监听 jessibuca 初始化事件
  433 + * @example
  434 + * jessibuca.on("load",function(){console.log('load')})
  435 + */
  436 + on(event: 'load', callback: () => void): void;
  437 +
  438 + /**
  439 + * 视频播放持续时间,单位ms
  440 + * @example
  441 + * jessibuca.on('timeUpdate',function (ts) {console.log('timeUpdate',ts);})
  442 + */
  443 + on(event: 'timeUpdate', callback: () => void): void;
  444 +
  445 + /**
  446 + * 当解析出视频信息时回调,2个回调参数
  447 + * @example
  448 + * jessibuca.on("videoInfo",function(data){console.log('width:',data.width,'height:',data.width)})
  449 + */
  450 + on(event: 'videoInfo', callback: (data: {
  451 + /** 视频宽 */
  452 + width: number;
  453 + /** 视频高 */
  454 + height: number;
  455 + }) => void): void;
  456 +
  457 + /**
  458 + * 当解析出音频信息时回调,2个回调参数
  459 + * @example
  460 + * jessibuca.on("audioInfo",function(data){console.log('numOfChannels:',data.numOfChannels,'sampleRate',data.sampleRate)})
  461 + */
  462 + on(event: 'audioInfo', callback: (data: {
  463 + /** 声频通道 */
  464 + numOfChannels: number;
  465 + /** 采样率 */
  466 + sampleRate: number;
  467 + }) => void): void;
  468 +
  469 + /**
  470 + * 信息,包含错误信息
  471 + * @example
  472 + * jessibuca.on("log",function(data){console.log('data:',data)})
  473 + */
  474 + on(event: 'log', callback: () => void): void;
  475 +
  476 + /**
  477 + * 错误信息
  478 + * @example
  479 + * jessibuca.on("error",function(error){
  480 + if(error === Jessibuca.ERROR.fetchError){
  481 + //
  482 + }
  483 + else if(error === Jessibuca.ERROR.webcodecsH265NotSupport){
  484 + //
  485 + }
  486 + console.log('error:',error)
  487 + })
  488 + */
  489 + on(event: 'error', callback: (err: Jessibuca.ERROR) => void): void;
  490 +
  491 + /**
  492 + * 当前网速, 单位KB 每秒1次,
  493 + * @example
  494 + * jessibuca.on("kBps",function(data){console.log('kBps:',data)})
  495 + */
  496 + on(event: 'kBps', callback: (value: number) => void): void;
  497 +
  498 + /**
  499 + * 渲染开始
  500 + * @example
  501 + * jessibuca.on("start",function(){console.log('start render')})
  502 + */
  503 + on(event: 'start', callback: () => void): void;
  504 +
  505 + /**
  506 + * 当设定的超时时间内无数据返回,则回调
  507 + * @example
  508 + * jessibuca.on("timeout",function(error){console.log('timeout:',error)})
  509 + */
  510 + on(event: 'timeout', callback: (error: Jessibuca.TIMEOUT) => void): void;
  511 +
  512 + /**
  513 + * 当play()的时候,如果没有数据返回,则回调
  514 + * @example
  515 + * jessibuca.on("loadingTimeout",function(){console.log('timeout')})
  516 + */
  517 + on(event: 'loadingTimeout', callback: () => void): void;
  518 +
  519 + /**
  520 + * 当播放过程中,如果超过timeout之后没有数据渲染,则抛出异常。
  521 + * @example
  522 + * jessibuca.on("delayTimeout",function(){console.log('timeout')})
  523 + */
  524 + on(event: 'delayTimeout', callback: () => void): void;
  525 +
  526 + /**
  527 + * 当前是否全屏
  528 + * @example
  529 + * jessibuca.on("fullscreen",function(flag){console.log('is fullscreen',flag)})
  530 + */
  531 + on(event: 'fullscreen', callback: () => void): void;
  532 +
  533 + /**
  534 + * 触发播放事件
  535 + * @example
  536 + * jessibuca.on("play",function(flag){console.log('play')})
  537 + */
  538 + on(event: 'play', callback: () => void): void;
  539 +
  540 + /**
  541 + * 触发暂停事件
  542 + * @example
  543 + * jessibuca.on("pause",function(flag){console.log('pause')})
  544 + */
  545 + on(event: 'pause', callback: () => void): void;
  546 +
  547 + /**
  548 + * 触发声音事件,返回boolean值
  549 + * @example
  550 + * jessibuca.on("mute",function(flag){console.log('is mute',flag)})
  551 + */
  552 + on(event: 'mute', callback: () => void): void;
  553 +
  554 + /**
  555 + * 流状态统计,流开始播放后回调,每秒1次。
  556 + * @example
  557 + * jessibuca.on("stats",function(s){console.log("stats is",s)})
  558 + */
  559 + on(event: 'stats', callback: (stats: {
  560 + /** 当前缓冲区时长,单位毫秒 */
  561 + buf: number;
  562 + /** 当前视频帧率 */
  563 + fps: number;
  564 + /** 当前音频码率,单位byte */
  565 + abps: number;
  566 + /** 当前视频码率,单位byte */
  567 + vbps: number;
  568 + /** 当前视频帧pts,单位毫秒 */
  569 + ts: number;
  570 + }) => void): void;
  571 +
  572 + /**
  573 + * 渲染性能统计,流开始播放后回调,每秒1次。
  574 + * @param performance 0: 表示卡顿,1: 表示流畅,2: 表示非常流程
  575 + * @example
  576 + * jessibuca.on("performance",function(performance){console.log("performance is",performance)})
  577 + */
  578 + on(event: 'performance', callback: (performance: 0 | 1 | 2) => void): void;
  579 +
  580 + /**
  581 + * 录制开始的事件
  582 +
  583 + * @example
  584 + * jessibuca.on("recordStart",function(){console.log("record start")})
  585 + */
  586 + on(event: 'recordStart', callback: () => void): void;
  587 +
  588 + /**
  589 + * 录制结束的事件
  590 +
  591 + * @example
  592 + * jessibuca.on("recordEnd",function(){console.log("record end")})
  593 + */
  594 + on(event: 'recordEnd', callback: () => void): void;
  595 +
  596 + /**
  597 + * 录制的时候,返回的录制时长,1s一次
  598 +
  599 + * @example
  600 + * jessibuca.on("recordingTimestamp",function(timestamp){console.log("recordingTimestamp is",timestamp)})
  601 + */
  602 + on(event: 'recordingTimestamp', callback: (timestamp: number) => void): void;
  603 +
  604 + /**
  605 + * 监听调用play方法 经过 初始化-> 网络请求-> 解封装 -> 解码 -> 渲染 一系列过程的时间消耗
  606 + * @param event
  607 + * @param callback
  608 + */
  609 + on(event: 'playToRenderTimes', callback: (times: {
  610 + playInitStart: number, // 1 初始化
  611 + playStart: number, // 2 初始化
  612 + streamStart: number, // 3 网络请求
  613 + streamResponse: number, // 4 网络请求
  614 + demuxStart: number, // 5 解封装
  615 + decodeStart: number, // 6 解码
  616 + videoStart: number, // 7 渲染
  617 + playTimestamp: number,// playStart- playInitStart
  618 + streamTimestamp: number,// streamStart - playStart
  619 + streamResponseTimestamp: number,// streamResponse - streamStart
  620 + demuxTimestamp: number, // demuxStart - streamResponse
  621 + decodeTimestamp: number, // decodeStart - demuxStart
  622 + videoTimestamp: number,// videoStart - decodeStart
  623 + allTimestamp: number // videoStart - playInitStart
  624 + }) => void): void
  625 +
  626 + /**
  627 + * 监听方法
  628 + *
  629 + @example
  630 +
  631 + jessibuca.on("load",function(){console.log('load')})
  632 + */
  633 + on(event: string, callback: Function): void;
  634 +
  635 +}
  636 +
  637 +export default Jessibuca;
... ...
public/h5/jessibuca/jessibuca.js 0 → 100644
No preview for this file type
public/h5/jessibuca/jweixin-1.4.0.js 0 → 100644
  1 +!function(e,n){"function"==typeof define&&(define.amd||define.cmd)?define(function(){return n(e)}):n(e,!0)}(this,function(r,e){var a,c,n,i,t,s,d,o,l,u,p,f,m,g,h,S,I,y,v,_,k,w;if(!r.jWeixin)return a={config:"preVerifyJSAPI",onMenuShareTimeline:"menu:share:timeline",onMenuShareAppMessage:"menu:share:appmessage",onMenuShareQQ:"menu:share:qq",onMenuShareWeibo:"menu:share:weiboApp",onMenuShareQZone:"menu:share:QZone",previewImage:"imagePreview",getLocation:"geoLocation",openProductSpecificView:"openProductViewWithPid",addCard:"batchAddCard",openCard:"batchViewCard",chooseWXPay:"getBrandWCPayRequest",openEnterpriseRedPacket:"getRecevieBizHongBaoRequest",startSearchBeacons:"startMonitoringBeacons",stopSearchBeacons:"stopMonitoringBeacons",onSearchBeacons:"onBeaconsInRange",consumeAndShareCard:"consumedShareCard",openAddress:"editAddress"},c=function(){var e,n={};for(e in a)n[a[e]]=e;return n}(),n=r.document,i=n.title,t=navigator.userAgent.toLowerCase(),f=navigator.platform.toLowerCase(),s=!(!f.match("mac")&&!f.match("win")),d=-1!=t.indexOf("wxdebugger"),o=-1!=t.indexOf("micromessenger"),l=-1!=t.indexOf("android"),u=-1!=t.indexOf("iphone")||-1!=t.indexOf("ipad"),p=(f=t.match(/micromessenger\/(\d+\.\d+\.\d+)/)||t.match(/micromessenger\/(\d+\.\d+)/))?f[1]:"",m={initStartTime:B(),initEndTime:0,preVerifyStartTime:0,preVerifyEndTime:0},g={version:1,appId:"",initTime:0,preVerifyTime:0,networkType:"",isPreVerifyOk:1,systemType:u?1:l?2:-1,clientVersion:p,url:encodeURIComponent(location.href)},h={},S={_completes:[]},I={state:0,data:{}},L(function(){m.initEndTime=B()}),y=!1,v=[],_={config:function(e){C("config",h=e);var o=!1!==h.check;L(function(){if(o)T(a.config,{verifyJsApiList:V(h.jsApiList)},(S._complete=function(e){m.preVerifyEndTime=B(),I.state=1,I.data=e},S.success=function(e){g.isPreVerifyOk=0},S.fail=function(e){S._fail?S._fail(e):I.state=-1},(t=S._completes).push(function(){var n;s||d||h.debug||p<"6.0.2"||g.systemType<0||(n=new Image,g.appId=h.appId,g.initTime=m.initEndTime-m.initStartTime,g.preVerifyTime=m.preVerifyEndTime-m.preVerifyStartTime,_.getNetworkType({isInnerInvoke:!0,success:function(e){g.networkType=e.networkType,n.src="https://open.weixin.qq.com/sdk/report?v="+g.version+"&o="+g.isPreVerifyOk+"&s="+g.systemType+"&c="+g.clientVersion+"&a="+g.appId+"&n="+g.networkType+"&i="+g.initTime+"&p="+g.preVerifyTime+"&u="+g.url}}))}),S.complete=function(e){for(var n=0,i=t.length;n<i;++n)t[n]();S._completes=[]},S)),m.preVerifyStartTime=B();else{I.state=1;for(var e=S._completes,n=0,i=e.length;n<i;++n)e[n]();S._completes=[]}var t}),_.invoke||(_.invoke=function(e,n,i){r.WeixinJSBridge&&WeixinJSBridge.invoke(e,P(n),i)},_.on=function(e,n){r.WeixinJSBridge&&WeixinJSBridge.on(e,n)})},ready:function(e){(0!=I.state||(S._completes.push(e),!o&&h.debug))&&e()},error:function(e){p<"6.0.2"||(-1==I.state?e(I.data):S._fail=e)},checkJsApi:function(e){T("checkJsApi",{jsApiList:V(e.jsApiList)},(e._complete=function(e){l&&(i=e.checkResult)&&(e.checkResult=JSON.parse(i));var n,i=e,t=i.checkResult;for(n in t){var o=c[n];o&&(t[o]=t[n],delete t[n])}},e))},onMenuShareTimeline:function(e){M(a.onMenuShareTimeline,{complete:function(){T("shareTimeline",{title:e.title||i,desc:e.title||i,img_url:e.imgUrl||"",link:e.link||location.href,type:e.type||"link",data_url:e.dataUrl||""},e)}},e)},onMenuShareAppMessage:function(n){M(a.onMenuShareAppMessage,{complete:function(e){"favorite"===e.scene?T("sendAppMessage",{title:n.title||i,desc:n.desc||"",link:n.link||location.href,img_url:n.imgUrl||"",type:n.type||"link",data_url:n.dataUrl||""}):T("sendAppMessage",{title:n.title||i,desc:n.desc||"",link:n.link||location.href,img_url:n.imgUrl||"",type:n.type||"link",data_url:n.dataUrl||""},n)}},n)},onMenuShareQQ:function(e){M(a.onMenuShareQQ,{complete:function(){T("shareQQ",{title:e.title||i,desc:e.desc||"",img_url:e.imgUrl||"",link:e.link||location.href},e)}},e)},onMenuShareWeibo:function(e){M(a.onMenuShareWeibo,{complete:function(){T("shareWeiboApp",{title:e.title||i,desc:e.desc||"",img_url:e.imgUrl||"",link:e.link||location.href},e)}},e)},onMenuShareQZone:function(e){M(a.onMenuShareQZone,{complete:function(){T("shareQZone",{title:e.title||i,desc:e.desc||"",img_url:e.imgUrl||"",link:e.link||location.href},e)}},e)},updateTimelineShareData:function(e){T("updateTimelineShareData",{title:e.title,link:e.link,imgUrl:e.imgUrl},e)},updateAppMessageShareData:function(e){T("updateAppMessageShareData",{title:e.title,desc:e.desc,link:e.link,imgUrl:e.imgUrl},e)},startRecord:function(e){T("startRecord",{},e)},stopRecord:function(e){T("stopRecord",{},e)},onVoiceRecordEnd:function(e){M("onVoiceRecordEnd",e)},playVoice:function(e){T("playVoice",{localId:e.localId},e)},pauseVoice:function(e){T("pauseVoice",{localId:e.localId},e)},stopVoice:function(e){T("stopVoice",{localId:e.localId},e)},onVoicePlayEnd:function(e){M("onVoicePlayEnd",e)},uploadVoice:function(e){T("uploadVoice",{localId:e.localId,isShowProgressTips:0==e.isShowProgressTips?0:1},e)},downloadVoice:function(e){T("downloadVoice",{serverId:e.serverId,isShowProgressTips:0==e.isShowProgressTips?0:1},e)},translateVoice:function(e){T("translateVoice",{localId:e.localId,isShowProgressTips:0==e.isShowProgressTips?0:1},e)},chooseImage:function(e){T("chooseImage",{scene:"1|2",count:e.count||9,sizeType:e.sizeType||["original","compressed"],sourceType:e.sourceType||["album","camera"]},(e._complete=function(e){if(l){var n=e.localIds;try{n&&(e.localIds=JSON.parse(n))}catch(e){}}},e))},getLocation:function(e){e=e||{},T(a.getLocation,{type:e.type||"wgs84"},(e._complete=function(e){delete e.type},e))},previewImage:function(e){T(a.previewImage,{current:e.current,urls:e.urls},e)},uploadImage:function(e){T("uploadImage",{localId:e.localId,isShowProgressTips:0==e.isShowProgressTips?0:1},e)},downloadImage:function(e){T("downloadImage",{serverId:e.serverId,isShowProgressTips:0==e.isShowProgressTips?0:1},e)},getLocalImgData:function(e){!1===y?(y=!0,T("getLocalImgData",{localId:e.localId},(e._complete=function(e){var n;y=!1,0<v.length&&(n=v.shift(),wx.getLocalImgData(n))},e))):v.push(e)},getNetworkType:function(e){T("getNetworkType",{},(e._complete=function(e){var n=e,e=n.errMsg,i=(n.errMsg="getNetworkType:ok",n.subtype);if(delete n.subtype,i)n.networkType=i;else{var i=e.indexOf(":"),t=e.substring(i+1);switch(t){case"wifi":case"edge":case"wwan":n.networkType=t;break;default:n.errMsg="getNetworkType:fail"}}},e))},openLocation:function(e){T("openLocation",{latitude:e.latitude,longitude:e.longitude,name:e.name||"",address:e.address||"",scale:e.scale||28,infoUrl:e.infoUrl||""},e)},hideOptionMenu:function(e){T("hideOptionMenu",{},e)},showOptionMenu:function(e){T("showOptionMenu",{},e)},closeWindow:function(e){T("closeWindow",{},e=e||{})},hideMenuItems:function(e){T("hideMenuItems",{menuList:e.menuList},e)},showMenuItems:function(e){T("showMenuItems",{menuList:e.menuList},e)},hideAllNonBaseMenuItem:function(e){T("hideAllNonBaseMenuItem",{},e)},showAllNonBaseMenuItem:function(e){T("showAllNonBaseMenuItem",{},e)},scanQRCode:function(e){T("scanQRCode",{needResult:(e=e||{}).needResult||0,scanType:e.scanType||["qrCode","barCode"]},(e._complete=function(e){var n;u&&(n=e.resultStr)&&(n=JSON.parse(n),e.resultStr=n&&n.scan_code&&n.scan_code.scan_result)},e))},openAddress:function(e){T(a.openAddress,{},(e._complete=function(e){(e=e).postalCode=e.addressPostalCode,delete e.addressPostalCode,e.provinceName=e.proviceFirstStageName,delete e.proviceFirstStageName,e.cityName=e.addressCitySecondStageName,delete e.addressCitySecondStageName,e.countryName=e.addressCountiesThirdStageName,delete e.addressCountiesThirdStageName,e.detailInfo=e.addressDetailInfo,delete e.addressDetailInfo},e))},openProductSpecificView:function(e){T(a.openProductSpecificView,{pid:e.productId,view_type:e.viewType||0,ext_info:e.extInfo},e)},addCard:function(e){for(var n=e.cardList,i=[],t=0,o=n.length;t<o;++t){var r=n[t],r={card_id:r.cardId,card_ext:r.cardExt};i.push(r)}T(a.addCard,{card_list:i},(e._complete=function(e){if(n=e.card_list){for(var n,i=0,t=(n=JSON.parse(n)).length;i<t;++i){var o=n[i];o.cardId=o.card_id,o.cardExt=o.card_ext,o.isSuccess=!!o.is_succ,delete o.card_id,delete o.card_ext,delete o.is_succ}e.cardList=n,delete e.card_list}},e))},chooseCard:function(e){T("chooseCard",{app_id:h.appId,location_id:e.shopId||"",sign_type:e.signType||"SHA1",card_id:e.cardId||"",card_type:e.cardType||"",card_sign:e.cardSign,time_stamp:e.timestamp+"",nonce_str:e.nonceStr},(e._complete=function(e){e.cardList=e.choose_card_info,delete e.choose_card_info},e))},openCard:function(e){for(var n=e.cardList,i=[],t=0,o=n.length;t<o;++t){var r=n[t],r={card_id:r.cardId,code:r.code};i.push(r)}T(a.openCard,{card_list:i},e)},consumeAndShareCard:function(e){T(a.consumeAndShareCard,{consumedCardId:e.cardId,consumedCode:e.code},e)},chooseWXPay:function(e){T(a.chooseWXPay,x(e),e)},openEnterpriseRedPacket:function(e){T(a.openEnterpriseRedPacket,x(e),e)},startSearchBeacons:function(e){T(a.startSearchBeacons,{ticket:e.ticket},e)},stopSearchBeacons:function(e){T(a.stopSearchBeacons,{},e)},onSearchBeacons:function(e){M(a.onSearchBeacons,e)},openEnterpriseChat:function(e){T("openEnterpriseChat",{useridlist:e.userIds,chatname:e.groupName},e)},launchMiniProgram:function(e){T("launchMiniProgram",{targetAppId:e.targetAppId,path:function(e){var n;if("string"==typeof e&&0<e.length)return n=e.split("?")[0],n+=".html",void 0!==(e=e.split("?")[1])?n+"?"+e:n}(e.path),envVersion:e.envVersion},e)},miniProgram:{navigateBack:function(e){e=e||{},L(function(){T("invokeMiniProgramAPI",{name:"navigateBack",arg:{delta:e.delta||1}},e)})},navigateTo:function(e){L(function(){T("invokeMiniProgramAPI",{name:"navigateTo",arg:{url:e.url}},e)})},redirectTo:function(e){L(function(){T("invokeMiniProgramAPI",{name:"redirectTo",arg:{url:e.url}},e)})},switchTab:function(e){L(function(){T("invokeMiniProgramAPI",{name:"switchTab",arg:{url:e.url}},e)})},reLaunch:function(e){L(function(){T("invokeMiniProgramAPI",{name:"reLaunch",arg:{url:e.url}},e)})},postMessage:function(e){L(function(){T("invokeMiniProgramAPI",{name:"postMessage",arg:e.data||{}},e)})},getEnv:function(e){L(function(){e({miniprogram:"miniprogram"===r.__wxjs_environment})})}}},k=1,w={},n.addEventListener("error",function(e){var n,i,t;l||(t=(n=e.target).tagName,i=n.src,"IMG"!=t&&"VIDEO"!=t&&"AUDIO"!=t&&"SOURCE"!=t)||-1!=i.indexOf("wxlocalresource://")&&(e.preventDefault(),e.stopPropagation(),(t=n["wx-id"])||(t=k++,n["wx-id"]=t),w[t]||(w[t]=!0,wx.ready(function(){wx.getLocalImgData({localId:i,success:function(e){n.src=e.localData}})})))},!0),n.addEventListener("load",function(e){var n;l||(n=(e=e.target).tagName,e.src,"IMG"!=n&&"VIDEO"!=n&&"AUDIO"!=n&&"SOURCE"!=n)||(n=e["wx-id"])&&(w[n]=!1)},!0),e&&(r.wx=r.jWeixin=_),_;function T(n,e,i){r.WeixinJSBridge?WeixinJSBridge.invoke(n,P(e),function(e){A(n,e,i)}):C(n,i)}function M(n,i,t){r.WeixinJSBridge?WeixinJSBridge.on(n,function(e){t&&t.trigger&&t.trigger(e),A(n,e,i)}):C(n,t||i)}function P(e){return(e=e||{}).appId=h.appId,e.verifyAppId=h.appId,e.verifySignType="sha1",e.verifyTimestamp=h.timestamp+"",e.verifyNonceStr=h.nonceStr,e.verifySignature=h.signature,e}function x(e){return{timeStamp:e.timestamp+"",nonceStr:e.nonceStr,package:e.package,paySign:e.paySign,signType:e.signType||"SHA1"}}function A(e,n,i){"openEnterpriseChat"==e&&(n.errCode=n.err_code),delete n.err_code,delete n.err_desc,delete n.err_detail;var t=n.errMsg,e=(t||(t=n.err_msg,delete n.err_msg,t=function(e,n){var i=c[e];i&&(e=i);i="ok";{var t;n&&(t=n.indexOf(":"),"access denied"!=(i=(i=(i=-1!=(i=-1!=(i="failed"==(i="confirm"==(i=n.substring(t+1))?"ok":i)?"fail":i).indexOf("failed_")?i.substring(7):i).indexOf("fail_")?i.substring(5):i).replace(/_/g," ")).toLowerCase())&&"no permission to execute"!=i||(i="permission denied"),""==(i="config"==e&&"function not exist"==i?"ok":i))&&(i="fail")}return n=e+":"+i}(e,t),n.errMsg=t),(i=i||{})._complete&&(i._complete(n),delete i._complete),t=n.errMsg||"",h.debug&&!i.isInnerInvoke&&alert(JSON.stringify(n)),t.indexOf(":"));switch(t.substring(e+1)){case"ok":i.success&&i.success(n);break;case"cancel":i.cancel&&i.cancel(n);break;default:i.fail&&i.fail(n)}i.complete&&i.complete(n)}function V(e){if(e){for(var n=0,i=e.length;n<i;++n){var t=e[n],t=a[t];t&&(e[n]=t)}return e}}function C(e,n){var i;!h.debug||n&&n.isInnerInvoke||((i=c[e])&&(e=i),n&&n._complete&&delete n._complete,console.log('"'+e+'",',n||""))}function B(){return(new Date).getTime()}function L(e){o&&(r.WeixinJSBridge?e():n.addEventListener&&n.addEventListener("WeixinJSBridgeReady",e,!1))}});
0 2 \ No newline at end of file
... ...
public/h5/jessibuca/renderer.js 0 → 100644
  1 +!(function () {
  2 + /**
  3 + * @param opt
  4 + * container: DOM 容器
  5 + * contextOptions:
  6 + * videoBuffer:
  7 + * forceNoGL:
  8 + * isNotMute:
  9 + * decoder:
  10 + * @constructor
  11 + */
  12 + function Jessibuca(opt) {
  13 + this._opt = opt;
  14 +
  15 + if (typeof opt.container === "string") {
  16 + this._opt.container = document.getElementById(opt.container);
  17 + }
  18 + if (!this._opt.container) {
  19 + throw new Error('Jessibuca need container option');
  20 + return;
  21 + }
  22 +
  23 + this._canvasElement = document.createElement("canvas");
  24 + this._canvasElement.style.position = "absolute";
  25 + this._canvasElement.style.top = 0;
  26 + this._canvasElement.style.left = 0;
  27 + this._opt.container.appendChild(this._canvasElement);
  28 + this._container = this._opt.container;
  29 + this._container.style.overflow = "hidden";
  30 + this._containerOldPostion = {
  31 + position: this._container.style.position,
  32 + top: this._container.style.top,
  33 + left: this._container.style.left,
  34 + width: this._container.style.width,
  35 + height: this._container.style.height
  36 + }
  37 + if (this._containerOldPostion.position != "absolute") {
  38 + this._container.style.position = "relative"
  39 + }
  40 + this._opt.videoBuffer = opt.videoBuffer || 0;
  41 + this._opt.text = opt.text || '';
  42 + //
  43 + this._opt.isResize = opt.isResize === false ? opt.isResize : true;
  44 + this._opt.isFullResize = opt.isFullResize === true ? opt.isFullResize : false;
  45 + this._opt.isDebug = opt.debug === true;
  46 + this._opt.timeout = typeof opt.timeout === 'number' ? opt.timeout : 30;
  47 + this._opt.supportDblclickFullscreen = opt.supportDblclickFullscreen === true;
  48 + this._opt.showBandwidth = opt.showBandwidth === true;
  49 + this._opt.operateBtns = Object.assign({
  50 + fullscreen: false,
  51 + screenshot: false,
  52 + play: false,
  53 + audio: false
  54 + }, opt.operateBtns || {});
  55 + this._opt.keepScreenOn = opt.keepScreenOn === true;
  56 +
  57 + if (!opt.forceNoGL) this._initContextGL();
  58 + this._audioContext = new (window.AudioContext || window.webkitAudioContext)();
  59 + this._audioEnabled(true);
  60 + if (!opt.isNotMute) this._audioEnabled(false);
  61 + if (this._contextGL) {
  62 + this._initProgram();
  63 + this._initBuffers();
  64 + this._initTextures();
  65 + }
  66 + this._onresize = () => this.resize();
  67 + this._onfullscreenchange = () => this._fullscreenchange();
  68 + window.addEventListener("resize", this._onresize);
  69 + document.addEventListener('fullscreenchange', this._onfullscreenchange);
  70 + this._decoderWorker = new Worker(opt.decoder || 'ff.js')
  71 + var _this = this;
  72 + this._hasLoaded = false;
  73 + this._stats = {
  74 + buf: 0,
  75 + fps: 0,
  76 + abps: '',
  77 + vbps: '',
  78 + ts: ''
  79 + };
  80 +
  81 + if (this._opt.supportDblclickFullscreen) {
  82 + this._canvasElement.addEventListener('dblclick', function () {
  83 + _this.fullscreen = !_this.fullscreen;
  84 + }, false);
  85 + }
  86 + this.onPlay = noop;
  87 + this.onPause = noop;
  88 + this.onRecord = noop;
  89 + this.onFullscreen = noop;
  90 + this.onMute = noop;
  91 + this.onLoad = noop;
  92 + this.onLog = noop;
  93 + this.onError = noop;
  94 + this.onTimeUpdate = noop;
  95 + this.onInitSize = noop;
  96 + this._onMessage();
  97 + this._initDom();
  98 + this._initStatus();
  99 + this._initEventListener();
  100 + this._hideBtns();
  101 + //
  102 + this._initWakeLock();
  103 + this._enableWakeLock();
  104 + };
  105 +
  106 + function noop() {
  107 +
  108 + }
  109 +
  110 + Jessibuca.prototype._initDom = function () {
  111 + var playBase64 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAARVJREFUSMe9laEOglAUhs+5k9lJFpsJ5QWMJoNGbEY0mEy+gr6GNo0a3SiQCegMRILzGdw4hl+Cd27KxPuXb2zA/91z2YXoGRERkX4fvN3A2QxUiv4dFM3n8jZRBLbbVfd+ubJuF4xjiCyXkksueb1uSKCIZYGLBTEx8ekEoV7PkICeVgs8HiGyXoO2bUigCDM4HoPnM7bI8wwJ6Gk0sEXbLSay30Oo2TQkoGcwgFCSQMhxDAvoETEscDiQkJC4LjMz8+XyZ4HrFYWjEQqHQ1asWGWZfmdFAsVINxuw00HhbvfpydpvxWkKTqdYaRCUfUPJCdzv4Gr1uqfli0tOIAzByUT/iCrL6+84y3Bw+D6ui5Ou+jwA8FnIO++FACgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDEtMDhUMTY6NDI6NTMrMDg6MDCKP7wnAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAw+2IEmwAAAEl0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25fZ2Y3MDBzN2IzZncvYm9mYW5nLnN2Z8fICi0AAAAASUVORK5CYII=';
  112 + var pauseBase64 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAHVJREFUSMftkCESwCAMBEOnCtdXVMKHeC7oInkEeQJXkRoEZWraipxZc8lsQqQZBACAlIS1oqGhhTCdu3oyxyyMcdRf79c5J7SWDBky+z4173rbJvR+VF/e/qwKqIAKqMBDgZyFzAQCoZTpxq7HLDyOrw/9b07l3z4dDnI2IAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMIo/vCcAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDEtMDhUMTY6NDI6NTMrMDg6MDD7YgSbAAAASnRFWHRzdmc6YmFzZS11cmkAZmlsZTovLy9ob21lL2FkbWluL2ljb24tZm9udC90bXAvaWNvbl9nZjcwMHM3YjNmdy96YW50aW5nLnN2ZxqNZJkAAAAASUVORK5CYII=';
  113 + var screenshotBase64 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAaxJREFUSMfNlLFOAkEQhmevAZMjR6OGRBJKsFBzdkYNpYSaWkopIOFRCBWh1ieA+ALGRgutjK0HzV2H5SX7W/zsmY3cnTEhcZovOzcz9+/s7Ir8d4OGht7fBwAgjvEri2OTl1ffSf0xAMBxRIkS1e3Se3+vcszEMe/6OqmT/aN2m1wsNu/o5YVsNHI7BgA4PCRfXzfXCwKy1RLbcXZG9nrkzc12jvT8nPU/PtatOThgAx8fuS4WyZ0de2e+T87n5OcnuVqRsxl5cpImQDnKUc7DA1fVqpimZCu+vCSjiNH9PlmpJNTQ0INBErfeafZRAakC6FWKfH9nwU7H/l6rGdqCOx3y7c3U+aOARsMMp+1vNskwTLjulB23XJL1epqA9OshIiKeJxAIoug7UyA4OuLi6Ynr52deu+NjOy4MSc9Ln8rMDpTLybBpaOjdXbJUIqdTm8a/t2fn/RSQewR24HicTLmGhnbdzcPquvYtGY3+PIR24UKBUXd35v6Sk4lN47+9NXm/FBAEedfGTjw9JYdDm76fm6+hoS8ujGAxT6L9Im7bTKeurvIEb92+AES1b6x283XSAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAwij+8JwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMPtiBJsAAABJdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX2dmNzAwczdiM2Z3L2NhbWVyYS5zdmeyubWEAAAAAElFTkSuQmCC';
  114 + var fullscreenBase64 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAALZJREFUSMftVbsORUAQVSj8DomChvh3lU5CoSVCQq2RObeYu8XG3deVoHCak81kds7Oaz3vxRcAAMwztOg6vX9d6/3XFQQC+b7iAoFhYE7Tvx9EIFAcy/ftO3MQGAQkCfM4MmeZWyajiLnvmYuCeduMAuSzvRBVYNluFHCssSgFp7Sq9ALKkjnPf9ubRtkDL27HNT3QtsY9cAjsNAVheHIKBOwD2wpxFHDbJpwmaHH2L1iWx+2BDy8RbXXtqbRBAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAwij+8JwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMPtiBJsAAABTdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX2dmNzAwczdiM2Z3L3F1YW5waW5nenVpZGFodWEuc3ZnTBoI7AAAAABJRU5ErkJggg==';
  115 + var minScreenBase64 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAYJJREFUSMfdVbGKwkAQnQn+geAfWBixUTsVgp3YGKxSWflVNmIjARULwc5KO40ipNHWRgs/wGLniucKa+Jd5ODuuGle5u3szGRmd5bor4iIiMhuB3Sc+HXXBdp2/Lpta7v4dccRJUrUdhtNQIkSVa3C8HwG1uumg34f2OnEB+h0tF1Sv5b+YIsttpZLEhKSdhvscPi8IXFF74GJiYnHY7Cex8zMvFgkbInjmJnv98kqoO30vmhLtaRMB60WtEbDNDudgMUiKiQSzfjOMzFxoQAyCPSfw7/nQZ/PUYnpNGV6OR6BmYzJbzYIoBQCzGaRBDQvJCTdLnTLolg5HN5t6f8V1h/oUT4PrVKJWBotmEzQw+vV3J9Ow851P2/BaoX9Yfh0BrJZYKlk8uUyHOpDeLuBHwzMBJtN2PV6IPUhXK9Nf5cLMAxfluanrmGkRBggtRo03wfq66P/6CsJAnOg+f6rgfZI4BGYiYlHIx048eR6krcnq34kkj1GuVz8+jceo9+SD5A8yGh8CTq7AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAwij+8JwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMPtiBJsAAABNdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX2dmNzAwczdiM2Z3L3p1aXhpYW9odWEuc3ZnoCFr0AAAAABJRU5ErkJggg==';
  116 + var quietBase64 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAR9JREFUSMfVlD0LglAYhe9VkwgNihpsjbYQf4JTS7+iuaGxpcGfJjS0NFRLk2NDi6MogafhJGRIX9yEzvJwrx/nvPd9VYh/F3LkyBuN2g3J1QoAgCQhPe/Hxq5Lo+0WlfJ9dYYAgGaTDAIyy/BUnwcwWJlhcLnZkN2ugIBAuy2kkEL2ep8F73S4kjfFcfn6cMj9KLodrWVBiXyf75tMyOOR+4MBOZ8XLXzorboA5UpnM/J0Ivd7+vX7xX2asqGpVKtFXi5sqWmypXefrfIWAACmU/JwKCoun8hu9zA0uk6u13wgirg+n7+bAcsibbt6SB3n9TQXPxwAwHJJpum7M6BcDDQa0SgMaw9QPkJNIxcLMo4ZcDz+eYDqQFLWbqxKV57EtW1WtMbmAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAwij+8JwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMPtiBJsAAABKdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX2dmNzAwczdiM2Z3L2ppbmd5aW4uc3ZnIlMYaQAAAABJRU5ErkJggg==';
  117 + var playAudioBase64 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAU5JREFUSMftkzGKwlAURf9PULBQwULSCKK1bZAgNuoaFFyAC3AdZg0uQCwshWzAShEEO7Gy0soUCu9Occ3An5nMGCfdzGsO7+Xy3/03iVL/lbAAACiVIBCI77O37Vi9QCDZbEqLm03ycEBUAoHk818v7nYpul5Jz4tf8HBKYa1mcjwmbzd8rG8NFIsU7ffk8UjmcjE3XK+RtB4G2PT75GbDeblMttumfjSKMRCGLxsQCKTReE9KIJDJxDw/SmKxiOZWWh+ntrSlre2WXRAorbTSrZapip7X66kbMKtQUFBQCENznsmQ93vqBhh5r8fO85jAcsnIrcce1yV3uxgD8zl5uZgU+dGBVlrp6GbTKRPwffaDAek45Gz2/M0AAJ0OeTol+w0rFYrOZ3K1MhNJEjEAwHF4cBA8Z8B1zcXV6msv+JMR2yaHQ1LrXx/8Z+sNRxsWcwZeb6UAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDEtMDhUMTY6NDI6NTMrMDg6MDCKP7wnAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAw+2IEmwAAAEt0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25fZ2Y3MDBzN2IzZncvc2hlbmd5aW4uc3ZnFog1MQAAAABJRU5ErkJggg==';
  118 + var recordBase64 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAPRJREFUSMflVDEOwjAQO0e8gr2sZYVunREbD6ISfAgmkBjpC/hBEQ+AtTWD6QAI0gBlqRfLp+TiXC5n1nXgMUCS5HBoNBqj6IOMMFwuEpsNAABl6d3HihWrOJaBsuRPkGW+c929HAxuYefb6L+R0ZgkMrJYiItCnCT1sl5Y1jwXj0bNniJNJWqujfX7LyrwJh8AYDxWgulU0dPp20IFlxoODm61kpE4VnS9/puBXyPYgH7LbKY3PhwUnUw+NdC4CdW9+71UgyZspwIBB9No3O0klktxUahyx+Pz+lYG0Xzu84lXRqTqwRQAGAzns8R223gUdxZXGcAK5Hp0ClIAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDEtMDhUMTY6NDI6NTMrMDg6MDCKP7wnAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAw+2IEmwAAAE50RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25fZ2Y3MDBzN2IzZncvbHV6aGlzaGlwaW4uc3Zn5Zd7GQAAAABJRU5ErkJggg==';
  119 + var recordingBase64 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAahJREFUSMdjYBjpgBFd4NZK+f+soQYG//T+yzFuUFUl2cApjEWM/758UZvysPDn3127GBkZGBgY/v4l6ICb9xTWsRbp6/9f9W8N44Jz5xgCGI4wfGFiIttrR/5n/3/U3KyR8rj8t0RdHS5lcAv+//yXzzhZTY1ii2FAmsGZocna+maD3GnWY62tNzbJBbDOffLkxie5eJYwa2uYMhaigzb2/zyGguPH/y9mTGKYYGlJUIMiYxDjHCen/4oMDAxznJzg4k8Z/jP+l5LCCAFCQP30Y5dfXVZWDI7/zzIs8PNjNGJ4/7/r+XNKA4rkoNZ4/lj0V9TmzUxJv0J+F+jrM3YyvPq/acsWujmA2oBkB9y4LifLxhoa+teAzYFtwtWr/8sZxBj9fHxo7oCbprJ72MqOHWNgZGBkYFy1isGGoZahTFSU0hAgOhcQnfph4P7/df9T9u1jPMn4nyHmxIn/bAzLGe7GxTHsZyj+f+zpUwYGBmmG6bQsiMr+L/v/rqlJY9Njm9889fW4lGEUxXCHwAomUgH3vxBG8c+f1WWf9P98sns3oaJ4FAAAbtWqHTT84QYAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDEtMDhUMTY6MzU6MjMrMDg6MDBLHbvEAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTAxLTA4VDE2OjM1OjIzKzA4OjAwOkADeAAAAE50RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25fcTM1YTFhNHBtY2MvbHV6aGlzaGlwaW4uc3Zn6xlv1QAAAABJRU5ErkJggg==';
  120 + var gifBase64 = 'data:image/gif;base64,R0lGODlhgACAAKIAAP///93d3bu7u5mZmQAA/wAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFBQAEACwCAAIAfAB8AAAD/0i63P4wygYqmDjrzbtflvWNZGliYXiubKuloivPLlzReD7al+7/Eh5wSFQIi8hHYBkwHUmD6CD5YTJLz49USuVYraRsZ7vtar7XnQ1Kjpoz6LRHvGlz35O4nEPP2O94EnpNc2sef1OBGIOFMId/inB6jSmPdpGScR19EoiYmZobnBCIiZ95k6KGGp6ni4wvqxilrqBfqo6skLW2YBmjDa28r6Eosp27w8Rov8ekycqoqUHODrTRvXsQwArC2NLF29UM19/LtxO5yJd4Au4CK7DUNxPebG4e7+8n8iv2WmQ66BtoYpo/dvfacBjIkITBE9DGlMvAsOIIZjIUAixliv9ixYZVtLUos5GjwI8gzc3iCGghypQqrbFsme8lwZgLZtIcYfNmTJ34WPTUZw5oRxdD9w0z6iOpO15MgTh1BTTJUKos39jE+o/KS64IFVmsFfYT0aU7capdy7at27dw48qdS7eu3bt480I02vUbX2F/JxYNDImw4GiGE/P9qbhxVpWOI/eFKtlNZbWXuzlmG1mv58+gQ4seTbq06dOoU6vGQZJy0FNlMcV+czhQ7SQmYd8eMhPs5BxVdfcGEtV3buDBXQ+fURxx8oM6MT9P+Fh6dOrH2zavc13u9JXVJb520Vp8dvC76wXMuN5Sepm/1WtkEZHDefnzR9Qvsd9+/wi8+en3X0ntYVcSdAE+UN4zs7ln24CaLagghIxBaGF8kFGoIYV+Ybghh841GIyI5ICIFoklJsigihmimJOLEbLYIYwxSgigiZ+8l2KB+Ml4oo/w8dijjcrouCORKwIpnJIjMnkkksalNeR4fuBIm5UEYImhIlsGCeWNNJphpJdSTlkml1jWeOY6TnaRpppUctcmFW9mGSaZceYopH9zkjnjUe59iR5pdapWaGqHopboaYua1qije67GJ6CuJAAAIfkEBQUABAAsCgACAFcAMAAAA/9Iutz+ML5Ag7w46z0r5WAoSp43nihXVmnrdusrv+s332dt4Tyo9yOBUJD6oQBIQGs4RBlHySSKyczVTtHoidocPUNZaZAr9F5FYbGI3PWdQWn1mi36buLKFJvojsHjLnshdhl4L4IqbxqGh4gahBJ4eY1kiX6LgDN7fBmQEJI4jhieD4yhdJ2KkZk8oiSqEaatqBekDLKztBG2CqBACq4wJRi4PZu1sA2+v8C6EJexrBAD1AOBzsLE0g/V1UvYR9sN3eR6lTLi4+TlY1wz6Qzr8u1t6FkY8vNzZTxaGfn6mAkEGFDgL4LrDDJDyE4hEIbdHB6ESE1iD4oVLfLAqPETIsOODwmCDJlv5MSGJklaS6khAQAh+QQFBQAEACwfAAIAVwAwAAAD/0i63P5LSAGrvTjrNuf+YKh1nWieIumhbFupkivPBEzR+GnnfLj3ooFwwPqdAshAazhEGUXJJIrJ1MGOUamJ2jQ9QVltkCv0XqFh5IncBX01afGYnDqD40u2z76JK/N0bnxweC5sRB9vF34zh4gjg4uMjXobihWTlJUZlw9+fzSHlpGYhTminKSepqebF50NmTyor6qxrLO0L7YLn0ALuhCwCrJAjrUqkrjGrsIkGMW/BMEPJcphLgDaABjUKNEh29vdgTLLIOLpF80s5xrp8ORVONgi8PcZ8zlRJvf40tL8/QPYQ+BAgjgMxkPIQ6E6hgkdjoNIQ+JEijMsasNY0RQix4gKP+YIKXKkwJIFF6JMudFEAgAh+QQFBQAEACw8AAIAQgBCAAAD/kg0PPowykmrna3dzXvNmSeOFqiRaGoyaTuujitv8Gx/661HtSv8gt2jlwIChYtc0XjcEUnMpu4pikpv1I71astytkGh9wJGJk3QrXlcKa+VWjeSPZHP4Rtw+I2OW81DeBZ2fCB+UYCBfWRqiQp0CnqOj4J1jZOQkpOUIYx/m4oxg5cuAaYBO4Qop6c6pKusrDevIrG2rkwptrupXB67vKAbwMHCFcTFxhLIt8oUzLHOE9Cy0hHUrdbX2KjaENzey9Dh08jkz8Tnx83q66bt8PHy8/T19vf4+fr6AP3+/wADAjQmsKDBf6AOKjS4aaHDgZMeSgTQcKLDhBYPEswoA1BBAgAh+QQFBQAEACxOAAoAMABXAAAD7Ei6vPOjyUkrhdDqfXHm4OZ9YSmNpKmiqVqykbuysgvX5o2HcLxzup8oKLQQix0UcqhcVo5ORi+aHFEn02sDeuWqBGCBkbYLh5/NmnldxajX7LbPBK+PH7K6narfO/t+SIBwfINmUYaHf4lghYyOhlqJWgqDlAuAlwyBmpVnnaChoqOkpaanqKmqKgGtrq+wsbA1srW2ry63urasu764Jr/CAb3Du7nGt7TJsqvOz9DR0tPU1TIA2ACl2dyi3N/aneDf4uPklObj6OngWuzt7u/d8fLY9PXr9eFX+vv8+PnYlUsXiqC3c6PmUUgAACH5BAUFAAQALE4AHwAwAFcAAAPpSLrc/m7IAau9bU7MO9GgJ0ZgOI5leoqpumKt+1axPJO1dtO5vuM9yi8TlAyBvSMxqES2mo8cFFKb8kzWqzDL7Xq/4LB4TC6bz1yBes1uu9uzt3zOXtHv8xN+Dx/x/wJ6gHt2g3Rxhm9oi4yNjo+QkZKTCgGWAWaXmmOanZhgnp2goaJdpKGmp55cqqusrZuvsJays6mzn1m4uRAAvgAvuBW/v8GwvcTFxqfIycA3zA/OytCl0tPPO7HD2GLYvt7dYd/ZX99j5+Pi6tPh6+bvXuTuzujxXens9fr7YPn+7egRI9PPHrgpCQAAIfkEBQUABAAsPAA8AEIAQgAAA/lIutz+UI1Jq7026h2x/xUncmD5jehjrlnqSmz8vrE8u7V5z/m5/8CgcEgsGo/IpHLJbDqf0Kh0ShBYBdTXdZsdbb/Yrgb8FUfIYLMDTVYz2G13FV6Wz+lX+x0fdvPzdn9WeoJGAYcBN39EiIiKeEONjTt0kZKHQGyWl4mZdREAoQAcnJhBXBqioqSlT6qqG6WmTK+rsa1NtaGsuEu6o7yXubojsrTEIsa+yMm9SL8osp3PzM2cStDRykfZ2tfUtS/bRd3ewtzV5pLo4eLjQuUp70Hx8t9E9eqO5Oku5/ztdkxi90qPg3x2EMpR6IahGocPCxp8AGtigwQAIfkEBQUABAAsHwBOAFcAMAAAA/9Iutz+MMo36pg4682J/V0ojs1nXmSqSqe5vrDXunEdzq2ta3i+/5DeCUh0CGnF5BGULC4tTeUTFQVONYAs4CfoCkZPjFar83rBx8l4XDObSUL1Ott2d1U4yZwcs5/xSBB7dBMBhgEYfncrTBGDW4WHhomKUY+QEZKSE4qLRY8YmoeUfkmXoaKInJ2fgxmpqqulQKCvqRqsP7WooriVO7u8mhu5NacasMTFMMHCm8qzzM2RvdDRK9PUwxzLKdnaz9y/Kt8SyR3dIuXmtyHpHMcd5+jvWK4i8/TXHff47SLjQvQLkU+fG29rUhQ06IkEG4X/Rryp4mwUxSgLL/7IqFETB8eONT6ChCFy5ItqJomES6kgAQAh+QQFBQAEACwKAE4AVwAwAAAD/0i63A4QuEmrvTi3yLX/4MeNUmieITmibEuppCu3sDrfYG3jPKbHveDktxIaF8TOcZmMLI9NyBPanFKJp4A2IBx4B5lkdqvtfb8+HYpMxp3Pl1qLvXW/vWkli16/3dFxTi58ZRcChwIYf3hWBIRchoiHiotWj5AVkpIXi4xLjxiaiJR/T5ehoomcnZ+EGamqq6VGoK+pGqxCtaiiuJVBu7yaHrk4pxqwxMUzwcKbyrPMzZG90NGDrh/JH8t72dq3IN1jfCHb3L/e5ebh4ukmxyDn6O8g08jt7tf26ybz+m/W9GNXzUQ9fm1Q/APoSWAhhfkMAmpEbRhFKwsvCsmosRIHx444PoKcIXKkjIImjTzjkQAAIfkEBQUABAAsAgA8AEIAQgAAA/VIBNz+8KlJq72Yxs1d/uDVjVxogmQqnaylvkArT7A63/V47/m2/8CgcEgsGo/IpHLJbDqf0Kh0Sj0FroGqDMvVmrjgrDcTBo8v5fCZki6vCW33Oq4+0832O/at3+f7fICBdzsChgJGeoWHhkV0P4yMRG1BkYeOeECWl5hXQ5uNIAOjA1KgiKKko1CnqBmqqk+nIbCkTq20taVNs7m1vKAnurtLvb6wTMbHsUq4wrrFwSzDzcrLtknW16tI2tvERt6pv0fi48jh5h/U6Zs77EXSN/BE8jP09ZFA+PmhP/xvJgAMSGBgQINvEK5ReIZhQ3QEMTBLAAAh+QQFBQAEACwCAB8AMABXAAAD50i6DA4syklre87qTbHn4OaNYSmNqKmiqVqyrcvBsazRpH3jmC7yD98OCBF2iEXjBKmsAJsWHDQKmw571l8my+16v+CweEwum8+hgHrNbrvbtrd8znbR73MVfg838f8BeoB7doN0cYZvaIuMjY6PkJGSk2gClgJml5pjmp2YYJ6dX6GeXaShWaeoVqqlU62ir7CXqbOWrLafsrNctjIDwAMWvC7BwRWtNsbGFKc+y8fNsTrQ0dK3QtXAYtrCYd3eYN3c49/a5NVj5eLn5u3s6e7x8NDo9fbL+Mzy9/T5+tvUzdN3Zp+GBAAh+QQJBQAEACwCAAIAfAB8AAAD/0i63P4wykmrvTjrzbv/YCiOZGmeaKqubOu+cCzPdArcQK2TOL7/nl4PSMwIfcUk5YhUOh3M5nNKiOaoWCuWqt1Ou16l9RpOgsvEMdocXbOZ7nQ7DjzTaeq7zq6P5fszfIASAYUBIYKDDoaGIImKC4ySH3OQEJKYHZWWi5iZG0ecEZ6eHEOio6SfqCaqpaytrpOwJLKztCO2jLi1uoW8Ir6/wCHCxMG2x7muysukzb230M6H09bX2Nna29zd3t/g4cAC5OXm5+jn3Ons7eba7vHt2fL16tj2+QL0+vXw/e7WAUwnrqDBgwgTKlzIsKHDh2gGSBwAccHEixAvaqTYcFCjRoYeNyoM6REhyZIHT4o0qPIjy5YTTcKUmHImx5cwE85cmJPnSYckK66sSAAj0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gwxZJAAA7';
  121 + var playBigBase64 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwEAYAAAAHkiXEAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAByBJREFUeNrlXFlIVV0U3vsaaINmZoX0YAR6y8oGMkKLoMESSjBoUJEoIogoIggigoryIQoKGqi3Roh6TKGBIkNEe6hMgzTNKLPSUlMrNdvrf/juurlP5zpc7znb+r+X755pn7W+Pe+9zpVimIEUKVKJiUIKKWRqKs5OmwZOTBQkSFBUFK5HR+tPt7WBOzpwX3U1jquqwGVleK6iQkoppSQy7a8xEBERLVwIPnsWXF9PrqCxEXzxInjpUrDH47YO0h2hw8JwtG4deN8+8OzZA0vl7Vt/iZZCCtnUhPPt7fp9o0fjvpgYHHu9uD8+Hsdsh52hggTV1uLg2DHwpUvSIz3S093ttE4hB5qSxYuRAc+f910im5vBFy6As7LALORQ7RgzBullZIBPngQ3NPRt1+vXeH7NGtN69u8oERFFRIDPnQMrZe8YZ0huLhwMDzdjb1gYC4zj4uKAeaFIkbpxAwfWvse48FOngp89s7eeS1p2Nlg63vQF7Y8iRWrlSthZXR2wZhAR0dy55gwlIqI5c8AfPtgbeuUKHIqKMi3soP3z1UzwiRP2NbqtDbxsmXuGacK3tOgG/fwJ3rbNtIDO+J2ZiQzp6ND97uzE+RUrHDaAmxprif/+HQasXm1aKKcBPxcsADc1/VEjFClS8+eH7oXcuSpSpJ480V/Y0wPOyjItjNtgofWmiPHuHa7Hxg79RUT0e1Rjxb/X1ASnDw9vf/3S9bl1K/iEFSlSixbZdz7Xr5t2fLgBuuTn2xfUjRsHmVBYGNg6gWpo+FtHNU4DuowYAZ3Ky+11GzOm/4SIiGjDBvuczM52zAHua4iI6OpVcGEheO1a8PCdP/j9CNRyKFKk9u4doBDWCRXXBOcE0GekgVBUhPuSk00LPTAdCwp0+3n0GBER4AFenbQiJ8cdg7dvpwGB5xunT4PHjTMtuL0/qan29q9fH+AB62jnyxe31moGlwFWNDbCzq1bcez+snLffr14odtrMzrCBet6/Pnz7hoabAZY8fgxT5iGRwbs36/b19kJHjnS49+BEkIIMXmy/vjt26YdCA4pKdgHKC2Fo5cvh2xiFBTu3NGPw8Ox/5CW5tG3/hi8VffokRmDQwUeNOTlwc/KSmRIbq67djx9Cm5p+W2akEKmpfnaSt5zZdTXY8+0udmQcg5h0iQwD3MfPgRPn+7UG6GjUjiqrNSver0eVIWEBP85EiSIN7H/dSxZAuY1roMHHRt02OqamOhrgnoN46SQQn76ZFoad8Hj8kOH4D/PZJOSQvYKW11jYnxNkHWK3NFhWhKz8HrB9+7xaCU06fYKIiBBgiIjfRlgHTf/j+NlNMTFgceOHXJSJEgQ9wXCVyOk9AlvLfEDWDT6X+DAAXSiHz8OOSkppJCRkfrJ9vYR+NHaql8wNV42jVevUFJ37kQ8kHX8PlRMmOD/SYIEtbZ69IAkvsATs38dP36ADx8GJyc7IzyD+xbhqxE1Nb4a8PKlfiE+HsOxyEgYZI1A+9tRUADetQtNTF2dU29CJ84Twhkz9KtVVb4+oKxMvxAWxjM101KFBvX1qNmbNkHwNWucFl4HT/QmTvSfIkGCSks9HC2MsxxzyTekp5uWLjh0dYHz88FeL2ry5ctm7LHq2NMD7rXUg6rC0cKM9+/BfQS1hghDXg1VpEjdvasvLpqHf3VWs/P+/QA3Lltm75jz8T7BZQAvn9tscJgWXpEiNWuWvd2bNwcQwONbnq6p0R8oLnYnA7Zs6Vvw7m7Yd/z4gDe5DQH2Xrum29/SwoObfh7cts1egFWrnDU4Lg785g2Ytx4LC2H4zJmmhe3XD5+dsJsD1xhHjgwwgfBwPFBXpydQXe3uFqXzfU9o7ZUSXFRkX/IHMcENGKXgixY27fBwA8TZudO+5dixY4gJ37xpyQVfvEtmpmnHTQMFMiUFevBeL6OkZMg1GQlER4P5wwTGt29g65bmvw/4HShanD+5mjIlxC+cNw/cKxqYw7RDHZY9TOEXXpEiVVurC8+jtJUrnTNAkSK1fDle2NWlG9DeDs7IMC2UM35zU2Mt8Urhel6eywalp+vCMzhM++hRDlo1LeCg/dNGNdy5Wtt4LvEuCv+HodqHCu/e2Y8Cyss5aNW0sAPzh8fx1uEkgyMGHWxqgjM8NhYGWoNSraMnvm6+89aXDHjmap1AMUpKcD9/+D2MAYNzcsD9fRDNsZMcwsedfehiPJFeUhJ4925wWVnfdvFHiDt2gEM/MXT+rwp47UMKKeT27Ti7Zw+YA6UCgbdKKyr8cTVSSCEbG3Ge/5yDwWtD48fjfv6rAl7C6LUeb4uvX8FnzuD5U6ewjP35s9M6uQaUJP4Qgz8E4SbJ2sk5BV5jevAAvHmzqS9/hs0XJxBi1CgOWtVjVnlHKSEB16Oj/wgoE0L8LsFcM169AldV8Q4UjouKULKtNch9/AdsEf6XQYgIsAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wMS0xMlQxMTo1NjowNSswODowMGcMj/QAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDEtMTJUMTE6NTY6MDUrMDg6MDAWUTdIAAAASXRFWHRzdmc6YmFzZS11cmkAZmlsZTovLy9ob21lL2FkbWluL2ljb24tZm9udC90bXAvaWNvbl9wZHMzeWYxNGczYi9ib2Zhbmcuc3Zn11us5wAAAABJRU5ErkJggg==';
  122 +
  123 + function _setStyle(dom, cssObj) {
  124 + Object.keys(cssObj).forEach(function (key) {
  125 + dom.style[key] = cssObj[key];
  126 + })
  127 + }
  128 +
  129 + var doms = {};
  130 +
  131 + var fragment = document.createDocumentFragment();
  132 + var btnWrap = document.createElement('div');
  133 + var control1 = document.createElement('div');
  134 + var control2 = document.createElement('div');
  135 + var textDom = document.createElement('div');
  136 + var speedDom = document.createElement('div');
  137 + var playDom = document.createElement('div');
  138 + var playBigDom = document.createElement('div');
  139 + var pauseDom = document.createElement('div');
  140 + var screenshotsDom = document.createElement('div');
  141 + var fullscreenDom = document.createElement('div');
  142 + var minScreenDom = document.createElement('div');
  143 + var loadingDom = document.createElement('div');
  144 + var loadingTextDom = document.createElement('div');
  145 + var quietAudioDom = document.createElement('div');
  146 + var playAudioDom = document.createElement('div');
  147 + var recordDom = document.createElement('div');
  148 + var recordingDom = document.createElement('div');
  149 + var bgDom = document.createElement('div');
  150 +
  151 + loadingTextDom.innerText = this._opt.loadingText || '';
  152 + textDom.innerText = this._opt.text || '';
  153 + speedDom.innerText = '';
  154 + playDom.title = '播放';
  155 + pauseDom.title = '暂停';
  156 + screenshotsDom.title = '截屏';
  157 + fullscreenDom.title = '全屏';
  158 + minScreenDom.title = '退出全屏';
  159 + quietAudioDom.title = '静音';
  160 + playAudioDom.title = '取消静音';
  161 + recordDom.title = '录制';
  162 + recordingDom.title = '取消录制';
  163 +
  164 + var wrapStyle = {
  165 + height: '38px',
  166 + zIndex: 11,
  167 + position: 'absolute',
  168 + left: 0,
  169 + bottom: 0,
  170 + width: '100%',
  171 + background: 'rgba(0,0,0)'
  172 + };
  173 +
  174 + var bgStyle = {
  175 + position: 'absolute',
  176 + width: '100%',
  177 + height: '100%',
  178 + };
  179 +
  180 + if (this._opt.background) {
  181 + bgStyle = Object.assign({}, bgStyle, {
  182 + backgroundRepeat: "no-repeat",
  183 + backgroundPosition: "center",
  184 + backgroundSize: '100%',
  185 + backgroundImage: "url('" + this._opt.background + "')"
  186 + })
  187 + }
  188 +
  189 + //
  190 + var loadingStyle = {
  191 + position: 'absolute',
  192 + width: '100%',
  193 + height: '100%',
  194 + textAlign: 'center',
  195 + color: "#fff",
  196 + display: 'none',
  197 + backgroundImage: "url('" + gifBase64 + "')",
  198 + backgroundRepeat: "no-repeat",
  199 + backgroundPosition: "center",
  200 + backgroundSize: "40px 40px",
  201 + };
  202 +
  203 + var playBigStyle = {
  204 + position: 'absolute',
  205 + width: '100%',
  206 + height: '100%',
  207 + display: 'none',
  208 + background: 'rgba(0,0,0,0.4)',
  209 + backgroundImage: "url('" + playBigBase64 + "')",
  210 + backgroundRepeat: "no-repeat",
  211 + backgroundPosition: "center",
  212 + backgroundSize: "48px 48px",
  213 + cursor: "pointer"
  214 + };
  215 +
  216 + var loadingTextStyle = {
  217 + position: 'absolute',
  218 + width: "100%",
  219 + top: '60%',
  220 + textAlign: 'center',
  221 + }
  222 + var controlStyle = {
  223 + position: 'absolute',
  224 + top: 0,
  225 + height: '100%',
  226 + display: 'flex',
  227 + alignItems: 'center',
  228 + };
  229 + var styleObj = {
  230 + display: 'none',
  231 + position: 'relative',
  232 + fontSize: '13px',
  233 + color: '#fff',
  234 + lineHeight: '20px',
  235 + marginLeft: '5px',
  236 + marginRight: '5px',
  237 + userSelect: 'none'
  238 + };
  239 + var styleObj2 = {
  240 + display: 'none',
  241 + position: 'relative',
  242 + width: '16px',
  243 + height: '16px',
  244 + marginLeft: '8px',
  245 + marginRight: '8px',
  246 + backgroundRepeat: "no-repeat",
  247 + backgroundPosition: "center",
  248 + backgroundSize: '100%',
  249 + cursor: 'pointer',
  250 + };
  251 + _setStyle(bgDom, bgStyle);
  252 + _setStyle(btnWrap, wrapStyle);
  253 + _setStyle(loadingDom, loadingStyle);
  254 + _setStyle(playBigDom, playBigStyle);
  255 + _setStyle(loadingTextDom, loadingTextStyle);
  256 + _setStyle(control1, Object.assign({}, controlStyle, {
  257 + left: 0
  258 + }));
  259 + _setStyle(control2, Object.assign({}, controlStyle, {
  260 + right: 0
  261 + }));
  262 + _setStyle(textDom, styleObj);
  263 + _setStyle(speedDom, styleObj);
  264 + _setStyle(playDom, Object.assign({}, styleObj2, {
  265 + backgroundImage: "url('" + playBase64 + "')",
  266 + }));
  267 +
  268 + _setStyle(pauseDom, Object.assign({}, styleObj2, {
  269 + backgroundImage: "url('" + pauseBase64 + "')"
  270 + }));
  271 +
  272 + _setStyle(screenshotsDom, Object.assign({}, styleObj2, {
  273 + backgroundImage: "url('" + screenshotBase64 + "')"
  274 + }));
  275 +
  276 + _setStyle(fullscreenDom, Object.assign({}, styleObj2, {
  277 + backgroundImage: "url('" + fullscreenBase64 + "')"
  278 + }));
  279 +
  280 + _setStyle(minScreenDom, Object.assign({}, styleObj2, {
  281 + backgroundImage: "url('" + minScreenBase64 + "')"
  282 + }));
  283 +
  284 + _setStyle(quietAudioDom, Object.assign({}, styleObj2, {
  285 + backgroundImage: "url('" + quietBase64 + "')"
  286 + }));
  287 +
  288 + _setStyle(playAudioDom, Object.assign({}, styleObj2, {
  289 + backgroundImage: "url('" + playAudioBase64 + "')"
  290 + }));
  291 +
  292 + _setStyle(recordDom, Object.assign({}, styleObj2, {
  293 + backgroundImage: "url('" + recordBase64 + "')"
  294 + }));
  295 +
  296 + _setStyle(recordingDom, Object.assign({}, styleObj2, {
  297 + backgroundImage: "url('" + recordingBase64 + "')"
  298 + }));
  299 +
  300 + loadingDom.appendChild(loadingTextDom);
  301 + if (this._opt.text) {
  302 + control1.appendChild(textDom);
  303 + doms.textDom = textDom;
  304 + }
  305 + if (this._opt.showBandwidth) {
  306 + control1.appendChild(speedDom);
  307 + doms.speedDom = speedDom;
  308 + }
  309 +
  310 + // record
  311 + //control2.appendChild(recordingDom);
  312 + //control2.appendChild(recordDom);
  313 +
  314 + // screenshots
  315 + if (this._opt.operateBtns.screenshot) {
  316 + control2.appendChild(screenshotsDom);
  317 + doms.screenshotsDom = screenshotsDom;
  318 + }
  319 +
  320 + // play stop
  321 + if (this._opt.operateBtns.play) {
  322 + control2.appendChild(playDom);
  323 + control2.appendChild(pauseDom);
  324 + doms.playDom = playDom;
  325 + doms.pauseDom = pauseDom;
  326 + }
  327 +
  328 + // audio
  329 + if (this._opt.operateBtns.audio) {
  330 + control2.appendChild(playAudioDom);
  331 + control2.appendChild(quietAudioDom);
  332 + doms.playAudioDom = playAudioDom;
  333 + doms.quietAudioDom = quietAudioDom;
  334 + }
  335 +
  336 + // fullscreen
  337 + if (this._opt.operateBtns.fullscreen) {
  338 + control2.appendChild(fullscreenDom);
  339 + control2.appendChild(minScreenDom);
  340 + doms.fullscreenDom = fullscreenDom;
  341 + doms.minScreenDom = minScreenDom;
  342 + }
  343 +
  344 + btnWrap.appendChild(control1);
  345 + btnWrap.appendChild(control2);
  346 +
  347 + fragment.appendChild(bgDom);
  348 + doms.bgDom = bgDom;
  349 + fragment.appendChild(loadingDom);
  350 + doms.loadingDom = loadingDom;
  351 + if (this._showControl()) {
  352 + fragment.appendChild(btnWrap);
  353 + }
  354 + if (this._opt.operateBtns.play) {
  355 + fragment.appendChild(playBigDom);
  356 + doms.playBigDom = playBigDom;
  357 + }
  358 + this._container.appendChild(fragment);
  359 + this._doms = doms;
  360 + };
  361 +
  362 + Jessibuca.prototype._initWakeLock = function () {
  363 + this._wakeLock = null;
  364 + var _this = this;
  365 + var handleWakeLock = () => {
  366 + if (this._wakeLock !== null && "visible" === document.visibilityState) {
  367 + _this._enableWakeLock();
  368 + }
  369 + };
  370 +
  371 + document.addEventListener('visibilitychange', handleWakeLock);
  372 + document.addEventListener('fullscreenchange', handleWakeLock);
  373 + };
  374 +
  375 + Jessibuca.prototype._enableWakeLock = function () {
  376 + if (this._opt.keepScreenOn) {
  377 + if ("wakeLock" in navigator) {
  378 + var _this = this;
  379 + navigator.wakeLock.request("screen").then((lock) => {
  380 + _this._wakeLock = lock;
  381 + _this._wakeLock.addEventListener('release', function () {
  382 + });
  383 + })
  384 + }
  385 + }
  386 + };
  387 +
  388 +
  389 + Jessibuca.prototype._initGainNode = function () {
  390 + var gainNode = this._audioContext.createGain();
  391 + var _this = this;
  392 + var source;
  393 + if (!navigator.mediaDevices.getUserMedia) {
  394 + console.log('getUserMedia not supported on your browser!');
  395 + return;
  396 + }
  397 +
  398 + navigator.mediaDevices.getUserMedia(
  399 + // constraints - only audio needed for this app
  400 + {
  401 + audio: true
  402 + },
  403 +
  404 + // Success callback
  405 + function (stream) {
  406 + source = _this._audioContext.createMediaStreamSource(stream);
  407 + source.connect(gainNode);
  408 + gainNode.connect(_this._audioContext.destination);
  409 + _this._gainNode = gainNode;
  410 + },
  411 +
  412 + // Error callback
  413 + function (err) {
  414 + console.log('The following gUM error occurred: ' + err);
  415 + }
  416 + );
  417 + };
  418 +
  419 + Jessibuca.prototype._showControl = function () {
  420 + var result = false;
  421 +
  422 + var hasBtnShow = false;
  423 + Object.keys(this._opt.operateBtns).forEach((key) => {
  424 + if (this._opt.operateBtns[key]) {
  425 + hasBtnShow = true;
  426 + }
  427 + });
  428 +
  429 + if (this._opt.showBandwidth || this._opt.text || hasBtnShow) {
  430 + result = true;
  431 + }
  432 +
  433 + return result;
  434 + };
  435 +
  436 + Jessibuca.prototype._onMessage = function () {
  437 + var _this = this;
  438 + this._decoderWorker.onmessage = function (event) {
  439 + var msg = event.data;
  440 + switch (msg.cmd) {
  441 + case "init":
  442 + _this._opt.isDebug && console.log("decoder worker init")
  443 + _this.setBufferTime(_this._opt.videoBuffer);
  444 + if (!_this._hasLoaded) {
  445 + _this._opt.isDebug && console.log("has loaded");
  446 + _this._hasLoaded = true;
  447 + _this.onLoad();
  448 + _this._trigger('load');
  449 + }
  450 + break
  451 + case "initSize":
  452 + _this._canvasElement.width = msg.w;
  453 + _this._canvasElement.height = msg.h;
  454 + _this.onInitSize();
  455 + _this.resize();
  456 + _this._trigger('videoInfo', {w: msg.w, h: msg.h});
  457 + if (_this.isWebGL()) {
  458 +
  459 + } else {
  460 + _this._initRGB(msg.w, msg.h)
  461 + }
  462 + break
  463 + case "render":
  464 + if (_this._contextGL) {
  465 + _this._drawNextOutputPictureGL(msg.output);
  466 + } else {
  467 + _this._drawNextOutputPictureRGBA(msg.buffer);
  468 + }
  469 + if (_this.loading) {
  470 + _this.loading = false;
  471 + _this.playing = true;
  472 + _this._opt.isDebug && console.log("clear check loading timeout");
  473 + _this._clearCheckLoading();
  474 + }
  475 + _this._trigger('timeUpdate', msg.ts);
  476 + _this.onTimeUpdate(msg.ts);
  477 + _this._updateStats({bps: msg.bps, ts: msg.ts});
  478 + _this._checkHeart();
  479 + break
  480 + case "initAudio":
  481 + _this._initAudioPlay(msg.frameCount, msg.samplerate, msg.channels)
  482 + _this._trigger('audioInfo', {
  483 + numOfChannels: msg.channels, // 声频通道
  484 + length: msg.frameCount, // 帧数
  485 + sampleRate: msg.samplerate // 采样率
  486 + });
  487 + break
  488 + case "playAudio":
  489 + _this._playAudio(msg.buffer)
  490 + break
  491 + case "print":
  492 + _this.onLog(msg.text)
  493 + this._trigger('log', msg.text);
  494 + _this._opt.isDebug && console.log(msg.text);
  495 + break
  496 + case "printErr":
  497 + _this.onLog(msg.text);
  498 + this._trigger('log', msg.text);
  499 + _this.onError(msg.text);
  500 + this._trigger('error', msg.text);
  501 + _this._opt.isDebug && console.error(msg.text);
  502 + break;
  503 + case "initAudioPlanar":
  504 + _this._initAudioPlanar(msg);
  505 + _this._trigger('audioInfo', {
  506 + numOfChannels: msg.channels, // 声频通道
  507 + length: undefined, // 帧数
  508 + sampleRate: msg.samplerate // 采样率
  509 + });
  510 + break;
  511 + default:
  512 + _this._opt.isDebug && console.log(msg);
  513 + _this[msg.cmd](msg)
  514 + }
  515 + };
  516 + };
  517 +
  518 + Jessibuca.prototype._initEventListener = function () {
  519 + var _this = this;
  520 +
  521 + this._doms.playDom && this._doms.playDom.addEventListener('click', function (e) {
  522 + e.stopPropagation();
  523 + _this.play();
  524 + }, false);
  525 +
  526 + this._doms.playBigDom && this._doms.playBigDom.addEventListener('click', function (e) {
  527 + e.stopPropagation();
  528 + _this.play();
  529 + }, false);
  530 +
  531 + this._doms.pauseDom && this._doms.pauseDom.addEventListener('click', function (e) {
  532 + e.stopPropagation();
  533 + _this.pause();
  534 + }, false);
  535 +
  536 + // screenshots
  537 + this._doms.screenshotsDom && this._doms.screenshotsDom.addEventListener('click', function (e) {
  538 + e.stopPropagation();
  539 + var filename = _this._opt.text + '' + _now();
  540 + _this._screenshot(filename);
  541 + }, false);
  542 + //
  543 + this._doms.fullscreenDom && this._doms.fullscreenDom.addEventListener('click', function (e) {
  544 + e.stopPropagation();
  545 + _this.fullscreen = true;
  546 + }, false);
  547 + //
  548 + this._doms.minScreenDom && this._doms.minScreenDom.addEventListener('click', function (e) {
  549 + e.stopPropagation();
  550 + _this.fullscreen = false;
  551 + }, false);
  552 + //
  553 + this._doms.recordDom && this._doms.recordDom.addEventListener('click', function (e) {
  554 + e.stopPropagation();
  555 + _this.recording = true;
  556 + }, false);
  557 + //
  558 + this._doms.recordingDom && this._doms.recordingDom.addEventListener('click', function (e) {
  559 + e.stopPropagation();
  560 + _this.recording = false;
  561 + }, false);
  562 +
  563 + this._doms.quietAudioDom && this._doms.quietAudioDom.addEventListener('click', function (e) {
  564 + e.stopPropagation();
  565 + _this.cancelMute();
  566 + }, false);
  567 +
  568 + this._doms.playAudioDom && this._doms.playAudioDom.addEventListener('click', function (e) {
  569 + e.stopPropagation();
  570 + _this.mute();
  571 + }, false);
  572 + };
  573 + /**
  574 + * set debug
  575 + * @param flag
  576 + */
  577 + Jessibuca.prototype.setDebug = function (flag) {
  578 + this._opt.isDebug = !!flag;
  579 + };
  580 + /**
  581 + * mute
  582 + */
  583 + Jessibuca.prototype.mute = function () {
  584 + this._audioEnabled(false);
  585 + this.quieting = true;
  586 + };
  587 +
  588 + /**
  589 + * cancel mute
  590 + */
  591 + Jessibuca.prototype.cancelMute = function () {
  592 + this._audioEnabled(true);
  593 + this.quieting = false;
  594 + };
  595 +
  596 + /**
  597 + * 设置旋转角度
  598 + */
  599 + Jessibuca.prototype.setRotate = function (deg) {
  600 +
  601 + };
  602 +
  603 + Jessibuca.prototype._initStatus = function () {
  604 + this._loading = true;
  605 + this.loading = true;
  606 + this._recording = false;
  607 + this.recording = false;
  608 + this._playing = false;
  609 + this.playing = false;
  610 + this._quieting = this._opt.isNotMute ? false : true;
  611 + this.quieting = this._opt.isNotMute ? false : true;
  612 + this._fullscreen = false;
  613 + this.fullscreen = false;
  614 + }
  615 +
  616 + Jessibuca.prototype._initBtns = function () {
  617 + // show
  618 + _domToggle(this._doms.pauseDom, true);
  619 + _domToggle(this._doms.screenshotsDom, true);
  620 + _domToggle(this._doms.fullscreenDom, true);
  621 + _domToggle(this._doms.quietAudioDom, true);
  622 + _domToggle(this._doms.textDom, true);
  623 + _domToggle(this._doms.speedDom, true);
  624 + _domToggle(this._doms.recordDom, true);
  625 + // hide
  626 + _domToggle(this._doms.loadingDom, false);
  627 + _domToggle(this._doms.playDom, false);
  628 + _domToggle(this._doms.playBigDom, false);
  629 + _domToggle(this._doms.bgDom, false);
  630 + };
  631 +
  632 + Jessibuca.prototype._hideBtns = function () {
  633 + var _this = this;
  634 + Object.keys(this._doms).forEach(function (dom) {
  635 + if (dom !== 'bgDom') {
  636 + _domToggle(_this._doms[dom], false);
  637 + }
  638 + })
  639 + };
  640 +
  641 + function _checkFull() {
  642 + var isFull = document.fullscreenElement || window.webkitFullscreenElement || document.msFullscreenElement;
  643 + if (isFull === undefined) isFull = false;
  644 + return !!isFull;
  645 + }
  646 +
  647 + Jessibuca.prototype._updateStats = function (options) {
  648 + options = options || {};
  649 +
  650 + if (!this._startBpsTime) {
  651 + this._startBpsTime = _now();
  652 + }
  653 + var _nowTime = _now();
  654 + var timestamp = _nowTime - this._startBpsTime;
  655 +
  656 + if (timestamp < 1 * 1000) {
  657 + this._bps += (options.bps || 0);
  658 + this._stats.fps += 1;
  659 + this._stats.vbps += parseInt((options.bps || 0));
  660 + return;
  661 + }
  662 + this._stats.ts = options.ts;
  663 + this._doms.speedDom && (this._doms.speedDom.innerText = _bpsSize(this._bps));
  664 + this._trigger('bps', this._bps);
  665 + this._trigger('stats', this._stats);
  666 + this._trigger('performance', _fpsStatus(this._stats.fps));
  667 + this._bps = 0;
  668 + this._stats.fps = 0;
  669 + this._stats.vbps = 0;
  670 + this._startBpsTime = _nowTime;
  671 + };
  672 +
  673 +
  674 + Jessibuca.prototype._checkHeart = function () {
  675 + if (this._checkHeartTimeout) {
  676 + clearTimeout(this._checkHeartTimeout);
  677 + this._checkHeartTimeout = null;
  678 + }
  679 + var _this = this;
  680 + this._checkHeartTimeout = setTimeout(function () {
  681 + _this._opt.isDebug && console.log('check heart timeout');
  682 + _this._trigger('timeout');
  683 + _this.recording = false;
  684 + _this.playing = false;
  685 + _this._close();
  686 + }, this._opt.timeout * 1000);
  687 + };
  688 +
  689 + Jessibuca.prototype._checkLoading = function () {
  690 + if (this._checkLoadingTimeout) {
  691 + clearTimeout(this._checkLoadingTimeout);
  692 + this._checkLoadingTimeout = null;
  693 + }
  694 + var _this = this;
  695 + this._checkLoadingTimeout = setTimeout(function () {
  696 + _this._opt.isDebug && console.log('check loading timeout');
  697 + _this._trigger('timeout');
  698 + _this.playing = false;
  699 + _this._close();
  700 + _domToggle(_this._doms.loadingDom, false);
  701 + }, this._opt.timeout * 1000);
  702 + };
  703 +
  704 + Jessibuca.prototype._clearCheckLoading = function () {
  705 + if (this._checkLoadingTimeout) {
  706 + clearTimeout(this._checkLoadingTimeout);
  707 + this._checkLoadingTimeout = null;
  708 + }
  709 + };
  710 +
  711 + Jessibuca.prototype._initCheckVariable = function () {
  712 + this._startBpsTime = '';
  713 + this._bps = 0;
  714 + if (this._checkHeartTimeout) {
  715 + clearTimeout(this._checkHeartTimeout);
  716 + this._checkHeartTimeout = null;
  717 + }
  718 + }
  719 + //
  720 + Jessibuca.prototype._initAudioPlanar = function (msg) {
  721 + var channels = msg.channels
  722 + var samplerate = msg.samplerate
  723 + var context = this._audioContext;
  724 + var isPlaying = false;
  725 + var audioBuffers = [];
  726 + if (!context) return false;
  727 + var _this = this
  728 + this._playAudio = function (buffer) {
  729 + var frameCount = buffer[0][0].length
  730 + var audioBuffer = context.createBuffer(channels, frameCount * buffer.length, samplerate);
  731 + var copyToCtxBuffer = function (fromBuffer) {
  732 + for (var channel = 0; channel < channels; channel++) {
  733 + var nowBuffering = audioBuffer.getChannelData(channel);
  734 + for (var j = 0; j < buffer.length; j++) {
  735 + for (var i = 0; i < frameCount; i++) {
  736 + nowBuffering[i + j * frameCount] = fromBuffer[j][channel][i]
  737 + }
  738 + //postMessage({ cmd: "setBufferA", buffer: fromBuffer[j] }, '*', fromBuffer[j].map(x => x.buffer))
  739 + }
  740 + }
  741 + }
  742 + var playNextBuffer = function () {
  743 + isPlaying = false;
  744 + //console.log("~", audioBuffers.length)
  745 + if (audioBuffers.length) {
  746 + playAudio(audioBuffers.shift());
  747 + }
  748 + //if (audioBuffers.length > 1) audioBuffers.shift();
  749 + };
  750 + var playAudio = function (fromBuffer) {
  751 + if (!fromBuffer) return
  752 + if (isPlaying) {
  753 + audioBuffers.push(fromBuffer);
  754 + //console.log(audioBuffers.length)
  755 + return;
  756 + }
  757 + isPlaying = true;
  758 + copyToCtxBuffer(fromBuffer);
  759 + var source = context.createBufferSource();
  760 + source.buffer = audioBuffer;
  761 + source.connect(context.destination);
  762 + // source.onended = playNextBuffer;
  763 + source.start();
  764 + };
  765 + _this._playAudio = playAudio
  766 + _this.audioInterval = setInterval(playNextBuffer, audioBuffer.duration * 1000);
  767 + playAudio(buffer)
  768 + };
  769 + }
  770 +
  771 + function _unlock(context) {
  772 + context.resume();
  773 + var source = context.createBufferSource();
  774 + source.buffer = context.createBuffer(1, 1, 22050);
  775 + source.connect(context.destination);
  776 + if (source.noteOn)
  777 + source.noteOn(0);
  778 + else
  779 + source.start(0);
  780 + }
  781 +
  782 + function _domToggle(dom, toggle) {
  783 + if (dom) {
  784 + dom.style.display = toggle ? 'block' : "none";
  785 + }
  786 + }
  787 +
  788 + function _dataURLToFile(dataURL) {
  789 + const arr = dataURL.split(",");
  790 + const bstr = atob(arr[1]);
  791 + const type = arr[0].replace("data:", "").replace(";base64", "")
  792 + let n = bstr.length, u8arr = new Uint8Array(n);
  793 + while (n--) {
  794 + u8arr[n] = bstr.charCodeAt(n);
  795 + }
  796 + return new File([u8arr], 'file', {type});
  797 + }
  798 +
  799 + function _downloadImg(content, fileName) {
  800 + const aLink = document.createElement("a");
  801 + aLink.download = fileName;
  802 + aLink.href = URL.createObjectURL(content);
  803 + aLink.click();
  804 + URL.revokeObjectURL(content);
  805 + }
  806 +
  807 + function _bpsSize(value) {
  808 + if (null == value || value === '') {
  809 + return "0 KB/S";
  810 + }
  811 + var srcsize = parseFloat(value);
  812 + var size = srcsize / 1024;
  813 + size = size.toFixed(2);
  814 + return size + 'KB/S';
  815 + }
  816 +
  817 + function _fpsStatus(fps) {
  818 + var result = 0;
  819 + if (fps >= 24) {
  820 + result = 2;
  821 + } else if (fps >= 15) {
  822 + result = 1;
  823 + }
  824 +
  825 + return result;
  826 + }
  827 +
  828 + /**
  829 + * set audio
  830 + * @param flag
  831 + */
  832 + Jessibuca.prototype._audioEnabled = function (flag) {
  833 + if (flag) {
  834 + _unlock(this._audioContext)
  835 + this._audioEnabled = function (flag) {
  836 + if (flag) {
  837 + // 恢复
  838 + this._audioContext.resume();
  839 +
  840 + } else {
  841 + // 暂停
  842 + this._audioContext.suspend();
  843 + }
  844 + }
  845 + } else {
  846 + this._audioContext.suspend();
  847 + }
  848 + }
  849 +
  850 + Jessibuca.prototype._playAudio = function (data) {
  851 + var context = this._audioContext;
  852 + var isPlaying = false;
  853 + var isDecoding = false;
  854 + if (!context) return false;
  855 + var audioBuffers = [];
  856 + var decodeQueue = []
  857 + var _this = this
  858 + var playNextBuffer = function (e) {
  859 + if (audioBuffers.length) {
  860 + playBuffer(audioBuffers.shift())
  861 + }
  862 + };
  863 + var playBuffer = function (buffer) {
  864 + isPlaying = true;
  865 + var audioBufferSouceNode = context.createBufferSource();
  866 + audioBufferSouceNode.buffer = buffer;
  867 + audioBufferSouceNode.connect(context.destination);
  868 + // audioBufferSouceNode.onended = playNextBuffer;
  869 + audioBufferSouceNode.start();
  870 + if (!_this.audioInterval) {
  871 + _this.audioInterval = setInterval(playNextBuffer, buffer.duration * 1000 - 1);
  872 + }
  873 + }
  874 + var decodeAudio = function () {
  875 + if (decodeQueue.length) {
  876 + context.decodeAudioData(decodeQueue.shift(), tryPlay, decodeAudio);
  877 + } else {
  878 + isDecoding = false
  879 + }
  880 + }
  881 + var tryPlay = function (buffer) {
  882 + decodeAudio()
  883 + if (isPlaying) {
  884 + audioBuffers.push(buffer);
  885 + } else {
  886 + playBuffer(buffer)
  887 + }
  888 + }
  889 + var playAudio = function (data) {
  890 + decodeQueue.push(...data)
  891 + if (!isDecoding) {
  892 + isDecoding = true
  893 + decodeAudio()
  894 + }
  895 + }
  896 + this._playAudio = playAudio
  897 + playAudio(data)
  898 + }
  899 + Jessibuca.prototype._initAudioPlay = function (frameCount, samplerate, channels) {
  900 + var context = this._audioContext;
  901 + var isPlaying = false;
  902 + var audioBuffers = [];
  903 + if (!context) return false;
  904 + var _this = this
  905 + var resampled = samplerate < 22050;
  906 + if (resampled) {
  907 + _this._opt.isDebug && console.log("resampled!")
  908 + }
  909 + var audioBuffer = resampled ? context.createBuffer(channels, frameCount << 1, samplerate << 1) : context.createBuffer(channels, frameCount, samplerate);
  910 + var playNextBuffer = function () {
  911 + isPlaying = false;
  912 + //console.log("~", audioBuffers.length)
  913 + if (audioBuffers.length) {
  914 + playAudio(audioBuffers.shift());
  915 + }
  916 + };
  917 +
  918 + var copyToCtxBuffer = channels > 1 ? function (fromBuffer) {
  919 + for (var channel = 0; channel < channels; channel++) {
  920 + var nowBuffering = audioBuffer.getChannelData(channel);
  921 + if (resampled) {
  922 + for (var i = 0; i < frameCount; i++) {
  923 + nowBuffering[i * 2] = nowBuffering[i * 2 + 1] = fromBuffer[i * (channel + 1)] / 32768;
  924 + }
  925 + } else
  926 + for (var i = 0; i < frameCount; i++) {
  927 + nowBuffering[i] = fromBuffer[i * (channel + 1)] / 32768;
  928 + }
  929 +
  930 + }
  931 + } : function (fromBuffer) {
  932 + var nowBuffering = audioBuffer.getChannelData(0);
  933 + for (var i = 0; i < nowBuffering.length; i++) {
  934 + nowBuffering[i] = fromBuffer[i] / 32768;
  935 + }
  936 + };
  937 + var playAudio = function (fromBuffer) {
  938 + if (isPlaying) {
  939 + audioBuffers.push(fromBuffer);
  940 + return;
  941 + }
  942 + isPlaying = true;
  943 + copyToCtxBuffer(fromBuffer);
  944 + var source = context.createBufferSource();
  945 + source.buffer = audioBuffer;
  946 + source.connect(context.destination);
  947 + if (!_this.audioInterval) {
  948 + _this.audioInterval = setInterval(playNextBuffer, audioBuffer.duration * 1000);
  949 + }
  950 + source.start();
  951 + };
  952 + this._playAudio = playAudio;
  953 + }
  954 + /**
  955 + * Returns true if the canvas supports WebGL
  956 + */
  957 + Jessibuca.prototype.isWebGL = function () {
  958 + return !!this._contextGL;
  959 + };
  960 + /**
  961 + * set timeout
  962 + * @param time
  963 + */
  964 + Jessibuca.prototype.setTimeout = function (time) {
  965 + if (typeof time === 'number') {
  966 + this._opt.timeout = Number(time);
  967 + }
  968 + };
  969 +
  970 + /**
  971 + * @desc 视频缩放模式, 当视频分辨率比例与canvas显示区域比例不同时,缩放效果不同:
  972 + 0 视频画面完全填充canvas区域,画面会被拉伸
  973 + 1 视频画面做等比缩放后,高或宽对齐canvas区域,画面不被拉伸,但有黑边(默认)
  974 + 2 视频画面做等比缩放后,完全填充canvas区域,画面不被拉伸,没有黑边,但画面显示不全
  975 + * @param type
  976 + *
  977 + */
  978 + Jessibuca.prototype.setScaleMode = function (type) {
  979 + if (type === 0) {
  980 + this._opt.isFullResize = false;
  981 + this._opt.isResize = false;
  982 + } else if (type === 1) {
  983 + this._opt.isFullResize = false;
  984 + this._opt.isResize = true;
  985 + } else if (type === 2) {
  986 + this._opt.isFullResize = true;
  987 + }
  988 + this.resize();
  989 + };
  990 +
  991 + /**
  992 + * Create the GL context from the canvas element
  993 + */
  994 + Jessibuca.prototype._initContextGL = function () {
  995 + var canvas = this._canvasElement;
  996 + var gl = null;
  997 +
  998 + var validContextNames = ["webgl", "experimental-webgl", "moz-webgl", "webkit-3d"];
  999 + var nameIndex = 0;
  1000 +
  1001 + while (!gl && nameIndex < validContextNames.length) {
  1002 + var contextName = validContextNames[nameIndex];
  1003 +
  1004 + try {
  1005 + var contextOptions = {preserveDrawingBuffer: true};
  1006 + if (this._opt.contextOptions) {
  1007 + contextOptions = Object.assign(contextOptions, this._opt.contextOptions);
  1008 + }
  1009 +
  1010 + gl = canvas.getContext(contextName, contextOptions);
  1011 + } catch (e) {
  1012 + gl = null;
  1013 + }
  1014 +
  1015 + if (!gl || typeof gl.getParameter !== "function") {
  1016 + gl = null;
  1017 + }
  1018 +
  1019 + ++nameIndex;
  1020 + }
  1021 + ;
  1022 +
  1023 + this._contextGL = gl;
  1024 + };
  1025 +
  1026 + /**
  1027 + * Initialize GL shader program
  1028 + */
  1029 + Jessibuca.prototype._initProgram = function () {
  1030 + var gl = this._contextGL;
  1031 +
  1032 + var vertexShaderScript = [
  1033 + 'attribute vec4 vertexPos;',
  1034 + 'attribute vec4 texturePos;',
  1035 + 'varying vec2 textureCoord;',
  1036 +
  1037 + 'void main()',
  1038 + '{',
  1039 + 'gl_Position = vertexPos;',
  1040 + 'textureCoord = texturePos.xy;',
  1041 + '}'
  1042 + ].join('\n');
  1043 +
  1044 + var fragmentShaderScript = [
  1045 + 'precision highp float;',
  1046 + 'varying highp vec2 textureCoord;',
  1047 + 'uniform sampler2D ySampler;',
  1048 + 'uniform sampler2D uSampler;',
  1049 + 'uniform sampler2D vSampler;',
  1050 + 'const mat4 YUV2RGB = mat4',
  1051 + '(',
  1052 + '1.1643828125, 0, 1.59602734375, -.87078515625,',
  1053 + '1.1643828125, -.39176171875, -.81296875, .52959375,',
  1054 + '1.1643828125, 2.017234375, 0, -1.081390625,',
  1055 + '0, 0, 0, 1',
  1056 + ');',
  1057 +
  1058 + 'void main(void) {',
  1059 + 'highp float y = texture2D(ySampler, textureCoord).r;',
  1060 + 'highp float u = texture2D(uSampler, textureCoord).r;',
  1061 + 'highp float v = texture2D(vSampler, textureCoord).r;',
  1062 + 'gl_FragColor = vec4(y, u, v, 1) * YUV2RGB;',
  1063 + '}'
  1064 + ].join('\n');
  1065 +
  1066 + var vertexShader = gl.createShader(gl.VERTEX_SHADER);
  1067 + gl.shaderSource(vertexShader, vertexShaderScript);
  1068 + gl.compileShader(vertexShader);
  1069 + if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {
  1070 + this._opt.isDebug && console.log('Vertex shader failed to compile: ' + gl.getShaderInfoLog(vertexShader));
  1071 + }
  1072 +
  1073 + var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
  1074 + gl.shaderSource(fragmentShader, fragmentShaderScript);
  1075 + gl.compileShader(fragmentShader);
  1076 + if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {
  1077 + this._opt.isDebug && console.log('Fragment shader failed to compile: ' + gl.getShaderInfoLog(fragmentShader));
  1078 + }
  1079 +
  1080 + var program = gl.createProgram();
  1081 + gl.attachShader(program, vertexShader);
  1082 + gl.attachShader(program, fragmentShader);
  1083 + gl.linkProgram(program);
  1084 + if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
  1085 + this._opt.isDebug && console.log('Program failed to compile: ' + gl.getProgramInfoLog(program));
  1086 + }
  1087 +
  1088 + gl.useProgram(program);
  1089 +
  1090 + this._shaderProgram = program;
  1091 + };
  1092 +
  1093 + /**
  1094 + * Initialize vertex buffers and attach to shader program
  1095 + */
  1096 + Jessibuca.prototype._initBuffers = function () {
  1097 + var gl = this._contextGL;
  1098 + var program = this._shaderProgram;
  1099 +
  1100 + var vertexPosBuffer = gl.createBuffer();
  1101 + gl.bindBuffer(gl.ARRAY_BUFFER, vertexPosBuffer);
  1102 + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1, 1, -1, 1, 1, -1, -1, -1]), gl.STATIC_DRAW);
  1103 +
  1104 + var vertexPosRef = gl.getAttribLocation(program, 'vertexPos');
  1105 + gl.enableVertexAttribArray(vertexPosRef);
  1106 + gl.vertexAttribPointer(vertexPosRef, 2, gl.FLOAT, false, 0, 0);
  1107 +
  1108 + var texturePosBuffer = gl.createBuffer();
  1109 + gl.bindBuffer(gl.ARRAY_BUFFER, texturePosBuffer);
  1110 + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1, 0, 0, 0, 1, 1, 0, 1]), gl.STATIC_DRAW);
  1111 +
  1112 + var texturePosRef = gl.getAttribLocation(program, 'texturePos');
  1113 + gl.enableVertexAttribArray(texturePosRef);
  1114 + gl.vertexAttribPointer(texturePosRef, 2, gl.FLOAT, false, 0, 0);
  1115 +
  1116 + this._texturePosBuffer = texturePosBuffer;
  1117 + };
  1118 +
  1119 + /**
  1120 + * Initialize GL textures and attach to shader program
  1121 + */
  1122 + Jessibuca.prototype._initTextures = function () {
  1123 + var gl = this._contextGL;
  1124 + var program = this._shaderProgram;
  1125 +
  1126 + var yTextureRef = this._initTexture();
  1127 + var ySamplerRef = gl.getUniformLocation(program, 'ySampler');
  1128 + gl.uniform1i(ySamplerRef, 0);
  1129 + this._yTextureRef = yTextureRef;
  1130 +
  1131 + var uTextureRef = this._initTexture();
  1132 + var uSamplerRef = gl.getUniformLocation(program, 'uSampler');
  1133 + gl.uniform1i(uSamplerRef, 1);
  1134 + this._uTextureRef = uTextureRef;
  1135 +
  1136 + var vTextureRef = this._initTexture();
  1137 + var vSamplerRef = gl.getUniformLocation(program, 'vSampler');
  1138 + gl.uniform1i(vSamplerRef, 2);
  1139 + this._vTextureRef = vTextureRef;
  1140 + };
  1141 +
  1142 + /**
  1143 + * Create and configure a single texture
  1144 + */
  1145 + Jessibuca.prototype._initTexture = function () {
  1146 + var gl = this._contextGL;
  1147 +
  1148 + var textureRef = gl.createTexture();
  1149 + gl.bindTexture(gl.TEXTURE_2D, textureRef);
  1150 + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
  1151 + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
  1152 + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
  1153 + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
  1154 + gl.bindTexture(gl.TEXTURE_2D, null);
  1155 +
  1156 + return textureRef;
  1157 + };
  1158 +
  1159 + /**
  1160 + * Draw picture data to the canvas.
  1161 + * If this object is using WebGL, the data must be an I420 formatted ArrayBuffer,
  1162 + * Otherwise, data must be an RGBA formatted ArrayBuffer.
  1163 + */
  1164 + Jessibuca.prototype._drawNextOutputPicture = function (data) {
  1165 + if (this._contextGL) {
  1166 + this._drawNextOutputPictureGL(data);
  1167 + } else {
  1168 + this._drawNextOutputPictureRGBA(data);
  1169 + }
  1170 + };
  1171 +
  1172 + /**
  1173 + * Draw the next output picture using WebGL
  1174 + */
  1175 + Jessibuca.prototype._drawNextOutputPictureGL = function (data) {
  1176 + var gl = this._contextGL;
  1177 + var texturePosBuffer = this._texturePosBuffer;
  1178 + var yTextureRef = this._yTextureRef;
  1179 + var uTextureRef = this._uTextureRef;
  1180 + var vTextureRef = this._vTextureRef;
  1181 + var croppingParams = this.croppingParams
  1182 + var width = this._canvasElement.width
  1183 + var height = this._canvasElement.height
  1184 + if (croppingParams) {
  1185 + gl.viewport(0, 0, croppingParams.width, croppingParams.height);
  1186 + var tTop = croppingParams.top / height;
  1187 + var tLeft = croppingParams.left / width;
  1188 + var tBottom = croppingParams.height / height;
  1189 + var tRight = croppingParams.width / width;
  1190 + var texturePosValues = new Float32Array([tRight, tTop, tLeft, tTop, tRight, tBottom, tLeft, tBottom]);
  1191 +
  1192 + gl.bindBuffer(gl.ARRAY_BUFFER, texturePosBuffer);
  1193 + gl.bufferData(gl.ARRAY_BUFFER, texturePosValues, gl.DYNAMIC_DRAW);
  1194 + } else {
  1195 + gl.viewport(0, 0, this._canvasElement.width, this._canvasElement.height);
  1196 + }
  1197 + gl.activeTexture(gl.TEXTURE0);
  1198 + gl.bindTexture(gl.TEXTURE_2D, yTextureRef);
  1199 + gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, width, height, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, data[0]);
  1200 +
  1201 + gl.activeTexture(gl.TEXTURE1);
  1202 + gl.bindTexture(gl.TEXTURE_2D, uTextureRef);
  1203 + gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, width / 2, height / 2, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, data[1]);
  1204 +
  1205 + gl.activeTexture(gl.TEXTURE2);
  1206 + gl.bindTexture(gl.TEXTURE_2D, vTextureRef);
  1207 + gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, width / 2, height / 2, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, data[2]);
  1208 +
  1209 + gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
  1210 + };
  1211 +
  1212 + /**
  1213 + * Draw next output picture using ARGB data on a 2d canvas.
  1214 + */
  1215 + Jessibuca.prototype._drawNextOutputPictureRGBA = function (data) {
  1216 + this.imageData.data.set(data);
  1217 + var croppingParams = this.croppingParams
  1218 + if (!croppingParams) {
  1219 + this.ctx2d.putImageData(this.imageData, 0, 0);
  1220 + } else {
  1221 + this.ctx2d.putImageData(this.imageData, -croppingParams.left, -croppingParams.top, 0, 0, croppingParams.width, croppingParams.height);
  1222 + }
  1223 + };
  1224 + Jessibuca.prototype.ctx2d = null;
  1225 + Jessibuca.prototype.imageData = null;
  1226 + Jessibuca.prototype._initRGB = function (width, height) {
  1227 + this.ctx2d = this._canvasElement.getContext('2d');
  1228 + this.imageData = this.ctx2d.getImageData(0, 0, width, height);
  1229 + this.clear = function () {
  1230 + this.ctx2d.clearRect(0, 0, width, height)
  1231 + };
  1232 + };
  1233 +
  1234 + Jessibuca.prototype.pause = function () {
  1235 + this._close();
  1236 + if (this.loading) {
  1237 + _domToggle(this._doms.loadingDom, false);
  1238 + }
  1239 + this.recording = false;
  1240 + this.playing = false;
  1241 + };
  1242 +
  1243 + Jessibuca.prototype._close = function () {
  1244 + if (this.audioInterval) {
  1245 + clearInterval(this.audioInterval)
  1246 + }
  1247 + delete this._playAudio
  1248 + this._decoderWorker.postMessage({cmd: "close"})
  1249 +
  1250 + if (this._wakeLock) {
  1251 + this._wakeLock.release();
  1252 + this._wakeLock = null;
  1253 + }
  1254 +
  1255 + // this._contextGL.clear(this._contextGL.COLOR_BUFFER_BIT);
  1256 + this._initCheckVariable();
  1257 + }
  1258 + /**
  1259 + * destroy
  1260 + * @desc delete worker,
  1261 + */
  1262 + Jessibuca.prototype.destroy = function () {
  1263 + // destroy
  1264 + this._decoderWorker.terminate()
  1265 + window.removeEventListener("resize", this._onresize);
  1266 + window.removeEventListener('fullscreenchange', this._onfullscreenchange);
  1267 + this._initCheckVariable();
  1268 + this._clearCheckLoading();
  1269 + this._off();
  1270 + this._hasLoaded = false;
  1271 + // remove dom
  1272 + while (this._container.firstChild) {
  1273 + this._container.removeChild(this._container.firstChild);
  1274 + }
  1275 + if (this._wakeLock) {
  1276 + this._wakeLock.release();
  1277 + }
  1278 + }
  1279 +
  1280 + /**
  1281 + * 清理画布为黑色背景
  1282 + * 用于canvas重用进行多个流切换播放时,将上一个画面清理
  1283 + * 避免后一个视频播放之前出现前一个视频最后一个画面
  1284 + */
  1285 + Jessibuca.prototype.clearView = function () {
  1286 + this._contextGL.clear(this._contextGL.COLOR_BUFFER_BIT);
  1287 + };
  1288 + /**
  1289 + * play
  1290 + * @param url
  1291 + */
  1292 + Jessibuca.prototype.play = function (url) {
  1293 + if (!this.playUrl && !url) {
  1294 + return;
  1295 + }
  1296 + var needDelay = false;
  1297 + if (url) {
  1298 + if (this.playUrl) {
  1299 + this._close();
  1300 + needDelay = true;
  1301 + this._contextGL.clear(this._contextGL.COLOR_BUFFER_BIT);
  1302 + }
  1303 + this.loading = true;
  1304 + _domToggle(this._doms.bgDom, false);
  1305 + this._checkLoading();
  1306 + this.playUrl = url;
  1307 + } else if (this.playUrl) {
  1308 + // retry
  1309 + if (this.loading) {
  1310 + this._hideBtns();
  1311 + _domToggle(this._doms.fullscreenDom, true);
  1312 + _domToggle(this._doms.pauseDom, true);
  1313 + _domToggle(this._doms.loadingDom, true);
  1314 + this._checkLoading();
  1315 + } else {
  1316 + this.playing = true;
  1317 + }
  1318 + }
  1319 + this._initCheckVariable();
  1320 +
  1321 + if (needDelay) {
  1322 + var _this = this;
  1323 + setTimeout(function () {
  1324 + _this._decoderWorker.postMessage({cmd: "play", url: _this.playUrl, isWebGL: _this.isWebGL()})
  1325 + }, 300);
  1326 + } else {
  1327 + this._decoderWorker.postMessage({cmd: "play", url: this.playUrl, isWebGL: this.isWebGL()})
  1328 + }
  1329 + };
  1330 + /**
  1331 + * has loaded
  1332 + * @returns {boolean}
  1333 + */
  1334 + Jessibuca.prototype.hasLoaded = function () {
  1335 + return this._hasLoaded;
  1336 + };
  1337 +
  1338 + Object.defineProperty(Jessibuca.prototype, "fullscreen", {
  1339 + set(value) {
  1340 + if (value) {
  1341 + if (!_checkFull()) {
  1342 + this._container.requestFullscreen();
  1343 + }
  1344 + _domToggle(this._doms.minScreenDom, true);
  1345 + _domToggle(this._doms.fullscreenDom, false);
  1346 + } else {
  1347 + if (_checkFull()) {
  1348 + document.exitFullscreen();
  1349 + }
  1350 + _domToggle(this._doms.minScreenDom, false);
  1351 + _domToggle(this._doms.fullscreenDom, true);
  1352 + }
  1353 +
  1354 + if (this._fullscreen !== value) {
  1355 + this.onFullscreen(value);
  1356 + this._trigger('fullscreen', value);
  1357 + }
  1358 + this._fullscreen = value;
  1359 + },
  1360 + get() {
  1361 + return this._fullscreen;
  1362 + }
  1363 + });
  1364 +
  1365 + Object.defineProperty(Jessibuca.prototype, 'playing', {
  1366 + set(value) {
  1367 + if (value) {
  1368 + _domToggle(this._doms.playBigDom, false);
  1369 + _domToggle(this._doms.playDom, false);
  1370 + _domToggle(this._doms.pauseDom, true);
  1371 +
  1372 + _domToggle(this._doms.screenshotsDom, true);
  1373 + _domToggle(this._doms.recordDom, true);
  1374 + if (this._quieting) {
  1375 + _domToggle(this._doms.quietAudioDom, true);
  1376 + _domToggle(this._doms.playAudioDom, false);
  1377 + } else {
  1378 + _domToggle(this._doms.quietAudioDom, false);
  1379 + _domToggle(this._doms.playAudioDom, true);
  1380 + }
  1381 + } else {
  1382 + this._doms.speedDom && (this._doms.speedDom.innerText = '');
  1383 + if (this.playUrl) {
  1384 + _domToggle(this._doms.playDom, true);
  1385 + _domToggle(this._doms.playBigDom, true);
  1386 + _domToggle(this._doms.pauseDom, false);
  1387 + }
  1388 +
  1389 + // 在停止状态下录像,截屏,音量是非激活,只有播放,最大化时可点击
  1390 + _domToggle(this._doms.recordDom, false);
  1391 + _domToggle(this._doms.recordingDom, false);
  1392 + _domToggle(this._doms.screenshotsDom, false);
  1393 + _domToggle(this._doms.quietAudioDom, false);
  1394 + _domToggle(this._doms.playAudioDom, false);
  1395 + }
  1396 +
  1397 + if (this._playing !== value) {
  1398 + if (value) {
  1399 + this.onPlay();
  1400 + this._trigger('play');
  1401 + } else {
  1402 + this.onPause();
  1403 + this._trigger('pause');
  1404 + }
  1405 + }
  1406 + this._playing = value;
  1407 + },
  1408 + get() {
  1409 + return this._playing;
  1410 + }
  1411 + });
  1412 +
  1413 + Object.defineProperty(Jessibuca.prototype, 'recording', {
  1414 + set(value) {
  1415 + if (value) {
  1416 + _domToggle(this._doms.recordDom, false);
  1417 + _domToggle(this._doms.recordingDom, true);
  1418 + } else {
  1419 + _domToggle(this._doms.recordDom, true);
  1420 + _domToggle(this._doms.recordingDom, false);
  1421 +
  1422 + }
  1423 + if (this._recording !== value) {
  1424 + this.onRecord(value);
  1425 + this._trigger('record', value);
  1426 + this._recording = value;
  1427 + }
  1428 + },
  1429 + get() {
  1430 + return this._recording;
  1431 + }
  1432 + });
  1433 +
  1434 + Object.defineProperty(Jessibuca.prototype, 'quieting', {
  1435 + set(value) {
  1436 + if (value) {
  1437 + _domToggle(this._doms.quietAudioDom, true);
  1438 + _domToggle(this._doms.playAudioDom, false);
  1439 + } else {
  1440 + _domToggle(this._doms.quietAudioDom, false);
  1441 + _domToggle(this._doms.playAudioDom, true);
  1442 + }
  1443 + if (this._quieting !== value) {
  1444 + this.onMute(value);
  1445 + this._trigger('mute', value);
  1446 + }
  1447 + this._quieting = value;
  1448 + },
  1449 + get() {
  1450 + return this._quieting;
  1451 + }
  1452 + });
  1453 +
  1454 + Object.defineProperty(Jessibuca.prototype, 'loading', {
  1455 + set(value) {
  1456 + if (value) {
  1457 + this._hideBtns();
  1458 + _domToggle(this._doms.fullscreenDom, true);
  1459 + _domToggle(this._doms.pauseDom, true);
  1460 + _domToggle(this._doms.loadingDom, true);
  1461 + } else {
  1462 + this._initBtns();
  1463 + }
  1464 + this._loading = value;
  1465 + },
  1466 + get() {
  1467 + return this._loading;
  1468 + }
  1469 + });
  1470 +
  1471 + /**
  1472 + * resize
  1473 + */
  1474 + Jessibuca.prototype.resize = function () {
  1475 + var width = this._container.clientWidth;
  1476 + var height = this._container.clientHeight;
  1477 + if (this._showControl()) {
  1478 + height -= 38;
  1479 + }
  1480 + var resizeWidth = this._canvasElement.width;
  1481 + var resizeHeight = this._canvasElement.height;
  1482 + var wScale = width / resizeWidth;
  1483 + var hScale = height / resizeHeight;
  1484 + var scale = wScale > hScale ? hScale : wScale;
  1485 + if (!this._opt.isResize) {
  1486 + if (wScale !== hScale) {
  1487 + scale = wScale + ',' + hScale;
  1488 + }
  1489 + }
  1490 + //
  1491 + if (this._opt.isFullResize) {
  1492 + scale = wScale > hScale ? wScale : hScale;
  1493 + }
  1494 +
  1495 + this._opt.isDebug && console.log('wScale', wScale, 'hScale', hScale, 'scale', scale);
  1496 + this._canvasElement.style.transform = "scale(" + scale + ")"
  1497 + this._canvasElement.style.left = ((width - resizeWidth) / 2) + "px"
  1498 + this._canvasElement.style.top = ((height - resizeHeight) / 2) + "px"
  1499 + }
  1500 +
  1501 + Jessibuca.prototype._fullscreenchange = function () {
  1502 + this.fullscreen = _checkFull();
  1503 + }
  1504 +
  1505 + /**
  1506 + * change buffer
  1507 + * @param buffer
  1508 + */
  1509 + Jessibuca.prototype.changeBuffer = function (buffer) {
  1510 + this._stats.buf = Number(buffer) * 1000;
  1511 + this._decoderWorker.postMessage({cmd: "setVideoBuffer", time: Number(buffer)});
  1512 + };
  1513 + /**
  1514 + * 设置最大缓冲时长,单位秒,播放器会自动消除延迟。
  1515 + * @param buffer
  1516 + */
  1517 + Jessibuca.prototype.setBufferTime = function (buffer) {
  1518 + this.changeBuffer(buffer);
  1519 + };
  1520 +
  1521 + /**
  1522 + * 设置音量大小,取值0.0 — 1.0
  1523 + * 当为0.0时,完全无声
  1524 + * 当为1.0时,最大音量,默认值
  1525 + * @param volume
  1526 + */
  1527 + Jessibuca.prototype.setVolume = function (volume) {
  1528 + if (this._gainNode) {
  1529 + this._gainNode.gain.setValueAtTime(volume, this._audioContext.currentTime);
  1530 + }
  1531 + };
  1532 +
  1533 + /**
  1534 + * 开启屏幕常亮, 在play前调用
  1535 + * 在手机浏览器上, canvas标签渲染视频并不会像video标签那样保持屏幕常亮
  1536 + * H5目前在chrome\edge 84, android chrome 84及以上有原生亮屏API, 需要是https页面
  1537 + * 其余平台为模拟实现,此时为兼容实现,并不保证所有浏览器都支持
  1538 + */
  1539 + Jessibuca.prototype.setKeepScreenOn = function () {
  1540 + this._opt.keepScreenOn = true;
  1541 + };
  1542 +
  1543 +
  1544 + /**
  1545 + * set fullscreen
  1546 + * @param flag
  1547 + */
  1548 + Jessibuca.prototype.setFullscreen = function (flag) {
  1549 + var fullscreen = !!flag;
  1550 + if (this.fullscreen !== fullscreen) {
  1551 + this.fullscreen = fullscreen;
  1552 + }
  1553 + };
  1554 +
  1555 + function _now() {
  1556 + return new Date().getTime();
  1557 + }
  1558 +
  1559 + Jessibuca.prototype._screenshot = function (filename, format, quality) {
  1560 + filename = filename || _now();
  1561 + var formatType = {
  1562 + png: 'image/png',
  1563 + jpeg: 'image/jpeg',
  1564 + webp: 'image/webp'
  1565 + };
  1566 + var encoderOptions = 0.92;
  1567 +
  1568 + if (typeof quality !== 'undefined') {
  1569 + encoderOptions = Number(quality);
  1570 + }
  1571 +
  1572 + var dataURL = this._canvasElement.toDataURL(formatType[format] || formatType.png, encoderOptions);
  1573 + _downloadImg(_dataURLToFile(dataURL), filename);
  1574 + }
  1575 +
  1576 + /**
  1577 + * 截图,调用后弹出下载框保存截图
  1578 + * @param filename 保存的文件名 默认时间戳
  1579 + * @param format 截图的格式,可选png或jpeg或者webp
  1580 + * @param quality 可选参数,当格式是jpeg或者webp时,压缩质量,取值0.0 ~ 1.0
  1581 + */
  1582 + Jessibuca.prototype.screenshot = function (filename, format, quality) {
  1583 + this._screenshot(filename, format, quality);
  1584 + };
  1585 +
  1586 +
  1587 + var eventSplitter = /\s+/;
  1588 +
  1589 + // Execute callbacks
  1590 + function _callEach(list, args, context) {
  1591 + if (list) {
  1592 + for (var i = 0, len = list.length; i < len; i += 1) {
  1593 + list[i].apply(context, args);
  1594 + }
  1595 + }
  1596 + }
  1597 +
  1598 + /**
  1599 + *
  1600 + * @param events
  1601 + * @param callback
  1602 + * @returns {Jessibuca}
  1603 + */
  1604 + Jessibuca.prototype.on = function (events, callback) {
  1605 + var cache, event, list;
  1606 + if (!callback) return this;
  1607 + cache = this.__events || (this.__events = {});
  1608 + events = events.split(eventSplitter);
  1609 + while (event = events.shift()) {
  1610 + list = cache[event] || (cache[event] = []);
  1611 + list.push(callback);
  1612 + }
  1613 + return this;
  1614 + };
  1615 + /**
  1616 + *
  1617 + * @param events
  1618 + * @param callback
  1619 + * @returns {Jessibuca}
  1620 + * @private
  1621 + */
  1622 + Jessibuca.prototype._off = function () {
  1623 + var cache;
  1624 + if (!(cache = this.__events)) return this;
  1625 + delete this.__events;
  1626 + return this;
  1627 + };
  1628 +
  1629 + /**
  1630 + *
  1631 + * @param events
  1632 + * @returns {Jessibuca}
  1633 + * @private
  1634 + */
  1635 + Jessibuca.prototype._trigger = function (events) {
  1636 + var cache, event, all, list, i, len, rest = [], args;
  1637 + if (!(cache = this.__events)) return this;
  1638 + events = events.split(eventSplitter);
  1639 + // Fill up `rest` with the callback arguments. Since we're only copying
  1640 + // the tail of `arguments`, a loop is much faster than Array#slice.
  1641 + for (i = 1, len = arguments.length; i < len; i++) {
  1642 + rest[i - 1] = arguments[i];
  1643 + }
  1644 + // For each event, walk through the list of callbacks twice, first to
  1645 + // trigger the event, then to trigger any `"all"` callbacks.
  1646 + while (event = events.shift()) {
  1647 + if (list = cache[event]) list = list.slice();
  1648 + // Execute event callbacks.
  1649 + _callEach(list, rest, this);
  1650 + }
  1651 + return this;
  1652 + }
  1653 +
  1654 + if (typeof define === 'function') {
  1655 + define(function () {
  1656 + return Jessibuca;
  1657 + });
  1658 + } else if (typeof exports !== 'undefined') {
  1659 + module.exports = Jessibuca;
  1660 + } else {
  1661 + window.Jessibuca = Jessibuca;
  1662 + }
  1663 +})();
... ...
public/h5/jessibuca/video.html 0 → 100644
  1 +<!DOCTYPE html>
  2 +<html lang="en">
  3 + <head>
  4 + <meta charset="UTF-8">
  5 + <title>监控视频</title>
  6 + <script src="./jessibuca.js"></script>
  7 + </head>
  8 + <body>
  9 + <div class="container-shell">
  10 + <div id="container" style="width: 100%;height: 600px;"></div>
  11 + </div>
  12 +
  13 +
  14 + <script>
  15 + function _play() {
  16 + let image = document.getElementById("container");
  17 + let jessibuca = new Jessibuca({
  18 + container: image,
  19 + videoBuffer: 0.2, // 缓存时长
  20 + isResize: false,
  21 + text: "",
  22 + loadingText: "",
  23 + useMSE: false,
  24 + debug: false,
  25 + isNotMute: false,
  26 + operateBtns: {
  27 + fullscreen: true,
  28 + screenshot: true,
  29 + play: true,
  30 + audio: false,
  31 + recorder: false
  32 + },
  33 + });
  34 + const urlParams = new URLSearchParams(window.location.search);
  35 + const tt = urlParams.get('tt'); // "john"
  36 + jessibuca.play(
  37 + tt
  38 + );
  39 + }
  40 +
  41 + _play();
  42 + </script>
  43 +
  44 + </body>
  45 +</html>
0 46 \ No newline at end of file
... ...
public/h5/jessibuca/videoOpenDoor.html 0 → 100644
  1 +<!DOCTYPE html>
  2 +<html lang="en">
  3 +
  4 +<head>
  5 + <meta charset="UTF-8">
  6 + <title>门禁开门</title>
  7 + <script src="./jessibuca.js"></script>
  8 + <script type="text/javascript" src="./jweixin-1.4.0.js"></script>
  9 + <script type="text/javascript" src="./hybrid_html_uni.webview.1.5.5.js"></script>
  10 +</head>
  11 +
  12 +<body>
  13 + <div class="container-shell">
  14 + <div id="container" style="width: 100%;height: 600px;"></div>
  15 +
  16 + <!-- <div style="height: 100px;
  17 + width: 90%;
  18 + text-align: center;
  19 + background-color: #0081ff;
  20 + color: #fff;
  21 + font-size: 42px;
  22 + line-height: 100px;
  23 + border-radius: 10px;
  24 + margin: 0 auto;
  25 + margin-top: 50px;" type="button" onclick="_openDoor()">开 门</div> -->
  26 + </div>
  27 +
  28 +
  29 + <script>
  30 + function _play() {
  31 + let image = document.getElementById("container");
  32 + let jessibuca = new Jessibuca({
  33 + container: image,
  34 + videoBuffer: 0.2, // 缓存时长
  35 + isResize: false,
  36 + text: "",
  37 + loadingText: "",
  38 + useMSE: false,
  39 + debug: false,
  40 + isNotMute: false,
  41 + operateBtns: {
  42 + fullscreen: true,
  43 + screenshot: true,
  44 + play: true,
  45 + audio: false,
  46 + recorder: false
  47 + },
  48 + });
  49 + const urlParams = new URLSearchParams(window.location.search);
  50 + const tt = urlParams.get('tt'); // "john"
  51 + jessibuca.play(
  52 + tt
  53 + );
  54 + }
  55 +
  56 + _play();
  57 +
  58 + function _openDoor() {
  59 + uni.postMessage({
  60 + data: {
  61 + action: 'openDoor'
  62 + }
  63 + });
  64 + }
  65 + </script>
  66 +
  67 +</body>
  68 +
  69 +</html>
0 70 \ No newline at end of file
... ...
public/h5/jessibuca/videoh5.html 0 → 100644
  1 +<!DOCTYPE html>
  2 +<html lang="en">
  3 + <head>
  4 + <meta charset="UTF-8">
  5 + <title>监控视频</title>
  6 + <script src="./jessibuca.js"></script>
  7 + </head>
  8 + <body>
  9 + <div class="container-shell">
  10 + <div id="container" style="width: 100%;height: 300px;"></div>
  11 + </div>
  12 +
  13 +
  14 + <script>
  15 + function _play() {
  16 + let image = document.getElementById("container");
  17 + let jessibuca = new Jessibuca({
  18 + container: image,
  19 + videoBuffer: 0.2, // 缓存时长
  20 + isResize: false,
  21 + text: "",
  22 + loadingText: "",
  23 + useMSE: false,
  24 + debug: false,
  25 + isNotMute: false,
  26 + operateBtns: {
  27 + fullscreen: true,
  28 + screenshot: true,
  29 + play: true,
  30 + audio: false,
  31 + recorder: false
  32 + },
  33 + });
  34 + const urlParams = new URLSearchParams(window.location.search);
  35 + const tt = urlParams.get('tt'); // "john"
  36 + jessibuca.play(
  37 + tt
  38 + );
  39 + }
  40 +
  41 + _play();
  42 + </script>
  43 +
  44 + </body>
  45 +</html>
0 46 \ No newline at end of file
... ...
src/main.js
... ... @@ -3,7 +3,7 @@ import App from &#39;./App.vue&#39;
3 3 import router from './router'
4 4 import ElementUI from 'element-ui'
5 5 import 'element-ui/lib/theme-chalk/index.css'
6   -import 'formiojs/dist/formio.full.min.css'
  6 +//import 'formiojs/dist/formio.full.min.css'
7 7 import i18n from './i18n'
8 8 import {getCommunityName,getCommunityId} from '@/api/community/communityApi'
9 9  
... ...