From 8c9c425c9a87d53a9474872abaf91e06eaceeaca Mon Sep 17 00:00:00 2001 From: "gao.zhiyuan" Date: Tue, 6 Jun 2023 15:06:40 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E8=A7=A3=E6=9E=90=E4=B8=8D=E5=8D=A1?= =?UTF-8?q?=E6=92=AD=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- console/client/assets/js/jessibuca/decoder.js | 8202 +++++++++- .../client/assets/js/jessibuca/decoder.wasm | Bin 1226828 -> 1050314 bytes .../client/assets/js/jessibuca/jessibuca.js | 13126 +++++++++++++++- .../client/assets/js/jessibuca/manifest.json | 1 + console/client/index.html | 2 +- .../src/sections/console/containers/index.js | 139 +- 6 files changed, 21406 insertions(+), 64 deletions(-) create mode 100644 console/client/assets/js/jessibuca/manifest.json diff --git a/console/client/assets/js/jessibuca/decoder.js b/console/client/assets/js/jessibuca/decoder.js index b4dbfae..effca2b 100644 --- a/console/client/assets/js/jessibuca/decoder.js +++ b/console/client/assets/js/jessibuca/decoder.js @@ -1 +1,8201 @@ -!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);var s=function(e,r){return e(r={exports:{}},r.exports),r.exports}((function(e){var r,t=void 0!==t?t:{},n={};for(r in t)t.hasOwnProperty(r)&&(n[r]=t[r]);var s,u,c,f,l,d="./this.program",p="object"==typeof window,h="function"==typeof importScripts,m="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,v="";m?(v=h?o.default.dirname(v)+"/":__dirname+"/",s=function(e,r){return f||(f=i.default),l||(l=o.default),e=l.normalize(e),f.readFileSync(e,r?null:"utf8")},c=function(e){var r=s(e,!0);return r.buffer||(r=new Uint8Array(r)),k(r.buffer),r},u=function(e,r,t){f||(f=i.default),l||(l=o.default),e=l.normalize(e),f.readFile(e,(function(e,n){e?t(e):r(n.buffer)}))},process.argv.length>1&&(d=process.argv[1].replace(/\\/g,"/")),process.argv.slice(2),e.exports=t,process.on("uncaughtException",(function(e){if(!(e instanceof Zr))throw e})),process.on("unhandledRejection",ee),t.inspect=function(){return"[Emscripten Module object]"}):(p||h)&&(h?v=self.location.href:"undefined"!=typeof document&&document.currentScript&&(v=document.currentScript.src),v=0!==v.indexOf("blob:")?v.substr(0,v.lastIndexOf("/")+1):"",s=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},h&&(c=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),u=function(e,r,t){var n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="arraybuffer",n.onload=function(){200==n.status||0==n.status&&n.response?r(n.response):t()},n.onerror=t,n.send(null)});var y,g,w=t.print||console.log.bind(console),E=t.printErr||console.warn.bind(console);for(r in n)n.hasOwnProperty(r)&&(t[r]=n[r]);function b(e){b.shown||(b.shown={}),b.shown[e]||(b.shown[e]=1,E(e))}n=null,t.arguments,t.thisProgram&&(d=t.thisProgram),t.quit,t.wasmBinary&&(y=t.wasmBinary),t.noExitRuntime,"object"!=typeof WebAssembly&&ee("no native wasm support detected");var _=!1;function k(e,r){e||ee("Assertion failed: "+r)}var T="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function P(e,r,t){for(var n=r+t,o=r;e[o]&&!(o>=n);)++o;if(o-r>16&&e.subarray&&T)return T.decode(e.subarray(r,o));for(var i="";r>10,56320|1023&c)}}else i+=String.fromCharCode((31&a)<<6|s)}else i+=String.fromCharCode(a)}return i}function C(e,r){return e?P($,e,r):""}function A(e,r,t,n){if(!(n>0))return 0;for(var o=t,i=t+n-1,a=0;a=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;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 D(e,r,t){return A(e,$,r,t)}function S(e){for(var r=0,t=0;t=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 F,x,$,R,M,O,I,j,U,N,B="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0;function L(e,r){for(var t=e,n=t>>1,o=n+r/2;!(n>=o)&&M[n];)++n;if((t=n<<1)-e>32&&B)return B.decode($.subarray(e,t));for(var i="",a=0;!(a>=r/2);++a){var s=R[e+2*a>>1];if(0==s)break;i+=String.fromCharCode(s)}return i}function W(e,r,t){if(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>1]=a,r+=2}return R[r>>1]=0,r-n}function z(e){return 2*e.length}function H(e,r){for(var t=0,n="";!(t>=r/4);){var o=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 V(e,r,t){if(void 0===t&&(t=2147483647),t<4)return 0;for(var n=r,o=n+t-4,i=0;i=55296&&a<=57343)a=65536+((1023&a)<<10)|1023&e.charCodeAt(++i);if(O[r>>2]=a,(r+=4)+4>o)break}return O[r>>2]=0,r-n}function X(e){for(var r=0,t=0;t=55296&&n<=57343&&++t,r+=4}return r}t.INITIAL_MEMORY;var G=[],q=[],Y=[];var K=0,J=null;function Q(e){K++,t.monitorRunDependencies&&t.monitorRunDependencies(K)}function Z(e){if(K--,t.monitorRunDependencies&&t.monitorRunDependencies(K),0==K&&J){var r=J;J=null,r()}}function ee(e){throw t.onAbort&&t.onAbort(e),E(e+=""),_=!0,e="abort("+e+"). Build with -s ASSERTIONS=1 for more info.",new WebAssembly.RuntimeError(e)}t.preloadedImages={},t.preloadedAudios={};var re,te,ne;function oe(e){return e.startsWith("data:application/octet-stream;base64,")}function ie(e){return e.startsWith("file://")}function ae(e){try{if(e==re&&y)return new Uint8Array(y);if(c)return c(e);throw"both async and sync fetching of the wasm failed"}catch(e){ee(e)}}function se(e){for(;e.length>0;){var r=e.shift();if("function"!=typeof r){var n=r.func;"number"==typeof n?void 0===r.arg?N.get(n)():N.get(n)(r.arg):n(void 0===r.arg?null:r.arg)}else r(t)}}function ue(){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()}oe(re="decoder.wasm")||(re=function(e){return t.locateFile?t.locateFile(e,v):v+e}(re));var ce={splitPath:function(e){return/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1)},normalizeArray:function(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:function(e){var r="/"===e.charAt(0),t="/"===e.substr(-1);return(e=ce.normalizeArray(e.split("/").filter((function(e){return!!e})),!r).join("/"))||r||(e="."),e&&t&&(e+="/"),(r?"/":"")+e},dirname:function(e){var r=ce.splitPath(e),t=r[0],n=r[1];return t||n?(n&&(n=n.substr(0,n.length-1)),t+n):"."},basename:function(e){if("/"===e)return"/";var r=(e=(e=ce.normalize(e)).replace(/\/$/,"")).lastIndexOf("/");return-1===r?e:e.substr(r+1)},extname:function(e){return ce.splitPath(e)[3]},join:function(){var e=Array.prototype.slice.call(arguments,0);return ce.normalize(e.join("/"))},join2:function(e,r){return ce.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]:he.cwd();if("string"!=typeof n)throw new TypeError("Arguments to path.resolve must be strings");if(!n)return"";e=n+"/"+e,r="/"===n.charAt(0)}return(r?"/":"")+(e=ce.normalizeArray(e.split("/").filter((function(e){return!!e})),!r).join("/"))||"."},relative:function(e,r){function t(e){for(var r=0;r=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;s0?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=Hr(r,!0)}return e.input.shift()},put_char:function(e,r){null===r||10===r?(w(P(e.output,0)),e.output=[]):0!=r&&e.output.push(r)},flush:function(e){e.output&&e.output.length>0&&(w(P(e.output,0)),e.output=[])}},default_tty1_ops:{put_char:function(e,r){null===r||10===r?(E(P(e.output,0)),e.output=[]):0!=r&&e.output.push(r)},flush:function(e){e.output&&e.output.length>0&&(E(P(e.output,0)),e.output=[])}}};function de(e){e=function(e,r){return Math.ceil(e/r)*r}(e,65536);var r=Qr(65536,e);return r?(function(e,r){$.fill(0,e,e+r)}(r,e),r):0}var pe={ops_table:null,mount:function(e){return pe.createNode(null,"/",16895,0)},createNode:function(e,r,t,n){if(he.isBlkdev(t)||he.isFIFO(t))throw new he.ErrnoError(63);pe.ops_table||(pe.ops_table={dir:{node:{getattr:pe.node_ops.getattr,setattr:pe.node_ops.setattr,lookup:pe.node_ops.lookup,mknod:pe.node_ops.mknod,rename:pe.node_ops.rename,unlink:pe.node_ops.unlink,rmdir:pe.node_ops.rmdir,readdir:pe.node_ops.readdir,symlink:pe.node_ops.symlink},stream:{llseek:pe.stream_ops.llseek}},file:{node:{getattr:pe.node_ops.getattr,setattr:pe.node_ops.setattr},stream:{llseek:pe.stream_ops.llseek,read:pe.stream_ops.read,write:pe.stream_ops.write,allocate:pe.stream_ops.allocate,mmap:pe.stream_ops.mmap,msync:pe.stream_ops.msync}},link:{node:{getattr:pe.node_ops.getattr,setattr:pe.node_ops.setattr,readlink:pe.node_ops.readlink},stream:{}},chrdev:{node:{getattr:pe.node_ops.getattr,setattr:pe.node_ops.setattr},stream:he.chrdev_stream_ops}});var o=he.createNode(e,r,t,n);return he.isDir(o.mode)?(o.node_ops=pe.ops_table.dir.node,o.stream_ops=pe.ops_table.dir.stream,o.contents={}):he.isFile(o.mode)?(o.node_ops=pe.ops_table.file.node,o.stream_ops=pe.ops_table.file.stream,o.usedBytes=0,o.contents=null):he.isLink(o.mode)?(o.node_ops=pe.ops_table.link.node,o.stream_ops=pe.ops_table.link.stream):he.isChrdev(o.mode)&&(o.node_ops=pe.ops_table.chrdev.node,o.stream_ops=pe.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=he.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,he.isDir(e.mode)?r.size=4096:he.isFile(e.mode)?r.size=e.usedBytes:he.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&&pe.resizeFileStorage(e,r.size)},lookup:function(e,r){throw he.genericErrors[44]},mknod:function(e,r,t,n){return pe.createNode(e,r,t,n)},rename:function(e,r,t){if(he.isDir(e.mode)){var n;try{n=he.lookupNode(r,t)}catch(e){}if(n)for(var o in n.contents)throw new he.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=he.lookupNode(e,r);for(var n in t.contents)throw new he.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=pe.createNode(e,r,41471,0);return n.link=t,n},readlink:function(e){if(!he.isLink(e.mode))throw new he.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(a>8&&i.subarray)r.set(i.subarray(o,o+a),t);else for(var s=0;s0||n+t8)throw new he.ErrnoError(32);for(var o=ce.normalizeArray(e.split("/").filter((function(e){return!!e})),!1),i=he.root,a="/",s=0;s40)throw new he.ErrnoError(32)}}return{path:a,node:i}},getPath:function(e){for(var r;;){if(he.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:function(e,r){for(var t=0,n=0;n>>0)%he.nameTable.length},hashAddNode:function(e){var r=he.hashName(e.parent.id,e.name);e.name_next=he.nameTable[r],he.nameTable[r]=e},hashRemoveNode:function(e){var r=he.hashName(e.parent.id,e.name);if(he.nameTable[r]===e)he.nameTable[r]=e.name_next;else for(var t=he.nameTable[r];t;){if(t.name_next===e){t.name_next=e.name_next;break}t=t.name_next}},lookupNode:function(e,r){var t=he.mayLookup(e);if(t)throw new he.ErrnoError(t,e);for(var n=he.hashName(e.id,r),o=he.nameTable[n];o;o=o.name_next){var i=o.name;if(o.parent.id===e.id&&i===r)return o}return he.lookup(e,r)},createNode:function(e,r,t,n){var o=new he.FSNode(e,r,t,n);return he.hashAddNode(o),o},destroyNode:function(e){he.hashRemoveNode(e)},isRoot:function(e){return e===e.parent},isMountpoint:function(e){return!!e.mounted},isFile:function(e){return 32768==(61440&e)},isDir:function(e){return 16384==(61440&e)},isLink:function(e){return 40960==(61440&e)},isChrdev:function(e){return 8192==(61440&e)},isBlkdev:function(e){return 24576==(61440&e)},isFIFO:function(e){return 4096==(61440&e)},isSocket:function(e){return 49152==(49152&e)},flagModes:{r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},modeStringToFlags:function(e){var r=he.flagModes[e];if(void 0===r)throw new Error("Unknown file open mode: "+e);return r},flagsToPermissionString:function(e){var r=["r","w","rw"][3&e];return 512&e&&(r+="w"),r},nodePermissions:function(e,r){return he.ignorePermissions||(!r.includes("r")||292&e.mode)&&(!r.includes("w")||146&e.mode)&&(!r.includes("x")||73&e.mode)?0:2},mayLookup:function(e){var r=he.nodePermissions(e,"x");return r||(e.node_ops.lookup?0:2)},mayCreate:function(e,r){try{he.lookupNode(e,r);return 20}catch(e){}return he.nodePermissions(e,"wx")},mayDelete:function(e,r,t){var n;try{n=he.lookupNode(e,r)}catch(e){return e.errno}var o=he.nodePermissions(e,"wx");if(o)return o;if(t){if(!he.isDir(n.mode))return 54;if(he.isRoot(n)||he.getPath(n)===he.cwd())return 10}else if(he.isDir(n.mode))return 31;return 0},mayOpen:function(e,r){return e?he.isLink(e.mode)?32:he.isDir(e.mode)&&("r"!==he.flagsToPermissionString(r)||512&r)?31:he.nodePermissions(e,he.flagsToPermissionString(r)):44},MAX_OPEN_FDS:4096,nextfd:function(e,r){e=e||0,r=r||he.MAX_OPEN_FDS;for(var t=e;t<=r;t++)if(!he.streams[t])return t;throw new he.ErrnoError(33)},getStream:function(e){return he.streams[e]},createStream:function(e,r,t){he.FSStream||(he.FSStream=function(){},he.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}}});var n=new he.FSStream;for(var o in e)n[o]=e[o];e=n;var i=he.nextfd(r,t);return e.fd=i,he.streams[i]=e,e},closeStream:function(e){he.streams[e]=null},chrdev_stream_ops:{open:function(e){var r=he.getDevice(e.node.rdev);e.stream_ops=r.stream_ops,e.stream_ops.open&&e.stream_ops.open(e)},llseek:function(){throw new he.ErrnoError(70)}},major:function(e){return e>>8},minor:function(e){return 255&e},makedev:function(e,r){return e<<8|r},registerDevice:function(e,r){he.devices[e]={stream_ops:r}},getDevice:function(e){return he.devices[e]},getMounts:function(e){for(var r=[],t=[e];t.length;){var n=t.pop();r.push(n),t.push.apply(t,n.mounts)}return r},syncfs:function(e,r){"function"==typeof e&&(r=e,e=!1),he.syncFSRequests++,he.syncFSRequests>1&&E("warning: "+he.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work");var t=he.getMounts(he.root.mount),n=0;function o(e){return he.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((function(r){if(!r.type.syncfs)return i(null);r.type.syncfs(r,e,i)}))},mount:function(e,r,t){var n,o="/"===t,i=!t;if(o&&he.root)throw new he.ErrnoError(10);if(!o&&!i){var a=he.lookupPath(t,{follow_mount:!1});if(t=a.path,n=a.node,he.isMountpoint(n))throw new he.ErrnoError(10);if(!he.isDir(n.mode))throw new he.ErrnoError(54)}var s={type:e,opts:r,mountpoint:t,mounts:[]},u=e.mount(s);return u.mount=s,s.root=u,o?he.root=u:n&&(n.mounted=s,n.mount&&n.mount.mounts.push(s)),u},unmount:function(e){var r=he.lookupPath(e,{follow_mount:!1});if(!he.isMountpoint(r.node))throw new he.ErrnoError(28);var t=r.node,n=t.mounted,o=he.getMounts(n);Object.keys(he.nameTable).forEach((function(e){for(var r=he.nameTable[e];r;){var t=r.name_next;o.includes(r.mount)&&he.destroyNode(r),r=t}})),t.mounted=null;var i=t.mount.mounts.indexOf(n);t.mount.mounts.splice(i,1)},lookup:function(e,r){return e.node_ops.lookup(e,r)},mknod:function(e,r,t){var n=he.lookupPath(e,{parent:!0}).node,o=ce.basename(e);if(!o||"."===o||".."===o)throw new he.ErrnoError(28);var i=he.mayCreate(n,o);if(i)throw new he.ErrnoError(i);if(!n.node_ops.mknod)throw new he.ErrnoError(63);return n.node_ops.mknod(n,o,r,t)},create:function(e,r){return r=void 0!==r?r:438,r&=4095,r|=32768,he.mknod(e,r,0)},mkdir:function(e,r){return r=void 0!==r?r:511,r&=1023,r|=16384,he.mknod(e,r,0)},mkdirTree:function(e,r){for(var t=e.split("/"),n="",o=0;othis.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((function(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]=function(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),"undefined"!=typeof Uint8Array&&(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||[]):Hr(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,w("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(!h)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=he.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((function(e){var r=u.stream_ops[e];c[e]=function(){return he.forceLoadFile(u),r.apply(null,arguments)}})),c.read=function(e,r,t,n,o){he.forceLoadFile(u);var i=e.node.contents;if(o>=i.length)return 0;var a=Math.min(i.length-o,n);if(i.slice)for(var s=0;s>2]=n.dev,O[t+4>>2]=0,O[t+8>>2]=n.ino,O[t+12>>2]=n.mode,O[t+16>>2]=n.nlink,O[t+20>>2]=n.uid,O[t+24>>2]=n.gid,O[t+28>>2]=n.rdev,O[t+32>>2]=0,ne=[n.size>>>0,(te=n.size,+Math.abs(te)>=1?te>0?(0|Math.min(+Math.floor(te/4294967296),4294967295))>>>0:~~+Math.ceil((te-+(~~te>>>0))/4294967296)>>>0:0)],O[t+40>>2]=ne[0],O[t+44>>2]=ne[1],O[t+48>>2]=4096,O[t+52>>2]=n.blocks,O[t+56>>2]=n.atime.getTime()/1e3|0,O[t+60>>2]=0,O[t+64>>2]=n.mtime.getTime()/1e3|0,O[t+68>>2]=0,O[t+72>>2]=n.ctime.getTime()/1e3|0,O[t+76>>2]=0,ne=[n.ino>>>0,(te=n.ino,+Math.abs(te)>=1?te>0?(0|Math.min(+Math.floor(te/4294967296),4294967295))>>>0:~~+Math.ceil((te-+(~~te>>>0))/4294967296)>>>0:0)],O[t+80>>2]=ne[0],O[t+84>>2]=ne[1],0},doMsync:function(e,r,t,n,o){var i=$.slice(e,e+t);he.msync(r,i,o,t,n)},doMkdir:function(e,r){return"/"===(e=ce.normalize(e))[e.length-1]&&(e=e.substr(0,e.length-1)),he.mkdir(e,r,0),0},doMknod:function(e,r,t){switch(61440&r){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return he.mknod(e,r,t),0},doReadlink:function(e,r,t){if(t<=0)return-28;var n=he.readlink(e),o=Math.min(t,S(n)),i=x[r+o];return D(n,r,t+1),x[r+o]=i,o},doAccess:function(e,r){if(-8&r)return-28;var t;if(!(t=he.lookupPath(e,{follow:!0}).node))return-44;var n="";return 4&r&&(n+="r"),2&r&&(n+="w"),1&r&&(n+="x"),n&&he.nodePermissions(t,n)?-2:0},doDup:function(e,r,t){var n=he.getStream(t);return n&&he.close(n),he.open(e,r,0,t,t).fd},doReadv:function(e,r,t,n){for(var o=0,i=0;i>2],s=O[r+(8*i+4)>>2],u=he.read(e,x,a,s,n);if(u<0)return-1;if(o+=u,u>2],s=O[r+(8*i+4)>>2],u=he.write(e,x,a,s,n);if(u<0)return-1;o+=u}return o},varargs:void 0,get:function(){return me.varargs+=4,O[me.varargs-4>>2]},getStr:function(e){return C(e)},getStreamFromFD:function(e){var r=he.getStream(e);if(!r)throw new he.ErrnoError(8);return r},get64:function(e,r){return e}};function ve(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 ye=void 0;function ge(e){for(var r="",t=e;$[t];)r+=ye[$[t++]];return r}var we={},Ee={},be={};function _e(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 ke(e,r){return e=_e(e),new Function("body","return function "+e+'() {\n "use strict"; return body.apply(this, arguments);\n};\n')(r)}function Te(e,r){var t=ke(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 Pe=void 0;function Ce(e){throw new Pe(e)}var Ae=void 0;function De(e){throw new Ae(e)}function Se(e,r,t){function n(r){var n=t(r);n.length!==e.length&&De("Mismatched type converter count");for(var o=0;o>2])}function Ze(e){return this.rawGetPointee&&(e=this.rawGetPointee(e)),e}function er(e){this.rawDestructor&&this.rawDestructor(e)}function rr(e){null!==e&&e.delete()}function tr(e,r,t){if(r===t)return e;if(void 0===t.baseClass)return null;var n=tr(e,r,t.baseClass);return null===n?null:t.downcast(n)}function nr(){return Object.keys(ar).length}function or(){var e=[];for(var r in ar)ar.hasOwnProperty(r)&&e.push(ar[r]);return e}function ir(e){Be=e,Le.length&&Be&&Be(We)}var ar={};function sr(e,r){return r=function(e,r){for(void 0===r&&Ce("ptr should not be undefined");e.baseClass;)r=e.upcast(r),e=e.baseClass;return r}(e,r),ar[r]}function ur(e,r){return r.ptrType&&r.ptr||De("makeClassHandle requires ptr and ptrType"),!!r.smartPtrType!==!!r.smartPtr&&De("Both smartPtrType and smartPtr must be specified"),r.count={value:1},Ie(Object.create(e,{$$:{value:r}}))}function cr(e){var r=this.getPointee(e);if(!r)return this.destructor(e),null;var t=sr(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?ur(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:r,smartPtrType:this,smartPtr:e}):ur(this.registeredClass.instancePrototype,{ptrType:this,ptr:e})}var i,a=this.registeredClass.getActualType(r),s=Ve[a];if(!s)return o.call(this);i=this.isConst?s.constPointerType:s.pointerType;var u=tr(r,this.registeredClass,i.registeredClass);return null===u?o.call(this):this.isSmartPointer?ur(i.registeredClass.instancePrototype,{ptrType:i,ptr:u,smartPtrType:this,smartPtr:e}):ur(i.registeredClass.instancePrototype,{ptrType:i,ptr:u})}function fr(e,r,t,n,o,i,a,s,u,c,f){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=u,this.rawShare=c,this.rawDestructor=f,o||void 0!==r.baseClass?this.toWireType=Ke:n?(this.toWireType=Ye,this.destructorFunction=null):(this.toWireType=Je,this.destructorFunction=null)}function lr(e,r,n){return e.includes("j")?function(e,r,n){var o=t["dynCall_"+e];return n&&n.length?o.apply(null,[r].concat(n)):o.call(null,r)}(e,r,n):N.get(r).apply(null,n)}function dr(e,r){var t,n,o,i=(e=ge(e)).includes("j")?(t=e,n=r,o=[],function(){o.length=arguments.length;for(var e=0;e>2)+n]);return t}function yr(e){for(;e.length;){var r=e.pop();e.pop()(r)}}function gr(e,r){if(!(e instanceof Function))throw new TypeError("new_ called with constructor type "+typeof e+" which is not a function");var t=ke(e.name||"unknownFunctionName",(function(){}));t.prototype=e.prototype;var n=new t,o=e.apply(n,r);return o instanceof Object?o:n}function wr(e,r,t,n,o){var i=r.length;i<2&&Ce("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var a=null!==r[1]&&null!==t,s=!1,u=1;u0?", ":"")+l),d+=(c?"var rv = ":"")+"invoker(fn"+(l.length>0?", ":"")+l+");\n",s)d+="runDestructors(destructors);\n";else for(u=a?1:2;u4&&0==--_r[e].refcount&&(_r[e]=void 0,br.push(e))}function Tr(){for(var e=0,r=5;r<_r.length;++r)void 0!==_r[r]&&++e;return e}function Pr(){for(var e=5;e<_r.length;++e)if(void 0!==_r[e])return _r[e];return null}function Cr(e){switch(e){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:var r=br.length?br.pop():_r.length;return _r[r]={refcount:1,value:e},r}}function Ar(e){if(null===e)return"null";var r=typeof e;return"object"===r||"array"===r||"function"===r?e.toString():""+e}function Dr(e,r){switch(r){case 2:return function(e){return this.fromWireType(j[e>>2])};case 3:return function(e){return this.fromWireType(U[e>>3])};default:throw new TypeError("Unknown float type: "+e)}}function Sr(e,r,t){switch(r){case 0:return t?function(e){return x[e]}:function(e){return $[e]};case 1:return t?function(e){return R[e>>1]}:function(e){return M[e>>1]};case 2:return t?function(e){return O[e>>2]}:function(e){return I[e>>2]};default:throw new TypeError("Unknown integer type: "+e)}}function Fr(e){return e||Ce("Cannot use deleted val. handle = "+e),_r[e].value}function xr(e,r){var t=Ee[e];return void 0===t&&Ce(r+" has unknown type "+hr(e)),t}var $r={};var Rr=[];function Mr(e,r){return(e>>>0)+4294967296*r}function Or(e,r){if(e<=0)return e;var t=r<=32?Math.abs(1<=t&&(r<=32||e>t)&&(e=-2*t+e),e}function Ir(e,r){return e>=0?e:r<=32?2*Math.abs(1<0?"\n":"")+function(e){var r=ue(),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&&b("EM_LOG_DEMANGLE is deprecated; ignoring"),8&e&&"undefined"==typeof emscripten_source_map&&(b('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=jr(arguments);i[1].includes("_emscripten_");)i=jr(i[0]);var a=r.split("\n");r="";var s=new RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)"),u=new RegExp("\\s*(.*?)@(.*):(.*)(:(.*))?"),c=new RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)");for(var f in a){var l=a[f],d="",p="",h=0,m=0,v=c.exec(l);if(v&&5==v.length)d=v[1],p=v[2],h=v[3],m=v[4];else{if((v=s.exec(l))||(v=u.exec(l)),!(v&&v.length>=4)){r+=l+"\n";continue}d=v[1],p=v[2],h=v[3],m=0|v[4]}var y=!1;if(8&e){var g=emscripten_source_map.originalPositionFor({line:h,column:m});(y=g&&g.source)&&(64&e&&(g.source=g.source.substring(g.source.replace(/\\/g,"/").lastIndexOf("/")+1)),r+=" at "+d+" ("+g.source+":"+g.line+":"+g.column+")\n")}(16&e||!y)&&(64&e&&(p=p.substring(p.replace(/\\/g,"/").lastIndexOf("/")+1)),r+=(y?" = "+d:" at "+d)+" ("+p+":"+h+":"+m+")\n"),128&e&&i[0]&&(i[1]==d&&i[2].length>0&&(r=r.replace(/\s+$/,""),r+=" with values: "+i[1]+i[2]+"\n"),i=jr(i[0]))}return r.replace(/\s+$/,"")}(e)),1&e?4&e?E(r):2&e?console.warn(r):512&e?console.info(r):256&e?console.debug(r):w(r):6&e?E(r):w(r)}var Nr={};function Br(){if(!Br.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",_:d||"./this.program"};for(var r in Nr)void 0===Nr[r]?delete e[r]:e[r]=Nr[r];var t=[];for(var r in e)t.push(r+"="+e[r]);Br.strings=t}return Br.strings}var Lr=function(e,r,t,n){e||(e=this),this.parent=e,this.mount=e.mount,this.mounted=null,this.id=he.nextInode++,this.name=r,this.mode=t,this.node_ops={},this.stream_ops={},this.rdev=n},Wr=365,zr=146;function Hr(e,r,t){var n=t>0?t:S(e)+1,o=new Array(n),i=A(e,o,0,o.length);return r&&(o.length=i),o}Object.defineProperties(Lr.prototype,{read:{get:function(){return(this.mode&Wr)===Wr},set:function(e){e?this.mode|=Wr:this.mode&=-366}},write:{get:function(){return(this.mode&zr)===zr},set:function(e){e?this.mode|=zr:this.mode&=-147}},isFolder:{get:function(){return he.isDir(this.mode)}},isDevice:{get:function(){return he.isChrdev(this.mode)}}}),he.FSNode=Lr,he.staticInit(),function(){for(var e=new Array(256),r=0;r<256;++r)e[r]=String.fromCharCode(r);ye=e}(),Pe=t.BindingError=Te(Error,"BindingError"),Ae=t.InternalError=Te(Error,"InternalError"),He.prototype.isAliasOf=xe,He.prototype.clone=je,He.prototype.delete=Ue,He.prototype.isDeleted=Ne,He.prototype.deleteLater=ze,fr.prototype.getPointee=Ze,fr.prototype.destructor=er,fr.prototype.argPackAdvance=8,fr.prototype.readValueFromPointer=Qe,fr.prototype.deleteObject=rr,fr.prototype.fromWireType=cr,t.getInheritedInstanceCount=nr,t.getLiveInheritedInstances=or,t.flushPendingDeletes=We,t.setDelayFunction=ir,pr=t.UnboundTypeError=Te(Error,"UnboundTypeError"),t.count_emval_handles=Tr,t.get_first_emval=Pr;var Vr={y:function(e,r,t){me.varargs=t;try{var n=me.getStreamFromFD(e);switch(r){case 0:return(o=me.get())<0?-28:he.open(n.path,n.flags,0,o).fd;case 1:case 2:case 13:case 14:return 0;case 3:return n.flags;case 4:var o=me.get();return n.flags|=o,0;case 12:o=me.get();return R[o+0>>1]=2,0;case 16:case 8:default:return-28;case 9:return i=28,O[qr()>>2]=i,-1}}catch(e){return void 0!==he&&e instanceof he.ErrnoError||ee(e),-e.errno}var i},x:function(e,r,t){me.varargs=t;try{var n=me.getStr(e),o=t?me.get():0;return he.open(n,r,o).fd}catch(e){return void 0!==he&&e instanceof he.ErrnoError||ee(e),-e.errno}},s:function(e,r,t,n,o){},D:function(e,r,t,n,o){var i=ve(t);Fe(e,{name:r=ge(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=R;else{if(4!==t)throw new TypeError("Unknown boolean type size: "+r);n=O}return this.fromWireType(n[e>>i])},destructorFunction:null})},n:function(e,r,n,o,i,a,s,u,c,f,l,d,p){l=ge(l),a=dr(i,a),u&&(u=dr(s,u)),f&&(f=dr(c,f)),p=dr(d,p);var h=_e(l);!function(e,r,n){t.hasOwnProperty(e)?((void 0===n||void 0!==t[e].overloadTable&&void 0!==t[e].overloadTable[n])&&Ce("Cannot register public name '"+e+"' twice"),Xe(t,e,e),t.hasOwnProperty(n)&&Ce("Cannot register multiple overloads of a function with the same number of arguments ("+n+")!"),t[e].overloadTable[n]=r):(t[e]=r,void 0!==n&&(t[e].numArguments=n))}(h,(function(){mr("Cannot construct "+l+" due to unbound types",[o])})),Se([e,r,n],o?[o]:[],(function(r){var n,i;r=r[0],i=o?(n=r.registeredClass).instancePrototype:He.prototype;var s=ke(h,(function(){if(Object.getPrototypeOf(this)!==c)throw new Pe("Use 'new' to construct "+l);if(void 0===d.constructor_body)throw new Pe(l+" has no accessible constructor");var e=d.constructor_body[arguments.length];if(void 0===e)throw new Pe("Tried to invoke ctor of "+l+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(d.constructor_body).toString()+") parameters instead!");return e.apply(this,arguments)})),c=Object.create(i,{constructor:{value:s}});s.prototype=c;var d=new Ge(l,s,c,p,n,a,u,f),m=new fr(l,d,!0,!1,!1),v=new fr(l+"*",d,!1,!1,!1),y=new fr(l+" const*",d,!1,!0,!1);return Ve[e]={pointerType:v,constPointerType:y},function(e,r,n){t.hasOwnProperty(e)||De("Replacing nonexistant public symbol"),void 0!==t[e].overloadTable&&void 0!==n?t[e].overloadTable[n]=r:(t[e]=r,t[e].argCount=n)}(h,s),[m,v,y]}))},i:function(e,r,t,n,o,i){k(r>0);var a=vr(r,t);o=dr(n,o),Se([],[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 Pe("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]=function(){mr("Cannot construct "+e.name+" due to unbound types",a)},Se([],a,(function(n){return n.splice(1,0,null),e.registeredClass.constructor_body[r-1]=wr(t,n,null,o,i),[]})),[]}))},f:function(e,r,t,n,o,i,a,s){var u=vr(t,n);r=ge(r),i=dr(o,i),Se([],[e],(function(e){var n=(e=e[0]).name+"."+r;function o(){mr("Cannot call "+n+" due to unbound types",u)}r.startsWith("@@")&&(r=Symbol[r.substring(2)]),s&&e.registeredClass.pureVirtualFunctions.push(r);var c=e.registeredClass.instancePrototype,f=c[r];return void 0===f||void 0===f.overloadTable&&f.className!==e.name&&f.argCount===t-2?(o.argCount=t-2,o.className=e.name,c[r]=o):(Xe(c,r,n),c[r].overloadTable[t-2]=o),Se([],u,(function(o){var s=wr(n,o,e,i,a);return void 0===c[r].overloadTable?(s.argCount=t-2,c[r]=s):c[r].overloadTable[t-2]=s,[]})),[]}))},I:function(e,r,t,n,o,i,a,s,u,c){r=ge(r),o=dr(n,o),Se([],[e],(function(e){var n=(e=e[0]).name+"."+r,f={get:function(){mr("Cannot access "+n+" due to unbound types",[t,a])},enumerable:!0,configurable:!0};return f.set=u?function(){mr("Cannot access "+n+" due to unbound types",[t,a])}:function(e){Ce(n+" is a read-only property")},Object.defineProperty(e.registeredClass.instancePrototype,r,f),Se([],u?[t,a]:[t],(function(t){var a=t[0],f={get:function(){var r=Er(this,e,n+" getter");return a.fromWireType(o(i,r))},enumerable:!0};if(u){u=dr(s,u);var l=t[1];f.set=function(r){var t=Er(this,e,n+" setter"),o=[];u(c,t,l.toWireType(o,r)),yr(o)}}return Object.defineProperty(e.registeredClass.instancePrototype,r,f),[]})),[]}))},C:function(e,r){Fe(e,{name:r=ge(r),fromWireType:function(e){var r=_r[e].value;return kr(e),r},toWireType:function(e,r){return Cr(r)},argPackAdvance:8,readValueFromPointer:Qe,destructorFunction:null})},l:function(e,r,t){var n=ve(t);Fe(e,{name:r=ge(r),fromWireType:function(e){return e},toWireType:function(e,r){if("number"!=typeof r&&"boolean"!=typeof r)throw new TypeError('Cannot convert "'+Ar(r)+'" to '+this.name);return r},argPackAdvance:8,readValueFromPointer:Dr(r,n),destructorFunction:null})},c:function(e,r,t,n,o){r=ge(r),-1===o&&(o=4294967295);var i=ve(t),a=function(e){return e};if(0===n){var s=32-8*t;a=function(e){return e<>>s}}var u=r.includes("unsigned");Fe(e,{name:r,fromWireType:a,toWireType:function(e,t){if("number"!=typeof t&&"boolean"!=typeof t)throw new TypeError('Cannot convert "'+Ar(t)+'" to '+this.name);if(to)throw new TypeError('Passing a number "'+Ar(t)+'" from JS side to C/C++ side to an argument of type "'+r+'", which is outside the valid range ['+n+", "+o+"]!");return u?t>>>0:0|t},argPackAdvance:8,readValueFromPointer:Sr(r,i,0!==n),destructorFunction:null})},b:function(e,r,t){var n=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][r];function o(e){var r=I,t=r[e>>=2],o=r[e+1];return new n(F,o,t)}Fe(e,{name:t=ge(t),fromWireType:o,argPackAdvance:8,readValueFromPointer:o},{ignoreDuplicateRegistrations:!0})},m:function(e,r){var t="std::string"===(r=ge(r));Fe(e,{name:r,fromWireType:function(e){var r,n=I[e>>2];if(t)for(var o=e+4,i=0;i<=n;++i){var a=e+4+i;if(i==n||0==$[a]){var s=C(o,a-o);void 0===r?r=s:(r+=String.fromCharCode(0),r+=s),o=a+1}}else{var u=new Array(n);for(i=0;i>2]=o,t&&n)D(r,i+4,o+1);else if(n)for(var a=0;a255&&(Xr(i),Ce("String has UTF-16 code units that do not fit in 8 bits")),$[i+4+a]=s}else for(a=0;a>2],a=i(),u=e+4,c=0;c<=o;++c){var f=e+4+c*r;if(c==o||0==a[f>>s]){var l=n(u,f-u);void 0===t?t=l:(t+=String.fromCharCode(0),t+=l),u=f+r}}return Xr(e),t},toWireType:function(e,n){"string"!=typeof n&&Ce("Cannot pass non-string to C++ string type "+t);var i=a(n),u=Gr(4+i+r);return I[u>>2]=i>>s,o(n,u+4,i+r),null!==e&&e.push(Xr,u),u},argPackAdvance:8,readValueFromPointer:Qe,destructorFunction:function(e){Xr(e)}})},E:function(e,r){Fe(e,{isVoid:!0,name:r=ge(r),argPackAdvance:0,fromWireType:function(){},toWireType:function(e,r){}})},v:function(e,r,t){e=Fr(e),r=xr(r,"emval::as");var n=[],o=Cr(n);return O[t>>2]=o,r.toWireType(n,e)},e:function(e,r,t,n){var o,i;(e=Rr[e])(r=Fr(r),t=void 0===(i=$r[o=t])?ge(o):i,null,n)},p:kr,d:function(e,r){for(var t=function(e,r){for(var t=new Array(e),n=0;n>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=["retType"],a=[n],s="",u=0;u4&&(_r[e].refcount+=1)},q:function(e){yr(_r[e].value),kr(e)},B:function(e,r){return Cr((e=xr(e,"_emval_take_value")).readValueFromPointer(r))},a:function(){ee()},G:function e(){return void 0===e.start&&(e.start=Date.now()),1e3*(Date.now()-e.start)|0},H:function(e,r,t){var n=function(e,r){var t=e,n=r;function o(e){var r;return n=function(e,r){return"double"!==r&&"i64"!==r||7&e&&(e+=4),e}(n,e),"double"===e?(r=U[n>>3],n+=8):"i64"==e?(r=[O[n>>2],O[n+4>>2]],n+=8):(e="i32",r=O[n>>2],n+=4),r}for(var i,a,s,u,c=[];;){var f=t;if(0===(i=x[t>>0]))break;if(a=x[t+1>>0],37==i){var l=!1,d=!1,p=!1,h=!1,m=!1;e:for(;;){switch(a){case 43:l=!0;break;case 45:d=!0;break;case 35:p=!0;break;case 48:if(h)break e;h=!0;break;case 32:m=!0;break;default:break e}t++,a=x[t+1>>0]}var v=0;if(42==a)v=o("i32"),t++,a=x[t+1>>0];else for(;a>=48&&a<=57;)v=10*v+(a-48),t++,a=x[t+1>>0];var y,g=!1,w=-1;if(46==a){if(w=0,g=!0,t++,42==(a=x[t+1>>0]))w=o("i32"),t++;else for(;;){var E=x[t+1>>0];if(E<48||E>57)break;w=10*w+(E-48),t++}a=x[t+1>>0]}switch(w<0&&(w=6,g=!1),String.fromCharCode(a)){case"h":104==x[t+2>>0]?(t++,y=1):y=2;break;case"l":108==x[t+2>>0]?(t++,y=8):y=4;break;case"L":case"q":case"j":y=8;break;case"z":case"t":case"I":y=4;break;default:y=null}switch(y&&t++,a=x[t+1>>0],String.fromCharCode(a)){case"d":case"i":case"u":case"o":case"x":case"X":case"p":var b=100==a||105==a;s=o("i"+8*(y=y||4)),8==y&&(s=117==a?(s[0]>>>0)+4294967296*(s[1]>>>0):Mr(s[0],s[1])),y<=4&&(s=(b?Or:Ir)(s&Math.pow(256,y)-1,8*y));var _=Math.abs(s),k="";if(100==a||105==a)C=Or(s,8*y).toString(10);else if(117==a)C=Ir(s,8*y).toString(10),s=Math.abs(s);else if(111==a)C=(p?"0":"")+_.toString(8);else if(120==a||88==a){if(k=p&&0!=s?"0x":"",s<0){s=-s,C=(_-1).toString(16);for(var T=[],P=0;P=0&&(l?k="+"+k:m&&(k=" "+k)),"-"==C.charAt(0)&&(k="-"+k,C=C.substr(1));k.length+C.lengthS&&S>=-4?(a=(103==a?"f":"F").charCodeAt(0),w-=S+1):(a=(103==a?"e":"E").charCodeAt(0),w--),D=Math.min(w,20)}101==a||69==a?(C=s.toExponential(D),/[eE][-+]\d$/.test(C)&&(C=C.slice(0,-1)+"0"+C.slice(-1))):102!=a&&70!=a||(C=s.toFixed(D),0===s&&((u=s)<0||0===u&&1/u==-1/0)&&(C="-"+C));var F=C.split("e");if(A&&!p)for(;F[0].length>1&&F[0].includes(".")&&("0"==F[0].slice(-1)||"."==F[0].slice(-1));)F[0]=F[0].slice(0,-1);else for(p&&-1==C.indexOf(".")&&(F[0]+=".");w>D++;)F[0]+="0";C=F[0]+(F.length>1?"e"+F[1]:""),69==a&&(C=C.toUpperCase()),s>=0&&(l?C="+"+C:m&&(C=" "+C))}else C=(s<0?"-":"")+"inf",h=!1;for(;C.length>0]);else c=c.concat(Hr("(null)".substr(0,M),!0));if(d)for(;M0;)c.push(32);d||c.push(o("i8"));break;case"n":var I=o("i32*");O[I>>2]=c.length;break;case"%":c.push(i);break;default:for(P=f;P>0])}t+=2}else c.push(i),t+=1}return c}(r,t);Ur(e,P(n,0))},t:function(e){$.length,ee("OOM")},u:function(e,r){var t=0;return Br().forEach((function(n,o){var i=r+t;O[e+4*o>>2]=i,function(e,r,t){for(var n=0;n>0]=e.charCodeAt(n);t||(x[r>>0]=0)}(n,i),t+=n.length+1})),0},w:function(e,r){var t=Br();O[e>>2]=t.length;var n=0;return t.forEach((function(e){n+=e.length+1})),O[r>>2]=n,0},k:function(e){try{var r=me.getStreamFromFD(e);return he.close(r),0}catch(e){return void 0!==he&&e instanceof he.ErrnoError||ee(e),e.errno}},z:function(e,r){try{var t=me.getStreamFromFD(e),n=t.tty?2:he.isDir(t.mode)?3:he.isLink(t.mode)?7:4;return x[r>>0]=n,0}catch(e){return void 0!==he&&e instanceof he.ErrnoError||ee(e),e.errno}},A:function(e,r,t,n){try{var o=me.getStreamFromFD(e),i=me.doReadv(o,r,t);return O[n>>2]=i,0}catch(e){return void 0!==he&&e instanceof he.ErrnoError||ee(e),e.errno}},r:function(e,r,t,n,o){try{var i=me.getStreamFromFD(e),a=4294967296*t+(r>>>0),s=9007199254740992;return a<=-s||a>=s?-61:(he.llseek(i,a,n),ne=[i.position>>>0,(te=i.position,+Math.abs(te)>=1?te>0?(0|Math.min(+Math.floor(te/4294967296),4294967295))>>>0:~~+Math.ceil((te-+(~~te>>>0))/4294967296)>>>0:0)],O[o>>2]=ne[0],O[o+4>>2]=ne[1],i.getdents&&0===a&&0===n&&(i.getdents=null),0)}catch(e){return void 0!==he&&e instanceof he.ErrnoError||ee(e),e.errno}},j:function(e,r,t,n){try{var o=me.getStreamFromFD(e),i=me.doWritev(o,r,t);return O[n>>2]=i,0}catch(e){return void 0!==he&&e instanceof he.ErrnoError||ee(e),e.errno}},F:function(e){var r=Date.now();return O[e>>2]=r/1e3|0,O[e+4>>2]=r%1e3*1e3|0,0},g:function(e){}};!function(){var e={a:Vr};function r(e,r){var n,o,i=e.exports;t.asm=i,g=t.asm.J,n=g.buffer,F=n,t.HEAP8=x=new Int8Array(n),t.HEAP16=R=new Int16Array(n),t.HEAP32=O=new Int32Array(n),t.HEAPU8=$=new Uint8Array(n),t.HEAPU16=M=new Uint16Array(n),t.HEAPU32=I=new Uint32Array(n),t.HEAPF32=j=new Float32Array(n),t.HEAPF64=U=new Float64Array(n),N=t.asm.N,o=t.asm.K,q.unshift(o),Z()}function n(e){r(e.instance)}function o(r){return function(){if(!y&&(p||h)){if("function"==typeof fetch&&!ie(re))return fetch(re,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+re+"'";return e.arrayBuffer()})).catch((function(){return ae(re)}));if(u)return new Promise((function(e,r){u(re,(function(r){e(new Uint8Array(r))}),r)}))}return Promise.resolve().then((function(){return ae(re)}))}().then((function(r){return WebAssembly.instantiate(r,e)})).then((function(e){return e})).then(r,(function(e){E("failed to asynchronously prepare wasm: "+e),ee(e)}))}if(Q(),t.instantiateWasm)try{return t.instantiateWasm(e,r)}catch(e){return E("Module.instantiateWasm callback failed with error: "+e),!1}y||"function"!=typeof WebAssembly.instantiateStreaming||oe(re)||ie(re)||"function"!=typeof fetch?o(n):fetch(re,{credentials:"same-origin"}).then((function(r){return WebAssembly.instantiateStreaming(r,e).then(n,(function(e){return E("wasm streaming compile failed: "+e),E("falling back to ArrayBuffer instantiation"),o(n)}))}))}(),t.___wasm_call_ctors=function(){return(t.___wasm_call_ctors=t.asm.K).apply(null,arguments)};var Xr=t._free=function(){return(Xr=t._free=t.asm.L).apply(null,arguments)},Gr=t._malloc=function(){return(Gr=t._malloc=t.asm.M).apply(null,arguments)},qr=t.___errno_location=function(){return(qr=t.___errno_location=t.asm.O).apply(null,arguments)},Yr=t._strlen=function(){return(Yr=t._strlen=t.asm.P).apply(null,arguments)},Kr=t.___getTypeName=function(){return(Kr=t.___getTypeName=t.asm.Q).apply(null,arguments)};t.___embind_register_native_and_builtin_types=function(){return(t.___embind_register_native_and_builtin_types=t.asm.R).apply(null,arguments)};var Jr,Qr=t._memalign=function(){return(Qr=t._memalign=t.asm.S).apply(null,arguments)};function Zr(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}function et(e){function r(){Jr||(Jr=!0,t.calledRun=!0,_||(t.noFSInit||he.init.initialized||he.init(),he.ignorePermissions=!1,se(q),t.onRuntimeInitialized&&t.onRuntimeInitialized(),function(){if(t.postRun)for("function"==typeof t.postRun&&(t.postRun=[t.postRun]);t.postRun.length;)e=t.postRun.shift(),Y.unshift(e);var e;se(Y)}()))}K>0||(!function(){if(t.preRun)for("function"==typeof t.preRun&&(t.preRun=[t.preRun]);t.preRun.length;)e=t.preRun.shift(),G.unshift(e);var e;se(G)}(),K>0||(t.setStatus?(t.setStatus("Running..."),setTimeout((function(){setTimeout((function(){t.setStatus("")}),1),r()}),1)):r()))}if(t.dynCall_ijiii=function(){return(t.dynCall_ijiii=t.asm.T).apply(null,arguments)},t.dynCall_viiijj=function(){return(t.dynCall_viiijj=t.asm.U).apply(null,arguments)},t.dynCall_jij=function(){return(t.dynCall_jij=t.asm.V).apply(null,arguments)},t.dynCall_jii=function(){return(t.dynCall_jii=t.asm.W).apply(null,arguments)},t.dynCall_jiji=function(){return(t.dynCall_jiji=t.asm.X).apply(null,arguments)},t._ff_h264_cabac_tables=83749,J=function e(){Jr||et(),Jr||(J=e)},t.run=et,t.preInit)for("function"==typeof t.preInit&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();et(),e.exports=t}));const u="initVideo",c="render",f="playAudio",l="print",d="printErr",p="initAudio",h="audioCode",m="videoCode",v=1,y=2,g="init",w="decode",E="audioDecode",b="videoDecode",_="close",k="key",T="delta";(()=>{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()}),s.print=function(e){postMessage({cmd:l,text:e})},s.printErr=function(e){postMessage({cmd:d,text:e})},s.postRun=function(){var e=[],r={};"VideoEncoder"in self&&(r={hasInit:!1,isEmitInfo:!1,offscreenCanvas:null,offscreenCanvasCtx:null,decoder:new VideoDecoder({output:function(e){r.isEmitInfo||(t.opt.debug&&console.log("Jessibuca: [worker] Webcodecs Video Decoder initSize"),postMessage({cmd:u,w:e.codedWidth,h:e.codedHeight}),r.isEmitInfo=!0,r.offscreenCanvas=new OffscreenCanvas(e.codedWidth,e.codedHeight),r.offscreenCanvasCtx=r.offscreenCanvas.getContext("2d")),r.offscreenCanvasCtx.drawImage(e,0,0,e.codedWidth,e.codedHeight);let n=r.offscreenCanvas.transferToImageBitmap();postMessage({cmd:c,buffer:n,delay:t.delay,ts:0},[n]),setTimeout((function(){e.close?e.close():e.destroy()}),100)},error:function(e){console.error(e)}}),decode:function(e,n){const o=e[0]>>4==1;if(r.hasInit){const t=new EncodedVideoChunk({data:e.slice(5),timestamp:n,type:o?k:T});r.decoder.decode(t)}else if(o&&0===e[1]){const n=15&e[0];t.setVideoCodec(n);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));r.decoder.configure(o),r.hasInit=!0}},reset(){r.hasInit=!1,r.isEmitInfo=!1,r.offscreenCanvas=null,r.offscreenCanvasCtx=null}});var t={opt:{},useOffscreen:function(){return!this.opt.forceNoOffscreen&&"undefined"!=typeof OffscreenCanvas},initAudioPlanar:function(e,r){postMessage({cmd:p,sampleRate:r,channels:e});var t=[],n=[],o=0;this.playAudioPlanar=function(r,i,a){for(var u=i,c=[],l=0,d=0;d<2;d++){var p=s.HEAPU32[(r>>2)+d]>>2;c[d]=s.HEAPF32.subarray(p,p+u)}if(o){if(!(u>=(i=1024-o)))return o+=u,t[0]=Float32Array.of(...t[0],...c[0]),void(2==e&&(t[1]=Float32Array.of(...t[1],...c[1])));n[0]=Float32Array.of(...t[0],...c[0].subarray(0,i)),2==e&&(n[1]=Float32Array.of(...t[1],...c[1].subarray(0,i))),postMessage({cmd:f,buffer:n,ts:a},n.map((e=>e.buffer))),l=i,u-=i}for(o=u;o>=1024;o-=1024)n[0]=c[0].slice(l,l+=1024),2==e&&(n[1]=c[1].slice(l-1024,l)),postMessage({cmd:f,buffer:n,ts:a},n.map((e=>e.buffer)));o&&(t[0]=c[0].slice(l),2==e&&(t[1]=c[1].slice(l)))}},setVideoCodec:function(e){postMessage({cmd:m,code:e})},setAudioCodec:function(e){postMessage({cmd:h,code:e})},setVideoSize:function(e,r){postMessage({cmd:u,w:e,h:r});var n=e*r,o=n>>2;t.useOffscreen()?(this.offscreenCanvas=new OffscreenCanvas(e,r),this.offscreenCanvasGL=this.offscreenCanvas.getContext("webgl"),this.webglObj=(e=>{var r=["attribute vec4 vertexPos;","attribute vec4 texturePos;","varying vec2 textureCoord;","void main()","{","gl_Position = vertexPos;","textureCoord = texturePos.xy;","}"].join("\n"),t=["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"),n=e.createShader(e.VERTEX_SHADER);e.shaderSource(n,r),e.compileShader(n),e.getShaderParameter(n,e.COMPILE_STATUS)||console.log("Vertex shader failed to compile: "+e.getShaderInfoLog(n));var o=e.createShader(e.FRAGMENT_SHADER);e.shaderSource(o,t),e.compileShader(o),e.getShaderParameter(o,e.COMPILE_STATUS)||console.log("Fragment shader failed to compile: "+e.getShaderInfoLog(o));var i=e.createProgram();e.attachShader(i,n),e.attachShader(i,o),e.linkProgram(i),e.getProgramParameter(i,e.LINK_STATUS)||console.log("Program failed to compile: "+e.getProgramInfoLog(i)),e.useProgram(i);var a=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,a),e.bufferData(e.ARRAY_BUFFER,new Float32Array([1,1,-1,1,1,-1,-1,-1]),e.STATIC_DRAW);var s=e.getAttribLocation(i,"vertexPos");e.enableVertexAttribArray(s),e.vertexAttribPointer(s,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(i,"texturePos");function f(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(i,r),t),n}e.enableVertexAttribArray(c),e.vertexAttribPointer(c,2,e.FLOAT,!1,0,0);var l=f("ySampler",0),d=f("uSampler",1),p=f("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,l),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,d),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,p),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(i),e.deleteBuffer(a),e.deleteBuffer(u),e.deleteTexture(l),e.deleteTexture(d),e.deleteBuffer(p)}catch(e){}}}})(this.offscreenCanvasGL),this.draw=function(t,i,a,u){this.webglObj.render(e,r,s.HEAPU8.subarray(i,i+n),s.HEAPU8.subarray(a,a+o),s.HEAPU8.subarray(u,u+o));let f=this.offscreenCanvas.transferToImageBitmap();postMessage({cmd:c,buffer:f,delay:this.delay,ts:t},[f])}):this.draw=function(e,r,t,i){var a=[s.HEAPU8.subarray(r,r+n),s.HEAPU8.subarray(t,t+o),s.HEAPU8.subarray(i,i+o)].map((e=>Uint8Array.from(e)));postMessage({cmd:c,output:a,delay:this.delay,ts:e},a.map((e=>e.buffer)))}},getDelay:function(e){return e?(this.firstTimestamp=e,this.startTimestamp=Date.now(),this.delay=-1,this.getDelay=function(e){return e&&(this.delay=Date.now()-this.startTimestamp-(e-this.firstTimestamp)),this.delay},-1):-1},init:function(){t.opt.debug&&console.log("Jessibuca: [worker] init");const n=e=>{t.opt.useWCS&&t.useOffscreen()&&e.type===y&&r.decode?r.decode(e.payload,e.ts):e.decoder.decode(e.payload,e.ts)};this.stopId=setInterval((()=>{if(e.length)if(this.dropping){for(r=e.shift();!r.isIFrame&&e.length;)r=e.shift();r.isIFrame&&(this.dropping=!1,n(r))}else{var r=e[0];if(-1===this.getDelay(r.ts))e.shift(),n(r);else if(this.delay>this.opt.videoBuffer+1e3)this.dropping=!0;else for(;e.length&&(r=e[0],this.getDelay(r.ts)>this.opt.videoBuffer);)e.shift(),n(r)}}),10)},close:function(){this.opt.debug&&console.log("Jessibuca: [worker]: close"),clearInterval(this.stopId),this.stopId=null,n.clear(),o.clear(),r.reset&&r.reset(),this.firstTimestamp=0,this.startTimestamp=0,this.delay=-1,this.webglObj&&(this.webglObj.destroy(),this.offscreenCanvas=null,this.offscreenCanvasGL=null,this.offscreenCanvasCtx=null),e=[],delete this.playAudioPlanar,delete this.draw},pushBuffer:function(r,t){t.type===v?e.push({ts:t.ts,payload:r,decoder:n,type:v}):t.type===y&&e.push({ts:t.ts,payload:r,decoder:o,type:y,isIFrame:t.isIFrame})}},n=new s.AudioDecoder(t),o=new s.VideoDecoder(t);postMessage({cmd:g}),self.onmessage=function(e){var r=e.data;switch(r.cmd){case g:t.opt=JSON.parse(r.opt),n.sample_rate=r.sampleRate,t.init();break;case w:t.pushBuffer(r.buffer,r.options);break;case E:n.decode(r.buffer,r.ts);break;case b:o.decode(r.buffer,r.ts);break;case _:t.close()}}}})); +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('path'), require('fs'), require('crypto')) : + typeof define === 'function' && define.amd ? define(['path', 'fs', 'crypto'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.path, global.fs, global.crypto$1)); +})(this, (function (path, fs, crypto$1) { 'use strict'; + + function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + + var path__default = /*#__PURE__*/_interopDefaultLegacy(path); + var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs); + var crypto__default = /*#__PURE__*/_interopDefaultLegacy(crypto$1); + + function commonjsRequire () { + throw new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs'); + } + + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } + + var decoder = createCommonjsModule(function (module) { + var Module = typeof Module != "undefined" ? Module : {}; + var Module = {}; + + Module.print = function (text) { + console.log("Jessibuca: [worker]:", text); + }; + + Module.printErr = function (text) { + console.warn("Jessibuca: [worker]:", text); + postMessage({ + cmd: "wasmError", + message: text + }); + }; + + var moduleOverrides = Object.assign({}, Module); + var thisProgram = "./this.program"; + + var ENVIRONMENT_IS_WEB = typeof window == "object"; + var ENVIRONMENT_IS_WORKER = typeof importScripts == "function"; + var ENVIRONMENT_IS_NODE = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string"; + var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + + if (Module["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 scriptDirectory = ""; + + function locateFile(path) { + if (Module["locateFile"]) { + return Module["locateFile"](path, scriptDirectory); + } + + return scriptDirectory + path; + } + + var read_, readAsync, readBinary; + + var fs; + var nodePath; + var requireNodeFS; + + if (ENVIRONMENT_IS_NODE) { + if (!(typeof process == "object" && typeof commonjsRequire == "function")) 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?)"); + + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = path__default["default"].dirname(scriptDirectory) + "/"; + } else { + scriptDirectory = __dirname + "/"; + } + + requireNodeFS = () => { + if (!nodePath) { + fs = fs__default["default"]; + nodePath = path__default["default"]; + } + }; + + read_ = function shell_read(filename, binary) { + requireNodeFS(); + filename = nodePath["normalize"](filename); + return fs.readFileSync(filename, binary ? undefined : "utf8"); + }; + + readBinary = filename => { + var ret = read_(filename, true); + + if (!ret.buffer) { + ret = new Uint8Array(ret); + } + + assert(ret.buffer); + return ret; + }; + + readAsync = (filename, onload, onerror) => { + requireNodeFS(); + filename = nodePath["normalize"](filename); + fs.readFile(filename, function (err, data) { + if (err) onerror(err);else onload(data.buffer); + }); + }; + + if (process["argv"].length > 1) { + thisProgram = process["argv"][1].replace(/\\/g, "/"); + } + + process["argv"].slice(2); + + { + module["exports"] = Module; + } + + process["on"]("uncaughtException", function (ex) { + if (!(ex instanceof ExitStatus)) { + throw ex; + } + }); + process["on"]("unhandledRejection", function (reason) { + throw reason; + }); + + Module["inspect"] = function () { + return "[Emscripten Module object]"; + }; + } else if (ENVIRONMENT_IS_SHELL) { + if (typeof process == "object" && typeof commonjsRequire === "function" || typeof window == "object" || typeof importScripts == "function") 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?)"); + + if (typeof read != "undefined") { + read_ = function shell_read(f) { + return read(f); + }; + } + + readBinary = function readBinary(f) { + let data; + + if (typeof readbuffer == "function") { + return new Uint8Array(readbuffer(f)); + } + + data = read(f, "binary"); + assert(typeof data == "object"); + return data; + }; + + readAsync = function readAsync(f, onload, onerror) { + setTimeout(() => onload(readBinary(f)), 0); + }; + + if (typeof scriptArgs != "undefined") { + scriptArgs; + } + + if (typeof print != "undefined") { + if (typeof console == "undefined") console = {}; + console.log = print; + console.warn = console.error = typeof printErr != "undefined" ? printErr : print; + } + } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = self.location.href; + } else if (typeof document != "undefined" && document.currentScript) { + scriptDirectory = document.currentScript.src; + } + + if (scriptDirectory.indexOf("blob:") !== 0) { + scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf("/") + 1); + } else { + scriptDirectory = ""; + } + + if (!(typeof window == "object" || typeof importScripts == "function")) 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?)"); + { + read_ = url => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + xhr.send(null); + return xhr.responseText; + }; + + if (ENVIRONMENT_IS_WORKER) { + readBinary = url => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + xhr.responseType = "arraybuffer"; + xhr.send(null); + return new Uint8Array(xhr.response); + }; + } + + readAsync = (url, onload, onerror) => { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, true); + xhr.responseType = "arraybuffer"; + + xhr.onload = () => { + if (xhr.status == 200 || xhr.status == 0 && xhr.response) { + onload(xhr.response); + return; + } + + onerror(); + }; + + xhr.onerror = onerror; + xhr.send(null); + }; + } + } else { + throw new Error("environment detection error"); + } + + var out = Module["print"] || console.log.bind(console); + var err = Module["printErr"] || console.warn.bind(console); + Object.assign(Module, moduleOverrides); + moduleOverrides = null; + checkIncomingModuleAPI(); + if (Module["arguments"]) ; + legacyModuleProp("arguments", "arguments_"); + if (Module["thisProgram"]) thisProgram = Module["thisProgram"]; + legacyModuleProp("thisProgram", "thisProgram"); + if (Module["quit"]) ; + legacyModuleProp("quit", "quit_"); + assert(typeof Module["memoryInitializerPrefixURL"] == "undefined", "Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"); + assert(typeof Module["pthreadMainPrefixURL"] == "undefined", "Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"); + assert(typeof Module["cdInitializerPrefixURL"] == "undefined", "Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"); + assert(typeof Module["filePackagePrefixURL"] == "undefined", "Module.filePackagePrefixURL option was removed, use Module.locateFile instead"); + assert(typeof Module["read"] == "undefined", "Module.read option was removed (modify read_ in JS)"); + assert(typeof Module["readAsync"] == "undefined", "Module.readAsync option was removed (modify readAsync in JS)"); + assert(typeof Module["readBinary"] == "undefined", "Module.readBinary option was removed (modify readBinary in JS)"); + assert(typeof Module["setWindowTitle"] == "undefined", "Module.setWindowTitle option was removed (modify setWindowTitle in JS)"); + assert(typeof Module["TOTAL_MEMORY"] == "undefined", "Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"); + legacyModuleProp("read", "read_"); + legacyModuleProp("readAsync", "readAsync"); + legacyModuleProp("readBinary", "readBinary"); + legacyModuleProp("setWindowTitle", "setWindowTitle"); + assert(!ENVIRONMENT_IS_SHELL, "shell environment detected but not enabled at build time. Add 'shell' to `-sENVIRONMENT` to enable."); + + function warnOnce(text) { + if (!warnOnce.shown) warnOnce.shown = {}; + + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + err(text); + } + } + + function legacyModuleProp(prop, newName) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get: function () { + abort("Module." + prop + " has been replaced with plain " + newName + " (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 ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort("`Module." + prop + "` was supplied but `" + prop + "` not included in INCOMING_MODULE_JS_API"); + } + } + + function unexportedMessage(sym, isFSSybol) { + var msg = "'" + sym + "' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"; + + if (isFSSybol) { + msg += ". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"; + } + + return msg; + } + + function unexportedRuntimeSymbol(sym, isFSSybol) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get: function () { + abort(unexportedMessage(sym, isFSSybol)); + } + }); + } + } + + function unexportedRuntimeFunction(sym, isFSSybol) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Module[sym] = () => abort(unexportedMessage(sym, isFSSybol)); + } + } + + var wasmBinary; + if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"]; + legacyModuleProp("wasmBinary", "wasmBinary"); + Module["noExitRuntime"] || true; + legacyModuleProp("noExitRuntime", "noExitRuntime"); + + if (typeof WebAssembly != "object") { + abort("no native wasm support detected"); + } + + var wasmMemory; + var ABORT = false; + + function assert(condition, text) { + if (!condition) { + abort("Assertion failed" + (text ? ": " + text : "")); + } + } + var UTF8Decoder = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : undefined; + + function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } else { + var str = ""; + + while (idx < endPtr) { + var u0 = heapOrArray[idx++]; + + if (!(u0 & 128)) { + str += String.fromCharCode(u0); + continue; + } + + var u1 = heapOrArray[idx++] & 63; + + if ((u0 & 224) == 192) { + str += String.fromCharCode((u0 & 31) << 6 | u1); + continue; + } + + var u2 = heapOrArray[idx++] & 63; + + if ((u0 & 240) == 224) { + u0 = (u0 & 15) << 12 | u1 << 6 | u2; + } else { + if ((u0 & 248) != 240) warnOnce("Invalid UTF-8 leading byte 0x" + u0.toString(16) + " encountered when deserializing a UTF-8 string in wasm memory to a JS string!"); + u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63; + } + + if (u0 < 65536) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 65536; + str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023); + } + } + } + + return str; + } + + function UTF8ToString(ptr, maxBytesToRead) { + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ""; + } + + function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) return 0; + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; + + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + + if (u >= 55296 && u <= 57343) { + var u1 = str.charCodeAt(++i); + u = 65536 + ((u & 1023) << 10) | u1 & 1023; + } + + if (u <= 127) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 2047) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 192 | u >> 6; + heap[outIdx++] = 128 | u & 63; + } else if (u <= 65535) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 224 | u >> 12; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 1114111) warnOnce("Invalid Unicode code point 0x" + u.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)."); + heap[outIdx++] = 240 | u >> 18; + heap[outIdx++] = 128 | u >> 12 & 63; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } + } + + heap[outIdx] = 0; + return outIdx - startIdx; + } + + function stringToUTF8(str, outPtr, maxBytesToWrite) { + assert(typeof maxBytesToWrite == "number", "stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + } + + function lengthBytesUTF8(str) { + var len = 0; + + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; + if (u <= 127) ++len;else if (u <= 2047) len += 2;else if (u <= 65535) len += 3;else len += 4; + } + + return len; + } + + var UTF16Decoder = typeof TextDecoder != "undefined" ? new TextDecoder("utf-16le") : undefined; + + function UTF16ToString(ptr, maxBytesToRead) { + assert(ptr % 2 == 0, "Pointer passed to UTF16ToString must be aligned to two bytes!"); + var endPtr = ptr; + var idx = endPtr >> 1; + var maxIdx = idx + maxBytesToRead / 2; + + while (!(idx >= maxIdx) && HEAPU16[idx]) ++idx; + + endPtr = idx << 1; + + if (endPtr - ptr > 32 && UTF16Decoder) { + return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr)); + } else { + var str = ""; + + for (var i = 0; !(i >= maxBytesToRead / 2); ++i) { + var codeUnit = HEAP16[ptr + i * 2 >> 1]; + if (codeUnit == 0) break; + str += String.fromCharCode(codeUnit); + } + + return str; + } + } + + function stringToUTF16(str, outPtr, maxBytesToWrite) { + assert(outPtr % 2 == 0, "Pointer passed to stringToUTF16 must be aligned to two bytes!"); + assert(typeof maxBytesToWrite == "number", "stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"); + + if (maxBytesToWrite === undefined) { + maxBytesToWrite = 2147483647; + } + + if (maxBytesToWrite < 2) return 0; + maxBytesToWrite -= 2; + var startPtr = outPtr; + var numCharsToWrite = maxBytesToWrite < str.length * 2 ? maxBytesToWrite / 2 : str.length; + + for (var i = 0; i < numCharsToWrite; ++i) { + var codeUnit = str.charCodeAt(i); + HEAP16[outPtr >> 1] = codeUnit; + outPtr += 2; + } + + HEAP16[outPtr >> 1] = 0; + return outPtr - startPtr; + } + + function lengthBytesUTF16(str) { + return str.length * 2; + } + + function UTF32ToString(ptr, maxBytesToRead) { + assert(ptr % 4 == 0, "Pointer passed to UTF32ToString must be aligned to four bytes!"); + var i = 0; + var str = ""; + + while (!(i >= maxBytesToRead / 4)) { + var utf32 = HEAP32[ptr + i * 4 >> 2]; + if (utf32 == 0) break; + ++i; + + if (utf32 >= 65536) { + var ch = utf32 - 65536; + str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023); + } else { + str += String.fromCharCode(utf32); + } + } + + return str; + } + + function stringToUTF32(str, outPtr, maxBytesToWrite) { + assert(outPtr % 4 == 0, "Pointer passed to stringToUTF32 must be aligned to four bytes!"); + assert(typeof maxBytesToWrite == "number", "stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"); + + if (maxBytesToWrite === undefined) { + maxBytesToWrite = 2147483647; + } + + if (maxBytesToWrite < 4) return 0; + var startPtr = outPtr; + var endPtr = startPtr + maxBytesToWrite - 4; + + for (var i = 0; i < str.length; ++i) { + var codeUnit = str.charCodeAt(i); + + if (codeUnit >= 55296 && codeUnit <= 57343) { + var trailSurrogate = str.charCodeAt(++i); + codeUnit = 65536 + ((codeUnit & 1023) << 10) | trailSurrogate & 1023; + } + + HEAP32[outPtr >> 2] = codeUnit; + outPtr += 4; + if (outPtr + 4 > endPtr) break; + } + + HEAP32[outPtr >> 2] = 0; + return outPtr - startPtr; + } + + function lengthBytesUTF32(str) { + var len = 0; + + for (var i = 0; i < str.length; ++i) { + var codeUnit = str.charCodeAt(i); + if (codeUnit >= 55296 && codeUnit <= 57343) ++i; + len += 4; + } + + return len; + } + + function allocateUTF8(str) { + var size = lengthBytesUTF8(str) + 1; + + var ret = _malloc(size); + + if (ret) stringToUTF8Array(str, HEAP8, ret, size); + return ret; + } + + function writeAsciiToMemory(str, buffer, dontAddNull) { + for (var i = 0; i < str.length; ++i) { + assert(str.charCodeAt(i) === (str.charCodeAt(i) & 255)); + HEAP8[buffer++ >> 0] = str.charCodeAt(i); + } + + if (!dontAddNull) HEAP8[buffer >> 0] = 0; + } + + var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; + + function updateGlobalBufferAndViews(buf) { + buffer = buf; + Module["HEAP8"] = HEAP8 = new Int8Array(buf); + Module["HEAP16"] = HEAP16 = new Int16Array(buf); + Module["HEAP32"] = HEAP32 = new Int32Array(buf); + Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf); + Module["HEAPU16"] = HEAPU16 = new Uint16Array(buf); + Module["HEAPU32"] = HEAPU32 = new Uint32Array(buf); + Module["HEAPF32"] = HEAPF32 = new Float32Array(buf); + Module["HEAPF64"] = HEAPF64 = new Float64Array(buf); + } + + var TOTAL_STACK = 5242880; + if (Module["TOTAL_STACK"]) assert(TOTAL_STACK === Module["TOTAL_STACK"], "the stack size can no longer be determined at runtime"); + var INITIAL_MEMORY = Module["INITIAL_MEMORY"] || 67108864; + legacyModuleProp("INITIAL_MEMORY", "INITIAL_MEMORY"); + assert(INITIAL_MEMORY >= TOTAL_STACK, "INITIAL_MEMORY should be larger than TOTAL_STACK, was " + INITIAL_MEMORY + "! (TOTAL_STACK=" + TOTAL_STACK + ")"); + assert(typeof Int32Array != "undefined" && typeof Float64Array !== "undefined" && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, "JS engine does not provide full typed array support"); + assert(!Module["wasmMemory"], "Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally"); + assert(INITIAL_MEMORY == 67108864, "Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically"); + var wasmTable; + + function writeStackCookie() { + var max = _emscripten_stack_get_end(); + + assert((max & 3) == 0); + HEAP32[max >> 2] = 34821223; + HEAP32[max + 4 >> 2] = 2310721022; + HEAP32[0] = 1668509029; + } + + function checkStackCookie() { + if (ABORT) return; + + var max = _emscripten_stack_get_end(); + + var cookie1 = HEAPU32[max >> 2]; + var cookie2 = HEAPU32[max + 4 >> 2]; + + if (cookie1 != 34821223 || cookie2 != 2310721022) { + abort("Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x2135467, but received 0x" + cookie2.toString(16) + " 0x" + cookie1.toString(16)); + } + + if (HEAP32[0] !== 1668509029) abort("Runtime error: The application has corrupted its heap memory area (address zero)!"); + } + + (function () { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 25459; + if (h8[0] !== 115 || h8[1] !== 99) throw "Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)"; + })(); + + var __ATPRERUN__ = []; + var __ATINIT__ = []; + var __ATPOSTRUN__ = []; + var runtimeInitialized = false; + + function preRun() { + if (Module["preRun"]) { + if (typeof Module["preRun"] == "function") Module["preRun"] = [Module["preRun"]]; + + while (Module["preRun"].length) { + addOnPreRun(Module["preRun"].shift()); + } + } + + callRuntimeCallbacks(__ATPRERUN__); + } + + function initRuntime() { + checkStackCookie(); + assert(!runtimeInitialized); + runtimeInitialized = true; + if (!Module["noFSInit"] && !FS.init.initialized) FS.init(); + FS.ignorePermissions = false; + callRuntimeCallbacks(__ATINIT__); + } + + function postRun() { + checkStackCookie(); + + if (Module["postRun"]) { + if (typeof Module["postRun"] == "function") Module["postRun"] = [Module["postRun"]]; + + while (Module["postRun"].length) { + addOnPostRun(Module["postRun"].shift()); + } + } + + callRuntimeCallbacks(__ATPOSTRUN__); + } + + function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); + } + + function addOnInit(cb) { + __ATINIT__.unshift(cb); + } + + function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); + } + + assert(Math.imul, "This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"); + assert(Math.fround, "This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"); + assert(Math.clz32, "This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"); + assert(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 runDependencies = 0; + var runDependencyWatcher = null; + var dependenciesFulfilled = null; + var runDependencyTracking = {}; + + function getUniqueRunDependency(id) { + var orig = id; + + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } + } + + function addRunDependency(id) { + runDependencies++; + + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + + if (runDependencyWatcher === null && typeof setInterval != "undefined") { + runDependencyWatcher = setInterval(function () { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + + var shown = false; + + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err("still waiting on run dependencies:"); + } + + err("dependency: " + dep); + } + + if (shown) { + err("(end of list)"); + } + }, 1e4); + } + } else { + err("warning: run dependency added without ID"); + } + } + + function removeRunDependency(id) { + runDependencies--; + + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err("warning: run dependency removed without ID"); + } + + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); + } + } + } + + function abort(what) { + { + if (Module["onAbort"]) { + Module["onAbort"](what); + } + } + what = "Aborted(" + what + ")"; + err(what); + ABORT = true; + var e = new WebAssembly.RuntimeError(what); + throw e; + } + + var dataURIPrefix = "data:application/octet-stream;base64,"; + + function isDataURI(filename) { + return filename.startsWith(dataURIPrefix); + } + + function isFileURI(filename) { + return filename.startsWith("file://"); + } + + function createExportWrapper(name, fixedasm) { + return function () { + var displayName = name; + var asm = fixedasm; + + if (!fixedasm) { + asm = Module["asm"]; + } + + assert(runtimeInitialized, "native function `" + displayName + "` called before runtime initialization"); + + if (!asm[name]) { + assert(asm[name], "exported native function `" + displayName + "` not found"); + } + + return asm[name].apply(null, arguments); + }; + } + + var wasmBinaryFile; + wasmBinaryFile = "decoder.wasm"; + + if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile); + } + + function getBinary(file) { + try { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + + if (readBinary) { + return readBinary(file); + } else { + throw "both async and sync fetching of the wasm failed"; + } + } catch (err) { + abort(err); + } + } + + function getBinaryPromise() { + if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) { + if (typeof fetch == "function" && !isFileURI(wasmBinaryFile)) { + return fetch(wasmBinaryFile, { + credentials: "same-origin" + }).then(function (response) { + if (!response["ok"]) { + throw "failed to load wasm binary file at '" + wasmBinaryFile + "'"; + } + + return response["arrayBuffer"](); + }).catch(function () { + return getBinary(wasmBinaryFile); + }); + } else { + if (readAsync) { + return new Promise(function (resolve, reject) { + readAsync(wasmBinaryFile, function (response) { + resolve(new Uint8Array(response)); + }, reject); + }); + } + } + } + + return Promise.resolve().then(function () { + return getBinary(wasmBinaryFile); + }); + } + + function createWasm() { + var info = { + "env": asmLibraryArg, + "wasi_snapshot_preview1": asmLibraryArg + }; + + function receiveInstance(instance, module) { + var exports = instance.exports; + Module["asm"] = exports; + wasmMemory = Module["asm"]["memory"]; + assert(wasmMemory, "memory not found in wasm exports"); + updateGlobalBufferAndViews(wasmMemory.buffer); + wasmTable = Module["asm"]["__indirect_function_table"]; + assert(wasmTable, "table not found in wasm exports"); + addOnInit(Module["asm"]["__wasm_call_ctors"]); + removeRunDependency("wasm-instantiate"); + } + + addRunDependency("wasm-instantiate"); + var trueModule = Module; + + function receiveInstantiationResult(result) { + assert(Module === trueModule, "the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"); + trueModule = null; + receiveInstance(result["instance"]); + } + + function instantiateArrayBuffer(receiver) { + return getBinaryPromise().then(function (binary) { + return WebAssembly.instantiate(binary, info); + }).then(function (instance) { + return instance; + }).then(receiver, function (reason) { + err("failed to asynchronously prepare wasm: " + reason); + + if (isFileURI(wasmBinaryFile)) { + err("warning: Loading from a file URI (" + wasmBinaryFile + ") 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"); + } + + abort(reason); + }); + } + + function instantiateAsync() { + if (!wasmBinary && typeof WebAssembly.instantiateStreaming == "function" && !isDataURI(wasmBinaryFile) && !isFileURI(wasmBinaryFile) && typeof fetch == "function") { + return fetch(wasmBinaryFile, { + credentials: "same-origin" + }).then(function (response) { + var result = WebAssembly.instantiateStreaming(response, info); + return result.then(receiveInstantiationResult, function (reason) { + err("wasm streaming compile failed: " + reason); + err("falling back to ArrayBuffer instantiation"); + return instantiateArrayBuffer(receiveInstantiationResult); + }); + }); + } else { + return instantiateArrayBuffer(receiveInstantiationResult); + } + } + + if (Module["instantiateWasm"]) { + try { + var exports = Module["instantiateWasm"](info, receiveInstance); + return exports; + } catch (e) { + err("Module.instantiateWasm callback failed with error: " + e); + return false; + } + } + + instantiateAsync(); + return {}; + } + + var tempDouble; + var tempI64; + + function callRuntimeCallbacks(callbacks) { + while (callbacks.length > 0) { + var callback = callbacks.shift(); + + if (typeof callback == "function") { + callback(Module); + continue; + } + + var func = callback.func; + + if (typeof func == "number") { + if (callback.arg === undefined) { + getWasmTableEntry(func)(); + } else { + getWasmTableEntry(func)(callback.arg); + } + } else { + func(callback.arg === undefined ? null : callback.arg); + } + } + } + + function demangle(func) { + warnOnce("warning: build with -sDEMANGLE_SUPPORT to link in libcxxabi demangling"); + return func; + } + + function demangleAll(text) { + var regex = /\b_Z[\w\d_]+/g; + return text.replace(regex, function (x) { + var y = demangle(x); + return x === y ? x : y + " [" + x + "]"; + }); + } + + function getWasmTableEntry(funcPtr) { + return wasmTable.get(funcPtr); + } + + function jsStackTrace() { + var error = new Error(); + + if (!error.stack) { + try { + throw new Error(); + } catch (e) { + error = e; + } + + if (!error.stack) { + return "(no stack trace available)"; + } + } + + return error.stack.toString(); + } + + function setErrNo(value) { + HEAP32[___errno_location() >> 2] = value; + return value; + } + + var PATH = { + isAbs: path => path.charAt(0) === "/", + splitPath: filename => { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + }, + normalizeArray: (parts, allowAboveRoot) => { + var up = 0; + + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + + if (last === ".") { + parts.splice(i, 1); + } else if (last === "..") { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift(".."); + } + } + + return parts; + }, + normalize: path => { + var isAbsolute = PATH.isAbs(path), + trailingSlash = path.substr(-1) === "/"; + path = PATH.normalizeArray(path.split("/").filter(p => !!p), !isAbsolute).join("/"); + + if (!path && !isAbsolute) { + path = "."; + } + + if (path && trailingSlash) { + path += "/"; + } + + return (isAbsolute ? "/" : "") + path; + }, + dirname: path => { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + return "."; + } + + if (dir) { + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; + }, + basename: path => { + if (path === "/") return "/"; + path = PATH.normalize(path); + path = path.replace(/\/$/, ""); + var lastSlash = path.lastIndexOf("/"); + if (lastSlash === -1) return path; + return path.substr(lastSlash + 1); + }, + join: function () { + var paths = Array.prototype.slice.call(arguments, 0); + return PATH.normalize(paths.join("/")); + }, + join2: (l, r) => { + return PATH.normalize(l + "/" + r); + } + }; + + function getRandomDevice() { + if (typeof crypto == "object" && typeof crypto["getRandomValues"] == "function") { + var randomBuffer = new Uint8Array(1); + return function () { + crypto.getRandomValues(randomBuffer); + return randomBuffer[0]; + }; + } else if (ENVIRONMENT_IS_NODE) { + try { + var crypto_module = crypto__default["default"]; + return function () { + return crypto_module["randomBytes"](1)[0]; + }; + } catch (e) {} + } + + return function () { + abort("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 } };"); + }; + } + + var PATH_FS = { + resolve: function () { + var resolvedPath = "", + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = i >= 0 ? arguments[i] : FS.cwd(); + + if (typeof path != "string") { + throw new TypeError("Arguments to path.resolve must be strings"); + } else if (!path) { + return ""; + } + + resolvedPath = path + "/" + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + + resolvedPath = PATH.normalizeArray(resolvedPath.split("/").filter(p => !!p), !resolvedAbsolute).join("/"); + return (resolvedAbsolute ? "/" : "") + resolvedPath || "."; + }, + relative: (from, to) => { + from = PATH_FS.resolve(from).substr(1); + to = PATH_FS.resolve(to).substr(1); + + function trim(arr) { + var start = 0; + + for (; start < arr.length; start++) { + if (arr[start] !== "") break; + } + + var end = arr.length - 1; + + for (; end >= 0; end--) { + if (arr[end] !== "") break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split("/")); + var toParts = trim(to.split("/")); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push(".."); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join("/"); + } + }; + var TTY = { + ttys: [], + init: function () {}, + shutdown: function () {}, + register: function (dev, ops) { + TTY.ttys[dev] = { + input: [], + output: [], + ops: ops + }; + FS.registerDevice(dev, TTY.stream_ops); + }, + stream_ops: { + open: function (stream) { + var tty = TTY.ttys[stream.node.rdev]; + + if (!tty) { + throw new FS.ErrnoError(43); + } + + stream.tty = tty; + stream.seekable = false; + }, + close: function (stream) { + stream.tty.ops.flush(stream.tty); + }, + flush: function (stream) { + stream.tty.ops.flush(stream.tty); + }, + read: function (stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + + var bytesRead = 0; + + for (var i = 0; i < length; i++) { + var result; + + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset + i] = result; + } + + if (bytesRead) { + stream.node.timestamp = Date.now(); + } + + return bytesRead; + }, + write: function (stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset + i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + + if (length) { + stream.node.timestamp = Date.now(); + } + + return i; + } + }, + default_tty_ops: { + get_char: function (tty) { + if (!tty.input.length) { + var result = null; + + if (ENVIRONMENT_IS_NODE) { + var BUFSIZE = 256; + var buf = Buffer.alloc(BUFSIZE); + var bytesRead = 0; + + try { + bytesRead = fs.readSync(process.stdin.fd, buf, 0, BUFSIZE, -1); + } catch (e) { + if (e.toString().includes("EOF")) bytesRead = 0;else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString("utf-8"); + } else { + result = null; + } + } else if (typeof window != "undefined" && typeof window.prompt == "function") { + result = window.prompt("Input: "); + + if (result !== null) { + result += "\n"; + } + } else if (typeof readline == "function") { + result = readline(); + + if (result !== null) { + result += "\n"; + } + } + + if (!result) { + return null; + } + + tty.input = intArrayFromString(result, true); + } + + return tty.input.shift(); + }, + put_char: function (tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + }, + flush: function (tty) { + if (tty.output && tty.output.length > 0) { + out(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } + } + }, + default_tty1_ops: { + put_char: function (tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + }, + flush: function (tty) { + if (tty.output && tty.output.length > 0) { + err(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } + } + } + }; + + function zeroMemory(address, size) { + HEAPU8.fill(0, address, address + size); + } + + function alignMemory(size, alignment) { + assert(alignment, "alignment argument is required"); + return Math.ceil(size / alignment) * alignment; + } + + function mmapAlloc(size) { + size = alignMemory(size, 65536); + + var ptr = _emscripten_builtin_memalign(65536, size); + + if (!ptr) return 0; + zeroMemory(ptr, size); + return ptr; + } + + var MEMFS = { + ops_table: null, + mount: function (mount) { + return MEMFS.createNode(null, "/", 16384 | 511, 0); + }, + createNode: function (parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + throw new FS.ErrnoError(63); + } + + if (!MEMFS.ops_table) { + MEMFS.ops_table = { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + allocate: MEMFS.stream_ops.allocate, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + } + + var node = FS.createNode(parent, name, mode, dev); + + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + + node.timestamp = Date.now(); + + if (parent) { + parent.contents[name] = node; + parent.timestamp = node.timestamp; + } + + return node; + }, + getFileDataAsTypedArray: function (node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); + return new Uint8Array(node.contents); + }, + expandFileStorage: function (node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) >>> 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); + }, + resizeFileStorage: function (node, newSize) { + if (node.usedBytes == newSize) return; + + if (newSize == 0) { + node.contents = null; + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); + + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); + } + + node.usedBytes = newSize; + } + }, + node_ops: { + getattr: function (node) { + var attr = {}; + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + + attr.atime = new Date(node.timestamp); + attr.mtime = new Date(node.timestamp); + attr.ctime = new Date(node.timestamp); + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + }, + setattr: function (node, attr) { + if (attr.mode !== undefined) { + node.mode = attr.mode; + } + + if (attr.timestamp !== undefined) { + node.timestamp = attr.timestamp; + } + + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + }, + lookup: function (parent, name) { + throw FS.genericErrors[44]; + }, + mknod: function (parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + }, + rename: function (old_node, new_dir, new_name) { + if (FS.isDir(old_node.mode)) { + var new_node; + + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) {} + + if (new_node) { + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + } + + delete old_node.parent.contents[old_node.name]; + old_node.parent.timestamp = Date.now(); + old_node.name = new_name; + new_dir.contents[new_name] = old_node; + new_dir.timestamp = old_node.parent.timestamp; + old_node.parent = new_dir; + }, + unlink: function (parent, name) { + delete parent.contents[name]; + parent.timestamp = Date.now(); + }, + rmdir: function (parent, name) { + var node = FS.lookupNode(parent, name); + + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + + delete parent.contents[name]; + parent.timestamp = Date.now(); + }, + readdir: function (node) { + var entries = [".", ".."]; + + for (var key in node.contents) { + if (!node.contents.hasOwnProperty(key)) { + continue; + } + + entries.push(key); + } + + return entries; + }, + symlink: function (parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 511 | 40960, 0); + node.link = oldpath; + return node; + }, + readlink: function (node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + + return node.link; + } + }, + stream_ops: { + read: function (stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + + if (size > 8 && contents.subarray) { + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + + return size; + }, + write: function (stream, buffer, offset, length, position, canOwn) { + assert(!(buffer instanceof ArrayBuffer)); + + if (buffer.buffer === HEAP8.buffer) { + canOwn = false; + } + + if (!length) return 0; + var node = stream.node; + node.timestamp = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { + if (canOwn) { + assert(position === 0, "canOwn must imply no weird position inside the file"); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + MEMFS.expandFileStorage(node, position + length); + + if (node.contents.subarray && buffer.subarray) { + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; + } + } + + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + }, + llseek: function (stream, offset, whence) { + var position = offset; + + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + + if (position < 0) { + throw new FS.ErrnoError(28); + } + + return position; + }, + allocate: function (stream, offset, length) { + MEMFS.expandFileStorage(stream.node, offset + length); + stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length); + }, + mmap: function (stream, address, length, position, prot, flags) { + if (address !== 0) { + throw new FS.ErrnoError(28); + } + + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + + var ptr; + var allocated; + var contents = stream.node.contents; + + if (!(flags & 2) && contents.buffer === buffer) { + allocated = false; + ptr = contents.byteOffset; + } else { + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + + allocated = true; + ptr = mmapAlloc(length); + + if (!ptr) { + throw new FS.ErrnoError(48); + } + + HEAP8.set(contents, ptr); + } + + return { + ptr: ptr, + allocated: allocated + }; + }, + msync: function (stream, buffer, offset, length, mmapFlags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + + if (mmapFlags & 2) { + return 0; + } + + MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + return 0; + } + } + }; + + function asyncLoad(url, onload, onerror, noRunDep) { + var dep = !noRunDep ? getUniqueRunDependency("al " + url) : ""; + readAsync(url, function (arrayBuffer) { + assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).'); + onload(new Uint8Array(arrayBuffer)); + if (dep) removeRunDependency(dep); + }, function (event) { + if (onerror) { + onerror(); + } else { + throw 'Loading data file "' + url + '" failed.'; + } + }); + if (dep) addRunDependency(dep); + } + + var ERRNO_MESSAGES = { + 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" + }; + var ERRNO_CODES = {}; + var FS = { + root: null, + mounts: [], + devices: {}, + streams: [], + nextInode: 1, + nameTable: null, + currentPath: "/", + initialized: false, + ignorePermissions: true, + ErrnoError: null, + genericErrors: {}, + filesystems: null, + syncFSRequests: 0, + lookupPath: function (path) { + let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + path = PATH_FS.resolve(FS.cwd(), path); + if (!path) return { + path: "", + node: null + }; + var defaults = { + follow_mount: true, + recurse_count: 0 + }; + opts = Object.assign(defaults, opts); + + if (opts.recurse_count > 8) { + throw new FS.ErrnoError(32); + } + + var parts = PATH.normalizeArray(path.split("/").filter(p => !!p), false); + var current = FS.root; + var current_path = "/"; + + for (var i = 0; i < parts.length; i++) { + var islast = i === parts.length - 1; + + if (islast && opts.parent) { + break; + } + + current = FS.lookupNode(current, parts[i]); + current_path = PATH.join2(current_path, parts[i]); + + if (FS.isMountpoint(current)) { + if (!islast || islast && opts.follow_mount) { + current = current.mounted.root; + } + } + + if (!islast || opts.follow) { + var count = 0; + + while (FS.isLink(current.mode)) { + var link = FS.readlink(current_path); + current_path = PATH_FS.resolve(PATH.dirname(current_path), link); + var lookup = FS.lookupPath(current_path, { + recurse_count: opts.recurse_count + 1 + }); + current = lookup.node; + + if (count++ > 40) { + throw new FS.ErrnoError(32); + } + } + } + } + + return { + path: current_path, + node: current + }; + }, + getPath: node => { + var path; + + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length - 1] !== "/" ? mount + "/" + path : mount + path; + } + + path = path ? node.name + "/" + path : node.name; + node = node.parent; + } + }, + hashName: (parentid, name) => { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = (hash << 5) - hash + name.charCodeAt(i) | 0; + } + + return (parentid + hash >>> 0) % FS.nameTable.length; + }, + hashAddNode: node => { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + }, + hashRemoveNode: node => { + var hash = FS.hashName(node.parent.id, node.name); + + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + + current = current.name_next; + } + } + }, + lookupNode: (parent, name) => { + var errCode = FS.mayLookup(parent); + + if (errCode) { + throw new FS.ErrnoError(errCode, parent); + } + + var hash = FS.hashName(parent.id, name); + + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + + return FS.lookup(parent, name); + }, + createNode: (parent, name, mode, rdev) => { + assert(typeof parent == "object"); + var node = new FS.FSNode(parent, name, mode, rdev); + FS.hashAddNode(node); + return node; + }, + destroyNode: node => { + FS.hashRemoveNode(node); + }, + isRoot: node => { + return node === node.parent; + }, + isMountpoint: node => { + return !!node.mounted; + }, + isFile: mode => { + return (mode & 61440) === 32768; + }, + isDir: mode => { + return (mode & 61440) === 16384; + }, + isLink: mode => { + return (mode & 61440) === 40960; + }, + isChrdev: mode => { + return (mode & 61440) === 8192; + }, + isBlkdev: mode => { + return (mode & 61440) === 24576; + }, + isFIFO: mode => { + return (mode & 61440) === 4096; + }, + isSocket: mode => { + return (mode & 49152) === 49152; + }, + flagModes: { + "r": 0, + "r+": 2, + "w": 577, + "w+": 578, + "a": 1089, + "a+": 1090 + }, + modeStringToFlags: str => { + var flags = FS.flagModes[str]; + + if (typeof flags == "undefined") { + throw new Error("Unknown file open mode: " + str); + } + + return flags; + }, + flagsToPermissionString: flag => { + var perms = ["r", "w", "rw"][flag & 3]; + + if (flag & 512) { + perms += "w"; + } + + return perms; + }, + nodePermissions: (node, perms) => { + if (FS.ignorePermissions) { + return 0; + } + + if (perms.includes("r") && !(node.mode & 292)) { + return 2; + } else if (perms.includes("w") && !(node.mode & 146)) { + return 2; + } else if (perms.includes("x") && !(node.mode & 73)) { + return 2; + } + + return 0; + }, + mayLookup: dir => { + var errCode = FS.nodePermissions(dir, "x"); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + }, + mayCreate: (dir, name) => { + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) {} + + return FS.nodePermissions(dir, "wx"); + }, + mayDelete: (dir, name, isdir) => { + var node; + + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + + var errCode = FS.nodePermissions(dir, "wx"); + + if (errCode) { + return errCode; + } + + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + + return 0; + }, + mayOpen: (node, flags) => { + if (!node) { + return 44; + } + + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== "r" || flags & 512) { + return 31; + } + } + + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + }, + MAX_OPEN_FDS: 4096, + nextfd: function () { + let fd_start = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + let fd_end = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : FS.MAX_OPEN_FDS; + + for (var fd = fd_start; fd <= fd_end; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + + throw new FS.ErrnoError(33); + }, + getStream: fd => FS.streams[fd], + createStream: (stream, fd_start, fd_end) => { + if (!FS.FSStream) { + FS.FSStream = function () { + this.shared = {}; + }; + + FS.FSStream.prototype = { + object: { + get: function () { + return this.node; + }, + set: function (val) { + this.node = val; + } + }, + isRead: { + get: function () { + return (this.flags & 2097155) !== 1; + } + }, + isWrite: { + get: function () { + return (this.flags & 2097155) !== 0; + } + }, + isAppend: { + get: function () { + return this.flags & 1024; + } + }, + flags: { + get: function () { + return this.shared.flags; + }, + set: function (val) { + this.shared.flags = val; + } + }, + position: { + get function() { + return this.shared.position; + }, + + set: function (val) { + this.shared.position = val; + } + } + }; + } + + stream = Object.assign(new FS.FSStream(), stream); + var fd = FS.nextfd(fd_start, fd_end); + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + }, + closeStream: fd => { + FS.streams[fd] = null; + }, + chrdev_stream_ops: { + open: stream => { + var device = FS.getDevice(stream.node.rdev); + stream.stream_ops = device.stream_ops; + + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + }, + llseek: () => { + throw new FS.ErrnoError(70); + } + }, + major: dev => dev >> 8, + minor: dev => dev & 255, + makedev: (ma, mi) => ma << 8 | mi, + registerDevice: (dev, ops) => { + FS.devices[dev] = { + stream_ops: ops + }; + }, + getDevice: dev => FS.devices[dev], + getMounts: mount => { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + mounts.push(m); + check.push.apply(check, m.mounts); + } + + return mounts; + }, + syncfs: (populate, callback) => { + if (typeof populate == "function") { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err("warning: " + FS.syncFSRequests + " FS.syncfs operations in flight at once, probably just doing extra work"); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + assert(FS.syncFSRequests > 0); + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + + return; + } + + if (++completed >= mounts.length) { + doCallback(null); + } + } + + mounts.forEach(mount => { + if (!mount.type.syncfs) { + return done(null); + } + + mount.type.syncfs(mount, populate, done); + }); + }, + mount: (type, opts, mountpoint) => { + if (typeof type == "string") { + throw type; + } + + var root = mountpoint === "/"; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { + follow_mount: false + }); + mountpoint = lookup.path; + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type: type, + opts: opts, + mountpoint: mountpoint, + mounts: [] + }; + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + node.mounted = mount; + + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + }, + unmount: mountpoint => { + var lookup = FS.lookupPath(mountpoint, { + follow_mount: false + }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + Object.keys(FS.nameTable).forEach(hash => { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + node.mounted = null; + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + }, + lookup: (parent, name) => { + return parent.node_ops.lookup(parent, name); + }, + mknod: (path, mode, dev) => { + var lookup = FS.lookupPath(path, { + parent: true + }); + var parent = lookup.node; + var name = PATH.basename(path); + + if (!name || name === "." || name === "..") { + throw new FS.ErrnoError(28); + } + + var errCode = FS.mayCreate(parent, name); + + if (errCode) { + throw new FS.ErrnoError(errCode); + } + + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + + return parent.node_ops.mknod(parent, name, mode, dev); + }, + create: (path, mode) => { + mode = mode !== undefined ? mode : 438; + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + }, + mkdir: (path, mode) => { + mode = mode !== undefined ? mode : 511; + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + }, + mkdirTree: (path, mode) => { + var dirs = path.split("/"); + var d = ""; + + for (var i = 0; i < dirs.length; ++i) { + if (!dirs[i]) continue; + d += "/" + dirs[i]; + + try { + FS.mkdir(d, mode); + } catch (e) { + if (e.errno != 20) throw e; + } + } + }, + mkdev: (path, mode, dev) => { + if (typeof dev == "undefined") { + dev = mode; + mode = 438; + } + + mode |= 8192; + return FS.mknod(path, mode, dev); + }, + symlink: (oldpath, newpath) => { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + + var lookup = FS.lookupPath(newpath, { + parent: true + }); + var parent = lookup.node; + + if (!parent) { + throw new FS.ErrnoError(44); + } + + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + + if (errCode) { + throw new FS.ErrnoError(errCode); + } + + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + + return parent.node_ops.symlink(parent, newname, oldpath); + }, + rename: (old_path, new_path) => { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + var lookup, old_dir, new_dir; + lookup = FS.lookupPath(old_path, { + parent: true + }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { + parent: true + }); + new_dir = lookup.node; + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + + var old_node = FS.lookupNode(old_dir, old_name); + var relative = PATH_FS.relative(old_path, new_dirname); + + if (relative.charAt(0) !== ".") { + throw new FS.ErrnoError(28); + } + + relative = PATH_FS.relative(new_path, old_dirname); + + if (relative.charAt(0) !== ".") { + throw new FS.ErrnoError(55); + } + + var new_node; + + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) {} + + if (old_node === new_node) { + return; + } + + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + + if (errCode) { + throw new FS.ErrnoError(errCode); + } + + errCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name); + + if (errCode) { + throw new FS.ErrnoError(errCode); + } + + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + + if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) { + throw new FS.ErrnoError(10); + } + + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, "w"); + + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + + FS.hashRemoveNode(old_node); + + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + } catch (e) { + throw e; + } finally { + FS.hashAddNode(old_node); + } + }, + rmdir: path => { + var lookup = FS.lookupPath(path, { + parent: true + }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + + if (errCode) { + throw new FS.ErrnoError(errCode); + } + + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + }, + readdir: path => { + var lookup = FS.lookupPath(path, { + follow: true + }); + var node = lookup.node; + + if (!node.node_ops.readdir) { + throw new FS.ErrnoError(54); + } + + return node.node_ops.readdir(node); + }, + unlink: path => { + var lookup = FS.lookupPath(path, { + parent: true + }); + var parent = lookup.node; + + if (!parent) { + throw new FS.ErrnoError(44); + } + + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + + if (errCode) { + throw new FS.ErrnoError(errCode); + } + + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + }, + readlink: path => { + var lookup = FS.lookupPath(path); + var link = lookup.node; + + if (!link) { + throw new FS.ErrnoError(44); + } + + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + + return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link)); + }, + stat: (path, dontFollow) => { + var lookup = FS.lookupPath(path, { + follow: !dontFollow + }); + var node = lookup.node; + + if (!node) { + throw new FS.ErrnoError(44); + } + + if (!node.node_ops.getattr) { + throw new FS.ErrnoError(63); + } + + return node.node_ops.getattr(node); + }, + lstat: path => { + return FS.stat(path, true); + }, + chmod: (path, mode, dontFollow) => { + var node; + + if (typeof path == "string") { + var lookup = FS.lookupPath(path, { + follow: !dontFollow + }); + node = lookup.node; + } else { + node = path; + } + + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63); + } + + node.node_ops.setattr(node, { + mode: mode & 4095 | node.mode & ~4095, + timestamp: Date.now() + }); + }, + lchmod: (path, mode) => { + FS.chmod(path, mode, true); + }, + fchmod: (fd, mode) => { + var stream = FS.getStream(fd); + + if (!stream) { + throw new FS.ErrnoError(8); + } + + FS.chmod(stream.node, mode); + }, + chown: (path, uid, gid, dontFollow) => { + var node; + + if (typeof path == "string") { + var lookup = FS.lookupPath(path, { + follow: !dontFollow + }); + node = lookup.node; + } else { + node = path; + } + + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63); + } + + node.node_ops.setattr(node, { + timestamp: Date.now() + }); + }, + lchown: (path, uid, gid) => { + FS.chown(path, uid, gid, true); + }, + fchown: (fd, uid, gid) => { + var stream = FS.getStream(fd); + + if (!stream) { + throw new FS.ErrnoError(8); + } + + FS.chown(stream.node, uid, gid); + }, + truncate: (path, len) => { + if (len < 0) { + throw new FS.ErrnoError(28); + } + + var node; + + if (typeof path == "string") { + var lookup = FS.lookupPath(path, { + follow: true + }); + node = lookup.node; + } else { + node = path; + } + + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63); + } + + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + + var errCode = FS.nodePermissions(node, "w"); + + if (errCode) { + throw new FS.ErrnoError(errCode); + } + + node.node_ops.setattr(node, { + size: len, + timestamp: Date.now() + }); + }, + ftruncate: (fd, len) => { + var stream = FS.getStream(fd); + + if (!stream) { + throw new FS.ErrnoError(8); + } + + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + + FS.truncate(stream.node, len); + }, + utime: (path, atime, mtime) => { + var lookup = FS.lookupPath(path, { + follow: true + }); + var node = lookup.node; + node.node_ops.setattr(node, { + timestamp: Math.max(atime, mtime) + }); + }, + open: (path, flags, mode, fd_start, fd_end) => { + if (path === "") { + throw new FS.ErrnoError(44); + } + + flags = typeof flags == "string" ? FS.modeStringToFlags(flags) : flags; + mode = typeof mode == "undefined" ? 438 : mode; + + if (flags & 64) { + mode = mode & 4095 | 32768; + } else { + mode = 0; + } + + var node; + + if (typeof path == "object") { + node = path; + } else { + path = PATH.normalize(path); + + try { + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072) + }); + node = lookup.node; + } catch (e) {} + } + + var created = false; + + if (flags & 64) { + if (node) { + if (flags & 128) { + throw new FS.ErrnoError(20); + } + } else { + node = FS.mknod(path, mode, 0); + created = true; + } + } + + if (!node) { + throw new FS.ErrnoError(44); + } + + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + + if (flags & 65536 && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + + if (!created) { + var errCode = FS.mayOpen(node, flags); + + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + + if (flags & 512) { + FS.truncate(node, 0); + } + + flags &= ~(128 | 512 | 131072); + var stream = FS.createStream({ + node: node, + path: FS.getPath(node), + flags: flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + ungotten: [], + error: false + }, fd_start, fd_end); + + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + + if (Module["logReadFiles"] && !(flags & 1)) { + if (!FS.readFiles) FS.readFiles = {}; + + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + } + } + + return stream; + }, + close: stream => { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + + if (stream.getdents) stream.getdents = null; + + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + + stream.fd = null; + }, + isClosed: stream => { + return stream.fd === null; + }, + llseek: (stream, offset, whence) => { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + }, + read: (stream, buffer, offset, length, position) => { + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + + var seeking = typeof position != "undefined"; + + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + }, + write: (stream, buffer, offset, length, position, canOwn) => { + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + + if (stream.seekable && stream.flags & 1024) { + FS.llseek(stream, 0, 2); + } + + var seeking = typeof position != "undefined"; + + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + return bytesWritten; + }, + allocate: (stream, offset, length) => { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + + if (offset < 0 || length <= 0) { + throw new FS.ErrnoError(28); + } + + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + + if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + + if (!stream.stream_ops.allocate) { + throw new FS.ErrnoError(138); + } + + stream.stream_ops.allocate(stream, offset, length); + }, + mmap: (stream, address, length, position, prot, flags) => { + if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + + return stream.stream_ops.mmap(stream, address, length, position, prot, flags); + }, + msync: (stream, buffer, offset, length, mmapFlags) => { + if (!stream || !stream.stream_ops.msync) { + return 0; + } + + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + }, + munmap: stream => 0, + ioctl: (stream, cmd, arg) => { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + + return stream.stream_ops.ioctl(stream, cmd, arg); + }, + readFile: function (path) { + let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || "binary"; + + if (opts.encoding !== "utf8" && opts.encoding !== "binary") { + throw new Error('Invalid encoding type "' + opts.encoding + '"'); + } + + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + + if (opts.encoding === "utf8") { + ret = UTF8ArrayToString(buf, 0); + } else if (opts.encoding === "binary") { + ret = buf; + } + + FS.close(stream); + return ret; + }, + writeFile: function (path, data) { + let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + + if (typeof data == "string") { + var buf = new Uint8Array(lengthBytesUTF8(data) + 1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error("Unsupported data type"); + } + + FS.close(stream); + }, + cwd: () => FS.currentPath, + chdir: path => { + var lookup = FS.lookupPath(path, { + follow: true + }); + + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + + var errCode = FS.nodePermissions(lookup.node, "x"); + + if (errCode) { + throw new FS.ErrnoError(errCode); + } + + FS.currentPath = lookup.path; + }, + createDefaultDirectories: () => { + FS.mkdir("/tmp"); + FS.mkdir("/home"); + FS.mkdir("/home/web_user"); + }, + createDefaultDevices: () => { + FS.mkdir("/dev"); + FS.registerDevice(FS.makedev(1, 3), { + read: () => 0, + write: (stream, buffer, offset, length, pos) => length + }); + FS.mkdev("/dev/null", FS.makedev(1, 3)); + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev("/dev/tty", FS.makedev(5, 0)); + FS.mkdev("/dev/tty1", FS.makedev(6, 0)); + var random_device = getRandomDevice(); + FS.createDevice("/dev", "random", random_device); + FS.createDevice("/dev", "urandom", random_device); + FS.mkdir("/dev/shm"); + FS.mkdir("/dev/shm/tmp"); + }, + createSpecialDirectories: () => { + FS.mkdir("/proc"); + var proc_self = FS.mkdir("/proc/self"); + FS.mkdir("/proc/self/fd"); + FS.mount({ + mount: () => { + var node = FS.createNode(proc_self, "fd", 16384 | 511, 73); + node.node_ops = { + lookup: (parent, name) => { + var fd = +name; + var stream = FS.getStream(fd); + if (!stream) throw new FS.ErrnoError(8); + var ret = { + parent: null, + mount: { + mountpoint: "fake" + }, + node_ops: { + readlink: () => stream.path + } + }; + ret.parent = ret; + return ret; + } + }; + return node; + } + }, {}, "/proc/self/fd"); + }, + createStandardStreams: () => { + if (Module["stdin"]) { + FS.createDevice("/dev", "stdin", Module["stdin"]); + } else { + FS.symlink("/dev/tty", "/dev/stdin"); + } + + if (Module["stdout"]) { + FS.createDevice("/dev", "stdout", null, Module["stdout"]); + } else { + FS.symlink("/dev/tty", "/dev/stdout"); + } + + if (Module["stderr"]) { + FS.createDevice("/dev", "stderr", null, Module["stderr"]); + } else { + FS.symlink("/dev/tty1", "/dev/stderr"); + } + + var stdin = FS.open("/dev/stdin", 0); + var stdout = FS.open("/dev/stdout", 1); + var stderr = FS.open("/dev/stderr", 1); + assert(stdin.fd === 0, "invalid handle for stdin (" + stdin.fd + ")"); + assert(stdout.fd === 1, "invalid handle for stdout (" + stdout.fd + ")"); + assert(stderr.fd === 2, "invalid handle for stderr (" + stderr.fd + ")"); + }, + ensureErrnoError: () => { + if (FS.ErrnoError) return; + + FS.ErrnoError = function ErrnoError(errno, node) { + this.node = node; + + this.setErrno = function (errno) { + this.errno = errno; + + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + }; + + this.setErrno(errno); + this.message = ERRNO_MESSAGES[errno]; + + if (this.stack) { + Object.defineProperty(this, "stack", { + value: new Error().stack, + writable: true + }); + this.stack = demangleAll(this.stack); + } + }; + + FS.ErrnoError.prototype = new Error(); + FS.ErrnoError.prototype.constructor = FS.ErrnoError; + [44].forEach(code => { + FS.genericErrors[code] = new FS.ErrnoError(code); + FS.genericErrors[code].stack = ""; + }); + }, + staticInit: () => { + FS.ensureErrnoError(); + FS.nameTable = new Array(4096); + FS.mount(MEMFS, {}, "/"); + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + FS.filesystems = { + "MEMFS": MEMFS + }; + }, + init: (input, output, error) => { + assert(!FS.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)"); + FS.init.initialized = true; + FS.ensureErrnoError(); + Module["stdin"] = input || Module["stdin"]; + Module["stdout"] = output || Module["stdout"]; + Module["stderr"] = error || Module["stderr"]; + FS.createStandardStreams(); + }, + quit: () => { + FS.init.initialized = false; + + ___stdio_exit(); + + for (var i = 0; i < FS.streams.length; i++) { + var stream = FS.streams[i]; + + if (!stream) { + continue; + } + + FS.close(stream); + } + }, + getMode: (canRead, canWrite) => { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + }, + findObject: (path, dontResolveLastLink) => { + var ret = FS.analyzePath(path, dontResolveLastLink); + + if (ret.exists) { + return ret.object; + } else { + return null; + } + }, + analyzePath: (path, dontResolveLastLink) => { + try { + var lookup = FS.lookupPath(path, { + follow: !dontResolveLastLink + }); + path = lookup.path; + } catch (e) {} + + var ret = { + isRoot: false, + exists: false, + error: 0, + name: null, + path: null, + object: null, + parentExists: false, + parentPath: null, + parentObject: null + }; + + try { + var lookup = FS.lookupPath(path, { + parent: true + }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { + follow: !dontResolveLastLink + }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === "/"; + } catch (e) { + ret.error = e.errno; + } + + return ret; + }, + createPath: (parent, path, canRead, canWrite) => { + parent = typeof parent == "string" ? parent : FS.getPath(parent); + var parts = path.split("/").reverse(); + + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + + try { + FS.mkdir(current); + } catch (e) {} + + parent = current; + } + + return current; + }, + createFile: (parent, name, properties, canRead, canWrite) => { + var path = PATH.join2(typeof parent == "string" ? parent : FS.getPath(parent), name); + var mode = FS.getMode(canRead, canWrite); + return FS.create(path, mode); + }, + createDataFile: (parent, name, data, canRead, canWrite, canOwn) => { + var path = name; + + if (parent) { + parent = typeof parent == "string" ? parent : FS.getPath(parent); + path = name ? PATH.join2(parent, name) : parent; + } + + var mode = FS.getMode(canRead, canWrite); + var node = FS.create(path, mode); + + if (data) { + if (typeof data == "string") { + var arr = new Array(data.length); + + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + + data = arr; + } + + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + + return node; + }, + createDevice: (parent, name, input, output) => { + var path = PATH.join2(typeof parent == "string" ? parent : FS.getPath(parent), name); + var mode = FS.getMode(!!input, !!output); + if (!FS.createDevice.major) FS.createDevice.major = 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + FS.registerDevice(dev, { + open: stream => { + stream.seekable = false; + }, + close: stream => { + if (output && output.buffer && output.buffer.length) { + output(10); + } + }, + read: (stream, buffer, offset, length, pos) => { + var bytesRead = 0; + + for (var i = 0; i < length; i++) { + var result; + + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset + i] = result; + } + + if (bytesRead) { + stream.node.timestamp = Date.now(); + } + + return bytesRead; + }, + write: (stream, buffer, offset, length, pos) => { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset + i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + + if (length) { + stream.node.timestamp = Date.now(); + } + + return i; + } + }); + return FS.mkdev(path, mode, dev); + }, + forceLoadFile: obj => { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + + if (typeof XMLHttpRequest != "undefined") { + 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."); + } else if (read_) { + try { + obj.contents = intArrayFromString(read_(obj.url), true); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } else { + throw new Error("Cannot load without read() or XMLHttpRequest."); + } + }, + createLazyFile: (parent, name, url, canRead, canWrite) => { + function LazyUint8Array() { + this.lengthKnown = false; + this.chunks = []; + } + + LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) { + if (idx > this.length - 1 || idx < 0) { + return undefined; + } + + var chunkOffset = idx % this.chunkSize; + var chunkNum = idx / this.chunkSize | 0; + return this.getter(chunkNum)[chunkOffset]; + }; + + LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) { + this.getter = getter; + }; + + LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() { + var xhr = new XMLHttpRequest(); + xhr.open("HEAD", url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + var chunkSize = 1024 * 1024; + if (!hasByteServing) chunkSize = datalength; + + var doXHR = (from, to) => { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength - 1) throw new Error("only " + datalength + " bytes available! programmer error!"); + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + xhr.responseType = "arraybuffer"; + + if (xhr.overrideMimeType) { + xhr.overrideMimeType("text/plain; charset=x-user-defined"); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + + if (xhr.response !== undefined) { + return new Uint8Array(xhr.response || []); + } else { + return intArrayFromString(xhr.responseText || "", true); + } + }; + + var lazyArray = this; + lazyArray.setDataGetter(chunkNum => { + var start = chunkNum * chunkSize; + var end = (chunkNum + 1) * chunkSize - 1; + end = Math.min(end, datalength - 1); + + if (typeof lazyArray.chunks[chunkNum] == "undefined") { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + + if (typeof lazyArray.chunks[chunkNum] == "undefined") throw new Error("doXHR failed!"); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + chunkSize = datalength = 1; + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + }; + + if (typeof XMLHttpRequest != "undefined") { + if (!ENVIRONMENT_IS_WORKER) throw "Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc"; + var lazyArray = new LazyUint8Array(); + Object.defineProperties(lazyArray, { + length: { + get: function () { + if (!this.lengthKnown) { + this.cacheLength(); + } + + return this._length; + } + }, + chunkSize: { + get: function () { + if (!this.lengthKnown) { + this.cacheLength(); + } + + return this._chunkSize; + } + } + }); + var properties = { + isDevice: false, + contents: lazyArray + }; + } else { + var properties = { + isDevice: false, + url: url + }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + + Object.defineProperties(node, { + usedBytes: { + get: function () { + return this.contents.length; + } + } + }); + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach(key => { + var fn = node.stream_ops[key]; + + stream_ops[key] = function forceLoadLazyFile() { + FS.forceLoadFile(node); + return fn.apply(null, arguments); + }; + }); + + stream_ops.read = (stream, buffer, offset, length, position) => { + FS.forceLoadFile(node); + var contents = stream.node.contents; + if (position >= contents.length) return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + + if (contents.slice) { + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents.get(position + i); + } + } + + return size; + }; + + node.stream_ops = stream_ops; + return node; + }, + createPreloadedFile: (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency("cp " + fullname); + + function processData(byteArray) { + function finish(byteArray) { + if (preFinish) preFinish(); + + if (!dontCreateFile) { + FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + + if (onload) onload(); + removeRunDependency(dep); + } + + if (Browser.handledByPreloadPlugin(byteArray, fullname, finish, () => { + if (onerror) onerror(); + removeRunDependency(dep); + })) { + return; + } + + finish(byteArray); + } + + addRunDependency(dep); + + if (typeof url == "string") { + asyncLoad(url, byteArray => processData(byteArray), onerror); + } else { + processData(url); + } + }, + indexedDB: () => { + return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; + }, + DB_NAME: () => { + return "EM_FS_" + window.location.pathname; + }, + DB_VERSION: 20, + DB_STORE_NAME: "FILE_DATA", + saveFilesToDB: (paths, onload, onerror) => { + onload = onload || (() => {}); + + onerror = onerror || (() => {}); + + var indexedDB = FS.indexedDB(); + + try { + var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); + } catch (e) { + return onerror(e); + } + + openRequest.onupgradeneeded = () => { + out("creating db"); + var db = openRequest.result; + db.createObjectStore(FS.DB_STORE_NAME); + }; + + openRequest.onsuccess = () => { + var db = openRequest.result; + var transaction = db.transaction([FS.DB_STORE_NAME], "readwrite"); + var files = transaction.objectStore(FS.DB_STORE_NAME); + var ok = 0, + fail = 0, + total = paths.length; + + function finish() { + if (fail == 0) onload();else onerror(); + } + + paths.forEach(path => { + var putRequest = files.put(FS.analyzePath(path).object.contents, path); + + putRequest.onsuccess = () => { + ok++; + if (ok + fail == total) finish(); + }; + + putRequest.onerror = () => { + fail++; + if (ok + fail == total) finish(); + }; + }); + transaction.onerror = onerror; + }; + + openRequest.onerror = onerror; + }, + loadFilesFromDB: (paths, onload, onerror) => { + onload = onload || (() => {}); + + onerror = onerror || (() => {}); + + var indexedDB = FS.indexedDB(); + + try { + var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); + } catch (e) { + return onerror(e); + } + + openRequest.onupgradeneeded = onerror; + + openRequest.onsuccess = () => { + var db = openRequest.result; + + try { + var transaction = db.transaction([FS.DB_STORE_NAME], "readonly"); + } catch (e) { + onerror(e); + return; + } + + var files = transaction.objectStore(FS.DB_STORE_NAME); + var ok = 0, + fail = 0, + total = paths.length; + + function finish() { + if (fail == 0) onload();else onerror(); + } + + paths.forEach(path => { + var getRequest = files.get(path); + + getRequest.onsuccess = () => { + if (FS.analyzePath(path).exists) { + FS.unlink(path); + } + + FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true); + ok++; + if (ok + fail == total) finish(); + }; + + getRequest.onerror = () => { + fail++; + if (ok + fail == total) finish(); + }; + }); + transaction.onerror = onerror; + }; + + openRequest.onerror = onerror; + }, + absolutePath: () => { + abort("FS.absolutePath has been removed; use PATH_FS.resolve instead"); + }, + createFolder: () => { + abort("FS.createFolder has been removed; use FS.mkdir instead"); + }, + createLink: () => { + abort("FS.createLink has been removed; use FS.symlink instead"); + }, + joinPath: () => { + abort("FS.joinPath has been removed; use PATH.join instead"); + }, + mmapAlloc: () => { + abort("FS.mmapAlloc has been replaced by the top level function mmapAlloc"); + }, + standardizePath: () => { + abort("FS.standardizePath has been removed; use PATH.normalize instead"); + } + }; + var SYSCALLS = { + DEFAULT_POLLMASK: 5, + calculateAt: function (dirfd, path, allowEmpty) { + if (PATH.isAbs(path)) { + return path; + } + + var dir; + + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = FS.getStream(dirfd); + if (!dirstream) throw new FS.ErrnoError(8); + dir = dirstream.path; + } + + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44); + } + + return dir; + } + + return PATH.join2(dir, path); + }, + doStat: function (func, path, buf) { + try { + var stat = func(path); + } catch (e) { + if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { + return -54; + } + + throw e; + } + + HEAP32[buf >> 2] = stat.dev; + HEAP32[buf + 4 >> 2] = 0; + HEAP32[buf + 8 >> 2] = stat.ino; + HEAP32[buf + 12 >> 2] = stat.mode; + HEAP32[buf + 16 >> 2] = stat.nlink; + HEAP32[buf + 20 >> 2] = stat.uid; + HEAP32[buf + 24 >> 2] = stat.gid; + HEAP32[buf + 28 >> 2] = stat.rdev; + HEAP32[buf + 32 >> 2] = 0; + tempI64 = [stat.size >>> 0, (tempDouble = stat.size, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 40 >> 2] = tempI64[0], HEAP32[buf + 44 >> 2] = tempI64[1]; + HEAP32[buf + 48 >> 2] = 4096; + HEAP32[buf + 52 >> 2] = stat.blocks; + HEAP32[buf + 56 >> 2] = stat.atime.getTime() / 1e3 | 0; + HEAP32[buf + 60 >> 2] = 0; + HEAP32[buf + 64 >> 2] = stat.mtime.getTime() / 1e3 | 0; + HEAP32[buf + 68 >> 2] = 0; + HEAP32[buf + 72 >> 2] = stat.ctime.getTime() / 1e3 | 0; + HEAP32[buf + 76 >> 2] = 0; + tempI64 = [stat.ino >>> 0, (tempDouble = stat.ino, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 80 >> 2] = tempI64[0], HEAP32[buf + 84 >> 2] = tempI64[1]; + return 0; + }, + doMsync: function (addr, stream, len, flags, offset) { + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + }, + doMknod: function (path, mode, dev) { + switch (mode & 61440) { + case 32768: + case 8192: + case 24576: + case 4096: + case 49152: + break; + + default: + return -28; + } + + FS.mknod(path, mode, dev); + return 0; + }, + doReadlink: function (path, buf, bufsize) { + if (bufsize <= 0) return -28; + var ret = FS.readlink(path); + var len = Math.min(bufsize, lengthBytesUTF8(ret)); + var endChar = HEAP8[buf + len]; + stringToUTF8(ret, buf, bufsize + 1); + HEAP8[buf + len] = endChar; + return len; + }, + doAccess: function (path, amode) { + if (amode & ~7) { + return -28; + } + + var lookup = FS.lookupPath(path, { + follow: true + }); + var node = lookup.node; + + if (!node) { + return -44; + } + + var perms = ""; + if (amode & 4) perms += "r"; + if (amode & 2) perms += "w"; + if (amode & 1) perms += "x"; + + if (perms && FS.nodePermissions(node, perms)) { + return -2; + } + + return 0; + }, + doReadv: function (stream, iov, iovcnt, offset) { + var ret = 0; + + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAP32[iov >> 2]; + var len = HEAP32[iov + 4 >> 2]; + iov += 8; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; + } + + return ret; + }, + doWritev: function (stream, iov, iovcnt, offset) { + var ret = 0; + + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAP32[iov >> 2]; + var len = HEAP32[iov + 4 >> 2]; + iov += 8; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + } + + return ret; + }, + varargs: undefined, + get: function () { + assert(SYSCALLS.varargs != undefined); + SYSCALLS.varargs += 4; + var ret = HEAP32[SYSCALLS.varargs - 4 >> 2]; + return ret; + }, + getStr: function (ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + getStreamFromFD: function (fd) { + var stream = FS.getStream(fd); + if (!stream) throw new FS.ErrnoError(8); + return stream; + } + }; + + function ___syscall_fcntl64(fd, cmd, varargs) { + SYSCALLS.varargs = varargs; + + try { + var stream = SYSCALLS.getStreamFromFD(fd); + + switch (cmd) { + case 0: + { + var arg = SYSCALLS.get(); + + if (arg < 0) { + return -28; + } + + var newStream; + newStream = FS.createStream(stream, arg); + return newStream.fd; + } + + case 1: + case 2: + return 0; + + case 3: + return stream.flags; + + case 4: + { + var arg = SYSCALLS.get(); + stream.flags |= arg; + return 0; + } + + case 5: + { + var arg = SYSCALLS.get(); + var offset = 0; + HEAP16[arg + offset >> 1] = 2; + return 0; + } + + case 6: + case 7: + return 0; + + case 16: + case 8: + return -28; + + case 9: + setErrNo(28); + return -1; + + default: + { + return -28; + } + } + } catch (e) { + if (typeof FS == "undefined" || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function ___syscall_openat(dirfd, path, flags, varargs) { + SYSCALLS.varargs = varargs; + + try { + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + var mode = varargs ? SYSCALLS.get() : 0; + return FS.open(path, flags, mode).fd; + } catch (e) { + if (typeof FS == "undefined" || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function __embind_register_bigint(primitiveType, name, size, minRange, maxRange) {} + + function getShiftFromSize(size) { + switch (size) { + case 1: + return 0; + + case 2: + return 1; + + case 4: + return 2; + + case 8: + return 3; + + default: + throw new TypeError("Unknown type size: " + size); + } + } + + function embind_init_charCodes() { + var codes = new Array(256); + + for (var i = 0; i < 256; ++i) { + codes[i] = String.fromCharCode(i); + } + + embind_charCodes = codes; + } + + var embind_charCodes = undefined; + + function readLatin1String(ptr) { + var ret = ""; + var c = ptr; + + while (HEAPU8[c]) { + ret += embind_charCodes[HEAPU8[c++]]; + } + + return ret; + } + + var awaitingDependencies = {}; + var registeredTypes = {}; + var typeDependencies = {}; + var char_0 = 48; + var char_9 = 57; + + function makeLegalFunctionName(name) { + if (undefined === name) { + return "_unknown"; + } + + name = name.replace(/[^a-zA-Z0-9_]/g, "$"); + var f = name.charCodeAt(0); + + if (f >= char_0 && f <= char_9) { + return "_" + name; + } + + return name; + } + + function createNamedFunction(name, body) { + name = makeLegalFunctionName(name); + return new Function("body", "return function " + name + "() {\n" + ' "use strict";' + " return body.apply(this, arguments);\n" + "};\n")(body); + } + + function extendError(baseErrorType, errorName) { + var errorClass = createNamedFunction(errorName, function (message) { + this.name = errorName; + this.message = message; + var stack = new Error(message).stack; + + if (stack !== undefined) { + this.stack = this.toString() + "\n" + stack.replace(/^Error(:[^\n]*)?\n/, ""); + } + }); + errorClass.prototype = Object.create(baseErrorType.prototype); + errorClass.prototype.constructor = errorClass; + + errorClass.prototype.toString = function () { + if (this.message === undefined) { + return this.name; + } else { + return this.name + ": " + this.message; + } + }; + + return errorClass; + } + + var BindingError = undefined; + + function throwBindingError(message) { + throw new BindingError(message); + } + + var InternalError = undefined; + + function throwInternalError(message) { + throw new InternalError(message); + } + + function whenDependentTypesAreResolved(myTypes, dependentTypes, getTypeConverters) { + myTypes.forEach(function (type) { + typeDependencies[type] = dependentTypes; + }); + + function onComplete(typeConverters) { + var myTypeConverters = getTypeConverters(typeConverters); + + if (myTypeConverters.length !== myTypes.length) { + throwInternalError("Mismatched type converter count"); + } + + for (var i = 0; i < myTypes.length; ++i) { + registerType(myTypes[i], myTypeConverters[i]); + } + } + + var typeConverters = new Array(dependentTypes.length); + var unregisteredTypes = []; + var registered = 0; + dependentTypes.forEach((dt, i) => { + if (registeredTypes.hasOwnProperty(dt)) { + typeConverters[i] = registeredTypes[dt]; + } else { + unregisteredTypes.push(dt); + + if (!awaitingDependencies.hasOwnProperty(dt)) { + awaitingDependencies[dt] = []; + } + + awaitingDependencies[dt].push(() => { + typeConverters[i] = registeredTypes[dt]; + ++registered; + + if (registered === unregisteredTypes.length) { + onComplete(typeConverters); + } + }); + } + }); + + if (0 === unregisteredTypes.length) { + onComplete(typeConverters); + } + } + + function registerType(rawType, registeredInstance) { + let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (!("argPackAdvance" in registeredInstance)) { + throw new TypeError("registerType registeredInstance requires argPackAdvance"); + } + + var name = registeredInstance.name; + + if (!rawType) { + throwBindingError('type "' + name + '" must have a positive integer typeid pointer'); + } + + if (registeredTypes.hasOwnProperty(rawType)) { + if (options.ignoreDuplicateRegistrations) { + return; + } else { + throwBindingError("Cannot register type '" + name + "' twice"); + } + } + + registeredTypes[rawType] = registeredInstance; + delete typeDependencies[rawType]; + + if (awaitingDependencies.hasOwnProperty(rawType)) { + var callbacks = awaitingDependencies[rawType]; + delete awaitingDependencies[rawType]; + callbacks.forEach(cb => cb()); + } + } + + function __embind_register_bool(rawType, name, size, trueValue, falseValue) { + var shift = getShiftFromSize(size); + name = readLatin1String(name); + registerType(rawType, { + name: name, + "fromWireType": function (wt) { + return !!wt; + }, + "toWireType": function (destructors, o) { + return o ? trueValue : falseValue; + }, + "argPackAdvance": 8, + "readValueFromPointer": function (pointer) { + var heap; + + if (size === 1) { + heap = HEAP8; + } else if (size === 2) { + heap = HEAP16; + } else if (size === 4) { + heap = HEAP32; + } else { + throw new TypeError("Unknown boolean type size: " + name); + } + + return this["fromWireType"](heap[pointer >> shift]); + }, + destructorFunction: null + }); + } + + function ClassHandle_isAliasOf(other) { + if (!(this instanceof ClassHandle)) { + return false; + } + + if (!(other instanceof ClassHandle)) { + return false; + } + + var leftClass = this.$$.ptrType.registeredClass; + var left = this.$$.ptr; + var rightClass = other.$$.ptrType.registeredClass; + var right = other.$$.ptr; + + while (leftClass.baseClass) { + left = leftClass.upcast(left); + leftClass = leftClass.baseClass; + } + + while (rightClass.baseClass) { + right = rightClass.upcast(right); + rightClass = rightClass.baseClass; + } + + return leftClass === rightClass && left === right; + } + + function shallowCopyInternalPointer(o) { + return { + count: o.count, + deleteScheduled: o.deleteScheduled, + preservePointerOnDelete: o.preservePointerOnDelete, + ptr: o.ptr, + ptrType: o.ptrType, + smartPtr: o.smartPtr, + smartPtrType: o.smartPtrType + }; + } + + function throwInstanceAlreadyDeleted(obj) { + function getInstanceTypeName(handle) { + return handle.$$.ptrType.registeredClass.name; + } + + throwBindingError(getInstanceTypeName(obj) + " instance already deleted"); + } + + var finalizationRegistry = false; + + function detachFinalizer(handle) {} + + function runDestructor($$) { + if ($$.smartPtr) { + $$.smartPtrType.rawDestructor($$.smartPtr); + } else { + $$.ptrType.registeredClass.rawDestructor($$.ptr); + } + } + + function releaseClassHandle($$) { + $$.count.value -= 1; + var toDelete = 0 === $$.count.value; + + if (toDelete) { + runDestructor($$); + } + } + + function downcastPointer(ptr, ptrClass, desiredClass) { + if (ptrClass === desiredClass) { + return ptr; + } + + if (undefined === desiredClass.baseClass) { + return null; + } + + var rv = downcastPointer(ptr, ptrClass, desiredClass.baseClass); + + if (rv === null) { + return null; + } + + return desiredClass.downcast(rv); + } + + var registeredPointers = {}; + + function getInheritedInstanceCount() { + return Object.keys(registeredInstances).length; + } + + function getLiveInheritedInstances() { + var rv = []; + + for (var k in registeredInstances) { + if (registeredInstances.hasOwnProperty(k)) { + rv.push(registeredInstances[k]); + } + } + + return rv; + } + + var deletionQueue = []; + + function flushPendingDeletes() { + while (deletionQueue.length) { + var obj = deletionQueue.pop(); + obj.$$.deleteScheduled = false; + obj["delete"](); + } + } + + var delayFunction = undefined; + + function setDelayFunction(fn) { + delayFunction = fn; + + if (deletionQueue.length && delayFunction) { + delayFunction(flushPendingDeletes); + } + } + + function init_embind() { + Module["getInheritedInstanceCount"] = getInheritedInstanceCount; + Module["getLiveInheritedInstances"] = getLiveInheritedInstances; + Module["flushPendingDeletes"] = flushPendingDeletes; + Module["setDelayFunction"] = setDelayFunction; + } + + var registeredInstances = {}; + + function getBasestPointer(class_, ptr) { + if (ptr === undefined) { + throwBindingError("ptr should not be undefined"); + } + + while (class_.baseClass) { + ptr = class_.upcast(ptr); + class_ = class_.baseClass; + } + + return ptr; + } + + function getInheritedInstance(class_, ptr) { + ptr = getBasestPointer(class_, ptr); + return registeredInstances[ptr]; + } + + function makeClassHandle(prototype, record) { + if (!record.ptrType || !record.ptr) { + throwInternalError("makeClassHandle requires ptr and ptrType"); + } + + var hasSmartPtrType = !!record.smartPtrType; + var hasSmartPtr = !!record.smartPtr; + + if (hasSmartPtrType !== hasSmartPtr) { + throwInternalError("Both smartPtrType and smartPtr must be specified"); + } + + record.count = { + value: 1 + }; + return attachFinalizer(Object.create(prototype, { + $$: { + value: record + } + })); + } + + function RegisteredPointer_fromWireType(ptr) { + var rawPointer = this.getPointee(ptr); + + if (!rawPointer) { + this.destructor(ptr); + return null; + } + + var registeredInstance = getInheritedInstance(this.registeredClass, rawPointer); + + if (undefined !== registeredInstance) { + if (0 === registeredInstance.$$.count.value) { + registeredInstance.$$.ptr = rawPointer; + registeredInstance.$$.smartPtr = ptr; + return registeredInstance["clone"](); + } else { + var rv = registeredInstance["clone"](); + this.destructor(ptr); + return rv; + } + } + + function makeDefaultHandle() { + if (this.isSmartPointer) { + return makeClassHandle(this.registeredClass.instancePrototype, { + ptrType: this.pointeeType, + ptr: rawPointer, + smartPtrType: this, + smartPtr: ptr + }); + } else { + return makeClassHandle(this.registeredClass.instancePrototype, { + ptrType: this, + ptr: ptr + }); + } + } + + var actualType = this.registeredClass.getActualType(rawPointer); + var registeredPointerRecord = registeredPointers[actualType]; + + if (!registeredPointerRecord) { + return makeDefaultHandle.call(this); + } + + var toType; + + if (this.isConst) { + toType = registeredPointerRecord.constPointerType; + } else { + toType = registeredPointerRecord.pointerType; + } + + var dp = downcastPointer(rawPointer, this.registeredClass, toType.registeredClass); + + if (dp === null) { + return makeDefaultHandle.call(this); + } + + if (this.isSmartPointer) { + return makeClassHandle(toType.registeredClass.instancePrototype, { + ptrType: toType, + ptr: dp, + smartPtrType: this, + smartPtr: ptr + }); + } else { + return makeClassHandle(toType.registeredClass.instancePrototype, { + ptrType: toType, + ptr: dp + }); + } + } + + function attachFinalizer(handle) { + if ("undefined" === typeof FinalizationRegistry) { + attachFinalizer = handle => handle; + + return handle; + } + + finalizationRegistry = new FinalizationRegistry(info => { + console.warn(info.leakWarning.stack.replace(/^Error: /, "")); + releaseClassHandle(info.$$); + }); + + attachFinalizer = handle => { + var $$ = handle.$$; + var hasSmartPtr = !!$$.smartPtr; + + if (hasSmartPtr) { + var info = { + $$: $$ + }; + var cls = $$.ptrType.registeredClass; + info.leakWarning = new Error("Embind found a leaked C++ instance " + cls.name + " <0x" + $$.ptr.toString(16) + ">.\n" + "We'll free it automatically in this case, but this functionality is not reliable across various environments.\n" + "Make sure to invoke .delete() manually once you're done with the instance instead.\n" + "Originally allocated"); + + if ("captureStackTrace" in Error) { + Error.captureStackTrace(info.leakWarning, RegisteredPointer_fromWireType); + } + + finalizationRegistry.register(handle, info, handle); + } + + return handle; + }; + + detachFinalizer = handle => finalizationRegistry.unregister(handle); + + return attachFinalizer(handle); + } + + function ClassHandle_clone() { + if (!this.$$.ptr) { + throwInstanceAlreadyDeleted(this); + } + + if (this.$$.preservePointerOnDelete) { + this.$$.count.value += 1; + return this; + } else { + var clone = attachFinalizer(Object.create(Object.getPrototypeOf(this), { + $$: { + value: shallowCopyInternalPointer(this.$$) + } + })); + clone.$$.count.value += 1; + clone.$$.deleteScheduled = false; + return clone; + } + } + + function ClassHandle_delete() { + if (!this.$$.ptr) { + throwInstanceAlreadyDeleted(this); + } + + if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) { + throwBindingError("Object already scheduled for deletion"); + } + + detachFinalizer(this); + releaseClassHandle(this.$$); + + if (!this.$$.preservePointerOnDelete) { + this.$$.smartPtr = undefined; + this.$$.ptr = undefined; + } + } + + function ClassHandle_isDeleted() { + return !this.$$.ptr; + } + + function ClassHandle_deleteLater() { + if (!this.$$.ptr) { + throwInstanceAlreadyDeleted(this); + } + + if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) { + throwBindingError("Object already scheduled for deletion"); + } + + deletionQueue.push(this); + + if (deletionQueue.length === 1 && delayFunction) { + delayFunction(flushPendingDeletes); + } + + this.$$.deleteScheduled = true; + return this; + } + + function init_ClassHandle() { + ClassHandle.prototype["isAliasOf"] = ClassHandle_isAliasOf; + ClassHandle.prototype["clone"] = ClassHandle_clone; + ClassHandle.prototype["delete"] = ClassHandle_delete; + ClassHandle.prototype["isDeleted"] = ClassHandle_isDeleted; + ClassHandle.prototype["deleteLater"] = ClassHandle_deleteLater; + } + + function ClassHandle() {} + + function ensureOverloadTable(proto, methodName, humanName) { + if (undefined === proto[methodName].overloadTable) { + var prevFunc = proto[methodName]; + + proto[methodName] = function () { + if (!proto[methodName].overloadTable.hasOwnProperty(arguments.length)) { + throwBindingError("Function '" + humanName + "' called with an invalid number of arguments (" + arguments.length + ") - expects one of (" + proto[methodName].overloadTable + ")!"); + } + + return proto[methodName].overloadTable[arguments.length].apply(this, arguments); + }; + + proto[methodName].overloadTable = []; + proto[methodName].overloadTable[prevFunc.argCount] = prevFunc; + } + } + + function exposePublicSymbol(name, value, numArguments) { + if (Module.hasOwnProperty(name)) { + if (undefined === numArguments || undefined !== Module[name].overloadTable && undefined !== Module[name].overloadTable[numArguments]) { + throwBindingError("Cannot register public name '" + name + "' twice"); + } + + ensureOverloadTable(Module, name, name); + + if (Module.hasOwnProperty(numArguments)) { + throwBindingError("Cannot register multiple overloads of a function with the same number of arguments (" + numArguments + ")!"); + } + + Module[name].overloadTable[numArguments] = value; + } else { + Module[name] = value; + + if (undefined !== numArguments) { + Module[name].numArguments = numArguments; + } + } + } + + function RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast) { + this.name = name; + this.constructor = constructor; + this.instancePrototype = instancePrototype; + this.rawDestructor = rawDestructor; + this.baseClass = baseClass; + this.getActualType = getActualType; + this.upcast = upcast; + this.downcast = downcast; + this.pureVirtualFunctions = []; + } + + function upcastPointer(ptr, ptrClass, desiredClass) { + while (ptrClass !== desiredClass) { + if (!ptrClass.upcast) { + throwBindingError("Expected null or instance of " + desiredClass.name + ", got an instance of " + ptrClass.name); + } + + ptr = ptrClass.upcast(ptr); + ptrClass = ptrClass.baseClass; + } + + return ptr; + } + + function constNoSmartPtrRawPointerToWireType(destructors, handle) { + if (handle === null) { + if (this.isReference) { + throwBindingError("null is not a valid " + this.name); + } + + return 0; + } + + if (!handle.$$) { + throwBindingError('Cannot pass "' + _embind_repr(handle) + '" as a ' + this.name); + } + + if (!handle.$$.ptr) { + throwBindingError("Cannot pass deleted object as a pointer of type " + this.name); + } + + var handleClass = handle.$$.ptrType.registeredClass; + var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); + return ptr; + } + + function genericPointerToWireType(destructors, handle) { + var ptr; + + if (handle === null) { + if (this.isReference) { + throwBindingError("null is not a valid " + this.name); + } + + if (this.isSmartPointer) { + ptr = this.rawConstructor(); + + if (destructors !== null) { + destructors.push(this.rawDestructor, ptr); + } + + return ptr; + } else { + return 0; + } + } + + if (!handle.$$) { + throwBindingError('Cannot pass "' + _embind_repr(handle) + '" as a ' + this.name); + } + + if (!handle.$$.ptr) { + throwBindingError("Cannot pass deleted object as a pointer of type " + this.name); + } + + if (!this.isConst && handle.$$.ptrType.isConst) { + throwBindingError("Cannot convert argument of type " + (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) + " to parameter type " + this.name); + } + + var handleClass = handle.$$.ptrType.registeredClass; + ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); + + if (this.isSmartPointer) { + if (undefined === handle.$$.smartPtr) { + throwBindingError("Passing raw pointer to smart pointer is illegal"); + } + + switch (this.sharingPolicy) { + case 0: + if (handle.$$.smartPtrType === this) { + ptr = handle.$$.smartPtr; + } else { + throwBindingError("Cannot convert argument of type " + (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) + " to parameter type " + this.name); + } + + break; + + case 1: + ptr = handle.$$.smartPtr; + break; + + case 2: + if (handle.$$.smartPtrType === this) { + ptr = handle.$$.smartPtr; + } else { + var clonedHandle = handle["clone"](); + ptr = this.rawShare(ptr, Emval.toHandle(function () { + clonedHandle["delete"](); + })); + + if (destructors !== null) { + destructors.push(this.rawDestructor, ptr); + } + } + + break; + + default: + throwBindingError("Unsupporting sharing policy"); + } + } + + return ptr; + } + + function nonConstNoSmartPtrRawPointerToWireType(destructors, handle) { + if (handle === null) { + if (this.isReference) { + throwBindingError("null is not a valid " + this.name); + } + + return 0; + } + + if (!handle.$$) { + throwBindingError('Cannot pass "' + _embind_repr(handle) + '" as a ' + this.name); + } + + if (!handle.$$.ptr) { + throwBindingError("Cannot pass deleted object as a pointer of type " + this.name); + } + + if (handle.$$.ptrType.isConst) { + throwBindingError("Cannot convert argument of type " + handle.$$.ptrType.name + " to parameter type " + this.name); + } + + var handleClass = handle.$$.ptrType.registeredClass; + var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); + return ptr; + } + + function simpleReadValueFromPointer(pointer) { + return this["fromWireType"](HEAPU32[pointer >> 2]); + } + + function RegisteredPointer_getPointee(ptr) { + if (this.rawGetPointee) { + ptr = this.rawGetPointee(ptr); + } + + return ptr; + } + + function RegisteredPointer_destructor(ptr) { + if (this.rawDestructor) { + this.rawDestructor(ptr); + } + } + + function RegisteredPointer_deleteObject(handle) { + if (handle !== null) { + handle["delete"](); + } + } + + function init_RegisteredPointer() { + RegisteredPointer.prototype.getPointee = RegisteredPointer_getPointee; + RegisteredPointer.prototype.destructor = RegisteredPointer_destructor; + RegisteredPointer.prototype["argPackAdvance"] = 8; + RegisteredPointer.prototype["readValueFromPointer"] = simpleReadValueFromPointer; + RegisteredPointer.prototype["deleteObject"] = RegisteredPointer_deleteObject; + RegisteredPointer.prototype["fromWireType"] = RegisteredPointer_fromWireType; + } + + function RegisteredPointer(name, registeredClass, isReference, isConst, isSmartPointer, pointeeType, sharingPolicy, rawGetPointee, rawConstructor, rawShare, rawDestructor) { + this.name = name; + this.registeredClass = registeredClass; + this.isReference = isReference; + this.isConst = isConst; + this.isSmartPointer = isSmartPointer; + this.pointeeType = pointeeType; + this.sharingPolicy = sharingPolicy; + this.rawGetPointee = rawGetPointee; + this.rawConstructor = rawConstructor; + this.rawShare = rawShare; + this.rawDestructor = rawDestructor; + + if (!isSmartPointer && registeredClass.baseClass === undefined) { + if (isConst) { + this["toWireType"] = constNoSmartPtrRawPointerToWireType; + this.destructorFunction = null; + } else { + this["toWireType"] = nonConstNoSmartPtrRawPointerToWireType; + this.destructorFunction = null; + } + } else { + this["toWireType"] = genericPointerToWireType; + } + } + + function replacePublicSymbol(name, value, numArguments) { + if (!Module.hasOwnProperty(name)) { + throwInternalError("Replacing nonexistant public symbol"); + } + + if (undefined !== Module[name].overloadTable && undefined !== numArguments) { + Module[name].overloadTable[numArguments] = value; + } else { + Module[name] = value; + Module[name].argCount = numArguments; + } + } + + function dynCallLegacy(sig, ptr, args) { + assert("dynCall_" + sig in Module, "bad function pointer type - no table for sig '" + sig + "'"); + + if (args && args.length) { + assert(args.length === sig.substring(1).replace(/j/g, "--").length); + } else { + assert(sig.length == 1); + } + + var f = Module["dynCall_" + sig]; + return args && args.length ? f.apply(null, [ptr].concat(args)) : f.call(null, ptr); + } + + function dynCall(sig, ptr, args) { + if (sig.includes("j")) { + return dynCallLegacy(sig, ptr, args); + } + + assert(getWasmTableEntry(ptr), "missing table entry in dynCall: " + ptr); + return getWasmTableEntry(ptr).apply(null, args); + } + + function getDynCaller(sig, ptr) { + assert(sig.includes("j"), "getDynCaller should only be called with i64 sigs"); + var argCache = []; + return function () { + argCache.length = 0; + Object.assign(argCache, arguments); + return dynCall(sig, ptr, argCache); + }; + } + + function embind__requireFunction(signature, rawFunction) { + signature = readLatin1String(signature); + + function makeDynCaller() { + if (signature.includes("j")) { + return getDynCaller(signature, rawFunction); + } + + return getWasmTableEntry(rawFunction); + } + + var fp = makeDynCaller(); + + if (typeof fp != "function") { + throwBindingError("unknown function pointer with signature " + signature + ": " + rawFunction); + } + + return fp; + } + + var UnboundTypeError = undefined; + + function getTypeName(type) { + var ptr = ___getTypeName(type); + + var rv = readLatin1String(ptr); + + _free(ptr); + + return rv; + } + + function throwUnboundTypeError(message, types) { + var unboundTypes = []; + var seen = {}; + + function visit(type) { + if (seen[type]) { + return; + } + + if (registeredTypes[type]) { + return; + } + + if (typeDependencies[type]) { + typeDependencies[type].forEach(visit); + return; + } + + unboundTypes.push(type); + seen[type] = true; + } + + types.forEach(visit); + throw new UnboundTypeError(message + ": " + unboundTypes.map(getTypeName).join([", "])); + } + + function __embind_register_class(rawType, rawPointerType, rawConstPointerType, baseClassRawType, getActualTypeSignature, getActualType, upcastSignature, upcast, downcastSignature, downcast, name, destructorSignature, rawDestructor) { + name = readLatin1String(name); + getActualType = embind__requireFunction(getActualTypeSignature, getActualType); + + if (upcast) { + upcast = embind__requireFunction(upcastSignature, upcast); + } + + if (downcast) { + downcast = embind__requireFunction(downcastSignature, downcast); + } + + rawDestructor = embind__requireFunction(destructorSignature, rawDestructor); + var legalFunctionName = makeLegalFunctionName(name); + exposePublicSymbol(legalFunctionName, function () { + throwUnboundTypeError("Cannot construct " + name + " due to unbound types", [baseClassRawType]); + }); + whenDependentTypesAreResolved([rawType, rawPointerType, rawConstPointerType], baseClassRawType ? [baseClassRawType] : [], function (base) { + base = base[0]; + var baseClass; + var basePrototype; + + if (baseClassRawType) { + baseClass = base.registeredClass; + basePrototype = baseClass.instancePrototype; + } else { + basePrototype = ClassHandle.prototype; + } + + var constructor = createNamedFunction(legalFunctionName, function () { + if (Object.getPrototypeOf(this) !== instancePrototype) { + throw new BindingError("Use 'new' to construct " + name); + } + + if (undefined === registeredClass.constructor_body) { + throw new BindingError(name + " has no accessible constructor"); + } + + var body = registeredClass.constructor_body[arguments.length]; + + if (undefined === body) { + throw new BindingError("Tried to invoke ctor of " + name + " with invalid number of parameters (" + arguments.length + ") - expected (" + Object.keys(registeredClass.constructor_body).toString() + ") parameters instead!"); + } + + return body.apply(this, arguments); + }); + var instancePrototype = Object.create(basePrototype, { + constructor: { + value: constructor + } + }); + constructor.prototype = instancePrototype; + var registeredClass = new RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast); + var referenceConverter = new RegisteredPointer(name, registeredClass, true, false, false); + var pointerConverter = new RegisteredPointer(name + "*", registeredClass, false, false, false); + var constPointerConverter = new RegisteredPointer(name + " const*", registeredClass, false, true, false); + registeredPointers[rawType] = { + pointerType: pointerConverter, + constPointerType: constPointerConverter + }; + replacePublicSymbol(legalFunctionName, constructor); + return [referenceConverter, pointerConverter, constPointerConverter]; + }); + } + + function heap32VectorToArray(count, firstElement) { + var array = []; + + for (var i = 0; i < count; i++) { + array.push(HEAP32[(firstElement >> 2) + i]); + } + + return array; + } + + function runDestructors(destructors) { + while (destructors.length) { + var ptr = destructors.pop(); + var del = destructors.pop(); + del(ptr); + } + } + + function __embind_register_class_constructor(rawClassType, argCount, rawArgTypesAddr, invokerSignature, invoker, rawConstructor) { + assert(argCount > 0); + var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); + invoker = embind__requireFunction(invokerSignature, invoker); + whenDependentTypesAreResolved([], [rawClassType], function (classType) { + classType = classType[0]; + var humanName = "constructor " + classType.name; + + if (undefined === classType.registeredClass.constructor_body) { + classType.registeredClass.constructor_body = []; + } + + if (undefined !== classType.registeredClass.constructor_body[argCount - 1]) { + throw new BindingError("Cannot register multiple constructors with identical number of parameters (" + (argCount - 1) + ") for class '" + classType.name + "'! Overload resolution is currently only performed using the parameter count, not actual type info!"); + } + + classType.registeredClass.constructor_body[argCount - 1] = () => { + throwUnboundTypeError("Cannot construct " + classType.name + " due to unbound types", rawArgTypes); + }; + + whenDependentTypesAreResolved([], rawArgTypes, function (argTypes) { + argTypes.splice(1, 0, null); + classType.registeredClass.constructor_body[argCount - 1] = craftInvokerFunction(humanName, argTypes, null, invoker, rawConstructor); + return []; + }); + return []; + }); + } + + function new_(constructor, argumentList) { + if (!(constructor instanceof Function)) { + throw new TypeError("new_ called with constructor type " + typeof constructor + " which is not a function"); + } + + var dummy = createNamedFunction(constructor.name || "unknownFunctionName", function () {}); + dummy.prototype = constructor.prototype; + var obj = new dummy(); + var r = constructor.apply(obj, argumentList); + return r instanceof Object ? r : obj; + } + + function craftInvokerFunction(humanName, argTypes, classType, cppInvokerFunc, cppTargetFunc) { + var argCount = argTypes.length; + + if (argCount < 2) { + throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!"); + } + + var isClassMethodFunc = argTypes[1] !== null && classType !== null; + var needsDestructorStack = false; + + for (var i = 1; i < argTypes.length; ++i) { + if (argTypes[i] !== null && argTypes[i].destructorFunction === undefined) { + needsDestructorStack = true; + break; + } + } + + var returns = argTypes[0].name !== "void"; + var argsList = ""; + var argsListWired = ""; + + for (var i = 0; i < argCount - 2; ++i) { + argsList += (i !== 0 ? ", " : "") + "arg" + i; + argsListWired += (i !== 0 ? ", " : "") + "arg" + i + "Wired"; + } + + var invokerFnBody = "return function " + makeLegalFunctionName(humanName) + "(" + argsList + ") {\n" + "if (arguments.length !== " + (argCount - 2) + ") {\n" + "throwBindingError('function " + humanName + " called with ' + arguments.length + ' arguments, expected " + (argCount - 2) + " args!');\n" + "}\n"; + + if (needsDestructorStack) { + invokerFnBody += "var destructors = [];\n"; + } + + var dtorStack = needsDestructorStack ? "destructors" : "null"; + var args1 = ["throwBindingError", "invoker", "fn", "runDestructors", "retType", "classParam"]; + var args2 = [throwBindingError, cppInvokerFunc, cppTargetFunc, runDestructors, argTypes[0], argTypes[1]]; + + if (isClassMethodFunc) { + invokerFnBody += "var thisWired = classParam.toWireType(" + dtorStack + ", this);\n"; + } + + for (var i = 0; i < argCount - 2; ++i) { + invokerFnBody += "var arg" + i + "Wired = argType" + i + ".toWireType(" + dtorStack + ", arg" + i + "); // " + argTypes[i + 2].name + "\n"; + args1.push("argType" + i); + args2.push(argTypes[i + 2]); + } + + if (isClassMethodFunc) { + argsListWired = "thisWired" + (argsListWired.length > 0 ? ", " : "") + argsListWired; + } + + invokerFnBody += (returns ? "var rv = " : "") + "invoker(fn" + (argsListWired.length > 0 ? ", " : "") + argsListWired + ");\n"; + + if (needsDestructorStack) { + invokerFnBody += "runDestructors(destructors);\n"; + } else { + for (var i = isClassMethodFunc ? 1 : 2; i < argTypes.length; ++i) { + var paramName = i === 1 ? "thisWired" : "arg" + (i - 2) + "Wired"; + + if (argTypes[i].destructorFunction !== null) { + invokerFnBody += paramName + "_dtor(" + paramName + "); // " + argTypes[i].name + "\n"; + args1.push(paramName + "_dtor"); + args2.push(argTypes[i].destructorFunction); + } + } + } + + if (returns) { + invokerFnBody += "var ret = retType.fromWireType(rv);\n" + "return ret;\n"; + } + + invokerFnBody += "}\n"; + args1.push(invokerFnBody); + var invokerFunction = new_(Function, args1).apply(null, args2); + return invokerFunction; + } + + function __embind_register_class_function(rawClassType, methodName, argCount, rawArgTypesAddr, invokerSignature, rawInvoker, context, isPureVirtual) { + var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); + methodName = readLatin1String(methodName); + rawInvoker = embind__requireFunction(invokerSignature, rawInvoker); + whenDependentTypesAreResolved([], [rawClassType], function (classType) { + classType = classType[0]; + var humanName = classType.name + "." + methodName; + + if (methodName.startsWith("@@")) { + methodName = Symbol[methodName.substring(2)]; + } + + if (isPureVirtual) { + classType.registeredClass.pureVirtualFunctions.push(methodName); + } + + function unboundTypesHandler() { + throwUnboundTypeError("Cannot call " + humanName + " due to unbound types", rawArgTypes); + } + + var proto = classType.registeredClass.instancePrototype; + var method = proto[methodName]; + + if (undefined === method || undefined === method.overloadTable && method.className !== classType.name && method.argCount === argCount - 2) { + unboundTypesHandler.argCount = argCount - 2; + unboundTypesHandler.className = classType.name; + proto[methodName] = unboundTypesHandler; + } else { + ensureOverloadTable(proto, methodName, humanName); + proto[methodName].overloadTable[argCount - 2] = unboundTypesHandler; + } + + whenDependentTypesAreResolved([], rawArgTypes, function (argTypes) { + var memberFunction = craftInvokerFunction(humanName, argTypes, classType, rawInvoker, context); + + if (undefined === proto[methodName].overloadTable) { + memberFunction.argCount = argCount - 2; + proto[methodName] = memberFunction; + } else { + proto[methodName].overloadTable[argCount - 2] = memberFunction; + } + + return []; + }); + return []; + }); + } + + function validateThis(this_, classType, humanName) { + if (!(this_ instanceof Object)) { + throwBindingError(humanName + ' with invalid "this": ' + this_); + } + + if (!(this_ instanceof classType.registeredClass.constructor)) { + throwBindingError(humanName + ' incompatible with "this" of type ' + this_.constructor.name); + } + + if (!this_.$$.ptr) { + throwBindingError("cannot call emscripten binding method " + humanName + " on deleted object"); + } + + return upcastPointer(this_.$$.ptr, this_.$$.ptrType.registeredClass, classType.registeredClass); + } + + function __embind_register_class_property(classType, fieldName, getterReturnType, getterSignature, getter, getterContext, setterArgumentType, setterSignature, setter, setterContext) { + fieldName = readLatin1String(fieldName); + getter = embind__requireFunction(getterSignature, getter); + whenDependentTypesAreResolved([], [classType], function (classType) { + classType = classType[0]; + var humanName = classType.name + "." + fieldName; + var desc = { + get: function () { + throwUnboundTypeError("Cannot access " + humanName + " due to unbound types", [getterReturnType, setterArgumentType]); + }, + enumerable: true, + configurable: true + }; + + if (setter) { + desc.set = () => { + throwUnboundTypeError("Cannot access " + humanName + " due to unbound types", [getterReturnType, setterArgumentType]); + }; + } else { + desc.set = v => { + throwBindingError(humanName + " is a read-only property"); + }; + } + + Object.defineProperty(classType.registeredClass.instancePrototype, fieldName, desc); + whenDependentTypesAreResolved([], setter ? [getterReturnType, setterArgumentType] : [getterReturnType], function (types) { + var getterReturnType = types[0]; + var desc = { + get: function () { + var ptr = validateThis(this, classType, humanName + " getter"); + return getterReturnType["fromWireType"](getter(getterContext, ptr)); + }, + enumerable: true + }; + + if (setter) { + setter = embind__requireFunction(setterSignature, setter); + var setterArgumentType = types[1]; + + desc.set = function (v) { + var ptr = validateThis(this, classType, humanName + " setter"); + var destructors = []; + setter(setterContext, ptr, setterArgumentType["toWireType"](destructors, v)); + runDestructors(destructors); + }; + } + + Object.defineProperty(classType.registeredClass.instancePrototype, fieldName, desc); + return []; + }); + return []; + }); + } + + var emval_free_list = []; + var emval_handle_array = [{}, { + value: undefined + }, { + value: null + }, { + value: true + }, { + value: false + }]; + + function __emval_decref(handle) { + if (handle > 4 && 0 === --emval_handle_array[handle].refcount) { + emval_handle_array[handle] = undefined; + emval_free_list.push(handle); + } + } + + function count_emval_handles() { + var count = 0; + + for (var i = 5; i < emval_handle_array.length; ++i) { + if (emval_handle_array[i] !== undefined) { + ++count; + } + } + + return count; + } + + function get_first_emval() { + for (var i = 5; i < emval_handle_array.length; ++i) { + if (emval_handle_array[i] !== undefined) { + return emval_handle_array[i]; + } + } + + return null; + } + + function init_emval() { + Module["count_emval_handles"] = count_emval_handles; + Module["get_first_emval"] = get_first_emval; + } + + var Emval = { + toValue: handle => { + if (!handle) { + throwBindingError("Cannot use deleted val. handle = " + handle); + } + + return emval_handle_array[handle].value; + }, + toHandle: value => { + switch (value) { + case undefined: + return 1; + + case null: + return 2; + + case true: + return 3; + + case false: + return 4; + + default: + { + var handle = emval_free_list.length ? emval_free_list.pop() : emval_handle_array.length; + emval_handle_array[handle] = { + refcount: 1, + value: value + }; + return handle; + } + } + } + }; + + function __embind_register_emval(rawType, name) { + name = readLatin1String(name); + registerType(rawType, { + name: name, + "fromWireType": function (handle) { + var rv = Emval.toValue(handle); + + __emval_decref(handle); + + return rv; + }, + "toWireType": function (destructors, value) { + return Emval.toHandle(value); + }, + "argPackAdvance": 8, + "readValueFromPointer": simpleReadValueFromPointer, + destructorFunction: null + }); + } + + function _embind_repr(v) { + if (v === null) { + return "null"; + } + + var t = typeof v; + + if (t === "object" || t === "array" || t === "function") { + return v.toString(); + } else { + return "" + v; + } + } + + function floatReadValueFromPointer(name, shift) { + switch (shift) { + case 2: + return function (pointer) { + return this["fromWireType"](HEAPF32[pointer >> 2]); + }; + + case 3: + return function (pointer) { + return this["fromWireType"](HEAPF64[pointer >> 3]); + }; + + default: + throw new TypeError("Unknown float type: " + name); + } + } + + function __embind_register_float(rawType, name, size) { + var shift = getShiftFromSize(size); + name = readLatin1String(name); + registerType(rawType, { + name: name, + "fromWireType": function (value) { + return value; + }, + "toWireType": function (destructors, value) { + if (typeof value != "number" && typeof value != "boolean") { + throw new TypeError('Cannot convert "' + _embind_repr(value) + '" to ' + this.name); + } + + return value; + }, + "argPackAdvance": 8, + "readValueFromPointer": floatReadValueFromPointer(name, shift), + destructorFunction: null + }); + } + + function integerReadValueFromPointer(name, shift, signed) { + switch (shift) { + case 0: + return signed ? function readS8FromPointer(pointer) { + return HEAP8[pointer]; + } : function readU8FromPointer(pointer) { + return HEAPU8[pointer]; + }; + + case 1: + return signed ? function readS16FromPointer(pointer) { + return HEAP16[pointer >> 1]; + } : function readU16FromPointer(pointer) { + return HEAPU16[pointer >> 1]; + }; + + case 2: + return signed ? function readS32FromPointer(pointer) { + return HEAP32[pointer >> 2]; + } : function readU32FromPointer(pointer) { + return HEAPU32[pointer >> 2]; + }; + + default: + throw new TypeError("Unknown integer type: " + name); + } + } + + function __embind_register_integer(primitiveType, name, size, minRange, maxRange) { + name = readLatin1String(name); + + if (maxRange === -1) { + maxRange = 4294967295; + } + + var shift = getShiftFromSize(size); + + var fromWireType = value => value; + + if (minRange === 0) { + var bitshift = 32 - 8 * size; + + fromWireType = value => value << bitshift >>> bitshift; + } + + var isUnsignedType = name.includes("unsigned"); + + var checkAssertions = (value, toTypeName) => { + if (typeof value != "number" && typeof value != "boolean") { + throw new TypeError('Cannot convert "' + _embind_repr(value) + '" to ' + toTypeName); + } + + if (value < minRange || value > maxRange) { + throw new TypeError('Passing a number "' + _embind_repr(value) + '" from JS side to C/C++ side to an argument of type "' + name + '", which is outside the valid range [' + minRange + ", " + maxRange + "]!"); + } + }; + + var toWireType; + + if (isUnsignedType) { + toWireType = function (destructors, value) { + checkAssertions(value, this.name); + return value >>> 0; + }; + } else { + toWireType = function (destructors, value) { + checkAssertions(value, this.name); + return value; + }; + } + + registerType(primitiveType, { + name: name, + "fromWireType": fromWireType, + "toWireType": toWireType, + "argPackAdvance": 8, + "readValueFromPointer": integerReadValueFromPointer(name, shift, minRange !== 0), + destructorFunction: null + }); + } + + function __embind_register_memory_view(rawType, dataTypeIndex, name) { + var typeMapping = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array]; + var TA = typeMapping[dataTypeIndex]; + + function decodeMemoryView(handle) { + handle = handle >> 2; + var heap = HEAPU32; + var size = heap[handle]; + var data = heap[handle + 1]; + return new TA(buffer, data, size); + } + + name = readLatin1String(name); + registerType(rawType, { + name: name, + "fromWireType": decodeMemoryView, + "argPackAdvance": 8, + "readValueFromPointer": decodeMemoryView + }, { + ignoreDuplicateRegistrations: true + }); + } + + function __embind_register_std_string(rawType, name) { + name = readLatin1String(name); + var stdStringIsUTF8 = name === "std::string"; + registerType(rawType, { + name: name, + "fromWireType": function (value) { + var length = HEAPU32[value >> 2]; + var str; + + if (stdStringIsUTF8) { + var decodeStartPtr = value + 4; + + for (var i = 0; i <= length; ++i) { + var currentBytePtr = value + 4 + i; + + if (i == length || HEAPU8[currentBytePtr] == 0) { + var maxRead = currentBytePtr - decodeStartPtr; + var stringSegment = UTF8ToString(decodeStartPtr, maxRead); + + if (str === undefined) { + str = stringSegment; + } else { + str += String.fromCharCode(0); + str += stringSegment; + } + + decodeStartPtr = currentBytePtr + 1; + } + } + } else { + var a = new Array(length); + + for (var i = 0; i < length; ++i) { + a[i] = String.fromCharCode(HEAPU8[value + 4 + i]); + } + + str = a.join(""); + } + + _free(value); + + return str; + }, + "toWireType": function (destructors, value) { + if (value instanceof ArrayBuffer) { + value = new Uint8Array(value); + } + + var getLength; + var valueIsOfTypeString = typeof value == "string"; + + if (!(valueIsOfTypeString || value instanceof Uint8Array || value instanceof Uint8ClampedArray || value instanceof Int8Array)) { + throwBindingError("Cannot pass non-string to std::string"); + } + + if (stdStringIsUTF8 && valueIsOfTypeString) { + getLength = () => lengthBytesUTF8(value); + } else { + getLength = () => value.length; + } + + var length = getLength(); + + var ptr = _malloc(4 + length + 1); + + HEAPU32[ptr >> 2] = length; + + if (stdStringIsUTF8 && valueIsOfTypeString) { + stringToUTF8(value, ptr + 4, length + 1); + } else { + if (valueIsOfTypeString) { + for (var i = 0; i < length; ++i) { + var charCode = value.charCodeAt(i); + + if (charCode > 255) { + _free(ptr); + + throwBindingError("String has UTF-16 code units that do not fit in 8 bits"); + } + + HEAPU8[ptr + 4 + i] = charCode; + } + } else { + for (var i = 0; i < length; ++i) { + HEAPU8[ptr + 4 + i] = value[i]; + } + } + } + + if (destructors !== null) { + destructors.push(_free, ptr); + } + + return ptr; + }, + "argPackAdvance": 8, + "readValueFromPointer": simpleReadValueFromPointer, + destructorFunction: function (ptr) { + _free(ptr); + } + }); + } + + function __embind_register_std_wstring(rawType, charSize, name) { + name = readLatin1String(name); + var decodeString, encodeString, getHeap, lengthBytesUTF, shift; + + if (charSize === 2) { + decodeString = UTF16ToString; + encodeString = stringToUTF16; + lengthBytesUTF = lengthBytesUTF16; + + getHeap = () => HEAPU16; + + shift = 1; + } else if (charSize === 4) { + decodeString = UTF32ToString; + encodeString = stringToUTF32; + lengthBytesUTF = lengthBytesUTF32; + + getHeap = () => HEAPU32; + + shift = 2; + } + + registerType(rawType, { + name: name, + "fromWireType": function (value) { + var length = HEAPU32[value >> 2]; + var HEAP = getHeap(); + var str; + var decodeStartPtr = value + 4; + + for (var i = 0; i <= length; ++i) { + var currentBytePtr = value + 4 + i * charSize; + + if (i == length || HEAP[currentBytePtr >> shift] == 0) { + var maxReadBytes = currentBytePtr - decodeStartPtr; + var stringSegment = decodeString(decodeStartPtr, maxReadBytes); + + if (str === undefined) { + str = stringSegment; + } else { + str += String.fromCharCode(0); + str += stringSegment; + } + + decodeStartPtr = currentBytePtr + charSize; + } + } + + _free(value); + + return str; + }, + "toWireType": function (destructors, value) { + if (!(typeof value == "string")) { + throwBindingError("Cannot pass non-string to C++ string type " + name); + } + + var length = lengthBytesUTF(value); + + var ptr = _malloc(4 + length + charSize); + + HEAPU32[ptr >> 2] = length >> shift; + encodeString(value, ptr + 4, length + charSize); + + if (destructors !== null) { + destructors.push(_free, ptr); + } + + return ptr; + }, + "argPackAdvance": 8, + "readValueFromPointer": simpleReadValueFromPointer, + destructorFunction: function (ptr) { + _free(ptr); + } + }); + } + + function __embind_register_void(rawType, name) { + name = readLatin1String(name); + registerType(rawType, { + isVoid: true, + name: name, + "argPackAdvance": 0, + "fromWireType": function () { + return undefined; + }, + "toWireType": function (destructors, o) { + return undefined; + } + }); + } + + function __emscripten_date_now() { + return Date.now(); + } + + function requireRegisteredType(rawType, humanName) { + var impl = registeredTypes[rawType]; + + if (undefined === impl) { + throwBindingError(humanName + " has unknown type " + getTypeName(rawType)); + } + + return impl; + } + + function __emval_as(handle, returnType, destructorsRef) { + handle = Emval.toValue(handle); + returnType = requireRegisteredType(returnType, "emval::as"); + var destructors = []; + var rd = Emval.toHandle(destructors); + HEAP32[destructorsRef >> 2] = rd; + return returnType["toWireType"](destructors, handle); + } + + var emval_symbols = {}; + + function getStringOrSymbol(address) { + var symbol = emval_symbols[address]; + + if (symbol === undefined) { + return readLatin1String(address); + } + + return symbol; + } + + var emval_methodCallers = []; + + function __emval_call_void_method(caller, handle, methodName, args) { + caller = emval_methodCallers[caller]; + handle = Emval.toValue(handle); + methodName = getStringOrSymbol(methodName); + caller(handle, methodName, null, args); + } + + function __emval_addMethodCaller(caller) { + var id = emval_methodCallers.length; + emval_methodCallers.push(caller); + return id; + } + + function __emval_lookupTypes(argCount, argTypes) { + var a = new Array(argCount); + + for (var i = 0; i < argCount; ++i) { + a[i] = requireRegisteredType(HEAP32[(argTypes >> 2) + i], "parameter " + i); + } + + return a; + } + + var emval_registeredMethods = []; + + function __emval_get_method_caller(argCount, argTypes) { + var types = __emval_lookupTypes(argCount, argTypes); + + var retType = types[0]; + var signatureName = retType.name + "_$" + types.slice(1).map(function (t) { + return t.name; + }).join("_") + "$"; + var returnId = emval_registeredMethods[signatureName]; + + if (returnId !== undefined) { + return returnId; + } + + var params = ["retType"]; + var args = [retType]; + var argsList = ""; + + for (var i = 0; i < argCount - 1; ++i) { + argsList += (i !== 0 ? ", " : "") + "arg" + i; + params.push("argType" + i); + args.push(types[1 + i]); + } + + var functionName = makeLegalFunctionName("methodCaller_" + signatureName); + var functionBody = "return function " + functionName + "(handle, name, destructors, args) {\n"; + var offset = 0; + + for (var i = 0; i < argCount - 1; ++i) { + functionBody += " var arg" + i + " = argType" + i + ".readValueFromPointer(args" + (offset ? "+" + offset : "") + ");\n"; + offset += types[i + 1]["argPackAdvance"]; + } + + functionBody += " var rv = handle[name](" + argsList + ");\n"; + + for (var i = 0; i < argCount - 1; ++i) { + if (types[i + 1]["deleteObject"]) { + functionBody += " argType" + i + ".deleteObject(arg" + i + ");\n"; + } + } + + if (!retType.isVoid) { + functionBody += " return retType.toWireType(destructors, rv);\n"; + } + + functionBody += "};\n"; + params.push(functionBody); + var invokerFunction = new_(Function, params).apply(null, args); + returnId = __emval_addMethodCaller(invokerFunction); + emval_registeredMethods[signatureName] = returnId; + return returnId; + } + + function __emval_incref(handle) { + if (handle > 4) { + emval_handle_array[handle].refcount += 1; + } + } + + function __emval_run_destructors(handle) { + var destructors = Emval.toValue(handle); + runDestructors(destructors); + + __emval_decref(handle); + } + + function __emval_take_value(type, argv) { + type = requireRegisteredType(type, "_emval_take_value"); + var v = type["readValueFromPointer"](argv); + return Emval.toHandle(v); + } + + function __gmtime_js(time, tmPtr) { + var date = new Date(HEAP32[time >> 2] * 1e3); + HEAP32[tmPtr >> 2] = date.getUTCSeconds(); + HEAP32[tmPtr + 4 >> 2] = date.getUTCMinutes(); + HEAP32[tmPtr + 8 >> 2] = date.getUTCHours(); + HEAP32[tmPtr + 12 >> 2] = date.getUTCDate(); + HEAP32[tmPtr + 16 >> 2] = date.getUTCMonth(); + HEAP32[tmPtr + 20 >> 2] = date.getUTCFullYear() - 1900; + HEAP32[tmPtr + 24 >> 2] = date.getUTCDay(); + var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0); + var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0; + HEAP32[tmPtr + 28 >> 2] = yday; + } + + function __localtime_js(time, tmPtr) { + var date = new Date(HEAP32[time >> 2] * 1e3); + HEAP32[tmPtr >> 2] = date.getSeconds(); + HEAP32[tmPtr + 4 >> 2] = date.getMinutes(); + HEAP32[tmPtr + 8 >> 2] = date.getHours(); + HEAP32[tmPtr + 12 >> 2] = date.getDate(); + HEAP32[tmPtr + 16 >> 2] = date.getMonth(); + HEAP32[tmPtr + 20 >> 2] = date.getFullYear() - 1900; + HEAP32[tmPtr + 24 >> 2] = date.getDay(); + var start = new Date(date.getFullYear(), 0, 1); + var yday = (date.getTime() - start.getTime()) / (1e3 * 60 * 60 * 24) | 0; + HEAP32[tmPtr + 28 >> 2] = yday; + HEAP32[tmPtr + 36 >> 2] = -(date.getTimezoneOffset() * 60); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset)) | 0; + HEAP32[tmPtr + 32 >> 2] = dst; + } + + function __mktime_js(tmPtr) { + var date = new Date(HEAP32[tmPtr + 20 >> 2] + 1900, HEAP32[tmPtr + 16 >> 2], HEAP32[tmPtr + 12 >> 2], HEAP32[tmPtr + 8 >> 2], HEAP32[tmPtr + 4 >> 2], HEAP32[tmPtr >> 2], 0); + var dst = HEAP32[tmPtr + 32 >> 2]; + var guessedOffset = date.getTimezoneOffset(); + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dstOffset = Math.min(winterOffset, summerOffset); + + if (dst < 0) { + HEAP32[tmPtr + 32 >> 2] = Number(summerOffset != winterOffset && dstOffset == guessedOffset); + } else if (dst > 0 != (dstOffset == guessedOffset)) { + var nonDstOffset = Math.max(winterOffset, summerOffset); + var trueOffset = dst > 0 ? dstOffset : nonDstOffset; + date.setTime(date.getTime() + (trueOffset - guessedOffset) * 6e4); + } + + HEAP32[tmPtr + 24 >> 2] = date.getDay(); + var yday = (date.getTime() - start.getTime()) / (1e3 * 60 * 60 * 24) | 0; + HEAP32[tmPtr + 28 >> 2] = yday; + HEAP32[tmPtr >> 2] = date.getSeconds(); + HEAP32[tmPtr + 4 >> 2] = date.getMinutes(); + HEAP32[tmPtr + 8 >> 2] = date.getHours(); + HEAP32[tmPtr + 12 >> 2] = date.getDate(); + HEAP32[tmPtr + 16 >> 2] = date.getMonth(); + return date.getTime() / 1e3 | 0; + } + + function _tzset_impl(timezone, daylight, tzname) { + var currentYear = new Date().getFullYear(); + var winter = new Date(currentYear, 0, 1); + var summer = new Date(currentYear, 6, 1); + var winterOffset = winter.getTimezoneOffset(); + var summerOffset = summer.getTimezoneOffset(); + var stdTimezoneOffset = Math.max(winterOffset, summerOffset); + HEAP32[timezone >> 2] = stdTimezoneOffset * 60; + HEAP32[daylight >> 2] = Number(winterOffset != summerOffset); + + function extractZone(date) { + var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/); + return match ? match[1] : "GMT"; + } + + var winterName = extractZone(winter); + var summerName = extractZone(summer); + var winterNamePtr = allocateUTF8(winterName); + var summerNamePtr = allocateUTF8(summerName); + + if (summerOffset < winterOffset) { + HEAP32[tzname >> 2] = winterNamePtr; + HEAP32[tzname + 4 >> 2] = summerNamePtr; + } else { + HEAP32[tzname >> 2] = summerNamePtr; + HEAP32[tzname + 4 >> 2] = winterNamePtr; + } + } + + function __tzset_js(timezone, daylight, tzname) { + if (__tzset_js.called) return; + __tzset_js.called = true; + + _tzset_impl(timezone, daylight, tzname); + } + + function _abort() { + abort("native code called abort()"); + } + + function reallyNegative(x) { + return x < 0 || x === 0 && 1 / x === -Infinity; + } + + function convertI32PairToI53(lo, hi) { + assert(hi === (hi | 0)); + return (lo >>> 0) + hi * 4294967296; + } + + function convertU32PairToI53(lo, hi) { + return (lo >>> 0) + (hi >>> 0) * 4294967296; + } + + function reSign(value, bits) { + if (value <= 0) { + return value; + } + + var half = bits <= 32 ? Math.abs(1 << bits - 1) : Math.pow(2, bits - 1); + + if (value >= half && (bits <= 32 || value > half)) { + value = -2 * half + value; + } + + return value; + } + + function unSign(value, bits) { + if (value >= 0) { + return value; + } + + return bits <= 32 ? 2 * Math.abs(1 << bits - 1) + value : Math.pow(2, bits) + value; + } + + function formatString(format, varargs) { + assert((varargs & 3) === 0); + var textIndex = format; + var argIndex = varargs; + + function prepVararg(ptr, type) { + if (type === "double" || type === "i64") { + if (ptr & 7) { + assert((ptr & 7) === 4); + ptr += 4; + } + } else { + assert((ptr & 3) === 0); + } + + return ptr; + } + + function getNextArg(type) { + var ret; + argIndex = prepVararg(argIndex, type); + + if (type === "double") { + ret = Number(HEAPF64[argIndex >> 3]); + argIndex += 8; + } else if (type == "i64") { + ret = [HEAP32[argIndex >> 2], HEAP32[argIndex + 4 >> 2]]; + argIndex += 8; + } else { + assert((argIndex & 3) === 0); + type = "i32"; + ret = HEAP32[argIndex >> 2]; + argIndex += 4; + } + + return ret; + } + + var ret = []; + var curr, next, currArg; + + while (1) { + var startTextIndex = textIndex; + curr = HEAP8[textIndex >> 0]; + if (curr === 0) break; + next = HEAP8[textIndex + 1 >> 0]; + + if (curr == 37) { + var flagAlwaysSigned = false; + var flagLeftAlign = false; + var flagAlternative = false; + var flagZeroPad = false; + var flagPadSign = false; + + flagsLoop: while (1) { + switch (next) { + case 43: + flagAlwaysSigned = true; + break; + + case 45: + flagLeftAlign = true; + break; + + case 35: + flagAlternative = true; + break; + + case 48: + if (flagZeroPad) { + break flagsLoop; + } else { + flagZeroPad = true; + break; + } + + case 32: + flagPadSign = true; + break; + + default: + break flagsLoop; + } + + textIndex++; + next = HEAP8[textIndex + 1 >> 0]; + } + + var width = 0; + + if (next == 42) { + width = getNextArg("i32"); + textIndex++; + next = HEAP8[textIndex + 1 >> 0]; + } else { + while (next >= 48 && next <= 57) { + width = width * 10 + (next - 48); + textIndex++; + next = HEAP8[textIndex + 1 >> 0]; + } + } + + var precisionSet = false, + precision = -1; + + if (next == 46) { + precision = 0; + precisionSet = true; + textIndex++; + next = HEAP8[textIndex + 1 >> 0]; + + if (next == 42) { + precision = getNextArg("i32"); + textIndex++; + } else { + while (1) { + var precisionChr = HEAP8[textIndex + 1 >> 0]; + if (precisionChr < 48 || precisionChr > 57) break; + precision = precision * 10 + (precisionChr - 48); + textIndex++; + } + } + + next = HEAP8[textIndex + 1 >> 0]; + } + + if (precision < 0) { + precision = 6; + precisionSet = false; + } + + var argSize; + + switch (String.fromCharCode(next)) { + case "h": + var nextNext = HEAP8[textIndex + 2 >> 0]; + + if (nextNext == 104) { + textIndex++; + argSize = 1; + } else { + argSize = 2; + } + + break; + + case "l": + var nextNext = HEAP8[textIndex + 2 >> 0]; + + if (nextNext == 108) { + textIndex++; + argSize = 8; + } else { + argSize = 4; + } + + break; + + case "L": + case "q": + case "j": + argSize = 8; + break; + + case "z": + case "t": + case "I": + argSize = 4; + break; + + default: + argSize = null; + } + + if (argSize) textIndex++; + next = HEAP8[textIndex + 1 >> 0]; + + switch (String.fromCharCode(next)) { + case "d": + case "i": + case "u": + case "o": + case "x": + case "X": + case "p": + { + var signed = next == 100 || next == 105; + argSize = argSize || 4; + currArg = getNextArg("i" + argSize * 8); + var argText; + + if (argSize == 8) { + currArg = next == 117 ? convertU32PairToI53(currArg[0], currArg[1]) : convertI32PairToI53(currArg[0], currArg[1]); + } + + if (argSize <= 4) { + var limit = Math.pow(256, argSize) - 1; + currArg = (signed ? reSign : unSign)(currArg & limit, argSize * 8); + } + + var currAbsArg = Math.abs(currArg); + var prefix = ""; + + if (next == 100 || next == 105) { + argText = reSign(currArg, 8 * argSize).toString(10); + } else if (next == 117) { + argText = unSign(currArg, 8 * argSize).toString(10); + currArg = Math.abs(currArg); + } else if (next == 111) { + argText = (flagAlternative ? "0" : "") + currAbsArg.toString(8); + } else if (next == 120 || next == 88) { + prefix = flagAlternative && currArg != 0 ? "0x" : ""; + + if (currArg < 0) { + currArg = -currArg; + argText = (currAbsArg - 1).toString(16); + var buffer = []; + + for (var i = 0; i < argText.length; i++) { + buffer.push((15 - parseInt(argText[i], 16)).toString(16)); + } + + argText = buffer.join(""); + + while (argText.length < argSize * 2) argText = "f" + argText; + } else { + argText = currAbsArg.toString(16); + } + + if (next == 88) { + prefix = prefix.toUpperCase(); + argText = argText.toUpperCase(); + } + } else if (next == 112) { + if (currAbsArg === 0) { + argText = "(nil)"; + } else { + prefix = "0x"; + argText = currAbsArg.toString(16); + } + } + + if (precisionSet) { + while (argText.length < precision) { + argText = "0" + argText; + } + } + + if (currArg >= 0) { + if (flagAlwaysSigned) { + prefix = "+" + prefix; + } else if (flagPadSign) { + prefix = " " + prefix; + } + } + + if (argText.charAt(0) == "-") { + prefix = "-" + prefix; + argText = argText.substr(1); + } + + while (prefix.length + argText.length < width) { + if (flagLeftAlign) { + argText += " "; + } else { + if (flagZeroPad) { + argText = "0" + argText; + } else { + prefix = " " + prefix; + } + } + } + + argText = prefix + argText; + argText.split("").forEach(function (chr) { + ret.push(chr.charCodeAt(0)); + }); + break; + } + + case "f": + case "F": + case "e": + case "E": + case "g": + case "G": + { + currArg = getNextArg("double"); + var argText; + + if (isNaN(currArg)) { + argText = "nan"; + flagZeroPad = false; + } else if (!isFinite(currArg)) { + argText = (currArg < 0 ? "-" : "") + "inf"; + flagZeroPad = false; + } else { + var isGeneral = false; + var effectivePrecision = Math.min(precision, 20); + + if (next == 103 || next == 71) { + isGeneral = true; + precision = precision || 1; + var exponent = parseInt(currArg.toExponential(effectivePrecision).split("e")[1], 10); + + if (precision > exponent && exponent >= -4) { + next = (next == 103 ? "f" : "F").charCodeAt(0); + precision -= exponent + 1; + } else { + next = (next == 103 ? "e" : "E").charCodeAt(0); + precision--; + } + + effectivePrecision = Math.min(precision, 20); + } + + if (next == 101 || next == 69) { + argText = currArg.toExponential(effectivePrecision); + + if (/[eE][-+]\d$/.test(argText)) { + argText = argText.slice(0, -1) + "0" + argText.slice(-1); + } + } else if (next == 102 || next == 70) { + argText = currArg.toFixed(effectivePrecision); + + if (currArg === 0 && reallyNegative(currArg)) { + argText = "-" + argText; + } + } + + var parts = argText.split("e"); + + if (isGeneral && !flagAlternative) { + while (parts[0].length > 1 && parts[0].includes(".") && (parts[0].slice(-1) == "0" || parts[0].slice(-1) == ".")) { + parts[0] = parts[0].slice(0, -1); + } + } else { + if (flagAlternative && argText.indexOf(".") == -1) parts[0] += "."; + + while (precision > effectivePrecision++) parts[0] += "0"; + } + + argText = parts[0] + (parts.length > 1 ? "e" + parts[1] : ""); + if (next == 69) argText = argText.toUpperCase(); + + if (currArg >= 0) { + if (flagAlwaysSigned) { + argText = "+" + argText; + } else if (flagPadSign) { + argText = " " + argText; + } + } + } + + while (argText.length < width) { + if (flagLeftAlign) { + argText += " "; + } else { + if (flagZeroPad && (argText[0] == "-" || argText[0] == "+")) { + argText = argText[0] + "0" + argText.slice(1); + } else { + argText = (flagZeroPad ? "0" : " ") + argText; + } + } + } + + if (next < 97) argText = argText.toUpperCase(); + argText.split("").forEach(function (chr) { + ret.push(chr.charCodeAt(0)); + }); + break; + } + + case "s": + { + var arg = getNextArg("i8*"); + var argLength = arg ? _strlen(arg) : "(null)".length; + if (precisionSet) argLength = Math.min(argLength, precision); + + if (!flagLeftAlign) { + while (argLength < width--) { + ret.push(32); + } + } + + if (arg) { + for (var i = 0; i < argLength; i++) { + ret.push(HEAPU8[arg++ >> 0]); + } + } else { + ret = ret.concat(intArrayFromString("(null)".substr(0, argLength), true)); + } + + if (flagLeftAlign) { + while (argLength < width--) { + ret.push(32); + } + } + + break; + } + + case "c": + { + if (flagLeftAlign) ret.push(getNextArg("i8")); + + while (--width > 0) { + ret.push(32); + } + + if (!flagLeftAlign) ret.push(getNextArg("i8")); + break; + } + + case "n": + { + var ptr = getNextArg("i32*"); + HEAP32[ptr >> 2] = ret.length; + break; + } + + case "%": + { + ret.push(curr); + break; + } + + default: + { + for (var i = startTextIndex; i < textIndex + 2; i++) { + ret.push(HEAP8[i >> 0]); + } + } + } + + textIndex += 2; + } else { + ret.push(curr); + textIndex += 1; + } + } + + return ret; + } + + function traverseStack(args) { + if (!args || !args.callee || !args.callee.name) { + return [null, "", ""]; + } + + args.callee.toString(); + var funcname = args.callee.name; + var str = "("; + var first = true; + + for (var i in args) { + var a = args[i]; + + if (!first) { + str += ", "; + } + + first = false; + + if (typeof a == "number" || typeof a == "string") { + str += a; + } else { + str += "(" + typeof a + ")"; + } + } + + str += ")"; + var caller = args.callee.caller; + args = caller ? caller.arguments : []; + if (first) str = ""; + return [args, funcname, str]; + } + + function _emscripten_get_callstack_js(flags) { + var callstack = jsStackTrace(); + var iThisFunc = callstack.lastIndexOf("_emscripten_log"); + var iThisFunc2 = callstack.lastIndexOf("_emscripten_get_callstack"); + var iNextLine = callstack.indexOf("\n", Math.max(iThisFunc, iThisFunc2)) + 1; + callstack = callstack.slice(iNextLine); + + if (flags & 32) { + warnOnce("EM_LOG_DEMANGLE is deprecated; ignoring"); + } + + if (flags & 8 && typeof emscripten_source_map == "undefined") { + warnOnce('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.'); + flags ^= 8; + flags |= 16; + } + + var stack_args = null; + + if (flags & 128) { + stack_args = traverseStack(arguments); + + while (stack_args[1].includes("_emscripten_")) stack_args = traverseStack(stack_args[0]); + } + + var lines = callstack.split("\n"); + callstack = ""; + var newFirefoxRe = new RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)"); + var firefoxRe = new RegExp("\\s*(.*?)@(.*):(.*)(:(.*))?"); + var chromeRe = new RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)"); + + for (var l in lines) { + var line = lines[l]; + var symbolName = ""; + var file = ""; + var lineno = 0; + var column = 0; + var parts = chromeRe.exec(line); + + if (parts && parts.length == 5) { + symbolName = parts[1]; + file = parts[2]; + lineno = parts[3]; + column = parts[4]; + } else { + parts = newFirefoxRe.exec(line); + if (!parts) parts = firefoxRe.exec(line); + + if (parts && parts.length >= 4) { + symbolName = parts[1]; + file = parts[2]; + lineno = parts[3]; + column = parts[4] | 0; + } else { + callstack += line + "\n"; + continue; + } + } + + var haveSourceMap = false; + + if (flags & 8) { + var orig = emscripten_source_map.originalPositionFor({ + line: lineno, + column: column + }); + haveSourceMap = orig && orig.source; + + if (haveSourceMap) { + if (flags & 64) { + orig.source = orig.source.substring(orig.source.replace(/\\/g, "/").lastIndexOf("/") + 1); + } + + callstack += " at " + symbolName + " (" + orig.source + ":" + orig.line + ":" + orig.column + ")\n"; + } + } + + if (flags & 16 || !haveSourceMap) { + if (flags & 64) { + file = file.substring(file.replace(/\\/g, "/").lastIndexOf("/") + 1); + } + + callstack += (haveSourceMap ? " = " + symbolName : " at " + symbolName) + " (" + file + ":" + lineno + ":" + column + ")\n"; + } + + if (flags & 128 && stack_args[0]) { + if (stack_args[1] == symbolName && stack_args[2].length > 0) { + callstack = callstack.replace(/\s+$/, ""); + callstack += " with values: " + stack_args[1] + stack_args[2] + "\n"; + } + + stack_args = traverseStack(stack_args[0]); + } + } + + callstack = callstack.replace(/\s+$/, ""); + return callstack; + } + + function _emscripten_log_js(flags, str) { + if (flags & 24) { + str = str.replace(/\s+$/, ""); + str += (str.length > 0 ? "\n" : "") + _emscripten_get_callstack_js(flags); + } + + if (flags & 1) { + if (flags & 4) { + console.error(str); + } else if (flags & 2) { + console.warn(str); + } else if (flags & 512) { + console.info(str); + } else if (flags & 256) { + console.debug(str); + } else { + console.log(str); + } + } else if (flags & 6) { + err(str); + } else { + out(str); + } + } + + function _emscripten_log(flags, format, varargs) { + var result = formatString(format, varargs); + var str = UTF8ArrayToString(result, 0); + + _emscripten_log_js(flags, str); + } + + function _emscripten_get_heap_max() { + return 2147483648; + } + + function emscripten_realloc_buffer(size) { + try { + wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16); + updateGlobalBufferAndViews(wasmMemory.buffer); + return 1; + } catch (e) { + err("emscripten_realloc_buffer: Attempted to grow heap from " + buffer.byteLength + " bytes to " + size + " bytes, but got error: " + e); + } + } + + function _emscripten_resize_heap(requestedSize) { + var oldSize = HEAPU8.length; + requestedSize = requestedSize >>> 0; + assert(requestedSize > oldSize); + + var maxHeapSize = _emscripten_get_heap_max(); + + if (requestedSize > maxHeapSize) { + err("Cannot enlarge memory, asked to go up to " + requestedSize + " bytes, but the limit is " + maxHeapSize + " bytes!"); + return false; + } + + let alignUp = (x, multiple) => x + (multiple - x % multiple) % multiple; + + for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { + var overGrownHeapSize = oldSize * (1 + .2 / cutDown); + overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296); + var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)); + var replacement = emscripten_realloc_buffer(newSize); + + if (replacement) { + return true; + } + } + + err("Failed to grow the heap from " + oldSize + " bytes to " + newSize + " bytes, not enough memory!"); + return false; + } + + var ENV = {}; + + function getExecutableName() { + return thisProgram || "./this.program"; + } + + function getEnvStrings() { + if (!getEnvStrings.strings) { + var lang = (typeof navigator == "object" && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8"; + var env = { + "USER": "web_user", + "LOGNAME": "web_user", + "PATH": "/", + "PWD": "/", + "HOME": "/home/web_user", + "LANG": lang, + "_": getExecutableName() + }; + + for (var x in ENV) { + if (ENV[x] === undefined) delete env[x];else env[x] = ENV[x]; + } + + var strings = []; + + for (var x in env) { + strings.push(x + "=" + env[x]); + } + + getEnvStrings.strings = strings; + } + + return getEnvStrings.strings; + } + + function _environ_get(__environ, environ_buf) { + var bufSize = 0; + getEnvStrings().forEach(function (string, i) { + var ptr = environ_buf + bufSize; + HEAP32[__environ + i * 4 >> 2] = ptr; + writeAsciiToMemory(string, ptr); + bufSize += string.length + 1; + }); + return 0; + } + + function _environ_sizes_get(penviron_count, penviron_buf_size) { + var strings = getEnvStrings(); + HEAP32[penviron_count >> 2] = strings.length; + var bufSize = 0; + strings.forEach(function (string) { + bufSize += string.length + 1; + }); + HEAP32[penviron_buf_size >> 2] = bufSize; + return 0; + } + + function _fd_close(fd) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS == "undefined" || !(e instanceof FS.ErrnoError)) throw e; + return e.errno; + } + } + + function _fd_fdstat_get(fd, pbuf) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + var type = stream.tty ? 2 : FS.isDir(stream.mode) ? 3 : FS.isLink(stream.mode) ? 7 : 4; + HEAP8[pbuf >> 0] = type; + return 0; + } catch (e) { + if (typeof FS == "undefined" || !(e instanceof FS.ErrnoError)) throw e; + return e.errno; + } + } + + function _fd_read(fd, iov, iovcnt, pnum) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + var num = SYSCALLS.doReadv(stream, iov, iovcnt); + HEAP32[pnum >> 2] = num; + return 0; + } catch (e) { + if (typeof FS == "undefined" || !(e instanceof FS.ErrnoError)) throw e; + return e.errno; + } + } + + function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + var HIGH_OFFSET = 4294967296; + var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0); + var DOUBLE_LIMIT = 9007199254740992; + + if (offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT) { + return -61; + } + + FS.llseek(stream, offset, whence); + tempI64 = [stream.position >>> 0, (tempDouble = stream.position, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[newOffset >> 2] = tempI64[0], HEAP32[newOffset + 4 >> 2] = tempI64[1]; + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; + return 0; + } catch (e) { + if (typeof FS == "undefined" || !(e instanceof FS.ErrnoError)) throw e; + return e.errno; + } + } + + function _fd_write(fd, iov, iovcnt, pnum) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + var num = SYSCALLS.doWritev(stream, iov, iovcnt); + HEAP32[pnum >> 2] = num; + return 0; + } catch (e) { + if (typeof FS == "undefined" || !(e instanceof FS.ErrnoError)) throw e; + return e.errno; + } + } + + function _setTempRet0(val) { + } + + var FSNode = function (parent, name, mode, rdev) { + if (!parent) { + parent = this; + } + + this.parent = parent; + this.mount = parent.mount; + this.mounted = null; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.node_ops = {}; + this.stream_ops = {}; + this.rdev = rdev; + }; + + var readMode = 292 | 73; + var writeMode = 146; + Object.defineProperties(FSNode.prototype, { + read: { + get: function () { + return (this.mode & readMode) === readMode; + }, + set: function (val) { + val ? this.mode |= readMode : this.mode &= ~readMode; + } + }, + write: { + get: function () { + return (this.mode & writeMode) === writeMode; + }, + set: function (val) { + val ? this.mode |= writeMode : this.mode &= ~writeMode; + } + }, + isFolder: { + get: function () { + return FS.isDir(this.mode); + } + }, + isDevice: { + get: function () { + return FS.isChrdev(this.mode); + } + } + }); + FS.FSNode = FSNode; + FS.staticInit(); + ERRNO_CODES = { + "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 + }; + embind_init_charCodes(); + BindingError = Module["BindingError"] = extendError(Error, "BindingError"); + InternalError = Module["InternalError"] = extendError(Error, "InternalError"); + init_ClassHandle(); + init_embind(); + init_RegisteredPointer(); + UnboundTypeError = Module["UnboundTypeError"] = extendError(Error, "UnboundTypeError"); + init_emval(); + + function intArrayFromString(stringy, dontAddNull, length) { + var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; + } + + function checkIncomingModuleAPI() { + ignoredModuleProp("fetchSettings"); + } + + var asmLibraryArg = { + "__syscall_fcntl64": ___syscall_fcntl64, + "__syscall_openat": ___syscall_openat, + "_embind_register_bigint": __embind_register_bigint, + "_embind_register_bool": __embind_register_bool, + "_embind_register_class": __embind_register_class, + "_embind_register_class_constructor": __embind_register_class_constructor, + "_embind_register_class_function": __embind_register_class_function, + "_embind_register_class_property": __embind_register_class_property, + "_embind_register_emval": __embind_register_emval, + "_embind_register_float": __embind_register_float, + "_embind_register_integer": __embind_register_integer, + "_embind_register_memory_view": __embind_register_memory_view, + "_embind_register_std_string": __embind_register_std_string, + "_embind_register_std_wstring": __embind_register_std_wstring, + "_embind_register_void": __embind_register_void, + "_emscripten_date_now": __emscripten_date_now, + "_emval_as": __emval_as, + "_emval_call_void_method": __emval_call_void_method, + "_emval_decref": __emval_decref, + "_emval_get_method_caller": __emval_get_method_caller, + "_emval_incref": __emval_incref, + "_emval_run_destructors": __emval_run_destructors, + "_emval_take_value": __emval_take_value, + "_gmtime_js": __gmtime_js, + "_localtime_js": __localtime_js, + "_mktime_js": __mktime_js, + "_tzset_js": __tzset_js, + "abort": _abort, + "emscripten_log": _emscripten_log, + "emscripten_resize_heap": _emscripten_resize_heap, + "environ_get": _environ_get, + "environ_sizes_get": _environ_sizes_get, + "fd_close": _fd_close, + "fd_fdstat_get": _fd_fdstat_get, + "fd_read": _fd_read, + "fd_seek": _fd_seek, + "fd_write": _fd_write, + "setTempRet0": _setTempRet0 + }; + createWasm(); + + Module["___wasm_call_ctors"] = createExportWrapper("__wasm_call_ctors"); + + var _free = Module["_free"] = createExportWrapper("free"); + + var _malloc = Module["_malloc"] = createExportWrapper("malloc"); + + var _strlen = Module["_strlen"] = createExportWrapper("strlen"); + + var ___errno_location = Module["___errno_location"] = createExportWrapper("__errno_location"); + + var ___getTypeName = Module["___getTypeName"] = createExportWrapper("__getTypeName"); + + Module["___embind_register_native_and_builtin_types"] = createExportWrapper("__embind_register_native_and_builtin_types"); + + var ___stdio_exit = Module["___stdio_exit"] = createExportWrapper("__stdio_exit"); + + var _emscripten_builtin_memalign = Module["_emscripten_builtin_memalign"] = createExportWrapper("emscripten_builtin_memalign"); + + var _emscripten_stack_init = Module["_emscripten_stack_init"] = function () { + return (_emscripten_stack_init = Module["_emscripten_stack_init"] = Module["asm"]["emscripten_stack_init"]).apply(null, arguments); + }; + + Module["_emscripten_stack_get_free"] = function () { + return (Module["_emscripten_stack_get_free"] = Module["asm"]["emscripten_stack_get_free"]).apply(null, arguments); + }; + + Module["_emscripten_stack_get_base"] = function () { + return (Module["_emscripten_stack_get_base"] = Module["asm"]["emscripten_stack_get_base"]).apply(null, arguments); + }; + + var _emscripten_stack_get_end = Module["_emscripten_stack_get_end"] = function () { + return (_emscripten_stack_get_end = Module["_emscripten_stack_get_end"] = Module["asm"]["emscripten_stack_get_end"]).apply(null, arguments); + }; + + Module["stackSave"] = createExportWrapper("stackSave"); + Module["stackRestore"] = createExportWrapper("stackRestore"); + Module["stackAlloc"] = createExportWrapper("stackAlloc"); + Module["dynCall_ijiii"] = createExportWrapper("dynCall_ijiii"); + Module["dynCall_viiijj"] = createExportWrapper("dynCall_viiijj"); + Module["dynCall_jij"] = createExportWrapper("dynCall_jij"); + Module["dynCall_jii"] = createExportWrapper("dynCall_jii"); + Module["dynCall_jiji"] = createExportWrapper("dynCall_jiji"); + + Module["_ff_h264_cabac_tables"] = 112940; + + unexportedRuntimeFunction("intArrayFromString", false); + unexportedRuntimeFunction("intArrayToString", false); + unexportedRuntimeFunction("ccall", false); + unexportedRuntimeFunction("cwrap", false); + unexportedRuntimeFunction("setValue", false); + unexportedRuntimeFunction("getValue", false); + unexportedRuntimeFunction("allocate", false); + unexportedRuntimeFunction("UTF8ArrayToString", false); + unexportedRuntimeFunction("UTF8ToString", false); + unexportedRuntimeFunction("stringToUTF8Array", false); + unexportedRuntimeFunction("stringToUTF8", false); + unexportedRuntimeFunction("lengthBytesUTF8", false); + unexportedRuntimeFunction("stackTrace", false); + unexportedRuntimeFunction("addOnPreRun", false); + unexportedRuntimeFunction("addOnInit", false); + unexportedRuntimeFunction("addOnPreMain", false); + unexportedRuntimeFunction("addOnExit", false); + unexportedRuntimeFunction("addOnPostRun", false); + unexportedRuntimeFunction("writeStringToMemory", false); + unexportedRuntimeFunction("writeArrayToMemory", false); + unexportedRuntimeFunction("writeAsciiToMemory", false); + unexportedRuntimeFunction("addRunDependency", true); + unexportedRuntimeFunction("removeRunDependency", true); + unexportedRuntimeFunction("FS_createFolder", false); + unexportedRuntimeFunction("FS_createPath", true); + unexportedRuntimeFunction("FS_createDataFile", true); + unexportedRuntimeFunction("FS_createPreloadedFile", true); + unexportedRuntimeFunction("FS_createLazyFile", true); + unexportedRuntimeFunction("FS_createLink", false); + unexportedRuntimeFunction("FS_createDevice", true); + unexportedRuntimeFunction("FS_unlink", true); + unexportedRuntimeFunction("getLEB", false); + unexportedRuntimeFunction("getFunctionTables", false); + unexportedRuntimeFunction("alignFunctionTables", false); + unexportedRuntimeFunction("registerFunctions", false); + unexportedRuntimeFunction("addFunction", false); + unexportedRuntimeFunction("removeFunction", false); + unexportedRuntimeFunction("prettyPrint", false); + unexportedRuntimeFunction("dynCall", false); + unexportedRuntimeFunction("getCompilerSetting", false); + unexportedRuntimeFunction("print", false); + unexportedRuntimeFunction("printErr", false); + unexportedRuntimeFunction("getTempRet0", false); + unexportedRuntimeFunction("setTempRet0", false); + unexportedRuntimeFunction("callMain", false); + unexportedRuntimeFunction("abort", false); + unexportedRuntimeFunction("keepRuntimeAlive", false); + unexportedRuntimeFunction("ptrToString", false); + unexportedRuntimeFunction("zeroMemory", false); + unexportedRuntimeFunction("stringToNewUTF8", false); + unexportedRuntimeFunction("emscripten_realloc_buffer", false); + unexportedRuntimeFunction("ENV", false); + unexportedRuntimeFunction("ERRNO_CODES", false); + unexportedRuntimeFunction("ERRNO_MESSAGES", false); + unexportedRuntimeFunction("setErrNo", false); + unexportedRuntimeFunction("inetPton4", false); + unexportedRuntimeFunction("inetNtop4", false); + unexportedRuntimeFunction("inetPton6", false); + unexportedRuntimeFunction("inetNtop6", false); + unexportedRuntimeFunction("readSockaddr", false); + unexportedRuntimeFunction("writeSockaddr", false); + unexportedRuntimeFunction("DNS", false); + unexportedRuntimeFunction("getHostByName", false); + unexportedRuntimeFunction("Protocols", false); + unexportedRuntimeFunction("Sockets", false); + unexportedRuntimeFunction("getRandomDevice", false); + unexportedRuntimeFunction("traverseStack", false); + unexportedRuntimeFunction("UNWIND_CACHE", false); + unexportedRuntimeFunction("convertPCtoSourceLocation", false); + unexportedRuntimeFunction("readAsmConstArgsArray", false); + unexportedRuntimeFunction("readAsmConstArgs", false); + unexportedRuntimeFunction("mainThreadEM_ASM", false); + unexportedRuntimeFunction("jstoi_q", false); + unexportedRuntimeFunction("jstoi_s", false); + unexportedRuntimeFunction("getExecutableName", false); + unexportedRuntimeFunction("listenOnce", false); + unexportedRuntimeFunction("autoResumeAudioContext", false); + unexportedRuntimeFunction("dynCallLegacy", false); + unexportedRuntimeFunction("getDynCaller", false); + unexportedRuntimeFunction("dynCall", false); + unexportedRuntimeFunction("setWasmTableEntry", false); + unexportedRuntimeFunction("getWasmTableEntry", false); + unexportedRuntimeFunction("handleException", false); + unexportedRuntimeFunction("runtimeKeepalivePush", false); + unexportedRuntimeFunction("runtimeKeepalivePop", false); + unexportedRuntimeFunction("callUserCallback", false); + unexportedRuntimeFunction("maybeExit", false); + unexportedRuntimeFunction("safeSetTimeout", false); + unexportedRuntimeFunction("asmjsMangle", false); + unexportedRuntimeFunction("asyncLoad", false); + unexportedRuntimeFunction("alignMemory", false); + unexportedRuntimeFunction("mmapAlloc", false); + unexportedRuntimeFunction("reallyNegative", false); + unexportedRuntimeFunction("unSign", false); + unexportedRuntimeFunction("reSign", false); + unexportedRuntimeFunction("formatString", false); + unexportedRuntimeFunction("PATH", false); + unexportedRuntimeFunction("PATH_FS", false); + unexportedRuntimeFunction("SYSCALLS", false); + unexportedRuntimeFunction("getSocketFromFD", false); + unexportedRuntimeFunction("getSocketAddress", false); + unexportedRuntimeFunction("JSEvents", false); + unexportedRuntimeFunction("registerKeyEventCallback", false); + unexportedRuntimeFunction("specialHTMLTargets", false); + unexportedRuntimeFunction("maybeCStringToJsString", false); + unexportedRuntimeFunction("findEventTarget", false); + unexportedRuntimeFunction("findCanvasEventTarget", false); + unexportedRuntimeFunction("getBoundingClientRect", false); + unexportedRuntimeFunction("fillMouseEventData", false); + unexportedRuntimeFunction("registerMouseEventCallback", false); + unexportedRuntimeFunction("registerWheelEventCallback", false); + unexportedRuntimeFunction("registerUiEventCallback", false); + unexportedRuntimeFunction("registerFocusEventCallback", false); + unexportedRuntimeFunction("fillDeviceOrientationEventData", false); + unexportedRuntimeFunction("registerDeviceOrientationEventCallback", false); + unexportedRuntimeFunction("fillDeviceMotionEventData", false); + unexportedRuntimeFunction("registerDeviceMotionEventCallback", false); + unexportedRuntimeFunction("screenOrientation", false); + unexportedRuntimeFunction("fillOrientationChangeEventData", false); + unexportedRuntimeFunction("registerOrientationChangeEventCallback", false); + unexportedRuntimeFunction("fillFullscreenChangeEventData", false); + unexportedRuntimeFunction("registerFullscreenChangeEventCallback", false); + unexportedRuntimeFunction("registerRestoreOldStyle", false); + unexportedRuntimeFunction("hideEverythingExceptGivenElement", false); + unexportedRuntimeFunction("restoreHiddenElements", false); + unexportedRuntimeFunction("setLetterbox", false); + unexportedRuntimeFunction("currentFullscreenStrategy", false); + unexportedRuntimeFunction("restoreOldWindowedStyle", false); + unexportedRuntimeFunction("softFullscreenResizeWebGLRenderTarget", false); + unexportedRuntimeFunction("doRequestFullscreen", false); + unexportedRuntimeFunction("fillPointerlockChangeEventData", false); + unexportedRuntimeFunction("registerPointerlockChangeEventCallback", false); + unexportedRuntimeFunction("registerPointerlockErrorEventCallback", false); + unexportedRuntimeFunction("requestPointerLock", false); + unexportedRuntimeFunction("fillVisibilityChangeEventData", false); + unexportedRuntimeFunction("registerVisibilityChangeEventCallback", false); + unexportedRuntimeFunction("registerTouchEventCallback", false); + unexportedRuntimeFunction("fillGamepadEventData", false); + unexportedRuntimeFunction("registerGamepadEventCallback", false); + unexportedRuntimeFunction("registerBeforeUnloadEventCallback", false); + unexportedRuntimeFunction("fillBatteryEventData", false); + unexportedRuntimeFunction("battery", false); + unexportedRuntimeFunction("registerBatteryEventCallback", false); + unexportedRuntimeFunction("setCanvasElementSize", false); + unexportedRuntimeFunction("getCanvasElementSize", false); + unexportedRuntimeFunction("demangle", false); + unexportedRuntimeFunction("demangleAll", false); + unexportedRuntimeFunction("jsStackTrace", false); + unexportedRuntimeFunction("stackTrace", false); + unexportedRuntimeFunction("getEnvStrings", false); + unexportedRuntimeFunction("checkWasiClock", false); + unexportedRuntimeFunction("writeI53ToI64", false); + unexportedRuntimeFunction("writeI53ToI64Clamped", false); + unexportedRuntimeFunction("writeI53ToI64Signaling", false); + unexportedRuntimeFunction("writeI53ToU64Clamped", false); + unexportedRuntimeFunction("writeI53ToU64Signaling", false); + unexportedRuntimeFunction("readI53FromI64", false); + unexportedRuntimeFunction("readI53FromU64", false); + unexportedRuntimeFunction("convertI32PairToI53", false); + unexportedRuntimeFunction("convertU32PairToI53", false); + unexportedRuntimeFunction("dlopenMissingError", false); + unexportedRuntimeFunction("setImmediateWrapped", false); + unexportedRuntimeFunction("clearImmediateWrapped", false); + unexportedRuntimeFunction("polyfillSetImmediate", false); + unexportedRuntimeFunction("uncaughtExceptionCount", false); + unexportedRuntimeFunction("exceptionLast", false); + unexportedRuntimeFunction("exceptionCaught", false); + unexportedRuntimeFunction("ExceptionInfo", false); + unexportedRuntimeFunction("exception_addRef", false); + unexportedRuntimeFunction("exception_decRef", false); + unexportedRuntimeFunction("Browser", false); + unexportedRuntimeFunction("setMainLoop", false); + unexportedRuntimeFunction("wget", false); + unexportedRuntimeFunction("FS", false); + unexportedRuntimeFunction("MEMFS", false); + unexportedRuntimeFunction("TTY", false); + unexportedRuntimeFunction("PIPEFS", false); + unexportedRuntimeFunction("SOCKFS", false); + unexportedRuntimeFunction("_setNetworkCallback", false); + unexportedRuntimeFunction("tempFixedLengthArray", false); + unexportedRuntimeFunction("miniTempWebGLFloatBuffers", false); + unexportedRuntimeFunction("heapObjectForWebGLType", false); + unexportedRuntimeFunction("heapAccessShiftForWebGLHeap", false); + unexportedRuntimeFunction("GL", false); + unexportedRuntimeFunction("emscriptenWebGLGet", false); + unexportedRuntimeFunction("computeUnpackAlignedImageSize", false); + unexportedRuntimeFunction("emscriptenWebGLGetTexPixelData", false); + unexportedRuntimeFunction("emscriptenWebGLGetUniform", false); + unexportedRuntimeFunction("webglGetUniformLocation", false); + unexportedRuntimeFunction("webglPrepareUniformLocationsBeforeFirstUse", false); + unexportedRuntimeFunction("webglGetLeftBracePos", false); + unexportedRuntimeFunction("emscriptenWebGLGetVertexAttrib", false); + unexportedRuntimeFunction("writeGLArray", false); + unexportedRuntimeFunction("AL", false); + unexportedRuntimeFunction("SDL_unicode", false); + unexportedRuntimeFunction("SDL_ttfContext", false); + unexportedRuntimeFunction("SDL_audio", false); + unexportedRuntimeFunction("SDL", false); + unexportedRuntimeFunction("SDL_gfx", false); + unexportedRuntimeFunction("GLUT", false); + unexportedRuntimeFunction("EGL", false); + unexportedRuntimeFunction("GLFW_Window", false); + unexportedRuntimeFunction("GLFW", false); + unexportedRuntimeFunction("GLEW", false); + unexportedRuntimeFunction("IDBStore", false); + unexportedRuntimeFunction("runAndAbortIfError", false); + unexportedRuntimeFunction("InternalError", false); + unexportedRuntimeFunction("BindingError", false); + unexportedRuntimeFunction("UnboundTypeError", false); + unexportedRuntimeFunction("PureVirtualError", false); + unexportedRuntimeFunction("init_embind", false); + unexportedRuntimeFunction("throwInternalError", false); + unexportedRuntimeFunction("throwBindingError", false); + unexportedRuntimeFunction("throwUnboundTypeError", false); + unexportedRuntimeFunction("ensureOverloadTable", false); + unexportedRuntimeFunction("exposePublicSymbol", false); + unexportedRuntimeFunction("replacePublicSymbol", false); + unexportedRuntimeFunction("extendError", false); + unexportedRuntimeFunction("createNamedFunction", false); + unexportedRuntimeFunction("registeredInstances", false); + unexportedRuntimeFunction("getBasestPointer", false); + unexportedRuntimeFunction("registerInheritedInstance", false); + unexportedRuntimeFunction("unregisterInheritedInstance", false); + unexportedRuntimeFunction("getInheritedInstance", false); + unexportedRuntimeFunction("getInheritedInstanceCount", false); + unexportedRuntimeFunction("getLiveInheritedInstances", false); + unexportedRuntimeFunction("registeredTypes", false); + unexportedRuntimeFunction("awaitingDependencies", false); + unexportedRuntimeFunction("typeDependencies", false); + unexportedRuntimeFunction("registeredPointers", false); + unexportedRuntimeFunction("registerType", false); + unexportedRuntimeFunction("whenDependentTypesAreResolved", false); + unexportedRuntimeFunction("embind_charCodes", false); + unexportedRuntimeFunction("embind_init_charCodes", false); + unexportedRuntimeFunction("readLatin1String", false); + unexportedRuntimeFunction("getTypeName", false); + unexportedRuntimeFunction("heap32VectorToArray", false); + unexportedRuntimeFunction("requireRegisteredType", false); + unexportedRuntimeFunction("getShiftFromSize", false); + unexportedRuntimeFunction("integerReadValueFromPointer", false); + unexportedRuntimeFunction("enumReadValueFromPointer", false); + unexportedRuntimeFunction("floatReadValueFromPointer", false); + unexportedRuntimeFunction("simpleReadValueFromPointer", false); + unexportedRuntimeFunction("runDestructors", false); + unexportedRuntimeFunction("new_", false); + unexportedRuntimeFunction("craftInvokerFunction", false); + unexportedRuntimeFunction("embind__requireFunction", false); + unexportedRuntimeFunction("tupleRegistrations", false); + unexportedRuntimeFunction("structRegistrations", false); + unexportedRuntimeFunction("genericPointerToWireType", false); + unexportedRuntimeFunction("constNoSmartPtrRawPointerToWireType", false); + unexportedRuntimeFunction("nonConstNoSmartPtrRawPointerToWireType", false); + unexportedRuntimeFunction("init_RegisteredPointer", false); + unexportedRuntimeFunction("RegisteredPointer", false); + unexportedRuntimeFunction("RegisteredPointer_getPointee", false); + unexportedRuntimeFunction("RegisteredPointer_destructor", false); + unexportedRuntimeFunction("RegisteredPointer_deleteObject", false); + unexportedRuntimeFunction("RegisteredPointer_fromWireType", false); + unexportedRuntimeFunction("runDestructor", false); + unexportedRuntimeFunction("releaseClassHandle", false); + unexportedRuntimeFunction("finalizationRegistry", false); + unexportedRuntimeFunction("detachFinalizer_deps", false); + unexportedRuntimeFunction("detachFinalizer", false); + unexportedRuntimeFunction("attachFinalizer", false); + unexportedRuntimeFunction("makeClassHandle", false); + unexportedRuntimeFunction("init_ClassHandle", false); + unexportedRuntimeFunction("ClassHandle", false); + unexportedRuntimeFunction("ClassHandle_isAliasOf", false); + unexportedRuntimeFunction("throwInstanceAlreadyDeleted", false); + unexportedRuntimeFunction("ClassHandle_clone", false); + unexportedRuntimeFunction("ClassHandle_delete", false); + unexportedRuntimeFunction("deletionQueue", false); + unexportedRuntimeFunction("ClassHandle_isDeleted", false); + unexportedRuntimeFunction("ClassHandle_deleteLater", false); + unexportedRuntimeFunction("flushPendingDeletes", false); + unexportedRuntimeFunction("delayFunction", false); + unexportedRuntimeFunction("setDelayFunction", false); + unexportedRuntimeFunction("RegisteredClass", false); + unexportedRuntimeFunction("shallowCopyInternalPointer", false); + unexportedRuntimeFunction("downcastPointer", false); + unexportedRuntimeFunction("upcastPointer", false); + unexportedRuntimeFunction("validateThis", false); + unexportedRuntimeFunction("char_0", false); + unexportedRuntimeFunction("char_9", false); + unexportedRuntimeFunction("makeLegalFunctionName", false); + unexportedRuntimeFunction("emval_handle_array", false); + unexportedRuntimeFunction("emval_free_list", false); + unexportedRuntimeFunction("emval_symbols", false); + unexportedRuntimeFunction("init_emval", false); + unexportedRuntimeFunction("count_emval_handles", false); + unexportedRuntimeFunction("get_first_emval", false); + unexportedRuntimeFunction("getStringOrSymbol", false); + unexportedRuntimeFunction("Emval", false); + unexportedRuntimeFunction("emval_newers", false); + unexportedRuntimeFunction("craftEmvalAllocator", false); + unexportedRuntimeFunction("emval_get_global", false); + unexportedRuntimeFunction("emval_methodCallers", false); + unexportedRuntimeFunction("emval_registeredMethods", false); + unexportedRuntimeFunction("warnOnce", false); + unexportedRuntimeFunction("stackSave", false); + unexportedRuntimeFunction("stackRestore", false); + unexportedRuntimeFunction("stackAlloc", false); + unexportedRuntimeFunction("AsciiToString", false); + unexportedRuntimeFunction("stringToAscii", false); + unexportedRuntimeFunction("UTF16ToString", false); + unexportedRuntimeFunction("stringToUTF16", false); + unexportedRuntimeFunction("lengthBytesUTF16", false); + unexportedRuntimeFunction("UTF32ToString", false); + unexportedRuntimeFunction("stringToUTF32", false); + unexportedRuntimeFunction("lengthBytesUTF32", false); + unexportedRuntimeFunction("allocateUTF8", false); + unexportedRuntimeFunction("allocateUTF8OnStack", false); + Module["writeStackCookie"] = writeStackCookie; + Module["checkStackCookie"] = checkStackCookie; + unexportedRuntimeSymbol("ALLOC_NORMAL", false); + unexportedRuntimeSymbol("ALLOC_STACK", false); + var calledRun; + + function ExitStatus(status) { + this.name = "ExitStatus"; + this.message = "Program terminated with exit(" + status + ")"; + this.status = status; + } + + dependenciesFulfilled = function runCaller() { + if (!calledRun) run(); + if (!calledRun) dependenciesFulfilled = runCaller; + }; + + function stackCheckInit() { + _emscripten_stack_init(); + + writeStackCookie(); + } + + function run(args) { + + if (runDependencies > 0) { + return; + } + + stackCheckInit(); + preRun(); + + if (runDependencies > 0) { + return; + } + + function doRun() { + if (calledRun) return; + calledRun = true; + Module["calledRun"] = true; + if (ABORT) return; + initRuntime(); + if (Module["onRuntimeInitialized"]) Module["onRuntimeInitialized"](); + assert(!Module["_main"], 'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'); + postRun(); + } + + if (Module["setStatus"]) { + Module["setStatus"]("Running..."); + setTimeout(function () { + setTimeout(function () { + Module["setStatus"](""); + }, 1); + doRun(); + }, 1); + } else { + doRun(); + } + + checkStackCookie(); + } + + Module["run"] = run; + + if (Module["preInit"]) { + if (typeof Module["preInit"] == "function") Module["preInit"] = [Module["preInit"]]; + + while (Module["preInit"].length > 0) { + Module["preInit"].pop()(); + } + } + + run(); + module.exports = Module; + }); + + var createWebGL = ((gl, openWebglAlignment) => { + var vertexShaderScript = ['attribute vec4 vertexPos;', 'attribute vec4 texturePos;', 'varying vec2 textureCoord;', 'void main()', '{', 'gl_Position = vertexPos;', 'textureCoord = texturePos.xy;', '}'].join('\n'); + var fragmentShaderScript = ['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'); + + if (openWebglAlignment) { + gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1); + } + + var vertexShader = gl.createShader(gl.VERTEX_SHADER); + gl.shaderSource(vertexShader, vertexShaderScript); + gl.compileShader(vertexShader); + + if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) { + console.log('Vertex shader failed to compile: ' + gl.getShaderInfoLog(vertexShader)); + } + + var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER); + gl.shaderSource(fragmentShader, fragmentShaderScript); + gl.compileShader(fragmentShader); + + if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) { + console.log('Fragment shader failed to compile: ' + gl.getShaderInfoLog(fragmentShader)); + } + + var program = gl.createProgram(); + gl.attachShader(program, vertexShader); + gl.attachShader(program, fragmentShader); + gl.linkProgram(program); + + if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { + console.log('Program failed to compile: ' + gl.getProgramInfoLog(program)); + } + + gl.useProgram(program); // initBuffers + + var vertexPosBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, vertexPosBuffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1, 1, -1, 1, 1, -1, -1, -1]), gl.STATIC_DRAW); + var vertexPosRef = gl.getAttribLocation(program, 'vertexPos'); + gl.enableVertexAttribArray(vertexPosRef); + gl.vertexAttribPointer(vertexPosRef, 2, gl.FLOAT, false, 0, 0); + var texturePosBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, texturePosBuffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1, 0, 0, 0, 1, 1, 0, 1]), gl.STATIC_DRAW); + var texturePosRef = gl.getAttribLocation(program, 'texturePos'); + gl.enableVertexAttribArray(texturePosRef); + gl.vertexAttribPointer(texturePosRef, 2, gl.FLOAT, false, 0, 0); + + function _initTexture(name, index) { + var textureRef = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, textureRef); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.bindTexture(gl.TEXTURE_2D, null); + gl.uniform1i(gl.getUniformLocation(program, name), index); + return textureRef; + } + + var yTextureRef = _initTexture('ySampler', 0); + + var uTextureRef = _initTexture('uSampler', 1); + + var vTextureRef = _initTexture('vSampler', 2); + + return { + render: function (w, h, y, u, v) { + gl.viewport(0, 0, w, h); + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, yTextureRef); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, w, h, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, y); + gl.activeTexture(gl.TEXTURE1); + gl.bindTexture(gl.TEXTURE_2D, uTextureRef); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, w / 2, h / 2, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, u); + gl.activeTexture(gl.TEXTURE2); + gl.bindTexture(gl.TEXTURE_2D, vTextureRef); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, w / 2, h / 2, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, v); + gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4); + }, + destroy: function () { + try { + gl.deleteProgram(program); + gl.deleteBuffer(vertexPosBuffer); + gl.deleteBuffer(texturePosBuffer); + gl.deleteTexture(yTextureRef); + gl.deleteTexture(uTextureRef); + gl.deleteTexture(vTextureRef); + } catch (e) {// console.error(e); + } + } + }; + }); + + // 播放协议 + const PLAYER_PLAY_PROTOCOL = { + websocket: 0, + fetch: 1, + webrtc: 2 + }; + const DEMUX_TYPE = { + flv: 'flv', + m7s: 'm7s' + }; + const FILE_SUFFIX = { + mp4: 'mp4', + webm: 'webm' + }; + + const DEFAULT_PLAYER_OPTIONS = { + videoBuffer: 1000, + //1000ms 1 second + videoBufferDelay: 1000, + // 1000ms + isResize: true, + isFullResize: false, + // + isFlv: false, + debug: false, + hotKey: false, + // 快捷键 + loadingTimeout: 10, + // loading timeout + heartTimeout: 5, + // heart timeout + timeout: 10, + // second + loadingTimeoutReplay: true, + // loading timeout replay. default is true + heartTimeoutReplay: true, + // heart timeout replay. + loadingTimeoutReplayTimes: 3, + // loading timeout replay fail times + heartTimeoutReplayTimes: 3, + // heart timeout replay fail times + supportDblclickFullscreen: false, + // support double click toggle fullscreen + showBandwidth: false, + // show band width + keepScreenOn: false, + // + isNotMute: false, + // + hasAudio: true, + // has audio + hasVideo: true, + // has video + operateBtns: { + fullscreen: false, + screenshot: false, + play: false, + audio: false, + record: false + }, + controlAutoHide: false, + // control auto hide + hasControl: false, + loadingText: '', + // loading Text + background: '', + decoder: 'decoder.js', + url: '', + // play url + rotate: 0, + // + // text: '', + forceNoOffscreen: true, + // 默认是不采用 + hiddenAutoPause: false, + // + protocol: PLAYER_PLAY_PROTOCOL.fetch, + demuxType: DEMUX_TYPE.flv, + // demux type + useWCS: false, + // + wcsUseVideoRender: true, + // 默认设置为true + useMSE: false, + // + useOffscreen: false, + // + autoWasm: true, + // 自动降级到 wasm 模式 + wasmDecodeErrorReplay: true, + // 解码失败重新播放。 + openWebglAlignment: false, + // https://github.com/langhuihui/jessibuca/issues/152 + wasmDecodeAudioSyncVideo: false, + // wasm 解码之后音视频同步 + recordType: FILE_SUFFIX.webm, + useWebFullScreen: false // use web full screen + + }; + const WORKER_CMD_TYPE = { + init: 'init', + initVideo: 'initVideo', + render: 'render', + playAudio: 'playAudio', + initAudio: 'initAudio', + kBps: 'kBps', + decode: 'decode', + audioCode: 'audioCode', + videoCode: 'videoCode', + wasmError: 'wasmError' + }; + const MEDIA_TYPE = { + audio: 1, + video: 2 + }; + const WORKER_SEND_TYPE = { + init: 'init', + decode: 'decode', + audioDecode: 'audioDecode', + videoDecode: 'videoDecode', + close: 'close', + updateConfig: 'updateConfig' + }; // + const ENCODED_VIDEO_TYPE = { + key: 'key', + delta: 'delta' + }; + + var screenfull = createCommonjsModule(function (module) { + /*! + * screenfull + * v5.1.0 - 2020-12-24 + * (c) Sindre Sorhus; MIT License + */ + (function () { + + var document = typeof window !== 'undefined' && typeof window.document !== 'undefined' ? window.document : {}; + var isCommonjs = module.exports; + + var fn = (function () { + var val; + + var fnMap = [ + [ + 'requestFullscreen', + 'exitFullscreen', + 'fullscreenElement', + 'fullscreenEnabled', + 'fullscreenchange', + 'fullscreenerror' + ], + // New WebKit + [ + 'webkitRequestFullscreen', + 'webkitExitFullscreen', + 'webkitFullscreenElement', + 'webkitFullscreenEnabled', + 'webkitfullscreenchange', + 'webkitfullscreenerror' + + ], + // Old WebKit + [ + 'webkitRequestFullScreen', + 'webkitCancelFullScreen', + 'webkitCurrentFullScreenElement', + 'webkitCancelFullScreen', + 'webkitfullscreenchange', + 'webkitfullscreenerror' + + ], + [ + 'mozRequestFullScreen', + 'mozCancelFullScreen', + 'mozFullScreenElement', + 'mozFullScreenEnabled', + 'mozfullscreenchange', + 'mozfullscreenerror' + ], + [ + 'msRequestFullscreen', + 'msExitFullscreen', + 'msFullscreenElement', + 'msFullscreenEnabled', + 'MSFullscreenChange', + 'MSFullscreenError' + ] + ]; + + var i = 0; + var l = fnMap.length; + var ret = {}; + + for (; i < l; i++) { + val = fnMap[i]; + if (val && val[1] in document) { + for (i = 0; i < val.length; i++) { + ret[fnMap[0][i]] = val[i]; + } + return ret; + } + } + + return false; + })(); + + var eventNameMap = { + change: fn.fullscreenchange, + error: fn.fullscreenerror + }; + + var screenfull = { + request: function (element, options) { + return new Promise(function (resolve, reject) { + var onFullScreenEntered = function () { + this.off('change', onFullScreenEntered); + resolve(); + }.bind(this); + + this.on('change', onFullScreenEntered); + + element = element || document.documentElement; + + var returnPromise = element[fn.requestFullscreen](options); + + if (returnPromise instanceof Promise) { + returnPromise.then(onFullScreenEntered).catch(reject); + } + }.bind(this)); + }, + exit: function () { + return new Promise(function (resolve, reject) { + if (!this.isFullscreen) { + resolve(); + return; + } + + var onFullScreenExit = function () { + this.off('change', onFullScreenExit); + resolve(); + }.bind(this); + + this.on('change', onFullScreenExit); + + var returnPromise = document[fn.exitFullscreen](); + + if (returnPromise instanceof Promise) { + returnPromise.then(onFullScreenExit).catch(reject); + } + }.bind(this)); + }, + toggle: function (element, options) { + return this.isFullscreen ? this.exit() : this.request(element, options); + }, + onchange: function (callback) { + this.on('change', callback); + }, + onerror: function (callback) { + this.on('error', callback); + }, + on: function (event, callback) { + var eventName = eventNameMap[event]; + if (eventName) { + document.addEventListener(eventName, callback, false); + } + }, + off: function (event, callback) { + var eventName = eventNameMap[event]; + if (eventName) { + document.removeEventListener(eventName, callback, false); + } + }, + raw: fn + }; + + if (!fn) { + if (isCommonjs) { + module.exports = {isEnabled: false}; + } else { + window.screenfull = {isEnabled: false}; + } + + return; + } + + Object.defineProperties(screenfull, { + isFullscreen: { + get: function () { + return Boolean(document[fn.fullscreenElement]); + } + }, + element: { + enumerable: true, + get: function () { + return document[fn.fullscreenElement]; + } + }, + isEnabled: { + enumerable: true, + get: function () { + // Coerce to boolean in case of old WebKit + return Boolean(document[fn.fullscreenEnabled]); + } + } + }); + + if (isCommonjs) { + module.exports = screenfull; + } else { + window.screenfull = screenfull; + } + })(); + }); + screenfull.isEnabled; + + (() => { + try { + if (typeof WebAssembly === "object" && typeof WebAssembly.instantiate === "function") { + const module = new WebAssembly.Module(Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00)); + if (module instanceof WebAssembly.Module) return new WebAssembly.Instance(module) instanceof WebAssembly.Instance; + } + } catch (e) {} + + return false; + })(); + function formatVideoDecoderConfigure(avcC) { + let codecArray = avcC.subarray(1, 4); + let codecString = "avc1."; + + for (let j = 0; j < 3; j++) { + let h = codecArray[j].toString(16); + + if (h.length < 2) { + h = "0" + h; + } + + codecString += h; + } + + return { + codec: codecString, + description: avcC + }; + } + + if (!Date.now) Date.now = function () { + return new Date().getTime(); + }; + + decoder.postRun = function () { + var buffer = []; + var tempAudioBuffer = []; + var wcsVideoDecoder = {}; + + if ("VideoEncoder" in self) { + wcsVideoDecoder = { + hasInit: false, + isEmitInfo: false, + offscreenCanvas: null, + offscreenCanvasCtx: null, + decoder: new VideoDecoder({ + output: function (videoFrame) { + if (!wcsVideoDecoder.isEmitInfo) { + decoder$1.opt.debug && console.log('Jessibuca: [worker] Webcodecs Video Decoder initSize'); + postMessage({ + cmd: WORKER_CMD_TYPE.initVideo, + w: videoFrame.codedWidth, + h: videoFrame.codedHeight + }); + wcsVideoDecoder.isEmitInfo = true; + wcsVideoDecoder.offscreenCanvas = new OffscreenCanvas(videoFrame.codedWidth, videoFrame.codedHeight); + wcsVideoDecoder.offscreenCanvasCtx = wcsVideoDecoder.offscreenCanvas.getContext("2d"); + } + + wcsVideoDecoder.offscreenCanvasCtx.drawImage(videoFrame, 0, 0, videoFrame.codedWidth, videoFrame.codedHeight); + let image_bitmap = wcsVideoDecoder.offscreenCanvas.transferToImageBitmap(); + postMessage({ + cmd: WORKER_CMD_TYPE.render, + buffer: image_bitmap, + delay: decoder$1.delay, + ts: 0 + }, [image_bitmap]); + setTimeout(function () { + if (videoFrame.close) { + videoFrame.close(); + } else { + videoFrame.destroy(); + } + }, 100); + }, + error: function (error) { + console.error(error); + } + }), + decode: function (payload, ts) { + const isIFrame = payload[0] >> 4 === 1; + + if (!wcsVideoDecoder.hasInit) { + if (isIFrame && payload[1] === 0) { + const videoCodec = payload[0] & 0x0F; + decoder$1.setVideoCodec(videoCodec); + const config = formatVideoDecoderConfigure(payload.slice(5)); + wcsVideoDecoder.decoder.configure(config); + wcsVideoDecoder.hasInit = true; + } + } else { + const chunk = new EncodedVideoChunk({ + data: payload.slice(5), + timestamp: ts, + type: isIFrame ? ENCODED_VIDEO_TYPE.key : ENCODED_VIDEO_TYPE.delta + }); + wcsVideoDecoder.decoder.decode(chunk); + } + }, + + reset() { + wcsVideoDecoder.hasInit = false; + wcsVideoDecoder.isEmitInfo = false; + wcsVideoDecoder.offscreenCanvas = null; + wcsVideoDecoder.offscreenCanvasCtx = null; + } + + }; + } + + var decoder$1 = { + opt: { + debug: DEFAULT_PLAYER_OPTIONS.debug, + useOffscreen: DEFAULT_PLAYER_OPTIONS.useOffscreen, + useWCS: DEFAULT_PLAYER_OPTIONS.useWCS, + videoBuffer: DEFAULT_PLAYER_OPTIONS.videoBuffer, + openWebglAlignment: DEFAULT_PLAYER_OPTIONS.openWebglAlignment, + videoBufferDelay: DEFAULT_PLAYER_OPTIONS.videoBufferDelay + }, + useOffscreen: function () { + return decoder$1.opt.useOffscreen && typeof OffscreenCanvas != 'undefined'; + }, + initAudioPlanar: function (channels, samplerate) { + postMessage({ + cmd: WORKER_CMD_TYPE.initAudio, + sampleRate: samplerate, + channels: channels + }); + var outputArray = []; + var remain = 0; + + this.playAudioPlanar = function (data, len, ts) { + var frameCount = len; + var origin = []; + var start = 0; + + for (var channel = 0; channel < 2; channel++) { + var fp = decoder.HEAPU32[(data >> 2) + channel] >> 2; + origin[channel] = decoder.HEAPF32.subarray(fp, fp + frameCount); + } + + if (remain) { + len = 1024 - remain; + + if (frameCount >= len) { + outputArray[0] = Float32Array.of(...tempAudioBuffer[0], ...origin[0].subarray(0, len)); + + if (channels == 2) { + outputArray[1] = Float32Array.of(...tempAudioBuffer[1], ...origin[1].subarray(0, len)); + } + + postMessage({ + cmd: WORKER_CMD_TYPE.playAudio, + buffer: outputArray, + ts + }, outputArray.map(x => x.buffer)); + start = len; + frameCount -= len; + } else { + remain += frameCount; + tempAudioBuffer[0] = Float32Array.of(...tempAudioBuffer[0], ...origin[0]); + + if (channels == 2) { + tempAudioBuffer[1] = Float32Array.of(...tempAudioBuffer[1], ...origin[1]); + } + + return; + } + } + + for (remain = frameCount; remain >= 1024; remain -= 1024) { + outputArray[0] = origin[0].slice(start, start += 1024); + + if (channels == 2) { + outputArray[1] = origin[1].slice(start - 1024, start); + } + + postMessage({ + cmd: WORKER_CMD_TYPE.playAudio, + buffer: outputArray, + ts + }, outputArray.map(x => x.buffer)); + } + + if (remain) { + tempAudioBuffer[0] = origin[0].slice(start); + + if (channels == 2) { + tempAudioBuffer[1] = origin[1].slice(start); + } + } + }; + }, + setVideoCodec: function (code) { + postMessage({ + cmd: WORKER_CMD_TYPE.videoCode, + code + }); + }, + setAudioCodec: function (code) { + postMessage({ + cmd: WORKER_CMD_TYPE.audioCode, + code + }); + }, + setVideoSize: function (w, h) { + postMessage({ + cmd: WORKER_CMD_TYPE.initVideo, + w: w, + h: h + }); + var size = w * h; + var qsize = size >> 2; + + if (decoder$1.useOffscreen()) { + this.offscreenCanvas = new OffscreenCanvas(w, h); + this.offscreenCanvasGL = this.offscreenCanvas.getContext("webgl"); + this.webglObj = createWebGL(this.offscreenCanvasGL, decoder$1.opt.openWebglAlignment); + + this.draw = function (ts, y, u, v) { + const yData = decoder.HEAPU8.subarray(y, y + size); + const uData = decoder.HEAPU8.subarray(u, u + qsize); + const vData = decoder.HEAPU8.subarray(v, v + qsize); // if (isGreenYUV(Uint8Array.from(yData))) { + // decoder.opt.debug && console.log('Jessibuca: [worker]: draw offscreenCanvas is green yuv'); + // return + // } + + this.webglObj.render(w, h, yData, uData, vData); + let image_bitmap = this.offscreenCanvas.transferToImageBitmap(); + postMessage({ + cmd: WORKER_CMD_TYPE.render, + buffer: image_bitmap, + delay: this.delay, + ts + }, [image_bitmap]); + }; + } else { + this.draw = function (ts, y, u, v) { + const yData = Uint8Array.from(decoder.HEAPU8.subarray(y, y + size)); + const uData = Uint8Array.from(decoder.HEAPU8.subarray(u, u + qsize)); + const vData = Uint8Array.from(decoder.HEAPU8.subarray(v, v + qsize)); // if (isGreenYUV(yData)) { + // decoder.opt.debug && console.log('Jessibuca: [worker]: draw is green yuv'); + // return + // } + + const outputArray = [yData, uData, vData]; + postMessage({ + cmd: WORKER_CMD_TYPE.render, + output: outputArray, + delay: this.delay, + ts + }, outputArray.map(x => x.buffer)); + }; + } + }, + getDelay: function (timestamp) { + if (!timestamp) { + return -1; + } + + if (!this.firstTimestamp) { + this.firstTimestamp = timestamp; + this.startTimestamp = Date.now(); + this.delay = -1; + } else { + if (timestamp) { + const localTimestamp = Date.now() - this.startTimestamp; + const timeTimestamp = timestamp - this.firstTimestamp; + + if (localTimestamp >= timeTimestamp) { + this.delay = localTimestamp - timeTimestamp; + } else { + this.delay = timeTimestamp - localTimestamp; + } + } + } + + return this.delay; + }, + resetDelay: function () { + this.firstTimestamp = null; + this.startTimestamp = null; + this.delay = -1; + }, + init: function () { + decoder$1.opt.debug && console.log('Jessibuca: [worker] init'); + + const _doDecode = data => { + // decoder.opt.debug && console.log('Jessibuca: [worker]: _doDecode'); + if (decoder$1.opt.useWCS && decoder$1.useOffscreen() && data.type === MEDIA_TYPE.video && wcsVideoDecoder.decode) { + wcsVideoDecoder.decode(data.payload, data.ts); + } else { + // decoder.opt.debug && console.log('Jessibuca: [worker]: _doDecode wasm'); + data.decoder.decode(data.payload, data.ts); + } + }; + + const loop = () => { + if (buffer.length) { + if (this.dropping) { + // // dropping + data = buffer.shift(); // + + if (data.type === MEDIA_TYPE.audio && data.payload[1] === 0) { + _doDecode(data); + } + + while (!data.isIFrame && buffer.length) { + // dropping + data = buffer.shift(); // + + if (data.type === MEDIA_TYPE.audio && data.payload[1] === 0) { + _doDecode(data); + } + } + + if (data.isIFrame) { + this.dropping = false; + + _doDecode(data); + } + } else { + var data = buffer[0]; + + if (this.getDelay(data.ts) === -1) { + // decoder.opt.debug && console.log('Jessibuca: [worker]: common dumex delay is -1'); + buffer.shift(); + + _doDecode(data); + } else if (this.delay > decoder$1.opt.videoBuffer + decoder$1.opt.videoBufferDelay) { + // decoder.opt.debug && console.log('Jessibuca: [worker]:', `delay is ${this.delay}, set dropping is true`); + this.resetDelay(); + this.dropping = true; + } else { + while (buffer.length) { + data = buffer[0]; + + if (this.getDelay(data.ts) > decoder$1.opt.videoBuffer) { + // decoder.opt.debug && console.log('Jessibuca: [worker]:', `delay is ${this.delay}, decode`); + buffer.shift(); + + _doDecode(data); + } else { + // decoder.opt.debug && console.log('Jessibuca: [worker]:', `delay is ${this.delay},opt.videoBuffer is ${decoder.opt.videoBuffer}`); + break; + } + } + } + } + } + }; + + this.stopId = setInterval(loop, 10); + }, + close: function () { + decoder$1.opt.debug && console.log('Jessibuca: [worker]: close'); + clearInterval(this.stopId); + this.stopId = null; + audioDecoder.clear && audioDecoder.clear(); + videoDecoder.clear && videoDecoder.clear(); + wcsVideoDecoder.reset && wcsVideoDecoder.reset(); + this.firstTimestamp = null; + this.startTimestamp = null; + this.delay = -1; + this.dropping = false; + + if (this.webglObj) { + this.webglObj.destroy(); + this.offscreenCanvas = null; + this.offscreenCanvasGL = null; + this.offscreenCanvasCtx = null; + } + + buffer = []; + tempAudioBuffer = []; + delete this.playAudioPlanar; + delete this.draw; + }, + pushBuffer: function (bufferData, options) { + // 音频 + if (options.type === MEDIA_TYPE.audio) { + buffer.push({ + ts: options.ts, + payload: bufferData, + decoder: audioDecoder, + type: MEDIA_TYPE.audio + }); + } else if (options.type === MEDIA_TYPE.video) { + buffer.push({ + ts: options.ts, + payload: bufferData, + decoder: videoDecoder, + type: MEDIA_TYPE.video, + isIFrame: options.isIFrame + }); + } + } + }; + var audioDecoder = new decoder.AudioDecoder(decoder$1); + var videoDecoder = new decoder.VideoDecoder(decoder$1); + postMessage({ + cmd: WORKER_SEND_TYPE.init + }); + + self.onmessage = function (event) { + var msg = event.data; + + switch (msg.cmd) { + case WORKER_SEND_TYPE.init: + try { + decoder$1.opt = Object.assign(decoder$1.opt, JSON.parse(msg.opt)); + } catch (e) {} + + audioDecoder.sample_rate = msg.sampleRate; + decoder$1.init(); + break; + + case WORKER_SEND_TYPE.decode: + decoder$1.pushBuffer(msg.buffer, msg.options); + break; + + case WORKER_SEND_TYPE.audioDecode: + audioDecoder.decode(msg.buffer, msg.ts); + break; + + case WORKER_SEND_TYPE.videoDecode: + videoDecoder.decode(msg.buffer, msg.ts); + break; + + case WORKER_SEND_TYPE.close: + decoder$1.close(); + break; + + case WORKER_SEND_TYPE.updateConfig: + decoder$1.opt[msg.key] = msg.value; + break; + } + }; + }; + +})); +//# sourceMappingURL=decoder.js.map diff --git a/console/client/assets/js/jessibuca/decoder.wasm b/console/client/assets/js/jessibuca/decoder.wasm index 7ea58dfb9b319c5d4e45e8e5252b26c40d5816d9..89c8185a762511791d27ae17b4f8acb6bd243629 100644 GIT binary patch literal 1050314 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%0A<$%WGj=M+vUoL)G$FuO3Xa9-h5_3!+`g2G=5 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ℜT6|(D+vE6S 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

dV7AogDsU4gQbmNUjDRLtz?x8psz$3=W)#^G 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 literal 1226828 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

A5UWiBD2>hGE1Iwg$^;j-ae56E4uuutSfq!}C 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

LAkWe|O$=N-=?yNy~@u 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 z z<^4bUZuu4TqMbNtK__0d0AxprE0&~0Wu$;1Q9=rKbX+vJqo9OOXz#eDM+u+CQl_AU zPf1;hDB)8kb`;uly%YZPYF9v%@F^#{6j8#bob0MtK#3n|xBQY|(N3&d(23(0fV?AO zpSMB>=`9%dY|^1;y%E7qVJWd}y3p34&@AdGK{G6N_@*5J(g#T_`=FFkVwEYS#Ih7z z8=1D*r7P!%!G&{#_0k$Bg;`l$Da^{0Qkc00Vl^OF*+MTM0BUU#st|I2_~XFJW5huz z0Lvbi0`Rf-_{*Up%`7Du9|s@UzJ57#l^`C95Aw0gypHBs8s2&A#P+pRDEd6Q2WxY} z&b%R*i}S0mF@J(Cta_$}#$lUdycNi*jDiq!FYNMp&h4_nY{x&e z5pBd3>nk&F7OIJq8AL8Vy`Vta0DE|*fA~4nt=|nH7dszGjKH0Pg23-*QCDhwQZ{`sW%D$%hWNJ0FytII{t~WLNs~RJ-v*`BVq}pd9kts9`I_Du+Cd zv|5X?c&{XJrM6nG1LWX*0R*<_tn%yQNUOCN z*Z8$kTP+voR}La+DdjfA`T%%*}E4N$d9j{#Te-^fbrukUPt(Sk!eeZkM5~m={=$FT`DF03(v*n zNCne}R|RdjnSMb@L{-^%(5IQ9y=&3_BQIIU>fXnQ)$=cJVt30eELS0z~qxws*b^rFDj+_^)A$Z=_$XmBmF<&($m3Wxymv4!~IzA z#6d+Z4d1a~4tRWtwN~TWG*GRumhIs46UEFFSDgkPM_R4L1%MST)N&>J4s!|s9MS%z zqP<4Vd3?0 zU&pHsF=2Y3P62t3QK}zq$$q4jO&wB}_qXsvD^N$&A0CzjC$s~;^GnO_`uB4DJdxx& zn1{E($9{90S2%+g9b|#Oc)k+sC*yOyJBPQx2aXR&c&DVxF*{Badt}beShiB8fnjDA14p;dwzRJHvD`J-<|ySpOuN4NRf6F@v7t4#~(i` zI81XP9Wilm(m|xj!aP+x^c8=6pXz--JdVTpB~Ljeu@njG-%GfjNOB#_g9<(Gnj`M2 zHob_zF&Cbt^3__5YeKKmLM_)}3zzUv!ljm>?8OPe6H2ec`qjhIG=3%srcZj4S%wsT zXm0k6OKTlV=Pi5iWM_FiT|6ORIEOQZaGE=qa9TQV*~KS2OTCMSCwo0iCNNGuh`d=m zUw_y7s(E6c>)pBMu$WR{PHe`8MLeuamli{dW~)KFppqx@wceAD9Cl9z)syJbLO#{1 zF~hw2(U++P=MU*yt>J^~Z$MP+eN-WNtZB6t2)lY{+< z(PD|AC63pMt86RC|L(5AN0n2fc~&Tj)82m$bjSh4feT{oVDmgDq;$mE=?@)wQFFplcXR6!ZXB;qa84B?9hAUMnp_o4TA$T+co%0b@7{TIwR56>>_D11`St_QXc7 zy{1$uH|AK;?pC~%6PaU7T~I954;l>NUMJOP<9j5Sr-s;$Te4|?*?M9;E=S|Z zh(($$lkVf4=1TtNWn^X}~pYA|c7cJP!m_@82O*{TUz|r)H&Ct%q)1w0$H|hDZeC`MFMxG`v z+q4OP49gAWx^cd0MvNHeQ=$)NS@V;XKrKgIPX5u$FXeB18KDA*j^@9N>C1?H8RiQS z)A4gRr(m2`IADr@W4`CZcD@&1jaI($a{e4a{#HJ4IW=*jK|$yFOZN2&k;@UgO<8lJ zegU|dAALE0mQ$jc4^skvc`6#wrBI$U2{;_Ku*PDe!R!c5!LQ#v<2V;~cPCr3Og1#j?mPp0 zeVh%6^W}seRZP9crTNa!|KoqQ>?}X7B*bCdD3_9roAR69^tLw-aF{v&1;t*snw0&0 zkA7!&Oc*}N3k@oWcJ$@KK*mKAMPP|R!!~D;q0fk?3Sl5TRgf;8DhgL4;D?}tsPfLH z?v4ph2#BApA45MY8A&X+;<0n}Ji?L4K86tkKv52%&D?Rg*or-E8AKrjRirybP3Gl< z&{z|Ft3hmiQh_}3aTC@=+m9nG0}T}U5Sx}S$>(o9BA@&85yWJtzkL54$~7WnV1%f{ zr)vVlpU5pY_1tr!pGu4m3?SC6F61bHe48^!t6 zBY>OVdtJyet+H84pIj}>7*nswzCYzOR=%J3&OyE}f$Du3Gtk5Hbur!33^;Hw1je#N@CzV$$(Pnx|Px*Wn7;4`C9 z7$9aDSNYY?UhhiM^*z5!*Xfc0wQuFZrnsy8ZIaCTut$pHrjv*`(banIv*aG=l`;=Q0Tq!eKKJzzZztImY5AX}K~XO<$sU z)g2JSr>%>3dC(bWxTzzAs=d_Cidphi+IS(jzJ7E>t+A<=opWUbMCBZfs_%cCXPiGadvH?qORu(~L9VL%|^h-pZX)_@FUIxbLJWN|mS>HD>0 zV0atCi?3<%w&Pkusgo>5f9ppVEefP}nSJ$yGWd7$O5`?Cc#TO(9kVKc&iqq*(CLbH zrq2p|OvGfGy%atWAsr0GaX|;6WvP9w!mm?osAZM1J^0Ptvgaiz*g&L^BUehzxk63X z9YrmmRNMnKjE>-N-K$%1(EJ+?{zQe=N&B*81a1}e*OEaS)71<;(E3m--Ot5Hf|5G0 z1q6=w#mF`XCBGB0ox}Xj{cz#xAcBSS_r7;9eXVYO%5QtGY-8`&`(!iU{ocWZ7`YuXfNb1#8{%U0a}vw3R4}%NA~T{!qo&?DB7gz!9H(+A zBf&__#+yHeT%@hubOWB|hzLjZ5JP25NK=8b|0&t$Z0am#C(TWyf%!Sb97|4-FS2e6 zA+RoJq$$WBq)#KH6bHdH7C9iMY0QO^G(gWe(D>u%;jY*kxU=RDPPMb3(9+o+!8Rlvg%qfEYw0c68Hp5MBjTpMOoZlz(DRh_h^eWH?N|-A>`baSJVF%=lv9OlzZh#qhNE#kO8{Ec4WS2XJ zIp7Nbd)K)8RS9%MtmY6NnLVpJHrY+`n?BN}J_7xN+r7+9L;RlPh|VQJP&5npM!z`h zt(#%!DOV@+AlcBayuw*5Vau-*>lOJ0yGBFVo7B;qzFPL0==o3|mgJ%|R0wOGCnF-! z*N7x$5tlMs0l62u!DB?ptYg6Ycr#!H!>M;gH9`SaRHLE%v;U!3>ucBRI%Y1`RBWul z^h?5>=t-2kBW+FVG?xFte-0#)jHCHJbw>4; z%mXB>4!M9go`S}4&TlmuZtqg!nY;MHA>o@^qyOeOi%5J6DbRm6JX+SJ+fCSt2=5`u2g)FLF) z?S4o@)pzxcpFsK4+X=x`k(!=`o^nF44rn3yRb;V0G=zep0BT@dH;c)}!&{oq|Ap|E z|E@s>vwdD-wkQKXgu23(QB27q@B5XPjIMfv)_`%6&w!(#z`Hb$Hv%BigKLlCDbOog zbYofLxO#_a!_+2$#D<7vmM$u^#ONG|i`Tzl+u+Q`e2(AOQI*wU#t1Ssn1Hw|*ar|IM*;V`Qab6V3r^kIx%4gv>M9mym3}emkj#-mKUysHY0fsoI(4Tw$dR?*O+g`^<6?EGx0?780rwmAkzoL)bZc zW=}Uy&M{vl!Dc|UtZBFC5ukv_!iEM_qsXb>9l&A_eTsf^ZXHiLdy4sqV^Iyl4^lI0 zjuL6qj2V!DVl^}FW>m9QJ{8oR7ZJAn3I-Ex8+;M9z(u|mRS$ej4NY}er^TpN+REL;bLyuqcMW`V7R0VKY3c*?(c@#TbIO<=+NbaFCYbGZmJ>0Y_Bb0QFP~x5W zK#LRZZG>CRis~;-O&{hSiWbNvKHm@})3*=sbg~W|AcERli5J)yAO{l3!gx?2v}TfR zaC^5&cLa!A8{2g8vkMDj%{z^m#+Ou3z}u=Nlk11V#INfHrTeMnmXmfs_UVW_Q2cj03EX10OJcpT6#;h3mN$B>kBPY{mptd{%`^Kg`mPtbS(`R@K7)uia(qi^;Z#n?Yii$YPgL6jIdV~VV zq%#aHba5V*^O#iK;UlZABxb;SgOP%W(5?|e$khw!Rv`o0V6@F1k2V=(U6l;wrXORI zVMPR8g|f#yF%gL?P|GItXBCRUfdlc`c>~i5w@OjFCb{%7{-Dyom}`D)SEL(Ek}^m# zOY(f~(E$yFlOqI zy+0>B`sV|BDYzG{E$r3iia&4B#>piFsON?`8=5vu*DLh;aJ~3#v{C`p~_@HRQMT&6Y2w0;~Z_s@IYiCrDoJE zwhxuyGv-WxWk$&@R-&qhz+SrQ3`|LmN8Yb>dCl1!PeOjbOu@~CuV1Cz9Y0e%mcBv*it04btlZY zuTN^!5VdxKSdb1#a7y~}PbxF=fqzoG_#9-db0j(46%e$FfthipEiWF?Qq>!W7=Sg% zNOo1TJg%2zgW8vMvWD&$xShZ)KsNxJBG3tDKqdOJbwe5v%XbE|(8;cmbU#|NJza_l zep3s%u+!2&iA`x>Nw~}gyl)n7z-?_y3nV;iq$T_knF4J`BN|nRc>0x|Q-eMxJ7s5! zev}M!7~DgaC&)UEZ>lUa{FBHsVh^~)Ocxule8V|?i~=ViKkJNQ%tOezenw&4z&s_9 zzZ91&lH<@U5@UJX+2lqHS(3H4%8zzh0~yQ2%Pd0Kfns9PBa@E}My)ojH(aEqtAZp& zO*znB00rSi9-Q5pouM^s0P%SaMlH5j^Em=vQ~d(tHingVkD1;2acr@Ep8#?n{}}2S z6FVZcXY^)7z%LlMN9%j6bECkT@4X&%k3H6+VT$h!s>Km6ewTG_*?Qr|8PKu#M*TTa zGLEz?)J#S;Wf#lBW+oq9UF^y($P$zrt-dzY%mtZfiXBg#9rQ+g5(@CFrw83>ooA=j zN(upPr*+PO#b)Y)w)~C)K+`0D*-c$6&)Y#HU)g2l@9Kql%FWgZ8iy9P_n^sdP6;Uq zwn<_HA@P|W#N;F`3s_F*A3{8gr^Jw1bcQx>koF7>&8aX{LIq9Fw) zUGXSL-Oxd$;ptpvknq{z(I}Ux`2%9bNnZ;P=u>lp%y13*$v^rDZAoR#t#TTN(wfnk zZ1zAOl;$EdFwyBT-}~R8t#ZTTqSdwp_n2S`M9MG#oF#yTJW#^o(M-CAdpLxDOygJu zsEkqb$rI%gL6bK{OkM09aDBAKiH(VS^byShl%r3r0f;r2a0M9kOS93mdqS{AvvRDt z$u4h^LjzNtT(~4H^nw2S6d9D7DEv*|JF7&U!y07*0!4yB4KuiH+Cf&aW)|?>GclJW zXR{Vp4N$_{6%0XLK(b};anW2vd^LU=?x)3%ud`a6Y(2joMORqdCA1z>5~R_Wb|%6j zcUfGpiHT0aS_8{PnIu&sZrLHy50ch8EJsY-_=lzY*V<=XlV zHSmY<7@-c$PNMxw3O>rJY-H`ko7u8l6Fut9m$AHFtEhY^AaFhdu2U(pjw%w!2OMlv?l;BiPz-bzURE3jz>;x{zpHp5g4x`%3M?$B?e+t5#{TCSlQ zZOISpkQ~`@4K<;r!|i%+>H84M4vMbcY3LeMa5iNaCcHQF&fU5Ko$H3-%mIJK_nV&BAn#DTT^`a%DEk{PQI6T%dK27O^Y6KU}zmf#`K z7N1GdGc%8}f^UM90X%Pe;O^t1+kN97w6{BXliknP;Ib%DSzQ(iP)j5EO2a&IF@fx1 zX@)&2LLf<0f|51S`4|_lF(KmODGs{FSb|K6z`vv$ku&AUFPGl>PGKPp53N$D2 zxl{;n*{W=3hxqR@MsW8X{}H1Y4v?Ki1ppMU7b#ct7}l^^q~QYxk7Of8ODcs2H`qW> zf(#&Nm&Zk~c4l#B0kK6B_twjC*IUIkD}Xv{A9h>3eO=G)A+T8Z-4zhJgk%J57rf)n zNkufIeG>E00`dCw#(T}V6f=cGmqM@bnYznuHXg(^Rp4G@m8)1W2P^~_s`7P6dJ?Nl z`CzFV%(sIuly-Rj8k>+tJl*8K7BSX`GrYGn!cg0J0z*5r58=}E!XS0YdQnffK47qwqb$7WsSM4u81<>sH99j zH!0+n212(i%zJWCSi6};3VOWRs}jWqgI#C=d%|pZgz82eEOY`BmBCnF%7E!QSPBG& zf3G$4r(x7&I)^KjtU22TiHPbW!Aqv*2jY#)-eNIH!=?lkHG)40<<2miAhtz#C!%Y& zbxOehUd?a>9pGGx42)>*80cO~1i?nI*uWPTaGZ?fIDxSlm1~z$jS*-`(ZifE}1O8c1!JgNE6Ek)g-t9)Ukt zf)4~cU?Z2X!*#>92++HF-B4wg&1&1>E_J|zI~z9ey#;3ID!5m(=pVCN2BY@jT*3?) zwh-t7=itWU+^}vy8_sS2W&zH#)>RH(|G5IM>Tzfn`8>S%gDipWj~pD`bPLdbg7N+D z16(fx#;4qWrV4fk@hTmSgD6CvMDP*+5V{dPK_W^lvtkl2EOR1)>8!DXdsEQPxOh@n zGex<G1y%OL++g-PBIm8fP(dqfq?BOI6#29hxp%9gu_!EBj(XlE;c zdD%6RJes}@GzSxRwW2Ut8_RvW^Z{+4)?`CXx-l=eQJT_}503ETuCz-ldPmUnuuPAN z?p$jZ!IKqD2Hjed^ zhjqn-1a3J%lJO5-)UAIdUy@t)E%7Km&oGgA2iId$in`RTi-PdP(K53~jLtIHNycF8 zt0q{WfJtd%5Q$@IFtLpGt8Yv|Za2v&9$b^9Mp$ieA|JFOfVDfzQ3G79QUl5++|3~# zI0I69MuL<|qy-@Szz2f?Q?}zcHo5}+RFPANzp z(xOR*!M2bu%bnCj79&VgcOEOs=L@4)1EUzqjx&k{EaFXY$`UY|uHldQPxOpn${tp; zoBNI2LRa-#3EkEg<{+(ydu=tXEuE}zjm$mUXDCc;%D`kMJ42Mu{j3=z0AnSM7%t0U zeqXo&i^RFkiyh*-JpoHcW90KpXEp4znmpO0{LrFoQUs-KxG(1Ae)MJ-BIu+HrGS{V z?q?W1f3D#iVL|NLF5YGDTGe5#A+$EqHJw%2WcKv+-6Qiy?+G?^!srSsn8^#Rdvrec zz3?nf(vWuMbawOy_`PR(2Y!DzPojOlcCdf%6VEuCj_^UgD-o3q_x_!-+eoy|@^dfXM=HQ6!Q znpaF(YGZc#_NQ#=u6adcYI^_w&)&O$*>zQSp67Aj_g2-ZQk7Iv${aAbLwbovH?X}l_Z%8Sd z_4}y_isAX+Y0Hsn%0FJf#|ye2Y4rI3(Shn%c0M^47L=Y(h5UYM!ivm>Curxe0kID` zL5aT9yh)wXXk&Bt`}eeWg5qFjx>lY%=fB%E_oo9lrQuEOb#(UtztI%=q90NzHOw>d zYM&QNB+$?8G4`3A$2px)P?)A-hz;D}Q@?5NWVXgu5mf^-B7Z3rL@<`Fdx<(WOmSIm zQ<9GAYHww-n5Dxa!!@W%IskCgtb198fXSrjAIVCRF2fRJ!-y4qc*|RH=KzyUt0XPi z<(14b*QMD9)6&tmHqk)Wkhu0%wB?q{-u?5@Z@hqq5~G=5P|Zx<#;it~-LrFL07tC$ zfQs)yh7iM;YGOR)$_AF9bUgL6KG|Le@2y3yz&T?y%t#iK)&4Zm40e6Gjssf^MP6a28Iy zGHXxpPH)aJ)~=|Hfo7>{aPUyGdTP3;Cx2f}=M^=bhxeE= z0oJyj#8#P?$r{ycl&L{PwG2okuf~e|m*+L3+gv^q0M7_N!7h=dPZS3UfSJKxUipPUDiE&fa zy97LGMo#JMhPbk=mEk}YZDL^?Nzc|t2o991?reB!GSlgw$yF0DK!7a>_u$&@-+$n` z7q@HBOL8I|I&l<;^+t3ev9W9C?&m%4)finTvKr))mfJO;6Sbl92*hT)OkV6a%28FP z>xR9kY6K=H{a_1BZ3!fPN|Iw%s@E|H+-Z-}{~m z1^({;?f5TzoVI*Wsg)pY-3D~c+m6Cf&D&6)2TtU~LARCOB6wbU13X*03oLtsar4B2 z{?yKKY-qHGG^yn4ufFZy?-XJXVkdmpAI+-v7PPFR{@Zq@Rl9)Ab!oLZtNp!T>Qb_> zX(TOoYcBWHjLSA?R==A@C~aW=AcD0k^`vp+QcvPMAE+huq>oh9t3N*5)&wZ&$u-u^ zwMI?G+Cb*SvA~7k(|DuNXvlx^vc1qjv}iJvu44d_z~LeEa#Av# z{vlXEj|7YtTSwZ6u^x#(Bq1{dK0&Be`^sz>STNy{wQ`%+Okgr^1bO8IZ%fG=tI%Z^ z&~Wg~*WJ=E!m1hRx+km2cw?+Zjh%BY-j#OC(hjq>D%*jO)ct7}Q86Yv{4t5H|0te<`nv!=;yH1mMTf!`-!I9hb zvl#i0Cifyq@Ks}pAOkhDQmxgd0_a4@mJCu)8Kd>nTRy1K8th%|fui3ji);;}EdQ?I zFS5quw1iwLKo=DaFQOty+*1#hCnFd?yh1wTVgOGtM(Q34e3H8}{Ga_EN>1sMOJQzxjxB6E)je^ATq8qPtbB^L6r&5S`KMB1#~~RG>1WB|SiIk;TTrJ!V#p zg&jLCTFhc@yfi=_p=t~}ItnD1$gaC_+GLDqt019ex=`(8)tmfY0ep+;6ygR1nkw*9 z(z>&Se9hH<4#6x2GE}mfwSY7`fD&*3o^+iS zv21%)*1#drzPk|2H!z)$2v22JU$2}PD6fmv@7huBf>u>(mbFPp21alTjFNSvpLDlo z0$Gm~z-n{>3Sb~kl-WaXyBg_4>lyYPl1WAQZp(?pOk5^Lky`3<7QwVi5l$~IxC_&^ zNgTnXuGQURbeADsB;(7DMc#FH+J8Z~NHR0ekT(I8ldJp~u+SHpZR8fcdsRD7qiKH( zQUVu&V5jLEG5QDCY~blK~1 z0Z1-k438)|+{1oB3P>X#ye+&0g}c*PTZ3BxMbyVn5=7cIGkn|{z)z5dH@k3JZr+jy z%+N4=&?fDi%-co}m=uczv~}r0ch{d)@isSVGv>73V;Io~LfzoqT2Q~Zk}2{FfP(7S zQFuJt0r`-5KJ#0jdaC(stCSpUyteeZ@HNOnD3`gGj4A8y)($S&Td>KPF=!XM`erOE zCz?mI;jUmG?h)+m2zV)DG&7<4J`>jJ5aoOr&xM=vSL@AGvpy|(Q_V!jRI?sa&4f%f z=W*$pYBr?jr5iBS=xuJQ*-)5j)?>!thc(9ARb;BsAYta0^t zp{A!8Okq@{T;5Pa2$czjW`Q6>O{YxXyrL|c)=VefeIgr9-c-dn5x94)Po9(Ein5L4 zYZaf_u*+^)CW9yZWPbPC-u5=lHZG0k)`PmLpEQaqqatG7D|g+QhTR7e-;r&6+vS1% zcgp=okh}3c=EC789c@-nY>)H+HL`7u$yGXx(A;$;eih!PbV5<5F#E$*N&Yq9tDZHV zidFQJU5nzi-P7_4Bj$UOs*2f33gtwg#sv9E&(Yt!LdvvrHV z$+2ZTUE;$iv&l#NJ z)+rw8jYWsLaIC$a2GVe$0|}tKxr*69mx(*pAM$Q@PXsqk%a>`yT8P^aHiRyE(2l%1pvlq0Z#Nr?r1hXy#oDe5=v zh^`Y_f$~E*ulfB~OhS+wgjlLd-#GVw9t}FuuQWBdaV)7fnq#Y0jSb;LQ?68NYev=# zjSY^i8C^3_8W|2?5;t?0l$Fte(b19S>L#6rq4=tSv6SVt%>jZscUVOFLl_wR%3A8= zqq$jHj~97HJ9)xaBYg?dSLq4T$9*28k52^YvjJtLB3G$M*j0ZRD)#G&ug?B``*>KY zgt#LJY?P#{%QxAyMC+QEa;_U-+P^uX??jP?WOU|I-ULy__fw&0IA8xa`tri1gG{Yh z2=LxkKwRh0iUPG5e3W@)?D2iz%r7;!ErFa1??nr5Tu~DIqyt*)l=A(TysD*jufc^*!Zy-Q- zOV+k1uNJX|WaZ3v8hV09P6<3N{gpM8;i9}U=G!_@^66lDip#-k>~NzTUY{4%QAq|b zgNBzx3(3<$psh%rX9aNuYSh|Jyd?;duf_@z-9f4Ce!-D=VJqcFC{gf3Vrf~>@*Wa_ ztk^pXF(rKfWA1gBAdQjDP_PUmix8?J0{)zZ2!t>h4P@ic@UXa#(%N2=A|@!(@=Ms7 zYL&}ROHu@lL2;#oOl{w_y>CpHdkQN^S`J8zWFj-~b-ENIbSRB+R67a_QeoIohe?I> zXfS6Yg9N`PFVFbg2?-~81~f3Ip@FR|)4uA~{(ZU$Vcn`*&qKwHB92U=>Vw81F!zc>X=2I~) zmR+BY5KoaT)_KZ)Ga-RQ|s~Uppzqcz2jyU(I1$j*q~zhP(RH|=bpMi1`3c=c+&G^RySIMrtF0S zijChNqzywqC@gr6{{XObJzNZn1!Qx-1P=bl<6y?R$^2vr9H4{^ge%wkGOM}6Uo8W=*?NYEa`BM6dE8KrT9e5w1NiE z19*{Su?P^iK}+(!3zF=RL!OL8xz>dBUzm8Ye?ZrlgB)%!D?#*h) zvIeUhkC%}z7I6S5#+kkx^pPyOJ+#tYQFBJLGq3axnbJElHdrXV!)pe|2FBK`S<@;F zCn&w7RCkw0TdP;EGMyK!N$15s3&;yKCOj)2Zm=@yuv0~=~nA8d$N!+BP^$<`Ap zkR@9ir25he7{WV4MOyVk1+CXm(XF)RE3I`Zt(~n>iTd0b+A3avBdrDYw5GQWYK_{} zgXx8>0eHi-LbLc%z$ZP8NO;DWDaw+A<$|(uFa!|#0yIE4aZ?%s`QhhOupDf1-7IOR zpY?X3{}PrXD!L55cKLe}m8{9Ct3{9@<}$q+P9 zma#8~wio3&UiWH2*Wa`rv@chJW~`+irMQC&Mk`gx#dE~6REI5ZC8}Gg{1phy;!16a zO{49_3VMh@G<5`HkLF`WN|^qw`+rE>YT>Z*-Z$n))$9dhA!?V!6c($MFr{kXMfL-E z;#{T&mqA!h&1rS735T)?hqBaZ?JltiK7EQhgv<~)rruVG5$U$)x41)48rtj4~ayfTf>PG}GNaki1FT9^Du9 z^foa;^H6sm=z3#G@qro=2pm{1}1GTq&l~8C) z?x13=GX83xSJ;kdL=f$w(=;=vwgc`^uw^#dGtK-Zwl}s|q?C;Am6tME(GKJi@miB7 zO4uS1eZ-k`Gbr9O(VhXASY?VgZgxAT`I4dw5u{Z^CZA$V{Vbh>_KFyYH5jf0&$?sxPbekuW z&w>v3P&}D@j~hIlKRckf;d$6y*#McHYk7czgbY9Z;)sIv#+D4a<glI9 z{yf*xzXi~-%j$>Toi&8=isDBNy6R6*!=S6|nP5@&(rLHtN?Rv(Tc%umtrm&3!UtMq zP^`GdOG(Y_Y|62fobu|JA}~B~r(^>*Zm||vOv7wO2KZVYtkGFbw6UgQ_$uIO^1YJO zFxDWT4Y}IYnpaMsO7mE2uk!RbOfSGh;7fhQ^;F0e{H4A_2ZifwlpdtDgLEogAx#FC z7&cw<_wKTLA2>}Oh`h=-s4i;D#Y9_UNbsVxhCx-i@f!q4JjmHPDZ@8`zr+lrfsJ9#~ktObPDu=mrPf_Fs><5T6 z<%_HcPTqVvHrF!Mw1dxFt{BY=+Gm<^FrPd4(k z^fH+w;NHC64e61kH|7O;cYmJi(jC!Bbq#xr-%s-&&`8C-0&AWu(>wSLZ4G8+o*!`U zKwl^Ju)DovXM0f8nGp5?k54ijX@ThRa1s&+HCifFjI6ApyU;x)QQ@BCZ*(lJ9JAH= zQu3J)qeV+oC)RZM4G9q^v5jn@K6Nq^DvvD6I({P_uw3t^)q8CdBMwHLh;1W^*fxSK zsD!!MO-@_f?oA_6 zixCH_taR#EtW()QlCMZW-AIlhL>5;q$oW=mjvk^5w4%ZGo#bM$1Clhhv9gg|4fVu| zKy2lvR_JR;G-K`vk(N` zHY(qI8EzDxB)?M?F+ssQqK|4&)fG7Pahv>FO(L-F%!uSdN4q1rNT{Wv&&_0lx{&g$ zLjt-5FOCM_d~d0;whpJO3a&at0mI3&@OJm+B?(7_d{f`?sX;b!CvJll?47@u&_vYa zMyYc1!H~FSOAqP@Xg+n!z zf4SWJ@;XNEl16XN9?+3d*yR-mnw2&0P;43iQvR_4xQ)0`=tInI7`L^7AAB&X(_uD< z47$^}g$=q#bvld&Zw=kCkMz?Srd106utoCqR=I<>@WkT}@G!I;lq+(7Ct>2)jG-55 zDl>*($=`$5C{8fNAO`e@0e=z`Ac5qpOmRLW*tW}N+bC0|frqiT;tX48SG;4eZDD5A;Pp<9l z(8v#Vwjg5Z(*Dx@%{aF}V)Ys5_8d?~aC zrsX&pAfR=4$??~W{S4#+3e8t-qB$CUQEWTQv(~(f%^E>A3=^US50-;CjzfgYusanX zgAhUPMfwrKK)W%yeH5X@AHAR{0zU6kh$c+FQueLF9f9JjIUZR*)+~`fFCqx5T8)!$ zvVR?k2#t}P0J_)MeVKdBG+tG7wmM^KuvSJrLb(soe{dPsmW<@hk?BA7sFE*FK2S0x zXp|(l_9PFR3WPSF>n9cWXk!vmr&}uSk^ENU#Gyzw+D7t$(3OAI{o>~pfgRbHl5Eyu z=(|89mY1U(pN!=oWb)roOLcVgeGdv5Qba7YE1*arQWr>1AWCkOklKzl8+kZNu`HNSs+o-rt0wgB0a+ertH87o1>TO&&wvKGEPP? zbqC5L{)zrv&szu{g$F-v@kAZ7K2ohsF8O0dxcLMjxfVGOHKBMb0H7K%y_#&fbb3lgvg}X!Y2qGQzi(4BA zPZGGogaePeKo>MAS;R$p1gwf1=8otL@kcgCuX1H+kwz|>%G}Rp>M%02k7rfp9k?iJ zTNp*HH@x1D#F9WdhVLn3wfWbh%@M`NZruawhU7QZy^Oo4jHv7S!fnc>;!buGoUNRP zy2;@5%bw=H@8}Pdei8J@kP^6$vfv=I7~uHUye9bq!?Ske2S2|c)A_>3Dl4%mca*lG30!bQO;0rPy5ljIQs0ilZ zDOT+sam$-eTL!g-g6`M0A71jwR8T4*>qVYK!R&+z#>hdEcQi#}BF#~#xRm^<6d#_{ zZQpqi5>1{(Dn#}>nq;uPfr)M%@QN9Ay+e_lNHS*y(X#s0;Ml-8qlU&;G7pwsweS@X z(sl^Woqoui&gAuJOvF}DUlkDA7!^lhpyUoO^?M@TnpRj;o`Y3@;9`yx3do>3bz0Ef zXz6)oZW-oGUUMr&AG9#4bJ>!jb6tBs`Q9A`O&%trTVD9A7&0!-xrbJJc$;b8OZS7~F`1NSwT*jr4Z{hPLF{kXL ztu68RC2@@;sZ?hoc`^x|Ouk?{BcD%awVofPm!+7rqU*H(bI=_tXdnQUT9%plIo9y} zwd$`T%t3dTC4|xk-R-6ZG;!p!;p|D#4zN6~D;PM#mDy~_?jhTv5BD%@VOSQ8py9wr z5bO5n7A%_EqnEudTYXvhQ~uQ+ zT47Jx_L%SvWXIT~w>mi$r(>_l#x9As(E>|r?b3eWBEf4jkavjbga4k6_muXNl4-!R zx#yisfMB4=PWf1Xk#ky#q~4UuAR!!Op;+}YE)h&w#K&~YHi?yT^LZ2jH)BiHAcb-O z{RBOA7(k3zY#CzIOg_rM(ELc~C!;eALM2LJ@?ow(a=m_(?KO2KPg*o_;XYYws7BI2 z)=!=Mf@>w!$jyqCT(%m>Gfhq;@y$GFCtOJrjO6K(&I^&I7nwjxW09Sj1sT3hfu#p6a;-UC(W=ryxfIMp}J+-BlBEIa-WJc zVi-N(_p8Glyp`9c!fZ?e2^nYtD!dEmSP0>o2>}un9R>mdQMnnL@DLCQD!uN={?l0m zfT2t&?GJ5K;r9D?Nxv{!)! zo&EGGW!MfKSX_?gYw?%HChZxe>gQ}FJBWi$W6_|^x=p+bdVYvG1-N%Qo(G_i_<+Z4 zb3$94VVPDI@VTPfSC}2F+-&|wqF|z(b&mO?{uUV2SV^IwY%i3HrI0pLW*Q*$wG2X< z;-ej46_{7EioPhz7eVs*WzgIjm}m+?mO)|DbwMcf@n$?jIgn)xyocBcydcXz0(5={ z$1B;deW%iXVpP72H=CiR3Ky7_H%L)cvrd)y8@gn!XvLs|C zb;4%T6lquNPFSm|N@%F2IAA9v2J>X)n1Yx5Ss%%d^V;MrUzDvT7)V}wwL}wb(yFW( zdUcD4#5`Kg4Kuaor^{ijudgw(QNGX=u==;4pP}QW`&pK>ew?b9qMxzmQkKsvm%09a zUOI2l&r9bm`g!TRn1<d#L#9eFtW+X~3ISO~S5z99c*@(a_^FVBC1D3_p95}lgiSIRj z)#xoRZn#BxB2C4$-#9H{9kdb%Gsvg~zI+kjjXQP(tFg8yoAc-76pyHT9MNfQ>u(Ks zvDaJ+P<#;#$Ceyn(kq~JOb6~!|bEhRh;$+_jsA8KSThNhmC3os~>XXSkSz?K8v64R4#HL^l zyTxk3QsL% z%U}Or(Q`N&8cSn3m2JROjiR!?y~&3)_%UzAW7DP!(+#Nc$zO!DD|W4PgKjGkb5zr5 z?%IxxPNrBaN@gT>cRg43pAFli65iy=k!luev4m+I1H+E!_KV1B&W#&TjQk=4Mj_NT zW(fLBI>Jp|q+GJw1A@KH*PP>Yllvc92$zL8dV5>w{)sg^E(Zkw+w)$Ec zK#+(}&CEp8SJ*PCa>>jeb6E+79b%L!gENkL;?gG4W*6f*> zz<()rcUwwkyXaw<_-R#;d>cm&zcK_eaY(>UX}$>nhi94AR|9#3x31An*Bai`R~tmQ zSA8y?)DG@Cb?_swh0Jd9mI|lbw!Q7uly$+CKG2zu;}{bS@A%1hG97iX;{-cIEBKFsJVDXMc9cF#-qtu%XrTlntoxhKV+=62mSWeQ)+eb=J=suJ=5F{#M!WpK zw5g@dIKnWFBdwdm^?=??jz&!DSpZ}bO-|(Ja0zFh!^idKer3ql|_gOb9O7mRyUDA+rjtvsI$N{f^p} z+#VJ!(?Un8bt+31wOOaJqmt*Dz^>tSkgb-*x}L7V{YM7pd2^D(fSQ3eI=1*{^p*`| zKte8qUF%Jo!TgH*?Pz;-dcPYb`oP9L1JEh-cZP{|yeUxexUj|UVU}50u)@0SPtC?v z;`nyRJl+~S%1bTb@~Y&%@K?gpVR;_VU&rMGmi$e;j#5bZl~79xe1blG9I(3OqI?!o zVPM`SAF=2!SK-ddRt|ij1vT? z3ttd$ZiBYM*r9rFn5pduhTVUK27N^?;-3oDVcK{&+XDFpG7J)2?*Nr4A-t$i^cOklWbJBxP3kcW$tP1$;9Ha*-o@k>t9 z)msA&0}rPubd9)VJD2r}&b8WYbHDN>YG-|xwfKS&Qs|ucKm`19Va13#3`c=4Yt)z36-R4K97zn3?4jp^OA4W@a`{XQt8Hn}9&Ngh|M8c;{n|DL zuYxa&Yr1~08nD^6RIaoTz3naOR>_^MKrw0}YXH(SkyY`Zi9ni;da+fO6&2FNZ9uCh zqj<8OkFPwNAl|Ipr{7%1xz#!WJOuOzatUW%_FN<+mNyAAefKEIu$3uqut#JTyFTDZlEZ67sSaWOD>GgdvyZ zfSUA5F9DQ*1%SVYTElDiF_;Q=ycQsqmM>o6iWXplg+77FeC+V)STO9>|CZnzo843KH1kxp z{m~H=LKJwa=2;p+z6>n`3tp?(i0QR5yBm7yVViWfvgPUlKk4Mnu!VJVUYXT_aFDA` zNJJLcT*tOCS0=<7Rq^YsDz-otopxzQebFR7b(#b;{Z&Pfi?0zR*)*=(5P23P?nP{& zYD}F-PR7ml^Ly~_R}-r02M+FoFeqDnszX~sD7c!A$XyQd*%~mQx1+pMY!_6RT9`;r zh1uFkci04JX%`jHk*uJA>_Cyp)p6Jhe8-j5N)|8j-rJ}9yyN(!R>plDS5e2oFzPsz zjg;pI9QHDLI<8`TL~E?7RHv^k zt}0QZlAcC!pErt6okpP-b*d`U4hWJ9%~Qw45~`iD)p2DyE{nC04#V&r2YaIE9oK{OD7fc*fb<2F6$DqllB1doXe3ez- z5w=cZa*=$Dt{2JY84L#!?eM{76l#Q%m}mT(I~^l$ zd-mk8vqI_`?h(=%*RbtH%2vo?KM1(clo+DErmNFu+eff=aq?tElq>TCkI}V^lZ@W;0rXACUbtiWL#z9P z&nnGfT3L4top)~+;n6U5)g;%_oV+5_eQX4p%%jfab$r;@(U%Lq+CnePwJhJe-&rDU zzJC>eQ$GVcnCoC(tHdw+TBzM{gd>hL5&s=fPd?X!e9v>?B6Jx1xlvo)!>EIGce~{W zKk8FExZ0XWT7w&H@PV?nSTK)WOJ}S#aU!om?zTiVIThL+Zcd1;G|q5#_Bdf+kWF6O z8#FV*tH|^eISr$l8j2L&O(?kEo(x6EqeuW zmU6G#5nbi)@GN_oB}~pQ?eZkVEY#j;t)SK>BksmpM!k$Myz&dHUL1_SFf?bk&B3UI zN0kZG`SPFSM%v&Dg3<0RN2ICS^>#H1iYD>wa|4`F`BadR6>9yJS5Zw9O(0he^p6(= zYjm5O|AJuLzp-T~^1dN@VXy|!($Wipwe$ru?}n=+zZ)vE8k$IEu&=PUINN{c%aQhI zC2RkcYPWEeDGO#&2c+g(DVu5a8*r0M*{%#JL|5wUCG(y$y8-kAauQvVIW43JVSXwL z4mWC$n3^=)lS+e?pJ?G_qZ47f8skBC{A1=t#?p+N`3I&40rMyD!P6s6X)Glo`skz@ z|L%Ks-d4%o|8R7r(tIakGaJ{(<0}II`})zmPG8Y9_&-@1z+Vt2DUSi=Kqa(JM)XN5-j!;zC+Sg9@y5``QJv5U+KJRJ?C0(Z+TO2i2TZ96?WZG@ zn2zJKqA&~uDrz?j6y7Df{24I#_VBO4qf`2;3AHD+L27!+Dtcy?5Q;=_@b`17| zLj9&2lnnt5*`6B8HnoQhY19t#vxe~8fDMUD73XN9ZV*6>DAT4=1#F@lG_n<)X#FQk z5OSdymt;-^?geSErznkDt>Ft!l*=z;zaoX3!6mOW?V!HDr!1N1uN`Z=18ho@&S@es zr$fqzLQs^bZmz{#wqq#xKp^5;wRuk{tbC~hr(|S z(@06>9}aL=FSjN5_Z66 zmmQ+00TLJ-JM_}WE?4;Y84l<|UQMLW=VYOR3&nlo@C#=F94e#d!HN0-JkjpeLW!s{ zq{NV-HgI;57aW2gv5{6tib5cG{N{s7y6UQ?z)1&fC#QUf#ovHt97%cKm-;~{_kS9k zI0h$<((6Kws{lUk%c^QVoz>by9O}CPt^8&{^fTJgJl#q6<}9Lo$PL zG--`TbZd@{aV8|GkarzVk{SS-&t1yy6M^maE+#4{nZBKGpSN~O&yHQYlZL=;8s78R z6H4P(#YkrA_JiLUL5OP*6&Xyo`D0E2%$)tqfaRF|Y*uh26!dJnL&nhnwI&~INWz4? zn47KD{K!;*VytJ>*KkkKsso8g=R68ZO0Lp@6TqZ@q}FGr4Ngo~cX%gZO3zzG_q(PEt0m#kV%sHhg#5{M7UPwMMshh;)W zgd7^gWfe8v{oN5x(^DT)4nYfuj)f73)Z1-w1*H3P_Bg+Tk2X_QG#8Gz`w5Gm0kA!E zMU9yP!A#4d!mP~Jk~GuqMfXtZcRr%-z55ff#hy7xLU@RSaVM$6yj?_F*i*FfYJCb` z7|+~CfY-n?5in@J=2IjBS*8RknQihwAFJ9FKchAwwV74g!y;1QPxF5mMVf2Q5`d1u z%|)7y8M1(f>&q=UP^r6-J3^jj{va=g+$x=IE9@n9k+$tyt<0?_4Yyl^z(tB2O>G8; zATV2R;%@x}O)ORwWZB6h@9ClH@+EHk-g`(E;GSwnR5l$SJrz0e zD&|Wj<8*2!d;uw&gcAqQ7EcXr?z+Yon3|0{D&Pgdn~lQ@dyBlX>=30M&Q%aq~@T8;THxR8IH*@7}yc$D6n`-L;;uR4|(52=h9qV ztVB&d$@L4rU4EhdSWayj);>neme*^fvOCP_tdf~2Q?gm&SoKr89`hc;^xoG|Rd<&n zc~;$>Y9tFj7W=j8-sRu^y53gs3sRJA$)4b#?#vMM^SH>c2-4frCH1u8mK42DPxrlJ z+9Zlt^vVCB;d;Vp@!KHlF}iP+a=^cXQycMs#!N+embX)q3P zP11UiUjlgb-5k;`BWi5^Vu+Y;$cg6xLyfHVK$k%5ywS7yv&61^ z4NXVyaM3kl5Z!(Di;1S9Q^jLT)1hurqgIrE;|tTWTkI-A5^ML;5LU@J`bAEz zV|5%oR54w9OI+VAk<`Tl67qcM9h*q3P${-(Bm|p=hXfL|Fte-OWqKJ^Y`bI=nzDwk*ee67%+4Tg8sOjhVx&%MvD74@(a@)q zTC(U=U}sFIP51!ux2)4-@>rSJdC>;9=Y{81Z2_po!kT-4I1u>Q6@b2kZV-4`xeXGj zfi((#qVx0N)ALO^Qf?L*(W2+R=K`8B51CRJ3)eVQbF4IEWRypR`>s4(@Y@2R_N+p=@3pW4PZ8;eMm( zH0R$@NWw}F1A)9a1l|Vg;O<|2I;`Qf8*Z%SGJ9BDqT03 zt&^Oo`Hx5`LQA4CrlpI5>og*27msbd*K(=#s8*z_`>rFBgLIv4pS9Bo24bR^NRrUC z#ERszEtZK4p)b00vVDQ|Xc0j}s%bCwwvp=dyDZ}+{sj^6F~&sguC z=X{U-rjA9iW)ss#C=XheCkk9fA2OtDRGGiNo~E`Fn*+6RONejQB~*IIH2k2 z-HO^ZY|W8ooA+*~A-;FTG1`r2UA%p=rScpOLVZ8EWhzr zkt9p*n|XdSJ%2zl#AYP)vxHEfIfzLKCcE#EpNy7w_&93P;|bDAHsoTiBRy)w6 zt^R}}+SmYm;+)w8cIdE)C_9BoY_RW9>Fl{*t26HLT3t*B+W4zQWmdh>Ht1i?${}}I zT>P=Pu&Gy0w!w|INLq8B(MET8buPxV0>cnu0v<*)M@dmURH7bRu0eV_9ZWvO{Ga!9 zhV!L$-}maKadLyz%?f@~)9k`D5c>&(V5QWHtuBc$)0K!9N|-WW1G)-0V09d|g^?5U zgxiQ`g&Ec~lHlcMdXL=KV@488;OOBDTRr*-yi(B!Ls!MRx(w4DHT4J~lBlsur`o1P zWW&qiWHL>tIKG3w-tVA4uL%eRj-Nq*Gn5<6gFu}$ni8m%VF5gQJ<))m5761YC_NW} zY=riiFGabg=d0v=15H}KpDMc|!b<-0PRRw3QY6t;d9;pk8_^N--g_Li^ht&lwOO49 zp05}vGb=}ssPQgCZv$hz9{^xY*Gvk{^lY>DB7N*bVjqrwNvfrJCy;~O>nR9R z=i_J-JZ-bOM7^-kLy<&ScwOmR9tL!mV z=3@ZnljtVNi-GK}vK2oh!!2{15u5g4MPe@Gr%LAjr-o@hgc_MhjcnoP^M0aK71o;h zPr(Fi^6`@euZ@?m8%hl{T-qkEkH!{L*oMMcdWTzaXVisSmrA;fcgzuqEy4I$tN|tBr zcYl-fu$c<_g4Z%!QDTZYk51F62W|PJp3fANt7fFir<;pi#5}u+q|xVHB2O^@9?}w0 zK5&e85s?b1=?Lj|M7QEuC2sHwud#cMT)`@kHeW#~!xTJT{TU?KqIz#-ExCZ8!pI&sfBb6yMPC2OhdN_h!a_0@+@oVS*ijf8sLVnZ2|=WtxB;2|h% znr|pV=2K>W8^A$slTOqm-jOsBTK}~0`E+WA0!!Hwa%1RS$)Dwg!vA5NU6I1x!%lu6j zg@p57UwA$@+nM!2(8eJ=*@mHjH0CS)md{ZV`~+Xx?ji&UDZ}(4v$V?9F~ASL>v1gK z>%y6q8}DU%jl8h&!QS7-GRDS0x?zjPjl%KR-}|(by;^&$PDfmU9RFNG`_&!Bg1cxk zPM-o~z2dLF%DCF^FeH4Q{4nL-oo_PiY>OfluH>|UY6G%|DqcGdDaY?PRO`ZIQf;AS zX^?O3+1f$+?H94Z$pD_)KFJASm&HWYv=KO9T+O}Lo|Qh!tcr4WOzi=fLE{=Xul^y< z9{gl9w<%?BYyw-m_<*fTZz3`~ebx?QKupaOA4`bDR*?Rf;_6V%B*;^MEa0H~Hh7^D zH~&+A^oMVf7XNtEu1J3r*WsJ;{)52J9{qugQ1%jene8;2FDCFGuo1K*P&^d&sVF7O z1gQFIf#yRo)xBEhj!au5AVKVREkw;fj8~3CK!LQ*nz$&y3%g$R0Tm_y6`i0R%27o3 zTl68{+rKzR9&==uVnmgNJq2fG=n8Y~|?WcFGw#TRC~KKsMgxJ=)h> zXD7g4E^7%3!dr&;dV)v#ZFPYsKI&SU{s0ytldVT#JccrTmn`zv9&mmt~WolC>INyCC5k)jriPu#)AV)<)xM{FNe8xlFy zMIc^!AhmV_)f#PLc30vklhmjZ4am|iL8lajBCoVDaWpYkSlVTZHexOLqB)kZQ}i;W zv;AB0(^Kclr5gbgutLC8RxZ7w(si;D$*U`uj);X`ed)E8OD7PBWUZCXVLmHi2Ehvr z`_daLm)=nFrZ2s@a_NX;31h=dYvs~gN%R2Cl}jh0yQH;YW@zQo z5#3t}0zoG+o5@Mh)62Q?%bTNrK}zA-$FjeS{#BXs{C*atqfn+gg83OJ3ttg}|5aHC zzHepWT$%bq@xKm&OO4+DGX_C%(89s{T>I@KB~DVTz1E>+V0zx4HDsE=_Y(gb&FosN zafAoj16-m5oFE+UWuF!)*R$1_i=rzjU{X7Yv9RS)>M`D67|=#IIbC9QGfjudA*vOY z!wVzkBAAs~6!tyL76m}?1I3{=b^vPV(7rA#;8U=$d{NF}kpVFW9t&KN zR)7%ihgFUaAli4}GvQjQw?{6;z6VBRs+7ve^jKKiG#m%0iV>*8L&;P{c}7NZDaB$W zyagBH`Z1EPCtzryH2GRmpYBGjBz*Fy-IB*7XBAh6q!{cZ%2v;&ybiK8fLT+vY+U$4 zmjg|!Ko+Iw?OKmT4B_eMEVk`cK9%{BkcvZUe1b^rFx9vDrV#6pVCYa!>|Vn*$S64s z^|UcPifAH7e;Y9w5)N2{nY`r<4uo_NB3l;(!Gy%YW3jK!9jN zW0RP;QH_vyJ#xMdQrYcqbzlG$ifYP>p^l|ZQTM@DW88))2yOwvnd#KJTuBU>bYY1D zcG>-m&!6rGXRTX1v;_z(evn_zqu6AP=5VaAzPCPa0W}OI1}F+6?J|YQth=}f+);`A zVXgdv&Y)>1u%FHZ#j4Fr;S_$*;LhESnWdEcgAD#0T4r`Y|HwVz!E{fLgkVL-kI9l} z$ldFK<0Z}TnF*R8a$qJW{M2+`pG|pJ0!ciUvexWvdCerS#KT8GF=(>XLRqMAQ^pd) zn&pDwl{uNc4b+HR2h*Whnw-oYfnb}nEF-tLwTkLT41J<3`I@G&hm#IPB47_PsI9V= z@>%(Vvqz2~RrFPLs}rb<3Jmold==4i-mX<7$pR!+Ke)S8GSZ*e*_=B{Xe_oD;50=!wGxTqh2!_zS zq8GL#mf0unB$3hX)$2GN5u1+l;7tC)|K+{d;}HXU?PLX(ORSeGZfGxl5)^Yia)e7_ zhw<6k2Hub&1cX)Yf(7Lx`q`t5LBMz>=Qf}^;o(``-s=d=PQj;gXu zFebS)F8K;abIbE;o=v>0bd zf=tqdKqj7#7&c)Y(VgVB(3DFV39ss2A}g>RIyN+@vR5EeEO}QVS$i~6===5T-;`AG za)Pazpu0!psLK!O;+;Q(C+ANwHm%vqNUf7E@vs;0zsUmzLfrfyZo0#Wn=w+vjS)yC zV|ba83;?qtf9V@?UcwX5dY~*CHxRCe1^Aq_*-7qAFgcC0-@w{D0+-6$+-oADcNRHS zaJFg+G-jhH3k19Hgzga=rK@bz#5qb#pO1nJk_?Ctuq85v_vRr#z;_4^40MzZNE8Vw z06oEVv9kbL=KCrDwW1%LJvEqQFrvO*iAUw9c0hNhOT(dtH|rS=cuIrhtxTZUGJ}`y z*D?5ThaZ96ow{=yPhs-bu=$r8-QszXnNuF3iztq9#CzdGVRqa(cBL)^_h$&sFv$Zg$yH*m*iV>f>|b_5~C zAwmC2$sYF@pYOLkr@1@xc8>Xk42nE+Z;RdWqYLvq#pf9X26d0??&Fr{jOBR_MZ|9I zR~Kfv_3b0>4OY!9+|7L6vdnN>ch7M%zeX+ZSeWGVL>n@Hpop$yUG+<&a;74wJubclWnvh^YyM}WOzB3dAtCNp}A2OAl z_@3|4Z9wAAa7~awe6;_Huy359c=`9f^7l8r{#U;i9IvyNMXLa&x4ObH44OCIvX7vcVv6Gk+VgX#5Y5 z&L0uujfa*!{AuFmJ74}Hai@4dowP;j6;Oe1NCy`ok!k!G}D2h$!s=s8|q8T-lnaiM;JT@X3=CU-F-*Ug2;BnbQ<5?HFdYt zPZ>0cp~QeZ_f*0$I0WiL^sCcxJ(}~~PO-txSrl5pc|JD-Y3sIZG&vH@UW(HayYVP} z;7Hc;Z}94(jM3z{J~NlmXa5lF{{088`*Fr5DtphcTt%`fnh{`_M-GzHny52-R{=jw z9Xyf_e$*eTIgJcvTft8_oS{0eUawbI6U#MNM?xT0ni#&I%D>R;i(zWR%>e zY0So(_qF3lB!&x%&gz^t*K&IUTbr*!+}!==Ls##@c|+HExnfm{#J+|q*yG#p?Mz#@ zYui}7uJcs(VD14-OUqH7Y5Ap!HoK0dHpmAuHRJ=SzE#-%hqoC`J^B_vZYnC7hh{J? zS=67_t%R;Ki0I&Ff9&4p9l1@8Qu)1sctkMfHOm>0mJrYMBYyhJo)rZw@-Jun%VyD~ z1xJ5(=iG-xBL>|K6ZGZr=-$hJ|Ahzt^RLZ4u@kQ4!^}?9f&ty^nw`~U{zy7<)IJ<} zYc_D3|F-kU(YMl&YyfJwH(PxNa-qeLF5Ky-yNxa(hkDT%bj=NT|>P-mu4Yj zKGg!jf{d}5wY(gmQ_hU>ydh9tJc~LMy1BkLgCwl%w}ZdE#%koxO76n!koghlbFi-j zdnuo!cz-HavyRO4Oq8;&2ow!B_b4?3aOokL!=a36i=kUOLevhHr~PTs*rbd(5g z>+Z+h{9iK=;6~g({yxChc~cDT=kCmdmSsNAGV>MGm@jKwjJji%dxWp@tU_l|md7m1 zNy~Dcn}3vA$kt!WV|=~UvYb|yTNTLHoyxPE`fB7(k*z<=Q+)NK{NuWNpJh2?S%%!N z{SAQe>j&)CJBlo~=|F9^>14WMemE%FnF`wr+ zN{(OR*AEpmprGSHGx<>2-TKR8?i7w+fg`-Io4I97w=>*UrBu#ua3|L-K=#}(8)NTs z^VQ_<8PeXT$N63E$v}@Y9~jezc^K>u#`KQ6dh(r8axWWR-D3|TQ(kDSu{9e_kjUPwyly4Xnce&xoV612WEu)PUQg@_+@lk98NU@4peuefhw(&~Vh)uPX2~Mg+jIvKS2Ezs9gQkvq*N2_3!K(&@;JAhlDA zWuaD-4E}JoLCDz#vQ}YavUhTskMU5=1IMx^eLtHSr{za(V7gD(DI+=)dh+WrX)u~U6cGelwSw)D~gSM zN29T8GruTIW-Yw}_*x@DC5F(S>5)EnOl0$MMM&2r$RpPVt7+aRjMuAq1EJE7zvIct78<=aq zyZxO_RXkh?njeaoelk;okq@*>d9MY#5X|}gnfvDMY*%RyDdgqdZKQl5ZTkw-HKZ8O z7g>nGmc}1`XYqL790sV$9q;6?t(I7;KWx%m8Cj#iu5b2ER=XtRJYIZ?*lSEeMNi!p zsqw?_)Pc{umB|dGaR(44-&s%*%A`xP++wILpz*-d;buTXg?#z2v57N!<~()>;c z-s0E9yE?_TtKD1H)iTVVFQNBA5?<=pi4Hull+Dn>QMW+O)+p7LRW#Vl(He}$Ogw5+ z{#kphkR1LfP3Wq5JJxoMi(3GLg9B8ve%%$uCiFQT1 z_&lOLH;iLbl&T=%7(xfH<*qg5TGtYO7^R{LlB#Z4@p-g<<<9(JMS3(8I~*m$ShLu+btIEr&rU|8`qu zSOj6SU6bJ+sQ_-9{ycg_wiXJ8_A-GkAFyMWHcn?Pz$Ilxn8P`q?ee0T%3du13vq0$ zQ@)BY;ROl^GgZo^X={p8*?Tf0v-&c#hUfDEWybc@XfLx*t|hkEvCvVzxd-{4bHQh0 z&px0qN{Bn1K6EWRHPi*RlAcDU^rW_?P6U)Nn1Z6TRHZ%1urlWlO>;k!UOk~IjQI(T z3ch^CvT04{ma+8xW~}TJ7cK*;w4g4ijGj5DIguGQs_Z?}jYn~0JtT{c^$2^?_A)rq zlL!MxPuBUOp5s9AG_Cjc49HWrRygC@`c&N_=T=R0^KPjx>K4)~OdA%JA`@FY&m|Lq z)1G-IPOg1snTU)nmNh(CtLw-FxR|AroS12~=&_(&#A@E^N%3=__H~Ou#JY75o=l4H zHQTTjvxMO;6ags+xMv0nGVF^WaP!9Hp@LzF3eY)ek_^|T^w}Q<_pGb-EjMI$voP@_ z-`NIuF;7te>tHLSmJ(Z}#@nKk8XdJq9mJk%>R?4HK2<0s*8=?n$oc?H7@wI=AAleA zL51EC;;MT^s}OyvSVAlf@ksw>gmDFPgrHl1xdzy@cm7+YtDi?{{*5Vt<*RkSDcF_e ztL5Js-EZhx%$1^Y4>$!BTY^aHmwiXOl>y2tU!bO6`LdW7o)C=pelX>0AlJEOvS`D> z@O4a1=S$vokUrcTos6@=&C#PjoedpGxq0ZutUQemPMGq{U7htJTZn4O!Svy;TJ%IB zp{6MEr~Om5iX|bE7mhb2SurgzAQ6mG&huHP`S$*Fh=^&^Owm;9Md;T$nl)wTSDSM+ zsW{HoaW?QkHVS$*W6#F+8gF`6s&Uwa*pi#0yB`nf?Q!_3f!7!cJy51&^gy&f9VJG? z6oTrSHtT|v9<(MOu8ms5uF`_-mWN!Qv-jG@LA``U7M!)Ri*6_6S2A~sXFCtbe}o20J}!FeDn_f}W!RJWe$Kqzw!)hScnqE6QKYWd6p3br7E9GERG zO3#}HNuZIb4IBril|UPh6~tMn(W*qJOhzR^JlcV{EQs-m?qaAHR`qNLR`QeyUX~Pn zQNzK&SH_WJ{7V>B*(udm8MfWLH>vFP&Q!=nQ(=~ZS8t=xXAc2?7=a1=PWEbHzOvY83Rv?V7R@ zVQ>m>v#w8_%3Gg&Uijk6UO#io%wbl~Uf0e#eKDZEka3d?X?95{qXr%3j}ZdFYnir+ zJOxTlaW0j0Q_QG5rF4yu;KzAJ9$7~C(kX&H0|%^#mbC^9lrhj{12l{uEgdi__P(^| zP^g?oQ%sk%U9Hp#`Zrm0l6i0AWG^hw3xnlbEF0reEvBhnLMS9iD;?XHtxH$$LoLB8 zW#2yEA0|;`VV$CB=4!f@W~>GCw1_{e)RAckHki;O$?v+6m5hW^-DySQ%kyIJ6;6up=1I2Cbb+D2`6=6#w3}`0~H5VfHoU_MB77!Mk!k~>j)QzN7zOz#+DyV-bA$w+^Y^&m2!6K ztD}P#C}{aQOgK};;jm56)Cq>1mP9EEk|YTDStkO_Nq`ns-**`yL4JNoDwm8UM}Y*I z;``4dbl4CI0d!Ca+6(5B6krySKfB64ghwAMso@MXFhjapIfEqy`$7WpgB z3(v&8EujyLuRBu5N;wPPhF7GK*E^64NZJmf)_M)X#Kpp1jK;noD*V(B36fKvbx73v}~wkXL*P4hfR(OgTqT94$$}p`*nC~K@o&m@}zcx zlfRD3Ux(FNQ&{|fPuEI+7O75N7AzFm3mUHpChF6YjW>B=6syu`p9Ue8a(d|ocRCYi zy^M&HbuZnNJMAqm*WN&CMpO5$TbAg3+RP=PJF{u}ZsM9l2Q3^3o?u9{n-3oaw zg!$){X*ZX+TCYgQ_$^0OtF9iKv-s8t!WQjw@{BpJY+mYLPGP6L(o0|R4j{TM~#l(k|#Ko0M>NY5BI2yfYE z{g53Cd)gHFDepYsS7|EBTR#SRtREw0{g@Db9=H*Y`;PTP*zH(9MmpAyaVjgUAM3a; ztRHBMX8jlfz2|Y5vmTG#h%j#kmS@qTI-djIN zg7qU!$Jn#383j8a(}cN=xe8+1Ign56W&PlQhsD+p4yG8~E89`7WiPOPjEXAP%KA~4 zHNjU$D0Zu^Om+PFs?#d!T7F&`s%ieZwpY*f^>rpYSXM$l|YEo%mO#gFB6b1+?Q#egc`4?A)#fu3W6)oEv?5bb7AJ{n2WBt&+L;jZ` zq-*_HPg{oCQXjPpIbuHU*V@M;rJz?Z9Ux* zCYOY`y6YWE0Eb?T5R#FZer_EZ$*m&;rcU;jb?GJHXEdUaaoZ)~C-d9QmxLe5Z_`V{ z6KvLoSI<*{xkY7&+4sgNT1GFLC(>d*LE2ak>HDx*K=>{Mkar{f zH!#s2%5{024uTG zGIe@L7kn?QCqpj4h}dsEv81L6tG}4W$(HP4lKr))0vK`v2p3sTmMC^v>xpk?&EPNU zsddB~B-m>`DUd>A8J-LAWWaW;C*~6<%SH$0&cs)k3t@5h20@$e=8DgX z){`9jJ#}>OB933S4)i`o%ffoHnh3n3NNmJGVLcfU2j(Oo+FyQhmDU%`Knv@M#}V^& z5k%TI11%Wu8Cy@*(x|h*;_x`?%8G>++6bvYeoZs_W<2zP@pQqnzLe#p6s2^nC-uU5 zVtouLcrBOL`m6%C zeS!Qjvs0l)uP*Ec7**99og!AUp3t>tv7Rhwyw;&)Jz1*p61v{rr>@6(;@c-dT`*6l znP;J!YNx%`<=ShMy@K^bI)>LTh8EB+GdAm)s80+;9WemT&61hh|7AV#&*yAC8P&kE zmfvz@*q!Z~$K|rt6VoG>wVp6}@0bY;X`sD3&`Pr?M9j*T3(7i+^<==eq+OGOg0f` zNJSm%iM%&+BZ9O|Gk$PleQr=V2}$m98$65VVlf{te<*eYtq^wX2&mj}PK6zTz$lCC2rO%RJA#5-EwCdrn68)|LDei_ zM`$f!M*u(lc7#4JigU3ePy${Q>`3-@1Rl?3N8s~Hb_A0A&$J`>>i*S^P&j$Xj?ndJ z@pc6BW?9mX&>}F9iT!2m2(4nSve=uY*N(8H7sU_BjzFX@lVe>w!q7@K1Nk5zoO|+N zb$Cy19l-2x2Vvddz+UUXz(VW59m`k;27hSQ0o-1@8vj`)@}?J>e?`YSP&4ZQ`(oIP zj^L|(f7SuSRrjv4(v<{fLqt80PP_n=}AcL&@BV-)_ z0l9U6W%PkQ>i{##+OpOG%KXt=2mXKd-aSUL?7r`-d#kFuUfo^YJ&&I0-JM&Ng)kDh z~`<-*{x%KGo*_mA~SH)#d-MV!j z=lovh_ddAkmU1hefOlZUW7m2Ie4ZEd4n&|lLGQqu%B^@r??8Ho@yc859dH;uLGM6y zO_l~8j73+)96!K6R(y)jFOkh_78pwBcNPyb)m>M8HC**&+p+HPt$d&3#>!u1<)4B7 zi(2{7VsY=e+5G)Q~O_hFF*xB3@zCdh3)&+5-Z*RuK_DQAL>vYqOTM9((dG19g% z5@d6%$T560!<}bQF}UtoljsEaxoCiIEhkZkEq+>SKA*3)ToY$JdBGgt!5rVg6A;XC z9VBynD|so}wszYb-&0s;(Hv)|IwCmH9N((H%F1g&?uT8=^<*Vhl=hnTUH8D?=#F3T zWnI8FtvidAfDDth z&GBPd+k-Q#?bk_`dKkm^Sld;-`<7YTt*Cv=+SWUhwOx|Djst(4wSBRu{itni$Ef|U zwXJPCU9(#lCUq-nuV9z#bGNp?zHDuO^?J0nKSvddS{}!`g&niDC-*82u(m_p0^d23 zmTXabCehR_>|^gYbqfcoTbSHa8(mr3?Yf2CWNlA8YJaG!-lJ3ow)V5S1@@}5x`k^? zbqlC(9z~yBh3k-8(c->}!Z*@}xwJ%FRkuLD4xX;M1%*Rq$`s$FU))07!qu#9K|K*B z3v~;-nZ@mO3r`D1SllXFB8!B^=?a19kfMqdwO1B?jM~#HJVos<>29p;>sZ^vli5^X zv9?3a!cldt6}5-QO|lQXW`UjNsae3JdU<{<51&VhxddyQZL06h_Y}!eoGGhW;NDrX z?^f0<5D6TeQL|vVB&qg$b7bMe)Al%&KhF0T5bV zQL}*V%1u_Y(1f*Knq39U8VU4_dlV_m zuT@u7u&_(#MyYo(>o!^ zPTL%mNfwyBRH2~!R1DTE#{Q@k3XU`f%+#Prs!$%MjNB%bRu+qYKQB%ht>YytTIxS$ zPf~6_n<=+45u|xF7BkF?G>k+|siLj%#?x!!;@80CQCO|5ssK$UuPV^+i5ruUhU}a2 zGJ({AfD-{CO34*a=+rcL&3d{ZC=^5^bE&B+Sow$)7k?GynDP}Kv|LpX0DMMOfzgU3 z1z6xnLthwfj(N$!+nT2d`$f^n!b2`|L+2oRgI`V5Pr$d^d zmW)Vm{{1|9Lo8w)+aChb{*$$Aban|TaFqgr%UHy_J6nx`IGb15HJy?Z&G6SiJt%IWCNI2eUj8I&1s4QZG!DF^AINqCuxE1sNR z!jlg*7JJl4fg+5DI&jQKyTWU zZQ7Gz7>DLiD6wyId$Mh7Pd0e;_GC*pUbH>g(v25wPsWWsIzszUH|@!wnhP{S%X^C< ze%Xh}3S8b9?a5jg-Lxm0DgH`}pp{)5H|@!upqPB*_GC*!i{^s(pF&T?GrBk~-T00Y zlbiNrsrM)DyED5ueiPf1U0h85>ZU!}2tU6!1a)xJo(zljQQMPc(8hr;XJ(Lpu|3(J%wm{t z)1GY8o~-E_gzI?Io@~>eOu@cQd$PKkDcZMbPo@;wO?xsG3|oos+K3;`SBPwG+LMtz zMucP2o@`xS0>D`jNF+jqqPA&IMjC|G&aMq4j_?(4+LI|?XHA#9CX1D#Qj#~axFv^p zLqb1KYg5|J^(0mrOEN!rW`XUyuss=hPLJH4%vz{Ecu=0vo-Ds)An2#2?3?yv-^BK0 zum-mAIo-+pqD^zMO>?qMbF$Eyebbz5)11uP)^D1VZJLu2RS3zlmJ8Z0Ki)Ja^IY0Z zbF%Y&C*GClg5}44u@^{hnv=ELV{e+1S$WA~9|*V3w6ewRn9apqa?{N`l2?_`gh|BEyy%N--_YUtFQEWc#aob2(+ zr8mvVHqFWAo91NR2;DnVJ~2dpK>HleLVrh0bi+v24?v?17nX zogbaetv_5W0SJxB)SxW>x4t=9wEny~S^O57lQmzhIhpkgRdcfDJWaMY&B->+$+oJ2 zHu4_NwzX548kft}vP~amS{Tu>mc2N%sVrScn})2RguU?HylEuK1@qwvl`TVE_3fR` zi(R%&RB^?2Y?og0!mJtfP18HcU)3d$MyR@C4jqg3Sp`o(t#yxcy zexqy6$$F38oNVdFi+0^vy78jT$+(f`WMQbA=49`J=4365=KV3ou~Eiu{d#eM9**U` z*%qz6rzbPI!&27SuMf0ka3R^Fmdu61*~P`=ra2kg z97a*TX--Dx=G&%jpwoPS&Eurh(X+=49E`7idnFU44P(WL!;iGE)aP&B@+G zbFvKDQg}Aa$*%YwL=~Rk8A(y>_@fZh$M_~e`)if)~>(JK1AACC+f26Mp^^vt!Kcos-$VzBc<1U8}Ay z>_g<;Z-%}P(a`oGdRqGsJ(cY=Yl*ej$R3;9ZnH`n%l0AS-kG(Z&_1&(_aWLeC)+e9 z+cYOrYVf8x*-rhiqu|-5IT!vwb*l*~6Ewqc#7rV<_54W4Gol)e=ZcpW#XioOy4?gqY za}ORAXEZ0vFWEFFO9i$^>@SLpJgP^h^P(QHjU+z(``>ds*SYJb^Ri~QyHj@U)VUG^ zsboXMBJD@a-gk)6t}M6R=Q{t#kL<9$ns%EnXMOFoW`_jBux2=Xout6KJd&r~xHo6> z#qv{ZC4GVBWPZ`6IoYN;*`_(!ra9Rq?N514doT~Rr!g&Zs9`Rv%lGEnszIAp{IRR+ zz&A*y{<)8<<(j!$RKz#XM!MI$OA7l^$}w|7iC?qx>PvU%P1~!>m^xIkQKb?&tgnjh zuq}))t1d9UBJQaA((L+}P4XDZH@B#GC+@+#TiwuTcC;6^HozSkV6q9|?~*6Z_h25Z z+Jku~P3{i+I|sN>9XQ(=6AE|`)11f6q3^-WPRi^CT~uKc=BuFSFl@p+t*ogCsJfbM z!pw&9ws9h#U+gB|hgyiR_a`qVduHDM_M)Rjeq3>M^kQ-3N7EOJsUNZP@?cyYRL^iZ znKeqps17h2x1pIG-`+KQ*85*9zN$SSdD!zW7GDmBH(xCNaX74AEWT9K+D!gwJ&>K8 z^}s#00=^Mcnv=0Hd&LIQ*4X_Z-_@D=`_F&Z8*g;~ z%1WMI++}yuoNUvaY_T&N$xc1rAzFf*#_lKyEE!swl5Rm?N!yp+8F6LV`bEo@OIz-i zx}L|q9i$cYG^A<|ji@~ae|u>vPV9D2<~x!rw>qv~GW7iW1$Kyb-^nEzjMwC-ja_n?<|DNF`fLAJ$BLKtYi(fr+x~5Scz6B`m(M1W(9_vLdB0|h zIt1%=J|}$07`$6u`E*^pj76lY-c#v$H_NInK0RZaytq4`-7H_*neSEGtcqAAo91NR zmSfYL4D0+I>_^x%C)+e9b4BkAm&2wxnF}+Lx;D+p`grDE+Uc^;MWCpC+7oJBo*IX3 znv<<5bFHq)vciM0=&G2{acXw?h0iZ_$CX)NR$%?G+c-3I)mOt+U+&7!-fZ7Ctc%lG zk1~F%Ob4Z&B*5vri-xY7v!MmK)4{>L*;Ca3@A*ubmz|Gjm@O-K$jh$aTXpmIz*fbl zqU)K9ht^$Mw&rkQzcj1!WoZ01uCBzr3#)}kyo9FCeBa0H<=xSP3I>skU>rE5jfm-d zm-(3U4a62EFQ2b6BvwscCiO+Fe22|rS@|}nFLvkdJvW=bzli+VJVM1{A#U~WELr_N znlr5ay#=e^zhBVmSGl#@{lfj(UBwCbZbxK1ZdY-hHCX?w31cx3{#-P`x0cfv#1<5F z8}q!{>YIMXlNZeKi#8|AZSA%>o|=>8mu#AoZJLw)nW7`c3?gtglH5MtEjvZ2z}X(e zFKc_#oNUvaY_`opuxU=VX-*cS_M7Hpo91Mj=46}ZWTpa_a{}L;Nza0LG5ZN~X49N3 zTH7xcuVOduxsAPPPKL!iag%V_Voo&$jk{peoGjAO<1{CW)}J>gi{C5oqqyqnU`q|EL+Jeqw$!iWk;`zp zrb3^ez81ri@-W3ax+H~m>fek%@s|2?r6QOA?@{se{eQ1hf37&4Z#_%3zg%apcjr46 zx7@u~aX{R1`{mh)xFz2?QdzXcE%#&GayBJw+5{~R?vnksdyg_`3tIMCLCd`qwA}Te zCE2nn%bx1u_f$Odl1DpPQQgB@T(Q?#GvId zJa)od^iVxful}Cd-ck|xGXfMv;3FXWdgr7r?#y<1>Mw>0Z}}W!<@Z&No62u)qw@PY zz@5p&#amyv7BOg}V z_vZU~*6j_?73SW`e2%L8zOgFbcK@Ur-L9(W`Xn2>;AH`pPyFtv%jv?>-zcY zhUs-r^SaBqo3jAA;QBLE<170agz>(ov-e#FLQVGb)m7Qg*2FcwBHcQ>ItE)BN}X+~ z^pq;&uP|bbS7f|6)~7wA+Mn4chnCS^Nh5w*`PwjDKH_?E`^2|q7G~2}xu;Lg@m|Em zhzLI~>zxvLAMzi0yO5h@Kl{tnM$cX(Z0xPV#&(+A0v`6pw8J9%`C(^z^Ey<=;Xl>k zm?VXwnnJN8isOX7eFDQ?H810^xo1M-J z9mK~GZL`QOP{IJ?I|^ycd!EMZ7xrH0^x>uJYCVwhldqGXJU(R*&;-o9Rrl|JW};Jl z-o*2t>vZcM`|+O`+|Jy=6M>oRcsTe4#+Ez3x2r?XNWQFm$e5AbQ|?Qz+9mV3x@3}} zIAv;@7|y7uKJrRj|9xn7UpMz=5>&mDIo;*d#!yp|!@S!5kd&%3AE!7YcU!-)YU`x_ zmz@(P*RQ*Px_N(?*dUIx+V+X5p~B+C=*e-%((jzlKMZ~DSC{X&K{UW~cID0;8@0;? zuuz^dojFQRb;!^U$rYLK=Z%ef}TC>VF8OkC%mU@lzh835YL{SQLPD z)x{F>Uj1N&had|u`eDYO*gFbY>bIFee9t%~AByN^G0JFn85m@vI3Og|;zN%7A;40F zA%=yc^dv=udJq!-Y>O$OTniy#3q98<=3{+dZwmZ z@K|_{M9+te%0q)TzSH^f$?O`_JVd7EbUluA&4{jRtam+XI}Z-!w2_Y z?4Xjfgo1`zXa6%q2H$lAl~ubFA{m##1~dJ0VRj%!1L8~|N4rJ3U;hpOV!UHsr=T5| zMEu&9kNXqmg&s|`zfISYbgdiu8BY1jAX8kepNH}Y^jmyhpv#3Ska(qhG>;hJn% zdm7eronCqu#)sDN@Q{xqcmSgPS3MJKk0GGnMWtAFZQH{-e*Vc* zZhJf|SJ@t;%=UmWD!%8o$6m5M+6j|pdyMY6IWe8JZI5ZPJx0;?*q2eTFG2PmtOsn5 zt2)N^xE^c|^*~;DQI$6js>T-f%&ejA@*d+bTxOOvmjxtQ(o3@~mqdDX})YVvyD zGg0DU>$LQF(t%f0UZT2llf`hhlc0J@w#V+0?eVm1Gg(U-ugG}O_IM_l13WX>9*wp1 zj7Gd*Ej6}B%T8jZeXRUxv^|0)gzYgk+hdBpIL%+yvOT7cWP40Q z86ntF$q4x)ES+7RMh)==j1Y{a6-G#KSf~!jnf}8NtBjBN_3G*!d^uB$5;H_h3jBhM zi_#1cG>c$}Oo9J2C=@b8j`@Z-h=$1iy}5q(O-1;fIq2RAc$yy1cEe)hhRA@%^q42P zA#x23%J1cwctA2k|zhBU_OVw{-!hZ{7oZewPjZIN8J`5#u-6ZnKADkYMFt0l9gS-P4VHOuOXn;+rD zbM&P@3`*GVqXx#1%yXT8muYGLU%29riZzCc$0m+_;clt#(NMVtN{h^w)Ab~-Y|Qq0GE`vl3m7WUOS(N7D!-2^`i)|psWLjtRPnjW8-$Y5 znrmjNgz21Xs%UU;(p33IAzS6+)w#Bc76V|KY~0LN5ibQcdK_CtDz?%Rje3m0%u)9o zAP)51O7>F|Pbe0Hp=}NNx+yb5>i;*2Xei8Dchl;0<=sPa&60UwTsZTOrF=MCU?6 z^g~~uojWr#WBy&ia$45IJ2IHA?8s^|HMk#s|0DfQV5L{TQM~M6otFY(QRzcgnp~lP z&xu=>UN{la&^Fbk$r14%hQ|S?|AS>|EIA5ZMg_(&GtYnNdXCMqq$DJ^f|qd&yKwfS2k{k-u0hRA`>ney8UV9%c6D$n4Kn9-)j(PS@S#*jM<8AC9m;zn;gw9$M_{A3d|$ z{-l2+HG9~b9C++&!X%>ox$Cj7-2TLhO9gvR%>Kl`N5$S{#WOBqe@-67{*)pX8X&K< zKk?;<*w@a5>`wrN{TW32#qCdSBldL-;L-&K>&fg-DjGfZb-WP!;^)QK*P{K&C68@? zPHwM{eJ$9Z{<^bbUl*`HdEcYkpWL*{{@gj+{uCLnw?BF2le9l4n7bbPT4jIovUi^S z>1LurGL@E8ww1vYo%hTbWyht8BdksI!s{)wlxWv%fQ-+~Qu+jSj$Z71LUQrjJJT0C ze;(rp{WvpGF=iDb!!W{_+d(M*mN{@?hZH2+3rav^pQ>g8nSBlYX;BFv)bByEmVIh% zdu-jmSdh%@Q`}}qwCTxwM@C#N&%utC@MibFkV+2Q4(2Qqi**F#zk5;KMARW|ST;7^Rq=k{rn>-C?929jh39l^Lbi_{O!FQL5kFfRj&b7^P=M$Bf(BMycp3Dew93(I}-+787b4rI6yi zYH~X_N>O#foGxmVu6XcTqtxe0bWAK9-t)-OF@Fd~nI7U%E5|}(pIyKx9bdpGy`GS> z^sYxSN{NzPYm8D}Y)0vE+bF$wn9S#YZ1X3$^k$7xc;gCOvGiUk>5>z{yamK5bi^%t z++wO?5HBhw6PsG3G^px!`*_(~#O+N*UW!7wX?HDXmaF1z*Lm)>gbEgW-0Q2&*kfMN zGGif;Jl=Mk%vi+21_^Ns*#t{=?0Vyu#xrg(F5h$k5Qol1yigAIo$O&2Ltk&aYrP zKMbbxCqK}s>Sx|o(^+qOt4-%t!<%S2uV{GFHl5oIZ_IT5^=h^0yl18}0WuCSokuTY z6w2nPI3oScP3N5~bXzT&&cqij6Lfv(c6(LmmS;Ah+s1Srtu&oc^77DaG@VB)(njeq z+78`HT|6sv+nCM@29nyCrH!r%-2$jLV>)wNFr5kA;(k8cbmr$ZrgLi4$|ccsZZ&JY zaOigDM9azAw9%b*=+c!5>btNTposq3L@b51f z**C&M)fm|!2z+rPyL!YRu=)Vkl^NO932{-3(z?RP-Zdk8_hLpil2f5=GqQg&7}+<@ zHnN-O_L)ZZjv~K{Mt0>gCK=gHrTpWjt75;`^c4=z>}*^w1mQ+fT6wO!D|g|pX*~9+WwHY$Iy<*c@l>9PD)38JVV>Z z^wt^LDEsRT?HyNzUx|9S3~jM$V`zulpSYnNQSqnU&~`YyO@{Vzyx3p=qz&yIS*BL3 z@mwd-mJDstR+$WKXzS4p?GHYdq0QZ-rONHJXc$((&<+9EEHZuLV`m%MFRwMU&v@H{ zq1|U;?bjcShPDnaYH0Uck!V#(*v>L$GDk!ECnJM5?gM}yLHKPdU@j{$yro zqusO#;5N=xc)>3d8!Js@cfh9133~{lcz+)#&PfzvWaQ&axsNUp&_#heO`Yb+K`Oa*W3-tQ6z+;+D^aw{`4o z$*IsMEtq(G$N^Z0$DjYs*|to$<#_zR$ZJufQ=xxeJpSJ<$KyX!6kGQVO+8iQbgSO& z8RA5lbQD>EDCH9Ynh~Cr6=6z7&#Y>jamz0H@0XR;fgMuEXxwSRAmVvK}}F z40aNJuDh1(Ftkhu@%4DzjAXDp65@a>Mlx785?!8;WUy)^oFpH#?wv7`>GDWOL0>VF z>AI2V@_Z!IRU_e~ZzHZ`jMXrymPc}9K{X4=KD=-*|aGW{i=%5M&9( zJQpEmkeIVm;fcstOOZrVU6C_jRqIBTx{Zo`qYS%^6dY+^q?YfphA6nirxrBA*L@Q% z4Yept+^QtFD%0Zl%;4g9nPlKs{Vzp<`F*s6P{{niV=^_$9(P?0+Yg-W zC#Us9Z1409)Q4jI!FjAda(&Av^AT7dI=(3DkMr?G)@N|{35~CoONsSIVtrn{>WH=RGaEB66;er7g%3mV@Pt6vpyvxQM!xU8`fu`fe$j)pO96PXoA}k>+3dB zh*+A$`a>h@NyX;{Sl`5ZH$4`0y9cRJmF(;omeGbI=>)Js9zbb#=EQWvO`hm^{!QhZ zxvBf8H-&{-0;AfVjiTg$x5`@}#1JJ`nU931v1BxRGnkBqzQuKjT$8*F_<@tKMu9?r zJ*i8iwL0t(Pz$i)WR+ zw)Wr2VvE6jQ^l6q85a;+WEQ>|vBhm~h1eqD=}(*3GDJP9*aA-PVzI^S9!qRxH2wHu z>wn%V`fWRF*2Bbl9f>u_6)n@Sw$NZ$YuwgC9b`Rr*VRn2YAb0mSiM+R{9#?;8}W-| zAR>wp(p4eTs=v~-lKToT6(UtpR$Ytpsj*;MuFVp&Q;J_0mYZ1^UF(L0TW0mJy8f!N zJ*-^2S{jyoZEJ?b>&xyf78@e2w&tA70myCIJ+WkO*`U#`hOS*X{On4p&i&gMn$oV! zjfd8^s9gVg3)2vm?G~<-k|C?vFUN6w&gCc>k8(Lm#zij=^kjO1 z&2CFdg8Qc(DCXVP?96Ltvx`bbeskeOJ0Ac2QWgxktas~Ieq{^Gv<79WUm3{@)`MPA z+j=!xGCK|9qrlMa)w`#}z$iXbAF5tGbq$)7C&-mQxCjM^WA|6=YKWv4-JR`q%{GT_ zdU7XqK~?2}d0kuF)$Z|y8e^5Td3j$!*P{2}SLF6B`?jNRXv1}BU&rCAE*$x>;x%ZT zde(_f57Q--pQmGRoQ|PfJI3v!E~$;%2@@Gl$_&e$4i@HBACG^xEG7~@Em#Riz)C;@ zRss^R5|DtEfCQ`rBw$5`lwd`;nk12SjPVT3Z4sZvu$qMuA3p~IW9V5Y-d9!(@$`Z%pf72^=)JE~aS30Nj z;j@Al#sGe56l)QgfZRfbo(C!fZcrg`g9>sYgbM9y0V=djG^n7*p-^#k{IKA!*ygb_J^}vBmD?6jtY4|F_+>3Z< z(`!Ia?|lVjA?b3=p>&K1Wycx4$`K|fzQM3$K!*(sGh!{Au?uJHLJ%6UGy)++s~|Mt z0|@Q#0fct>0782U#EQ?Qe$WLxD_Ge@&ezLgl=F38prXjg z`C4l>eBF1xmY)`g^_{ON!4br$>v6u8;Eb9Cxx5_n2dVA>O_zaFsMwFX213LKK53VR zv``8h4NmXQDd;w7NTqHg|9Fs7S7hZtU6F}JT~RXfayd#w4!MvNbp^>-ysy9vbvSa2 zgVe!T-cu(HUQEAB-e|7M`VCru?$-|nA3ctu(wAoz)2SpS&PY}wW8I(X!n&X#vZp~* zFoZo>^#xJE5aLs>KOia?LVRkv0YvE@Du_;9;w6agXAnIAjz~%gQY581r_yMwD@jR2 zDnPghM2aLz{Cf}}Z2XJ91}76Yi6Annv~%0(T;N+>*a+7EeN|Now2^w{*GNJyk}()= zPA1$SR??M`ta-&@I_W6Fngg135|l?f#UDDI5@a!UFkyRA^#%Wgqc+6{A;Tp!77KTa z;sd%kkIOnxd|LnAYs1*J{<9KO2(2~AV3?6K#qm;mQ5qY`@gS$oK#WD8%|LjF)UfawVM`k8S-HsI5<2z- zl!-PYB1D@>1mG=2GHCZRIJV%ejYI~|nM4l6OY_+UiTnkV$ip_Y1!kZvFavFY8E6a4 zKwDr2+5$7s-sb~oA1pxoP>@d04iedbe#wD;*=2yq=PMjbJ|{fT#vn-Qt48!7zd8(( zfyUE8QV#?4OFC{flG;@*oogg@P`Grmk<>vnXeAXk0%nj+7<3UANt!D!I-X22UB+2F znPmE~x{^*h%8=AT6Eck5UoWji6T%iQ85%DnY+Vi5(rdyJ`uTpbo3!7ZD6J=en?Izr z(9~ibAq->+VIWfo1DOYWfXqWaK&BQDka?L8ka;CToARYl_LYwRb0g44G6WX#;jp|Kk%MLTDH=!-6 z$7Tie`~iAtc9JU)@>NL_6EFR0$0Ru#cp&OaM%1Is+>MYE%S1_TA|*(2C+Z~010<3p zkEAR~9wm%P@~8_gOY*4anIv~buii2`MVzoj;d*gmSRt+>lejDB$|x0dyqJ=`@WbClMnZ(}XS%DTT0%G|Y0I`(n9K;e75yU~MCeKWYTdq`N9k-}j z;j5@rZ&y*NZuAoeIWb+5`XbB>$_SY4YLLz~id!bKBRL0=odhvj;z@j1!i(jSwy|Qb zNLME1nvUn`WLjAp++1$q=5oYMuGK7|D6X;^Rgl|1n`_x)Mv0}RSf0R|8G0E3d^5o4n$urCLJJx)A9;4<-quccjXgeMe+#v;K@ z=32JNVIJ+g5F|9-aTC}<2C>B|1nI<$(bM9EfI}|9IpvpdjB76))8R1iLejE*70d)S z{X8QK0eOUw32dp?KuA6gAT;3v2uZyLLXz7+NE-kEA<1nZBrRLkW+O(%3tINR$z}-- zGeEkxP(7l;VL&qDI|`0m+qT(4Dr>auC`u%8A|0EIjzYy`bX55GlKdF1Z3hE<>wKYM zSResR0y;o5%8s}Ux(u-^0DueXH_Bq5SZIXsSc00qGEReIr@^t);Mi%9Oc2rF*lBPq z2=hwvDp&>ajYB#;v}*bJ+d$s|0sJAyFL4chaMT3Nogc0jg7QGFYHSiQu~S_NB3wDR z?gnv8Y~NN^NlTDB@kT)&#d4c?k<1zK@=!Hl2_hq|sTuK_Adk4qO~iYZ@=UkxovDE@ zprXTeDYKSu>Pwe4h_UT#yF=>KG4+U*h9p2)HcZ2Lxzy z8QdkTlfr{E@hIT0axDLHLJeKq!6cb3)#V^R=wciYqWvhA5uy#F8ZmDI1POznOJY9Y zMJK!IWYGVjW}dY7F8Lf0JxS#Bvy*AjP@+h@GBBQAaW$QEEJ`yM=B}*89Oz)tovh-e zPIa`bod063oKK^WM|-LGgWiR?7Jh|8M3`_0euYEudzlaLdxa11dzBCHd&CF$RbQis zJgo^}O-;NEZ^uE_PZRU(rp0(C_z=6?53WdFVrPdF@^4($A4v}L2AB2MTtbu2WwQQi z_$qb@dOP(2Ep{>G{-hdb4LD;sCnai*M8JgR=WQ7VqG^MIY4S}vty0Hg`n1w|X})EuZPqCqKxU?BH% zJnv|8A+YncLP31uB4jsz#bS=+IVp}-dK|4Q<4iFXkJ_#oriDH&t~fSqGM(f}$Kx6# z77?Z_t|-bj)sHDU%}3>(_pvPKYBNHcXd%YlB0WbZt7+;oEXHwWzh96=59M8KX6q23 znIWvj1I4F96iT%pF>2Z%!8}tFAz@;}_PMpgdufJwJTLnE;Q;yog-PcVWfG89-$?7s zDBUl12_P#<_e&{Chq~1Gffc1|fkRO`5UnU3h*p#iL`(Y>O^Fs+iXsKh;qxXEhi@)L z;v$BXBmss4ApFH#IO`x{IrpYniz0~TT~f2faUVz z(n6C_=pj(8M0I2?>1Q(Pia@7GP}X>*6}W6{YaA1q zTQnGMnDYzD*xxRTZ3U_#h1&e3#WH_QocUW=1bSuu>%x26%o>K3k_E#yzWl-v4%Cuh zBI*-hVDdBg&eEJ&tn(;SGIH~!Lo4t6zja7b>)0vkb>IU&K8 zHJtx5XKN1@L70ucE zAeI5>8hq0#-l-(nGI2gqMVOD#ysSwvxKTMo8yGysZE^;8MIqUQDJZ*!*7cGov=`>; zq;Jg6sGa%$c~NK=N%*}zspzVZZ>e_|uFu0LqvXC<-hk@~tGK=iqj-p~fq=<(EmtU_ zq*R^hgv=%sWb!f(|FlZiL>EDw;6mX{gu*IA37Du7XE{{KWTja&GOY2-w1Y+LHV7~k zEOKWU$jk8TF*?AO@Vv@7ri-^9&LJk2v1X59=@ksjQ;0;E$gZ8@A1%|3@tJ7$w$lm}^& zFr?>Il6!IGj-Z;J1*+gCF^I(#ULsqz2vSh~Rs-6P_s9o{DvgI;;8_+x3@0fl60I#_ zQ|JX^Q|P7Zp%;kl01tZPBwI?f_h=&m*&Pz&DtYVJ4>jlnk(7eBE?ICQB@Ylpdo5Ya znhdfzsBytOHXF^QWF`XL&}G&xxrlB@5!euki9m%%jDd0yC1rl*~Ao|u;_U_L%Ya*l)4)Z!Xe(41Ll_|kWxqv$z+cYHG(UG{{&|yt z5?pR=~(U2(d93%=-bdxVE0Va=eBu#I7m8RFgN7-c! zeD)IEIBX0|g14#fV*8$pp&<6?b?1=!e{z-2BNvFhAq2u7Vo#Ba78Dh^fUIP@L00lo zK~@riF*>0-@xUDHn~Xq+(Fv*pQ*H_n%Dc+fkVGjSQFMXHNbE5g1sRx(R6fb>hDY$D^T0;sYq(-DM>M!d zT3iuTKSMWITc!F%E5}4!Fv;_9z#484^rB)PCLNg~P99Yx;F^Uj$hrRwC_j=bUy2n< zp=zmH9{oifF!$)Q1$PjGE1YY1^ey++G{Upo>*k6K-makC#u;{&47<;lMJoA{k7+C% zE6ia8J9dJVR}_MMr1^{JTN7W5Mq?QzwXm5u?_c3LcdueY=}}2cl+JB7cK1rfrBIaa z5+k~{A2lek7+e13QZBhk;%@_&f)apBK?ztwK?%V1h>@QVcu*kIpeAvUvCo0YPi)5o zvh#usQHmOf5EXeu!L>mNoz;PXCL!G+c|P<230$=%FmM1jxrB?}?D0?Ls-p)6;Ca-h zia%ti0s~Qo8jKYf0LBUo0AmFPfN?u=W01SzFOt7=epRA0I{)cYnwU4981&=inxkX^Xam@{E^|t5~!zMa`7@{;OiL)dhew>quQu*+ilVm7! zQiPT{?Ju*L{PfZp8|jLRns+pcqxr*O5ehdTS zqC7Dj?s;$VNh;tAD*{8TsO={9aW%RP3CSOcN@j;5B02&OczmO543e@D9FHnZ@)r)& zkaO{ErhVb!vX^!>*zAQNO**_YOPapeYpXG>=)=ohK;NQyCMisMBNQ3hz>LE* z#U?nJ@Ti*qoc@)wf)G43Z;@ddRvYIy>pvc;-vQXMHf6TR0@V5EU=Ow zLVu17tngUS{Xw$0Okf@VgP}tAU7=n14t!9~60pBh-fH8X%V>220;KIUBoI#Uk(0r0 zwPWx}WUw2_VA_zuULu2wfoUxnNMU3(#(!xqH8RLvn3KVtm^y;#Vy~^bMt9ms+DEWJ z3)x%`5|*BIS0}pDK2wkdg&nsMfZNsdHj>_EEsjGn269YH;2BEB0nK7{ zG4cnc6S?!MF|7gElbNG#U4Gb)BmlHeGoQVe#=jn4Z^b~JPXRxD@DNRS-i`cWVSCP(72)V62BK8(vH2`6}AAjH1%e&DU){Kk!NJk@q4W*qihBO>6cZ+rBRan4(Q_U=n`${T6C8Y&3} zW)dJC!cfCQEnL$Gj^*drLyGVaMn+Io4yGU{SiWzgLYJZof~<^5J8c>W=vd}*S6$gw z57RI#0F)oTgH-1>`576*Sicx(z=Zz-bndbk$I{B|y0Y~IL2-^vst@5I8$}yl_KvRZ zP4BRqG^I51Bq}th@qb~;rG)`sr#aTV_nuBse;xNP2Q*j2Pxzh=vwcsetFtoK@?c=D zACw3^UNRe-+DK^0!zm8IU}6|*O38HdurMixYRj*!Wf7+H!N-n4z~G~&{HtF`XL6$8 z7b#BsQa@z4(1LzIrJyhsvD++uWs=f?K9!0EFyxRZ>W6#^r38oFzW#JU_pELmqk__s zP#CE?Oh0faPeIG~>8^Qij0==?bRNAu@3pjG zn{P}IetX_qB{aONC)x! z4LtZpwL+|+QB)BXkeX=s!b58U-kc;zWP}wSU$h<%HHvwv-aU!QGv6@&Czc%7ndu2# zDAP!kbkI1`_ZC}Z-|2Y}Dj&Uhd3sWRwR5|EfV3PD0$1iVKa@I2J_n}}=n%E~F1$!K zjl=@U*#9vSPM3Qt02mEoub6)A zhzRiyGL(-g+tB&wZt3;x+$XmQ0_2T1icg`qJ$O)_@J~+_m87@pmVu3XtL6s9myp~; z8@4pZd8uKOOU#3`S$upD&YbK)a;E53uJ75vOFe*lwM!xBjCb{0cYzpqn8^<99#Z!h zf!)I((mlX4d(#o%0So{)$${}}GJq>bphSxy5RXxVK+2=>gcuHW1U5jK@Y=1Py=|x? z;{WTc19Ju;^dTJY(T0isj{$IGQ)Hu%umk9)JhNMW{{C$Y%4aoSzqzZMA%Jvqd)lHF zQG~sS+UR@2U%D0npS?(=!jf~LYb~y!6p|$hnQGET9UUD(caV+m;N*~9E<`EUMP?F zNy6m?wsI#%fHLqxsR|4U;JEVoIF%k{T^Ycezz@QL>M}7AM}{9{h^+>b`9S#LbPsk4Oyu}MzZ8!Q z3_oHuNr;G_UcisS&29Wxs~8)mBL}e>kz>vrLk=7yIfWZW@HY2|u}~Y{Ot>bA+P}xQiIgtcQ&vwt9cn)yMPxannC4UBI2apr&zlfHqJPoQ>CsL(iA5ByO*Gf*AHc%u%CLK>-j?e*IkPV_B z8wL844vwm`oe8pjpg)%AKz}6Ht)o9_NuobKjZCzNLVtyQDY&aee>`$M{VfW|@MsaA zo(l2Br<$lUJx;3gYI*{FHEvCpkD8_3WI7q&(oJpsO(-xLlqf_#I*aq9N_x3Y{_7oA zJzfWF-Dib?r}P&jW##g5Nb@t(J}Q2zK5~pKFaP3fXhKr|FdJ>f)u|tLrZ=_iD#ROT z(pvr-Q8sGGl3YxJs{crGG0Nh~NECHjyrKX*gOh&L7SNI+3j=BCL!!s+NUo7Po``@p z?nu+m1oR-j?i>M)j=EAn+d7ZwvnZe^&L0xcy<8Lf8B=IoLOX}JDkcg2S^efB`ZXQ8 zGWJT51gdkqSlWd2^YnYmh4d@Ln$DEc-y3NW6)8Q`MOS(#58b&Q&1Me(`#dO9e*Egg9prNc<<)S6BmvVGS7i8gRqb zfT3n!iPh~jK>HprCy966iIuC*d3>dZHhkre()t5mo%!5#e6?y>i%g~GimBp* zZH=OS`yTAJ&dk=rcH^-YHodfh&?uV4<0>V0Q7@G^=k)l_W*~u8$#zG?9 zSr4KvA?j##!nueuH%8=_E0c(U)Zta@kv2Z-;V#-Je90f~Cm;Xe&iu?Ef4HA~{D-?I z7EfvZ@Z_Go09gLGz^SebVU!AWCPY)pnAADJi#3?M`)e+<@d(?5v z6EKkAed5l+$!qmV&vsOa!7ESb(k^L-^`Vmx#v`%pae?usXDC!opU{;(LmPP-LL|h@fT6q$o1USF2RhB2ClXMLfta?Q zQ(Xavn8N{x-@Klo*c`!I?L9+_Z^53Sz1ZY$sb?r+fWnhZA_usClY52&boC6yVZOF! zsPG_Hup3S9ik_j4rd2&db2OoLz#8wwo}mouTdZejBeXr8KgpZ2daHYeO0LwYXQ+Z< zlr%l)ng$+-`dhDOXp2s9W01b-Q8gVZMCc~Qre|pEYJ$#uZqLvj?f-~I<6CR>3Dm*gR8YuTHgp=jCbdWJRvJH(Kpf>;9ZWT~J?#)f-;ntO(xBQ%1JZ2~$#Gs=z# zRhJ=l#W*@Uo@mcd&}2PB%M0`jWo>L4Q+_M<3`M_N?irddnX6Fo7WWK23jyuQ)6_E* zJp5_v85%IxE(gsqS52hhtSJqCNAwH@Yu{o$LmOHDcJvI*8G(=-^>}%$(YvT;Xp3y$ zK|MpucYDv!hMuF7)iiZQ2;W^jLv5lLj?%r0dWJR_4sNt)@HR1Ed9_0GA$(Vxo}t^d zl{_X#-eTt%a?n!Mk&!rKmTl_}soZX` z#hA#utY>HzEXsO@0uFkH26HxxjYc`PDp>R`>KWRw^^(!~t=2O%24&aKdM>mV=IW$x z7Ro4gGx@8kuU3`MPlRu4USD^{|GX&9 zZJ$cwoig5=h!P%BgE%$pX9_?YGk^uqnJ znn1PGJ~anb<>DcyrsT$iKIMAWZ{r`&dtg1W_NnmwH?4hYvl_U~pT&&u=DK7WCM6GX z<$VO39$0GSPYgL-@0 zr;??b0wp5=MrqOgPt|WQa#pOMy<{U_a>l<~+o$G1imYKIa7kL7q0$2tDS(tDU~CjQ zewVgS&Eb=^PX#`-Pdzt?lZ(A~WBb%b-g!VblXpn@P%++?cklT2sWCFLh8yyPxG?GE z$VlW0Drgtmr{=!IvvxvLniEQ)`hcKpG{KEUBlyX*Pi;x?%<;Dn`&qVeAGv+%Mdz>f zsjZ2BbK9rB$@t7-nEmx(dHsI(FRLP?dpcL&&+=yZp81uRglmdgZMh=A+Sf^9!#w6bDcl_Z)FT9 ztNvj@n%yfu*HgjXVES#>SO5N7{7z#6{T?g=RmN6V=x|2q6nFDR4!F!;Mdb?J$T+w7 zDnIuVUueDlVW9_8Zn$){om+WzJ`9`dp`bBH8$L0^lNre{fQBvwUPr?|%(a!;P&;!C zIbGZ#ya6S@JUg!T^+91T2Qn{bPct8T##PQxp!5u@U8Vdod_z>duz4iM0v`2l268n; zH(0BE`=!wI%X%m5cmuGi{~v&$ZHf@OGIT+QL!Sp2{Mou%VBnjeJ@#*5ng!6N51LJ9 zyBd9z2VJ$yM>Yg8t#;eTa;bjhe*)c?0p`^>gbBExREIu@Kf6PYBIS9Z z=nYx;XA8?U{p32Qf!!JX^^ z^#qQP(gl_V>D4aB>ND!kOgC7bBm)<*=nekZaR^9i{3n#)B4CCzL#*H6@W4vpf#vQC zl06(8ydc>F^2tB5!a`@isvsFxc=+Wp=jrDbGu* z=-bv18pwUq8bUY9;S*^HozsniulB^?UyJk<8xo=<39N9FZ5+> zVpkDOtsi{W`&eN1+^wrq>>WBDe(ac91VXB{GB-w5N1@lPuHwLIYPtO(I*<@vy;**o z&Jy(g;^ar^9NE60sK1Q|d>aoSIxA0zv^}oDzoys_@| zyEsmKYgIL_Ae@VvL#EW6hFyG@iHMcK_ifB18CJOTevR%ed?m1~nX#6-oz3SYA~q{7$VQBL(7VhwsMUoR~@wkZVAW97X6t z)ncK2c-Py9cNaQ+oBTn9K1Ta+Xk+1_v=3M7=66E-aC|0%745^7ONKC^&(Bi(a9xfl zgR2qC?e^jNNfKGC~kMoA%*dfkAm8Q4T!u_Th5()`K_MKAfAox)}mk(|)pP zAI`P(DZNyv=86357*LLc{|hIyRdyYB7vB|BeoCcCfajv+J|Q? zG<(oV*xQCxd(%FA(>@&S!YzfaHKew%9tPB=eK@Th0W zu@P_Dv=7InP;T0XtG)iFefXw*I4-u}%JFR+Htoal#?r1nrg?7Khm)hVvMu?OX&=rS zwIv-%>az6> zDnhlVdNES$aGm>bNXyFJ!Xxx}9=7+|t32p$QH7;9+tXj=@tpqaIz6E}OJN8$iO>^i zr^^#-wq4OMhZPf348e|G<@pclA12T^d5!F`G4rz%$INTnQtJG}T7N6yj=0AQWiRek zV%Z~on$+Jr&Z(tI5^_Uu@Q2_~K1b|wzh{91wvnoKL-EoUnaqlU=?X$O&S(T=PYFU+ z)}xEZbnRQ{k&B<$zJ?la5{-$u**<={8A!nVIv1LY^E*v;{dbPLmA4XCf-;qzb{_Y< zF2Y^1{13({UfTf@ZVE$#&z>8|A6$~Vh z{_eq7AQ}l!5;+kdu~MV41A&lXIRPFzK#AAbkNe@PKsk-D&ImBTe_I3?XqRJBnA3f| zfPzSXp)5DnnkYvhghU(CE1W6W3QJ5`I8(CQpGdE8(kqHmkAC#xkik-~(+O@A?l6)`hdu*$xOJf%X?VJ}`wB$?TM}0{QsV|Wu z>n)3!37C)2hMhVUwwrB0MI`+cT=$(z`_83(2UXue)ptL^a zW9Ze+5xKyHUL5+5{r$?>Dk$q{eYLYI(qv#mnw*OSw=CzJU+pqj!I_t)=nxrOkKUV018^dv4kHkmrv{jE z5+D}XH~`LmVSZof$YS`i$v?Il3i{hX@^1)I0ia3^0pNrW0H~r9NJ=eUVCX$QASvx7 z2mtpX8|gF=fCm6jSxuhp)vwVp4>5lFb)TM%-lCXof~tc+WijmtWk7ss8;?7Q*&4}% zoy5ZG83kg1uL;Dsrtl5~qU$PAeo7!V!m}IK7!!y=P;T9(W~(~9XTq5GIZ#H%%C+QlSR!V!$3gMSkxRCf#YseBRNLp zw`W9w8G22SrH8=Ou3&K)uNqo4fhiFQV5n#lVAN{@z)bisem8+h4XX3I2~6?3qN9o5 zp~0iOw!lDL)6C<++H8F8}5TB9VB|Zc3v5`7zV&rWT zpMk*i3#95W)fcuRvoDCv3hFyVe6QnngL=CQd1QJ6rPr_1s=`I+KQ$5B=tNr*p>oF= zNVf#i5#Io*YD59)gb&k+wgghyx?v5H-YJ7f)GI1g7LSg-p9>}5t~hpYAv>e`GdQVi zm$k5)BZY-@B64wQ0ON5^d;w(0M8Xba2x+ ze0lXh7wQlCnNdAP)dY!bmJZDLgX{$Bs23PU1a&YXsDlwf9ipD{0Y+4h2}Wc_gON*o zfDwt)1_O=c90xZAQnH!^*$~tLkO39qrqDJ=491DqluL%?gdIdBi-eJKkd{M{Z4esV z+>mlu%J{tu60+i$T2?1(j&bPPag>~1QOq1fu;`JEv} zoD!gcMzwH9Ht(wy1af)HWTk4yEyKGj7B{I0DJB-jvUXy`(N;#O>0HiNH?HHl&CpxM zwr-4sm`hD*pvhj;mj&ZGDV;`lYyd5*F>0O3YBX@q20^z3XmZH3xIMtqu1I~sf3qwG z_f1^@TY!5@ExmzAq`IL*DIR!H-GmQdOi{96yvGMrH{}DWqZ(UOcfbcQK12@4PKYqR zL|Y*yZ!}HyHbfr4y~C?*xdz-j)#acn?TGW~b>W=9ecRWn9m!QEM)&YUDI2IS%GE%C z$j9X2!IdLo+%ZNE(t_WU-NSM6@NgVGJXL7?y+S`SC0qI}k1LR!KkRcfi+>a%`f{8z!jSUNguhNpY6ExPb z(>zy0>NGYm(Rxi{k}Qfw^vQJS|W$;j~1>CWj??0n~^O0JTzsmDDmBVRBe9VyRMGZwv5gymb*i zNRTKP=3SG++ay4VPAzvo=&&vus8n%j9LSRIE{y{fb~7E8<3@+omogft`qGWcm%diX@Mfx*0a@3k`AJGlp-XJ}6!W>`0r@V`sDp zAd{ng{I6^t*4*S9U$Ge2S@T#2V!5kOO`SoR>+<8in1J1{l zn3@2j%Tav+bAiJxn4#&-dd5Z&hn%#af=|fL$6!A(9&eiXXT-v}W4+hC#lqS*m`3_# zz}r(QDfN^_z>a^TP*Gh(Jb`}FICWOtdDHE+X^GIoryzgB#nH-2$Q&Jpj>)9)M^qj37D>%c$ECzd-B>$Ab*V zLz}-gy_AG9G>?Q>H%>68OkqeGSBB=GVR3bgct*CB1qTIg8>M4mC3I$pgey)h^3C8S zK#fYRRq6yB(8SUe+O5UC?X_b92%g#&~LA+UO?9nbysxWF#feyo|pE z64jHV#0_%`lp3aJ%*-gAng5$&xjQtvJgmkatR}U3OWmQ(3yc?$1G(3oJmp?Dq}T+# zY8ZVJBg?P@Zf-+!)p)HBZ0%qhJdD3#GDDrNYFqf2m6R{VhcMR^7&6B*&jeBwl3(!@b{kSy-NH$mdl zmOFpZ-;|v5kyN>6>I;8s_WNtm?lU(^3^ck7gx}~AGmlEaZj>%C99p?3Q-1aqfaJ@B zB;=2SB;;|2B=Y#iMBIIfbTJ?MrD|9G=Zt~J2^2xxV68DQ6Ecv2dh59jA?wA+AX$PM ze{g07wVSKU;4hCt#yc=UjapVm8b-1>(i}|4$iiR_T%tM1!e9>g6k2|8)a~k0LTn$y zNsleVT)InhG2f06ES2wgsXI=jP-PG~L8);+cUVC5C3b~72H(jNk&MS>u4y~(Fopgu?WP& zf|iZ%T$knlZ4#$h$hkr42`7XadNl|&crB4Xphm(xI)M~{i*sG~$pv7SO}*5j%}%Tnp>MLT+FWs%iA$Ec4oro4`>Y z1{bksPk0^Dv?(?MXU7N;sI0)zp=Gx2zd4rNdR19?bN+`E<3qEpCLl81MAP70AA&5L0V2mz# zGYK&O8m4Bn;4)V&c3sdw17l&`^cVC9Cx_%w%4i@MCR`o8dr{DYC1pi0u0d|D&B&!} z)SLuO?$X4GWy~8XIp{D($#KO*1`^y{=CuAW4*HjMvTSDqP_S4rE}8aE#s`vx7! zWK_@*9@oqKcdgOqA}na98YGs%LO%RQgoR10gB&FC9b4EFGH=k07Tfk68%W#@>;TE! z#0e(JFPyZ-NlfGlB5plg&Bl zW)bLrg$q_3;fqyrvjp|Y-7I0DayN^wQPGilb+sc^K$(q$e#D{NS(^;b;n=h+mI-pc zj9541@ox+i>5PcnD{r;Y2zIZW(GX@S>)D zre2o4LcU7yOQyzcxEZDPHhQ5=k^Dpk5Z@Yjq{pU2MpMINw2R8t?Sj}m3<~HtY$SZ>rkLN=)m`b)P^<1!_dr`SOlkvz@%VR| zK-%lCD**MLj=DwOt~lr@XPQrN@SaXrXXWSEf-L!i>2i~CZ1y4Muluu&=}o_eDw;W2 zJ1erOz@|XvGH^cl*fA#tA3Y7HJp+`}xF&SEe#poGThLw6Sd&TIqPggL z+=^kUoaxw`{uAD0k5V(p82Ie^5!a!|^}Ji5ypj5{;KD;`J4lf59np4hdQwk_6-p)T zytgRpuXb)Lqjo9=gYH(e9n|Fn5@Aaz@N}qqS`wvxkxs7qiRVCkFOu6}Kd>z(53^qo z3xd<8?cfqqKk>GMpl`dLyveqM+}zd8%9ub?dE<@ZQ^>Ce4=8(n@Syk6W2Y8)g6~{Q zA>hT@4xWFl9IQ~t08SbN>83@ZcyBSqc@w0ij-We!cyDn;^8y;Fa5P}TzusX#o#APH zi(CUa4$Njl%H*E)5anL=!Ps$dec#f23g|H7wQB7s@05iM}Lk z1q34vIg)2m3#1w{vrkwUriP<;QaN~{O^$dYU+k#o;$tB3p``67YRI$6IF$*rfR?A` zN*BwT%%L3nEWWdsOE1&3DId z%g`!CpJd!1qU~AOcf#40ec3X}jRtoQN60u)D6Wteg_7`dif?(#Ru7Z&%5Pdt&tI3l z5l4l2saQ6I)_wVyFWdTOQ15*&q!yJW5^F-%NB34K%9>g)oHI$VfCM*f2c->+po6E7 zP-qLMbD~q3Ap2HmI~esism`nEN%9eozRO3=veC)-mTqe6Z;SHLB@0igq;*L?{_7pj z(RdxObqSdkHJcmOPX$R?xqKXAm6?33_^tZLG3!YA7iUAsK-}`UP3Zg7IjKAK!_M^P zbrXx;O2p2eFBggYTM!)q`6zNR%3>GENB&_sB%8K_TIe@z2POWc3T5K|mBRHCT)QIL z)&g*jF`-2qz2xDZ(*G{B2qgZKY8KW2qP(^S41Eo_VQaupONHXS3u{2d8UTl3#4K_FBrUA7U9@2^yN8o!@W+PyL z&f`({x!4FY-N)Z)?llCxy>Kqos+o7a{W15hk`fVL7d2;p9V#h4HFSaG%&YoRrt^tQ zL9RqLMbeMnn{Ge30) z`N;j`KiXh zoMOM~W^^6TqCrfU7yj?RC7tZ@A}Xa$F*7{Ydj^WUoQiN)a7$xnrrpNoO8%0YIwaxM zTlOuaH6RA;Ys|^hg(1lycD2(SbvjlWybnilC~+#^SD=-e+o9r^z=<6*!kF%nnC=0K z7_wA*LwgA3cgtducg?b{e^0!(-H*OZ8SGfGQ#Nh8!QK1-0SLnJ z1%}CczO>G};8I=P=tI=~&s zs09FaT?v*(8o>Q;@}5ws`(2aIIzm3iqFzJAS>5mUxR}tYn&43msSaS&jVjM7Mg*-w zOHec8=$3qS1>*ZU~4KL3|qO~Fz11}I@Hyp8O16;&M zDyX6lZ;*!I6#Yp&iMLbrcp{p>(1E%lD+lTdFe`Ln1R1Ll5?{|U#*RW#)D>A*)D<~a z)D=4Ap;=hiqp!9HW{%(gly*c{!#oS6*y0g58I@cPN>q%P7&rc@?uv$aG6<|%*;=-# zqZ`DhK5h`7DzP9wCB{K~s>Fi$4Z;Sami*Qi?X=S>p2E{h7BArXglPYkF7Y697C?}yt4^xp_ye5({7;a7` z-0+HYWx$Naa+pqrTs=p{pavC}+}#{dL4!R<1wssg>Sf0+TfvB}U5rPA30(~TM&9@& z_1Ht3kw#|l?sMvE)7GMw%Ni3K=?c&dO%@L#;kW4HP zNu(CmC94xHUtO}6K2ep*=B-c&HU<%bSV4ZK22%Qx%Ea^q8V--(3)0B}ME|{WM1qD# zoZQ6j0uWt7*e_JTc;)@?nAAmoexg121khL^F*1N55UjrHphhPlVj@8ifvpa64tA$a z=~of#D9}L~!&J-C*hr2CIc)}F#P~8&4TNXXIEf1JrmAXO8V7BbOJc{zienn52iS`? zlL!dCyAG^?t>CSARf8A+&zVFHaPQF9Z`P8?UoeS0Y(x8rcIz8Oi7YB5k=uZ7z59ZE zzQP5P&j}Cm^g8rc_3(?($Ivn8tMadr)UImjTqCK2!ljdqqzFj{0q%f{ zgd*j2#goz85dWo*h%o|NaZD39 zXAF)h6m^-@7;R$#bOsDXMQ*e1iD}^5w&;xge_7}i_rE9Np6s96ucnGov4!}50FTbJd&~` zd6Y0F$pihakmOO%Gf5uG>=#-AuA@_7rQHs&H0a7~{ANbjBCrenFL0_&h96KEHhiEh{8ATg1!65B}OZHe%|XCl05#rD>; z3q+}w-*Z8!Zgy06s$SDQZ~^4xfRLCP8QY)?YpSPUJQqk>CmWF+$vKGZB#2df8E;I2 zSiJ<}$)sHKigYq5*Xk%3uS_dzgPY4O+|XMvXxEumvxK6!%IdK}ZvSkqWvBLnjZ*Sv z+6&50f!tP?LBx@ycw~xE6xf%8z#a#Itv&*=8Aw z)FcwR+Wm$#A8eWpTE{h|i2&hUK7jBZA3%7@2N2%p0|={P&uGv(uBlE_4fgKV#T`gT z9XKHI1)%Rhru-qh)s&4ExnvIq!R>k>_Xl#t{!jk#to0ZdV8XniwjCf5AkGRWCL~lQa7%y6)qOE~1paOkpL5zRd`V%&t+zbJN zJO~ivL4Y6+0t9&wAjpFNwZj7es*r@lFMxo{0)9Y%S`?aOH#|raj{;s@3*}!~5rJ-;L zepTfPe%09!{Hn7d_*G{^@Ov#oo+|p`p6gN89|u`KP0X{KJY4iRG^J%aRDEzIhVKa4>9GiET?Y zrzDhXBy^%t6X7O?SrR&|m_g_SMcrvUEdl{5Nl}lKtwkUz@wNyAa&|?%wFpGXWs5*+ ztYl<+eLdL%yc2ZzDb44zC-qGelVCQSao9%#@4^vu!4|8nTWID-{&N>==H;f{S zD~hsB_2XWr`KY|3ce5<$YI74b(L#*9MS6}-R@2lKAsok<{r*BbIi7b$Z^v~A(996l z;(_AR%Buib=;X;4{sfmy93ZFU8!-_D^a~mVkC~GD57=_pBL3IzyRM|io`_>lh+^& z2SS{03&W;rp+q`{<4UdzGYkjr`~TT{A2_?J>hAm8bN|lVJCl>iBn+7V=N>{cAd$2U z;ZL#TgntpJP^*>prPjCl=_@m_Z{ZErwm=3;Ev@O(7)GRub{gqplwc#Kf`U3KRa&v8 z6>F-fX^V=L)~MJAl|S$IxAs2wo;x%5W)edCJT36aoO91UXYIY$UjO#mYp=}*S>|Do zomr=v>^0>l&|FN%#bs;2pe5@Jri`{)%H_wa`P_-Jgycubm`iCO1gPNY6mP5de`mdr zXMtW6HIiVD&H6ZdMRq{(Zd^Z%Zd1P}Pq(Q*bI{r@CUx@Qxf5xR+qM7HEP`d!7nuJr zzr596azVd)rffS@v)zcfoQUdd%ln}rv)&ml^{ZtrhzQ#*)Ar;#Th3PqOy-r=!e!en zieqB#+?wh9EMx2~mT0J*NXPnbk!vpTBNVEIDxX;?zZliof3vP+WWliQS%w>M7MNOs ziB%sjm`r|p-&w2AnwaG*q}C)izpUg5L2nMUShqEw6*_FONdCb#I!JWor?WW;?N}UH z4#}9OLDIobWB)17)^4!~!fa1Gg_VpG3~BNp!UGS~QQoUqv~(}Jb?PWv8uIFBwi6{Y2J`ADTTfWj3q|=k3k)W8 z)n09@zyGi^H|7b!FYSn%!Gk9R7s=2>v@ zOI`|QN-~xuT04l%Qa@_iZkZmHat+xx`!q0?SD3l9MBuPQV79!%GIVPul97`4*0pAE zLYB=RTJyEmj9ILKZ0>Yv*c{DC$(#su6J1*2Bp0jOnF#D_^~pq_&-^HFThYzO=#vtf zc3BBoLVO>DkgbG(==MrT#xHFXHtS^G+a`XQM=oaeo5{tDO-wF&rRUZ&2xE6g8+99e zCqIl`pjlfbG9={rg~^|njUVu`F`pWmK-m?|>gJL1%{KG7!Ey8*La!AC1i zMivd{Cxd3twR`7;U#8@o(r)pv`hf%5Q*1Uxk??C-GHtvl7Hu9=#)i^)=UWJANx*@O znRgzsRFX`|=2&=xh7=@XE9XXg$R#ZE-pkC<HWBP+{5DO=AHPRdJ#h>#G>RwtBy z&=XQZ+8yRS-eXlEI5}IL$f!tjdl2R`{w95rcP755-ce86@7F;+UO@0c7B!iZcbF^6 z{L+?pNO@=S%}PM2)dfsGi9O_^BN&CsNZH}hpKSx? zJ^JlTj`KLz`jw~B^9D}Z?(TJY<}z=Ww{Ei@&NT`-;h3Egvyu#InS(Kwvz;-Pv)u^x zkoqs8@96mK)oATn&&>aJ#|cpA5C-|Bj5eibMq-Q7`An9Fmy?+)6s0?fk-4_JV=ZqV zw$U|vZTXXy&a$1qkSZOXK$q|Yy0j<(x)!kTP-dj$N0rd<3lBOc&9EkMkh7$ROnx$V zY@zI6iw&6+H54IVpu33-Kh7GI(3yW>pdFCzFnMt7;hu)(x-1Nk@@w|A`AvD#v6c4{ zvnl2u=+MGICPNL!mI%`=?to)041nX#l^es{vYaSAN}@D#{*xuL<^0dcjl*6=Zi8Cr zC2!oI2+X;xb;6N;d5?9L0W(9OcU<#9c1BT7l=@S3GHDVjYRQSxHr<4x8~N~|8*e&l zg_b^XxYq0yL;30FoJIt?+lHg_(~F~QRin6`Fr-#eSamUHbHGt8KfTOI8{)Q%&AHxZ zg+6wA+j}e$fz&K9=ByKjGDo4a$BgA>C&naIqFlHn;d;AIj48ij?%B)2a7*D@kOfT{ zt>E}oxt}*F#Mw3lofOLD%%Yus@`IEz<*AsvlHG0JemXC}W>~mtNZlvg^z}!#`h=UU z+V$j#q7rTzZ%P5eqPT4l^h&>3WR${iz5S*M3r)X?Z_=gTR5x1bHS|fcTP0IV zR>-VD#F=V@(r2aQ6m8tsY@L*4XoYt@S{Y<Mg9=xM*}Y*y^^=p-i{?-5Sz~N0wI||fZfehl z$YXYD&kk7m)SghDV2OZRu&CcLNj|k_u`{(N3(!oBZSY%(F6W~*Emw957nk5O1820v zWH)BznOLee)K-Ge5_mTv0f9;SUUzlsE2WrbeZNV`Y4kAFw zH(jn!TE=2+F4re!0ZBf21YJ0}+d_d0h%*7)sx|gzypEeS1PdeDy zjFL}62{{X`rmb1h&m06{k=^Dd#q#(P#ZoHh;Ak0dJ2no#@i2Fk=m~pFV04eL+(Yik1(68)8^JC;(Lm85BI1xvoSu zx^bl}O(&7cb=K`?=P_kFg#tbhofTy$rCqiU^pyxqy)Kuv1V8Sid>&I31r*K7W9sX$ zWxVI|n37mYgQ-Q^OvoJZJf;j^HLV|J9#cLp>SHZDGGXYM$CP&qdKXR8dKc|6+0JdcOl z>70qWx$<#V9@EUuQfP4Y(Q|oB(JT7bD=A4%s>$qDxN0%!AUB{Ox>;ZRtQ~BGpQmItxE>rNrvWRA?CN4_xWSN5JC?4g%|2_o@uxo%>Mp99zfMP1yf;C}b1pRulX!}%5 zQIJG2zk_7)O)+1UlA)>X+pU%;Uc5aXm?GX}@TSWh)y5%6iYPLaw!Gt51$&TjF6sh$OC0`z)^V&jJrC&?jqZufOMFdYzuMv9X06 z4nuZ6X4^HUOs*{A#CUOgXL7y1poq7Sto8PXzRdNc+jLKj2Niy|B;$s{XW@s{ENDv( zeGXycx75FL<~v_L^5KDC9Lmtpf+Qbb!h4zhP=BhZofyGbIFj&ZZ*eR<@M>BSr0=#< zsLj<+!Gpyl91Cw4py08knop`G%L%OsXYss&f?$xLGyRKCGAhyW>0ST)Z{PoIJPDNH z;2sP2of-q-Ms0)PQ^JedKmdB{fS{f4UKNN{hVd}!bivmg z-Ol-8v^I!ls!5n`xtKF+i{crulVK_euVzrftE2bu?pXN5QaDFLf(w_*hwPLb-R|So zK09zKYcFxII{3(t4)qhTVjCQF-5a**($Ra8Vo4$Tn3|$jE76^_|2%eih6)1-*SpS8 zRvEvLUel*tSLi+am3{Mgh`?bi)DjwC1F*#!SATt3i8LwTfGdYD2D#z~S@_Hbx-Uf% zso$a#@TO=PeFr8PmAG)V)UeRxO|VgLB`i2aJ~cXWN21Zl7lnhVqYtERxXRo|HE2NuKrMv+ zU^Dt&G&Crd2FjjmRl<5_&y#*J2OA*9!bgY1Z}8MQnht3Li%^A)JmXEMNEvxVQ(0|~ zgD83f5AfQH)Ymx-MjIeb7o()&PHOX2`C%aPfB{|}2leX@TMXvKp2T376N_5IG%;vG zP)nL6{VdKa27g|`bjAgRW+(zd+6Ji(KR_P9&FOvkM$)Y$klPaNE$|xw>Lh+4-B%os zeyHUf5P8cgu21t{bzL~Us{WDp6^hHZl&-5@!;w$XM6z@xJP)rm%OD&4tdR7yoO;pc zt47rPMzo1!sMTfs)~jhDUYa(>qc0Z{i(y*IkyvS*$C z-n&lcghgo~dLY#9aV-az(_2^R`0;Xj3s*H{dY$PBlmetCb&ZO)0GfWzfVUtt0*Xy2 zRN|ov1%hhE!iUOq=9CMeGJbDe7Z0WPD;{K!HgV*Yx;;1+p3FOg7ZKwn?T~){JuoxW zNx@ob8X!26k?h+LG>@a}@kBDLu1o4v_TlS%&d}xN5?6-TseDgC~|+|5fcj_tV|$Z%_yu<#MA~tomR)unL2g5`{^| zHK@YfmC{(v7}g)QXe=He97W>`RzXp-RHyL_M~aG%rpm6YzhO#2FLVRioEIotCT0WG zle^bNH+j%~jsAnRH<=f-qnyt6ZudZIjlLF8dJYo$goHjJ!R|zQZ6x%ykU#>tF$M?X zwszMf)k!Rg{ahA9I<&;4=uN(&YNJ*UbtJ$HO2+M!**U;#B4EZesYWLxB~-FeVkv#P zaHV53Ubu0Ynxty5OTKmwRE&884P!!!8qaerffS>Ov~-c3j@=dkP!Bn4pEwnPA)r6S zEd;!T_;=`*$l@=s5y^E#%<|r$@zftU{kkjNnQ-u8bi$dzdxt3Jc4JcF91jKBmD00+ zM(o0k>DC7dNzHg)<5*>i!HY7Nqx2p3;)BXevaH?Z)xpjIz6a~j5`9rSF!N9)JdtMb zJ-+K+*JCs2{F{RPAgbJVy+2(_aG`$Ox+*Q$ZCdbcHr1mzSe+^8TDrAB4M`2*3WUme z80|~Xzly)=vO*AfN*i`wA*H(W3W4J%3W=Y)vY+RsjZNsMvG6QCwqH6)?JR;-g-DQS z7z4iuc0ND7*?>aW;S#+blEDcRKEQ5G*Z;j&5Yx^(4_u+GP-Ef#SF^0cbdL2Juino#jgSi}HxtV{GX zTJ>&OW2N-QqJJVDxYwZEU8Y)8OKG5heW$@qFRdrXNK8VHaV@&T_>0-?y71Sbi@VWE zB}Wk_r+tdmDPDvUda90Edb$pcOg2cMe|@7FrLS)^7pK3|Xf8=_Xf&6lzuRaYmA;|T zJUacoMss<3W1~5m{(hsmBK-qxH31b^gq3vnpVX!9pp!~E?e7)pzRllj$K9mAkGMbZ z4)?w`+wAxE${D!V-!J2S#@`>s{ceAMH22f~9^*6J=I=+jpY-=DxIgfAgI|ZB3FTZD zt`u#q3u7)vvv9~|`MMCNLOi+-E4>u2&^(37ghU5{|LejvT)^GQTo$bh$G9xfId`Ra znbsmp@lh;9!dUP{`sga=q9K&+{ui|g$AhJySO^V8+W~kft-6UTe49>jJ)P^Dxvu4U zGuJg--@^4|uD5U<Ys2G)~C5@*V~_R zmB(NQSD7Jd$Ho4-k?TA8{VM*ZW;gOP*o&5-sclRSw{%3#V=Ma<7LJ6P8t&Q>YJ&+8ng(x*u zO1MS4{1(b@?@>NQ`K})2+bF-INBI-PHNUq<`Qw!Td5`kPDBsrws?NxARr zQNEAz_xC7&kn%k}%J)+K7d^`F#Ub~B9_4paepiq3J(S7A{g$%URmxh=rL1+8vi>Sp zDQo?fvfj^C%38mlQ`XK{`R{F({F9XRKTBCZEM@(V{f!s5m9dod*C3T%%KGa)%B8Ho z(W6|-`jH;xQr6$>Q7&cuFFneotiRQxT*~^<9_3Qj|JtKm%KG1WluKEEyGOZ{^?@Gc zQr6$;Q7&cu-5%vq*5B(T>mJB3}9_5Y%Ymrb_W&OK+*-cr$fwFGO`u8a7rmRIkbCvatd?981`&^~0 z|A4EM^&7cLS#RYkW&MX-rL6x4S1Id1;wojmjjNRPo486@Z|5pyeG^wH>nW~M)^Fx2 zWqmVODeJdzm9oBttCY3cA!V(rl=UBTm9o}vDQjJ&to2;VT30FSw{n%T)^926w{exS z*6-((^>fO4efst~%K9C0(fx^>b+^_VKijFSry-SI%KA@xluKFf=us|Z{mvfcQr5Ti zD3`MSvmWJA*8j6dxs>(0dX!69@9a@7W&Q3R{Js;os?U6u8RDD0}N@1d~k%=%smyDDpuQ&(mEVG6q{>yJ>_Rat+O z!mi3%B-B+|&rsM+S$~YOZp!-Olyy_qBA~g-`V%~rvc8Y2l=WY7m9qXMS1IdHah0;Z zpR1JhUvZVP{%fvM)}Q7oW&HqGDeKR0m9qXDu2R;YX<{&!wz&m9qXkS1D`#ma_hPu2R7cl=T;-tiMq2RMlUCP;#m|S1K3yLtRUyroY^^R7(0QT}!2+ zzuL7_3VMInQmN;E>{=@2{7+p=rJDb_YpE3T!(B_ImcQ1uR7&~lT}!2sztOc+3i*+) zrBcV=>{=>i{4ZTgzeP!273T)`QHt`4I9K$q6y?=$uIS$=$}8bq(YGnetKeMG0gCbp zI9K!?it_3=S0wVuE8kqvcPYxN-dxf5D9S6|T+w3`<<)MkNFU5iA?g!HdpjGMR`@5EBXONc}1Hm`XNPmHJd9EY2=k`uINV;KRPKX%E~dAjzepff9b736(FGiqh`Qso)0@N>q(mJn+5i9+ zz@^ok+IaMI#R{Wwz3M+UY-%JGw$X~Hr1II}RO-+!qC6C_ZoyMN{J;X7EWT24O{;?w zZ7eOA>fHlA=!|G)MvNd|Xh!iqiKRMJk}N{No-SU*@(6KtwW}C5H8pxIeg|?@+5QauK zF~~?27?%h~iD~+~2L`~f;^JMQMY~K9T{RBlt+HVN;aQy5ZlV_n^mTEe0=;p zO(0CrMsJE39Mz@Jr@;1|==qt!7_udl^xMZR`R|dR_Yb&^sUDMv(nI+DKc!@@c{F56faz|!jAK4|00 z0UNrls}umqis`y=t43m%A(WUyHKrP^X(|t&=*G2`y3;)*`y;MK4QD|9&Z2u?G*D=W zYV=S6`}-Fgu~~f}^Q*Iv$*T;bWqoTCbiW9?zY9V4w+Om_7D3b3hsi;#6~a!UrixvK zP1rFi)#&Xfi!CA-B&WOSCdcYVYbLUOMi!New6!k44`*3I*+)ov3n82t%oIQbBK7Nt zRHVV`;Qm*$M+Vx1TCpW{hfH|S&q=la;F^SRc5$+A4 z#EMA*EJ=e4*z>_-#6Tln(#Be}QuWmJF~J{?d?V0yBcXw#BXHL|5=dBB?3k~O=vAXo zhpH3mX9lnpxgrTor7M%;_}+?wt={D#|AR7?^1Wp zALX_*dQB3?$6j~MwMlcsB>&Z}*&vy^=;u*Mi{s``)2jGgO}2~V|MHU1AX{t=CIgKh)8I(X>Sf{_0CkOT<e6q4ka+=s+N40Znlc=ZdI(eBnt?n zM`x!WbOjdu%g+z-Q-Q#)LHx4jQ2>BcSt8ZW-9t`}N?MGC(*v}|#q;VXL9~n`@?rOo z<7kWH#1`2zq-N23HAsVqgp~l`J%gg=_{a9Lp6(u!+(1y$S^eHKghE>U!qH5Eng*aQ z(ojpbfOg5$k4Pd#If3NVz%JhfV?kocn-z6H{0i|T{X%j-cg7^J1aWMlATTBU7*`11 zufRSkK{-h!_Cvy33vhr^P(q{Y3_ z3Om7SzhdpY78yqA&X05|juOaq;~{PTnZ|j_U$D`_v4wMu@2(+Uu;6Z!EtzB#dfS@4 zB1Wzt?To!EY*^4I-WWijUnK;9iB`*PlrFKsGpUj8VjH(k+vYeBZxKW*#nWvBK|>-N zKj7B3J0KRZw~L?FHbpZ-I@^XV@>-BYDq?4RD6DgK+iIgt4Xp&7X|O#*9c^2zw#gfG zu(m;N={+r`@fL$KrOFHyC^e0i&WNbgJ?v-CJ4RJ-IwK6C)ffst+F~Vj-RM_9&eOnr z)S}xR_TVjOFb!X591WL;~wS-i(iW%q8k9i|r15?L%-5(GjyfRQotJo4IueIzR5jgEam{Z^HeH?m;j&~yC zJ01xdViPlltaA{?cU+SkyP@`r{HBPYdq5m}T9F`JK-?h^#fk#=Fr&q0F>C2h_Y6C^1vx&(5HK&%v7ecwr_EM{ zhAb0{E_@Z$fpVxY-O(0nzbnB^Lb0$>SHCFBzoD^IOS}TH_F^pPUAj=?eGU*Z-D-`m zi8vf)z$-&V2QHGyOIJ{rwA(e75&zB*^S^Oz@3ziR(K+gX5JRi2dJj#F!qlYMyo2A# ztOVV2c=Y7t>o$rbT}@XpC7PV9U3k?%Wx3TUZBNswxsgsS!F~Zz%rw3`lq^zfRC^Y2VfHqN^uprd*v{HjZ*Pd7a>2cOe!)!J6B_@AS*fB7vU4-s}LE(wkMI z>L{rWr}~5liPa2~Hc;>prZ|*OynCB6Pzo)|uq+=MjDr%!)Y2AVOi}3}6Gki&>`55* zhT76e7<+~~2qT4jV@N4fAUn;UpETGA)*=np+*zbScQn);q(K9o0cn)ylE#DGNMjGR zKV#AW`W({u`!;D%#~jjV^{>3=kTqQ6xu1YI#?-Lmfk<4ErQ_QX@Ljat8QvjN;hwmSsSo> zF&()G<(W1vv{cp5^@BwwsPZTv4ypT{ADyky9dI{grCw@$sDYG&@+%UyP!<}{1Cm{~ zm#Qleo7$M}8yc5IzdHCy+i1kiS`#=YNbS1H_05O*hO$#dqviBL{lZ&eNWvO-(pc|^ zrDPb=17xk2F>KyNy42F&+Q?&4b~fl?Ev@(-I%r50L6cm|I-6N-o1NA6>!!74J}Rs2 z0K56xv-h%ENSiVZOGAv~(g5dIHr^c@}+J)){HDZqQ252 z(_5>9F@54j;*nV+VaEBRz8RT+MJN;zoFu)&^?9gIjR}g9ziZ5qk<-nWS|_*8sFSF# zTqm=M@uM<<3fe~Mw5=>gp2Th*kBz|#Y9KUDfU4G{L^ba>h>&~^qM>cS$P!l_6B6!9 zcE>*Qq@OzztB(%3y-WSH2_HTm%~k@FZL)m&CI$D|ewsfkAA9Xqd0tbhHnPO-tq^gpRu%7zxf(4;C(2#`#b zU$ZK4w4*r?Jr`c7!I#?#^#+pAfcq|*1F^xUwWHz`xYz>VkPN08g#x>|t z=K;)k%0Kn{DB1qbUeruZYhF|0oJ;nxx^kONoj+g`G)P`EO14B}+}g%AZv-T4x2 zOCByW*O{DPV?E>8$ARlznl`>xPe+C8iIU0#I)L7S6!cQiuA1ucR}Me)9GVB@?a&@e}Q8^Hs=Nx7?MT65QR{@$9m%>xma7x zJU|ABHVeNR{dKET(+m=+2AU=3+OKMIR1`}oQvze6S%)$uAS=j~0F1Hl@q$>jmOijd z?k_j^wxu`SZEwVGgq&EXn@(It=?~vP3df8;m2{#lL(@xf`TsrsP$0`hqrr^$$*wB$zmhH7_sLZAI*(y_R#io_DXK`x5G$a ze>*}JfFior*k8*PCQr24)Lbe`P17edWGd&rK@o)AY`^GsSyn~v+okueBd!o^?a3Nh)F{n+Xgm}iqMpfjsQ5;9FA6T zn_&zjk$A%+z&nu~Qczi}NOK>6Lj+pRSsA5Y__#?TFIa9|Mu)_CekJ030#-E9SK^tK zR$y<)8E-tqn_Dg41~=OvA{G@ca*AgPa`c<{YtcOwB`YYnk2L;z8^Kwe7%YJA?5ON-VEz6X9N|C_xAuZkXA&9^!@d~FKXz9zSU)jF-l zy4%}mfcs!)$z6BJ;VBJWNmoXnE?ARA>QZHogq!X{Pd3KU!epQ(2$+>cULKT zv_d5g_6%tnoT0`G*`m&XS=D=1Q3(S_`GmyLjHIxyx1R0`tYYXx;Bnvb03oU$NbP!3 zBWvMWhMB$Z5rCJ)L$>PjFA;(~2Y^Ev2`(r$6SNj-6Iy!3r*SPqpj? zgf*uXZ`9Kp-P1Am^z_q;lRV`)t_<3CMv=w&cV$eKwGCyst^$b)UK`$GZgdo)TI7pxUGgBQyO&pFLTSIoTJTBxW~}<;dOf)xAJ- z(wkYWig^IRJSN5kz)%`_zU7d0=qRC*)xqO1I#Pr3eIz1R7{g;^xxxfDHiEDDxHU6$Ut8 zR~uuxJ=)Q2(SVKX8WvB?L|=o(Cn;8YL_oye5?;@iE{BQLD2x(J12G&NgZWpgL!bGrZouDD9#q7N+fb5vzN z_$KEGJl*G)bNbZ-zF$F!SkOTxv}l%>fibkVj8Oqed~h0+-PE$K={a;{UBhys*l4?o z4MkHPu!JEKRK%G}`2RTo7vk!NxO5OM)BdFNGXq5)*~F7?F!20DNVd}mt;O)sf+WJ@ zJVP#x4K7gNj|hlnYw;#oB<^njmep{U1prv#2l-gsszZ1_qDb~%1CO3ZjG21qa1%NlCc7NlZQ($~qBkS4u#vtE`!^L#JP_ z_w6yT8lE46r1Sz_TJ**Y+7GPvy^x$QGwwi8Evv;PZ(z<0QQqnkTsKp=M8q#zmQeMh zK}@=Q7=`S7UCQNJdGPm4KYAwBle^rL%(Fp=NY%^Re&&gqPzbgn3%0rBT6`*G!bcFEzNrj`sctR*zjii&7QcrdFp?V=pWe&y|ks^kyn7K>@jrX#exJ6LNVuzaK*~iYn;wFsp>ZG53WRGvyUjZ(PcmpW}4f4mH}MFxVT{fuxf4sj5X;jWA@Q9wmK-X^1dN z1{H<(=|Vgx;fOOQT8$S}o>1gR$8g#=ZaD2$a^LmeD6r+TV4QETy zvz(~CX5H^QAL5jzbyR={L+%kbbO`)1!wuW}!4?Thcr(P&uCC)PJ(0O_@pC&FAX(`G zTp4C3VB~TrSvVFmMdKe$Y5q`+!Lp_ea=l1TEgq&fk}eWz4oY7g0YL|ybCFnKig#b( z1cp2dyI0AZBI-8Rie43BYvfgD}179dYQ$>_i3%G9`_q*ofw;O@$bMW8uoh zWt@G|H#`8uE(ZdBu=mV}lshJ{ST<)WQ?eU}2HdndxY6u!dsic&FU}EsZyOP{CPFq)Lg;i78Z+}u}cWElCalWuMQ`6iE8Z@nvQ8rxn>gJG` z?^U?hut;z@X*xF)53UX>S5s8c9eMa&Q0N|(2sZrt&cC|;AOGa8FW<7|G$!L!X1GP> zAsc@G3m2rYka~xH)|j#C{505P4OpZz-OG-1ZiHNq+28dg`}hC zQw0EF^*G5CrSJQchCx$x`zD30<$2g@%Wu?_z(HC8jV+_ry4KA2sc;70x z8PGMIK-Z-2^+3IG8D_H{eVIWGn32spwu`$^~BR3i5u91|_i^D8Ur8>#OT5M9IkbbHVU82uoUV&>1 z(H#Z-Tw^~W&k*Vhoj1O~jm?lralC9?FPg&#Cdc!fZd(Sm2|Ab=cSr5e==L@QvOWjV zj|(DL;S$>YW1OS&^;id4r1qzw5a!X%(d%UNP)0UkpB z55_fjyhUAgEWw@wfF?zHVR$O$agZ#H`B_SqO>GCp(9}&yWoo+)I9S9CbqMn3y(RIo zshjkZ(#0z6FtG?Eqf-=1Mo8r9@C-Zt*uqxb4^4C!dRvdtqNdCeYcXd>q|@ID)#kY3 zzS4^_@ay$`g|M)tkv|QD?As@WjV8Qx5|f99VGk?`$>hlnRmK^DDy!Nw5b~ z8}fc#xZ&xYspYz4Z5`bU~Z7sJhARlmY@X~cDDm@e^3 zqluhQKS@ijejcSu)Z{EA_33DR*FalxsnJ7q0;F+?KpK~97nQ>ZfRblwNQasQMl!3Sv+KodlPp*vR^Nr0po*^HQ}ZDtMriRzVC>Hf7A7tGzrYp=RW z(hGs&&-^HhW&{G3!~JO{eo-K(xdnoI4}u~OLOQ5)m5xjif>rZ^KdT+yXN|-AEIPc; zh7a$vk;D6J#i4&zZWc|noL(pxtw1Blde+hzh?o$Mg>aXl51CFBm>>?Yi{t^yT zpvrB9iKIxK#WcpMg?vKnx;Tt}gD3dBtc{zo<~WHZdLER{;ZuYi)dk*gWCrglLk@wneo}w2Vn0sH?)359Xf}irL^N2Rt~MBjR^hr`w-WV6G}+(;FBG z>2GfuHzzc8oKmPEd;4WjxVLf3WG`r7d7)nc%jg;Z0=ufR7tj@Y0bM2w!F_Lj09OId zRLL}*`4l7C=+FS-umnjzBYeO&rCvA8&!PCmUKbA`H z>hr*B$gHUe7}kp@%>%=Y-v&lP4!mke^&BuZl+0-yHWI6`0>;K^cogYxEwfS0dKwCt zSTzT%I0u*?GU!R7$q6bOvO$Pbr25hxJmA>qa2VjzMaKYpVNNa4Fjlk_x;Kza3Z0;w zmr@3cGG1-=2{o<}p`20}!y@4l=g5R*)T9gzMB)SEi<*@`ZMkkfK4UC>L#tzVEXVS?v$B=#6s zbvn|ilGP4C>@|sKj*5RnT3?#POiNR#asbxfVRQQs`3O%Wp<6C+B%cXE^Z=i>wSW<} z8)8UY^LVLaQNGE4QMHkdJjppSRKRHGa9ahOnS`ovwCKR0Xj;&zxdX7#H|iq~nD~?q zz+QaQFjS0vuRjJU6WXegXVfEwq82X%aLMTfgM^cU@AbzZAzHmgv>Kh*UNB$(F+%M6scz%%fIM0K|!TL4iIJ>PsY3%+2b$l(6g~~jz3{NDUwF8N zD&+YZkPWjsXf(x4GxyNEAe|i4f;vC{iuQ&498ag;z9^l1*T*rYwYx0F@e?d&e#bkX zaqqAz#(~N1BVyRMf;@ z?tz6Pfr6j#1C~t_G7KARH*F9BMNgGO~`sb(9=d z_Z(i#Amtg+p%K^z=faH(ByZG1M&M3Cv^mfb_fI-NlWny7mgThsFq{a0$RUN_*Ey|i zA{4eePSNss;y&R}>Oiw3+WHCCM#(hmS=K&#U>#C-3ML~o0`2#*k#9WdrGBO?+M1!IEWYWK#q;OWF`fr!{56463{-r|x8!a1+jPwr9ooQhxScyLX|-8iGYOe|6H*Cl~5l#%b$&-~eO z{JDTB6Ddmk)7J_#%^7^9=%;vljkUX zhP_yL7Jtb2nvZcBnYlEVaa#N(ORQ~DUEuoK!k}hC8M<7P)O!UU=Ma`QuCjM>IQvD{ z+vyh0oRv8n@wQx$114fd;N=jBhm65;kf%+FAMYq4b5(jl>kyA;(Pr5%>sfufBZ}nA zIaLFix+ zhpOKEasDiL^V5t&HB!d28H<6ffi*V!N!K%u7k2vHaaqgnk3dV7k$o(`g#E? z%1qYo5MaxW&yS#o|1_HPj6M7Uvj2#B_}k4oTo1n>IHo$n9)1CK9{zWQY_-F7V&F>n zH*r!BfSnXh3iscRe}aS1Zx8Q$^F3!2F`3gi{pMG(uA}1-5@(G^4;Q#T!KQh;nYuk3 zkA6qK>|G^W_ZbWCznxRowbq2FiEgNJZD4|jJRk^z;0nxo4XdL zVC6CW{MY%Z$ggb8NwE@99O!~L)qIvBLgpMvA9Q<& zya^x|v~g!nCp=H>poMgY1)U@8=FHQtG4~<6IR(M-)DdxWwi~p*Qx6pp`5jo1K3RjV zWZtHwKt_o1tVIHF2yRZjZn~tQ@pg97Z`2R&Q)_+qEcnz;rAa2Pfb-gpIQ&M79PoG*R9oV#g9Ak-kVu)IodwiI39ABTkEAF zhG)gAWk@&I?KAai36i6+BkI*^H}DyHwG5Dv*TTJ8`o_&Ha+2Za7wSoBe|S8>QW-!*-(>2qT$=xlybS=0?f!^=~f357Pef zAoH5v22H&pmwpTR?xu~05V-_U57t&|zg3t8WI^+q&Xz$!`GBhVo3-G1jXpn8kxRdI zkj}b!&7VFOx%9tD>^_~a7qSU?jp8k;rWOjBJCD?iHKHIR5F_z<@X^# zlc-4hf!lE`yqLJsnxLLoe06ey?Uz(Kx5+KGeM}A_%M7bC&}^&SK6d4-(Cvxg#Y(SC zNaTq{GUc#ID?S0KfyaeB+IYTjhpi1u*Cr=ugPg0Hy(+9(mt9(>Xo8Ju@d-bNbBodd z=hKs4FKXMNz06x|u<6US2QW&RVLP1EZlX#F(1ToT&zb99O`S=DGP{17CE6hug}%Xq zrb;X6WB9+QOxqS=hh6pqZ*3)gqE(>1JuH*&$Ik`wR8u+`jYFtWT@n7Z2`VN>z>T+u z%{p#6Zg0RJXgMmCo<=)f*aWt(NbZ42CZqgaKf#@%M;JM65Zi}9#Lxlsdb&_oG8279 zyIghQW?r_fWcx@2Ps|E=RR~#W@6uJJ@*tLh$C2+vk_7m6xa8!(r5gDWb%k^u4rw%q z(LeShY3~r|Av3qi6|G9gi2daoYlZg1`#b9oXDrYUdpTNM7e-;ylBGjn+r4P>5!SyN@GiOGp;HJVhAX1tA$HH4~XJ~7SOF^qX6f-;8Y)}=9!f@F>!`tAconh;(xWfWE)(LDmrjTV8Q^p-{TLwpL*qxlH=Bwb8FK`eip2dq+%5Vf zLtHt1JRDbEAR+JZkU@s}gnw}oX=Ids7wlQ5!O**IW~Kb*f+~hS&rkYBHCUFePpc;6 z4V!$rFP(gnges#V8xHph#XCk^16jVv0no!gsP1SAhbSD1k7kS9IRXDQ6MmBpLtArb zE=0v}9p(3p4V@IOJ?AHX^8Y*g<&-i~X9j;!ij!E6ljFHL{^g_1M1#U$s!Usap-bCS z7MJbIIC(SmOr9Ml4$$c7;S6tsV|sb74w@n71N(^8nd$%0uU;$;0@~mnYU4DbApod4 zl|Eg)NNGoeIPpa~^DW3#KiEa*7CJQq1wil&FNo(6V4TH!{`J<2n|MzRFjDdof|oum znD(xFMr(i?iJ7@RAle#p8#YNv5tkN2tyyQv>Ha4PI50x&>=H4<6n>diaV{U`9X_%8 zg^X~$^={Gxf_f&=YAkMplJ5W4K>P9Dc+a`P%XKngUQQLI$|ji!BMIzK1!melvddpVHDV8qjZxO49{h^N16{`Lc}wB z*BDs#A+#`V+aDXiIa;*4IBp#t-r8YW3%|cL{EIt0L>ZACW z7vkh}B#z&%U#JK504}0~(7OQ`3y04P_Q0uXi%F9wLe9^zH+egjo1IZZ*`x!TcWnrw z$I238Bq4{sR*svP6dFhQcQn{pqBW`!{aF$Hq4+9T9Xx{QRUR5{e;NY4QZ&W439&wD zC0dK;w3IHgD_b(7wZeuy3-m0yB?N44jruY}_#2YSgPRTvM`1{f?) zq}3}Yppmr*Ps!F1cZmd>e~1PX?(|Gb0>KCGXh1;@h)9l-%xNl}g=t;%0nbg~C;iSA z=udSrSvna;+CZ=bvAvvzNKhmAMG~y7O6JjZ+d{J>rBC#Y-@G8j6Ve~pTEjVl>Egr> z9Mk7C3e+nOV8@@@EIK|jxEJxN>Tghx#{H}W1nHRNX-c;e>lLIYx*zx1kK3NdFT>en zL6xX$G%Vf5I*c-Zqyx&qT@^gWIfufWJgew%w;6hG35p)ljnTquNMpy3nC+F;cBeuI zoR%|TZrZ3pydNaMH^6{wvJK8_o7xBjLV#n?PYU+|u9`lMt{%Pf&2i~Y_GI36fx3}$vQ-QR7+4bM-v8?@P zB{fh9jIKJy-KfvhEjpDk7M|n$K^0YU04h< znW!RG-F_rUC~qyXfiUFvD`I+BXri`$)T2gXBAFzTdBpA)G9j?Lt%YZ$xMJHGf*&CQ^m1%TdeKhW?EtJ^v>q-s@{M!kD)cv;eGKj zQW`a-5A$2-9L$;b5#e|&LcF;$<}@>H@2wfzvzaT2wKqRr86Q8j-Smp*%Rpk;>zE=Y zohZgK^D2dh3SnkxFlQ+2@)t805(+tXp=F*UGSV5zYyXQg)*)e@ zF$@zUfFCWwzoCeo)iLURlt=t10~&hkPP~r3I_ir_3Sq3;YL?Yo7MzZ%Jb^JKaQ~~1 zD?rL%7!-4)eQsvGxV9ilT0}-aP)kTlYv3H}(|ik)wMBhc?xH^F5>a1tFzOSvwx~}e z2jXptBKjN7=+Cm>8y$-5TU3X%maJ}E#M3s_+0Pc4i4Po^!3pz`nG{K~EM6vhs-;GB zmiHmqF7bNyRC2s!Q;4x|ZEJj<(z05l5H0C^p4_BybLLKt?u1GcH!ypd zEktqo%8bEH+3;=EvJAyWF%yW0Wo!@H`w2Ux54nfAz}WDQ<|(lsU2|4i4Y}a5KkzA2 zqG<)4>v#lYidWp$G%Oco-eywc(qpJup|bbvkpPZE6gOKdEm!#B#yhsAXTw}#Nq+MZBp0(1kdK>%D?Qj|@I@ z`->fznzSk-AgaNo%+u&vW@~g|syQNw#5ZkZe%rF(VOmW#sFP$?vn5leG}b5bWz5#m z>TVo*4RkbJ@?vZ?_R?&*l+#9L5Ufa?3xTgfNfwYOWxj-Q5m-#R44Kp_0hEN%moQ#T zzA3HKFzyhhyI@3;$rpeTsFDOX)>@f-C2Jmd1T?hIL_JzdUAi&b*!s<{CoJsBNC8XF zNX-T>4rQHMvs9HKU)HgR!C|`u;&eKnD6b{@N3Dj@=BU`wjo}>Rs)JB}MHcxn7}hQP zS$8o2cE7;d8iE(4?{9Y>12^kFnE>wk znh1L3^0%3%)itQP21WHvK9+4DYb zW=&gO_yQ&a96EvQ<3!09s067~pFn=`*c=W_7c`?GFN#veADhDG=_HYJYvVFS{&DW( zkdLLUa*raxE90vIP@T`u(p>5X!6ls3aV#`3b1ZZqv5S9U?{c-lfYY?4qL-z{ouvOm z$bnlVmpxbv=dP63n+%C>A=xWgW75xm6<<+_n|pN=FvSSc&whoho6+%+EIyEKcm@s1 z`$m6sY^s3tp(jkUEYyuEvK3%tIfE&j6ZmU+QndL z6M7)q=NQ!`ua{NRqKQT)N$E9B09$P|W!K37~{JNdUa% zhMpWrHZUZ@VKDd_sW0ck@VK3$hsM+E)y>+7P1l@2r6*7DhIGLaC#i&enQ$z#m^$=mqeW= z*x9@;om{giWy7fwFA;fqVsUIk{~O|9ZMZMo@-Ffspw2iJkF>h+BCbrr%7Dg(jB@n^nPKl zgHWk5zUch^&#<9-(j4;b38WX`QX5P-OU9{?RIkynvWy*WVLtFn@AD_T`_k-7f*bNqa$~jnd zTe2w-Zi>8jTEWfw%qD^x>B}XqD=;Ur9}8SUL^&RCNb8^ImW-~p$P~<3o~luM->z${ z8i*IP>6;1Jdg3^rM^W`)85$UF8%d4L!Bu*$6JJW3wZc-H08a?9i6(hCm3o`D81hJ7 zKEaRZZ)GZ}z5G@p{>aa8WLJP_R|Vyz3kKxvuxiY~QDrbX+WoV1xJtWAzTLdq8X=`h zUz7grBN`!h%t0Oa_69N_8xCxp&fy?1o2-voj>B$`!(F_J7b{>i3^Sr6=@Yb0kbV>U z?{u!e^9YJ%EjQo!1~+R=pM1_pgEWn%QYiZuULMO{Udhc4eHG_kR-#SmpSWNIPfB5} z4i?o^JBMYMr5bFWSozmjzhSiN>8nikiCwjxa-eQ&boKQMk6TvA3^8Z0?7`DB{I=fJ zN-(eE_EW|qi(9_AsML#a-?N&Yffa7DGjy(S!$hqF2bL&=R0nYVp(JMjEMDq7Sh!VS z4Nkv+(d$D_%`g`%R41^{EHT4eu!o$M!A5cR5FRXq{4&NGa}H8rn6qtlow3<3qkk@> zEVqw)L1`HPo`Gi>L~-D6FU$jMWl~NIP|B1b@=HO z4yh{(O|LL1GFd<%`YaM~u`3Iuf}VlsheWA81JP%-@es)L5ChRgs7}DoCeki}=(1AU zQXbOIr&qYC5Qf*H@{5oi{~$Y5`<>=pDMEi_lN9~&0+SwIU@5&{kz7pgu|`U0>`L z9&gMI&H!Fzkh70zNL0ecwOOI zW<5&xRmEwg{)h7msV(>s>9e^h9K)Oi($ALC>6^oG?DiLHwU2hnxrRXtFizWq z^8=+_3HALkEC}*NA-yHslpc7SeI*0m!7^t~m3dJ*6L3VraJ0W*-}tG=dONB@Q55@b z#`(c%oUbC+BAzJCOH{aq-p1(fdEL-|bb?iV?Cig`4DmtK=BJ*_yF>wR-LkF7}9Vtn?o;nX~0-?w82 z^)!dDqIRQB-X3b0cy1rDarJ2CNiVWDAJMJ3B$(K`xljzIqV%@62veGp7$)iZ@CTE| zxq>? zf4={mSJHyUZU(G#22GG)_J3R$EQQ5lLDQ|2Py*I4ZBj@jG>X+k!@?79fgL;w&_0wz zzU1y(W|wFUTK)WSop` zOiN>@hTqCEs_6o9FAaB7jbGrC8~R?iwwVU&y%)<>@o5o|tbJ>h35VVfO= z1+B3a>}Zj&o!>rd#pK8)(ivK>gxj58_gq&cZ z%Xz8ga;Auu>WKHMn;>+A*tL;J4y(Ln@dH{5A186jZ2e48 zR9a$%u(>UfVb#ulBHDX%T)GMr@?e6|6S2ut#-B#gkNZr~O{}BG72ac6t1|K0tMJB> z9bKPNvn5#P-e*UrNZHW?D9~WAON97!0ONOx(!cz!FpBT8!l83@I}O5}CE-2ubTgwL zccm*M z5$6$C*82FM*^i)5U^ONrZNhv{Z$L}Q+`+vOZIG9=ls*VM=w7=4h%$>(X*7SEFbUyo zLw$1q*NVM5cm=DlF5YO&of~W37qOO`N=E2AA@(q)JU|`840Hs&XiXc5h3*@VQRPydjcs z0lthgoaVZi{1EIu0J^i^n9!+2dj>>)d`uss^!3wr%r`$-S5+T4pLY+dQ&0`9byTba z)ag@P-~gkxDCN|lVMJ4zjv%IJfpoACXF#!7_-%)-91xupq)f0Ph~=HuOZ&pR-uZ#% zG8P2S3Ha}FRkrM&b1(m+kAHvc@^7F0N?VG@ty{z16InMwVY7m?B-IGglA844;V+smV4Ojgz*!+iy~*y5Blm1!xDfeuVI)>XFswzT`*EADq1- zdTT||Ak+;D0wdT^XfEa7a9S{G9o|sX#t++pvw3_2VKLXnOE<)C*bx8Tb@A|)WT_5R z%S`1Bg=?C_!nq5ZhyF6#u3M-iUE%68kb~XhfYv=Ua=4G`f0_*FUE+oHWD!rMlOf*Ah>S?<&@w0=#%?8;;Z=w8R zdS_!D79uzA=Vp(4aayZ%yIHU(re8)J?8NjbreERiHoJS^hj;$~s1H(e(XG?b9W|PE zJXUV1@%+?rOkChCT}sghv}OtBsxC!ST z6+dh#?p*JVP_90J&F%FeI8VMcCC%he}XW|4Lo zpw<^ss3N3Om(^t=$7dAt%fw)9^sGhlN%^G|~~(kF}TWZ8|$ zH^DRJ8VA0urvWEgRs0)4llXR<(WldYZf3C->5;g|WCi)fqvr(YH8)N*V|aZVdp$LW zg{fftc;uY7Z2Rm_>t#gw;w3?P_m33*#6F})+>JIJR?)WvNNVoIv_J|Kch{8LG%8cl z-KC2+={dS4N^g0>0s0jpf(+3tk^k9O zaz8l}5NF!p6pZ3U*fpHk0-4DN)kw(#M){=TPzUUQtK_KBnDWN_Wfg^13~`ymeY}d<@_?POWn1_U*|rzYGTY7Rk;xqXL&L z4aBe;8fV!%`V|JQ#6Jauvn5Q%5?jOw9TPqQ??CeuGX{dNvvG1IzZCsSK9Jgv)IdSo zygGom0TBp4fCB!;BQ*wttuYvEj{yTz{l4`7J5FX~W{7W{g}|a~GB|5?Dt#-9&yY4=>$>AUOIu zBIzdD4O+h-;)3}ddC9~IxfcLOTk{``Gb{2+uUq6*qs{ie-6dmWKHR7E-LnwxqjYl% z%NV(UAPNC{cEWwy&3wk;J_hR94fjzM2hA8suoT!j+=EbFW>)^BV!QAN&l`NzZpD9s zZTbB#ec=WFN(r;Ki9TAB4h9$W?TNaQ!EF~)e1X5OCfS?$@xq}pEn~Af;)NA(L zIp=0J@xaX>ekOU~#<6J}N-+(dlXCdTtj#DVh` zS4B1R}WbUUB7tQ~* zLp)hBl{9W*&zGO+;{N9h>g~+9Y(~x9Kx>lAIX+CXx5h)cNv>d&<0W$@xr170@RQuZ zIg?y9*;4Va8MQUfZBI|Ngte^89M|`!HT$(WZs&v%e*#ClYr^Q(bKHb+X>P(eU=zl{ zg@!7&Y0L9V*Hf2fxsRO_tD6V;bVzn#nS6VCwgu)$hbp$4_6$N54ai|<^6eSlXP^@~ zef{ifZYE#CIl;@b5L?);dtsS;>4*;w?3u~;FiGdj#jtX1|7-!rUiW7p;Ivln1swbP z4@1P6fM}93$1kE+oV2rO5OXy)mFmn3IF@VWtMohGyen~ulTi|JL-Ft?ZCY;*c_C#h zd=iH2^^+)E?nL3xcrq$cC~v2CP7XMkVoUfsG;TLC`5UV{-&awG! zvlDe}uESl3gwir`vtmHzN~ngHP=~+ZB{E$=qUKp-hfC++;_9#$yxJ0>OQPmk3trZT z*@>F3UC4@6`^$s4))Y#w02a4$;RN>cY)ZzqLOcW4;n#CZP5DI4AOBA_E0h++%nDJn znH8gudZ$_87;R~e(T);BwivBsKKrGP9mGwQ_$X2i5|N_t6Su>6InR@$AXQf9F=0mS zHE(h#KZxfuXL2}z^O_v8eh$UtSnB=i3o$v|#&hwZnH)>yS8ws5L{4)gY`NFX@-WMZ z@EgyOIgAXDA&}u7Ib7poDT0bk^utO9oHss}&0~C=>z1xsGYULPZgJ6hRuysSNYfmx z-ozx9;ADpz)1$odsXY@+;ogJZL^PxEm=6Z`4kOKq7WxYG=yr@r> z3y}^nQdoTh7j2{ImK>jY`st^uioBX=8Xs#Lqy-$7QcHx!TMIg#TF0jQ!=C^Bv%$nq z6>LpYhd0}S>HuN!x9i?U_lZK*d8c20SP|&GZ_$0CQRPJfL|S_(_1*l3MY~TjCWS&s zj3O+Mno03j3hLn4wx%Lcz`kE1=fGz`2~W{bXku8 zz^Q4Ce|}+2N_{?hb>jJ8N3TT5V)vM3ex4RO)N5s@vrP-qOaJ92I?h~L=tM^b*uf?`7EMX$`u}zl9ju{)O?1{T$n3C% zJDKF!!kuy;^jf&HLvls)E`shqIAsD-fvERRUN+@Q?7Ym1!%Ud~*jd_x#pq|AGGQ)Q z7QLT&%7nRK4>@ImJL-7W5FTs|^%o_PwX7!NXa1B4zd-+-O`Y4Dollw2+BPcRa%P=t zjSk=$c)x1*4s`Y$U~W_B!A{+q)l$HBZkF%f%tKm36&NBN*sCGSFxTV!8tQ>c7VAjc z=ittxf#m}<84#jhSQs7-*y`wG1Et|D;kAWp>@sjX+xEEA>!Wd zPq*o~00Lf>ewbgDe%OAoTVeErKA2uxAuD&iGcNP5h~MeJhBx1{BU#?sikNCE;_~-k z8f#n789b_$UYuG!$_$t}%dQ5ysrFTz`{d7#QJOM;YUrP^ITfSpJlw?T9_nT*KU z>0DbQysMeCMtnf?XrKg^pz9KT(7pn@!U&+|LY7+F`9V4TAw>@^dmU;qo-8_vjSEK` zz{|BwHReGnKKhs0fXImnq|$d8;*>0&$vM08i7`8RJJaw$=0Fgay-+0@pB>6fbTK0g zPXwb0>baKR)r=0Z$th@?Ud06NDDPZcIZt3mG=A~O%SZWJ8O8kcE-#X)UDe83X^F>t zGO%j8b2UP3=jx54O=Z+9(Q^`!di()i_#-Y+v5DYM6BY2M=tKG-OtBkt z1kVpLA3FD3Tzqr%mI57_T(2Zsn>O6c-^MxHlaV)aeh3FwqEbLkIJ*{bbOmx?|FTVTO z-~HCl9yoi4UTtF= zhubHIH3$}8WZ9P#21?i^O>1Qf6!J9Mi+T2f@nlFon!)rR3Kyz3n8FnCy240tc-nxg zYt5y?8nZ$wVM>KL%zQ--&B5q*3(aLbRhByZo1jQU3_%q5N#cPr2@3;K#*@FC{o(wf zb;@Qh=cX!;mjRAcv_bTS;&w>LlPA0V8e$r^iNx4hGbBy{xzp0Y>Qh=Wh^dbA23jF0 zdb;HTcGnPeCGWK*96XD&9!L;NCe(Ti&(&F%YFDr9bGamTp@IRUi{YiSNNr^~_yhF` zsingB`Ni4hVT zkzdg>8}!~OtP~~*vn}SWTD-{Id!$>mr04QO>>M};XCAmajVOG)<|m?4X}Smui%&;C^n!4b|!g-7P9#t zq0@xoJ7o|F289-#0|Br7|GZrXU{po(-}hdUOL9r>Lhso-I?_Q9$i2x?6a^7GqDWVP z(2`IU6FRm}q}WBo^66(oz=j3vh^Q!ts3=J9HB>48-|W73xr79;{SRLDmEGCd+1c6I z-Pu{@0@g=CB#0nIB-I#zubTCfaR8}#OnK*o{V{5tWs+)A{)b~RHSg3hSPDm7tDSnl zg%fJw!niO!lX!*7@$oYk=B{idujZ7v|3x=Hk(G$KO5y0K$6LjAzgi*qdwuVP`uM>i z02gGyP()|Z!^#U)TO0$1v$QKkls~0fISaBY9pXac(|Vcj2 zYE>l|Fm&exkzolmsc3&VbG>HS+!*#BGIu^^I@y7U!3$g1c*cqgG$q|-8Idk4vQHqK z8;%Y0W*fM$2>Nrd%m!6s-~wgn6AO-y4f`&IB(lP+33C4oPFErW0oq2Q^e+fhK|cY- z2n{okjOJt_8GMg&GEaD^XCP+o78zJ4Fs)qlH2{|z7C5*Ea@@poQYK^uceN?bZI8;l zRgqh*S}zME0vtL-7MUC+XcdAAud?w0He^raUJMFo3d;yjc!Py*2ptbUK{eu8L?8hP zfvKKwempy)MK+0?O`?(?B3y$f(@KYPv!R2);$8QjN|G`m5S2S}D-6-k4^TyQzsd5@ z3_tjg_6U*;yYyIeKGN*qU?DiKpioC*pdwfjfR0QKCX?Et%bkRhx&xK0!{$B~mq1Mk z3dBS2rZUHrVH`5x&d!*z+=G1RW}HSPXUYmvmO$2BlNt>1P8FvDe!u<(+_hNz)OkOeKy;n%wv)TrI z3p;KVXoWdCMpm!T`N4>3|3rPXlOH?1;a@Zfy&)e|2hf$Ui)98Ti3)g)%a|EtAE0Qs z=*To{VC2Eg471&;5hX!a=94HGD+o_?uCmgM0=B6NxI8eK0n?*O%sH6#hZritJ3hrU z*p$m5_@z>hU@SXg2dglESiIp~!0}kkM^)hqql;ZO5{wlKPvUrssdngqynumvRqpW| zo|mi}z^%2*;Dz`Jnz_oRaLp9ZKy#GCDqh$SB%<*s{(`8GaoWd+3t6)$c#1))Q)kxjdfb89+eKTtvG( zyG$z)OG~+9_&f|YV;IwcVF_dzFzB1dpw)~0Md2(h#VU)t(vW-(I2sDK!kj?>9c?vG z0(Kqr6yMzQ?UThWSp@-$gT=T#yIGfULwOfBpv)yKnBxH|yiFDbM_3vqXK?2!_lELZ zZpZK0(!|258j}vHn%ZQm_P2thJbp424fzXhOYnQ|Nh0h1-(R4LQOJ z8l<1WD!`xyKTqWXMgxI?4jRz8cYU9Q8vwNjTxUCa@rXHM^gR0rBfGvekdk+OV?AEi zFmJ=sB`gqDK!&%F>rIK+k_cdDmpXdaw_fcCXy(blQY9-DNTcf-L}H^6(8byFT|(xX z41Xo(3)=I|rO-R1imx73p=Z^N9z>qEdfMvtT$FDjFfV{<&avnFEUYesWB&BcQ^hkp zP$=XF;T$_pftDi{cyv|#&eOf;+Bb9453{$0~120T}-zU*xgQ#Uthoaro$)Y1oH z^HNB#P4rR+M*3@U2Ho4w23qm>AS2L#*H8G+jbIYbF{;Is1%U?eQXifUGdAI@pWq4m z0GubRPqdN^-g`D`!K78;1(R0M3nnqFTEWJJ;E+_$`h<K-4pZRectlYJkBNM<{bdvLB$)N! zxjO$~m_cFU@D_L$Fa|AnFVIRhd??T)oE|8T#SXSTUI1*D68tDH;N^(C*2+(UL&ZFs95fd1c!B8(weW)@@X7>X#mXMKL$9bnGPE0pb_JyZ#C3FLtfG{P-d90@^nZ8Op`PUG{n#ur2^L!U6L#)3FrVW zD1@NIV@$B2Mi3+3X8a;)MxYr_0ddhA$c8f@e;P@w`ZS7oZO|iRP@PGJr3Sarxb zi=>(ZvGT|Zk8BSNhQX_Nys~&s9rqYi!E0Vae&Shr@K?cFC5jNoYY}+&v6`9Z2cG)i zBv`$~;jYbO!&$R~3RqJ`7(U_^awgCe3?&;QmL(fwMw0KE@`d}R>~AC`3)6>chz~y3 zlmBXci)Sr)!0*Lm8rD7e4_L7>rf0xz)j|Jcc0&e!%CUWm=`ez z$9#3aS^-jw6tx73rj6FGsh}1du=>(2@yBOdKcX?>)l0FE7e#S+wfdc;dHOD|cg9@V zYHqM~VKLr1N{quq@(j1cGrSbz;T1BqzJ!AWF$0RF8lHN=1SYCQt&d3@48yc$?gsJH zx*LwbRdwp@eBh;>1iiEq6W-2|w__?4lBNw@bwD11VEhN5c@i$U7#bypA;QCYomkO` z38`ts^^b~$`+9fblO-PxxpNVOwI`-+WFmJBeEMl($I5t-$j94b@#P$dgO5^}b^MGV z{{e!SYSc4tW@Jts%_V9XnCq2s3u7q}c<`iQWPb}*rL=&-q7@667?cVZ1RWc$s+FfW zo?U19!ZwR13V|+fNfjbqSl@ibE5>h!E@iLIL`7v zf`i)>@sioIEdW?qVlY`tW zS&e|Z%+lNmX3(ra17w@P6OtX(B0(Io)?~om7T<@?((PyJUWTI^hXel=@fF+DXll< zX*I}#f`IM_B361A2CZ4Mf{h$WiHd>gu}>GARKZ!!Hj*enDF&FKP-r9@JtUEJBhHMZ z4kB3tU7b6XkUP)(s^jO~7KJQ4t|K0-DHkvc>I>G<>PT=97>ad*V%szDp@NlFW;A^U zYI$f^fm%|D=kTmRBZ(Iy12trMke+e0X9X_icR9h@VQWaB4o+1kBZsb54 zC+o3^Mwx-UUk+1~5ws-Z3myX08r+!S*ixHmXc38C9H(HSTSth)=V|~Y)uPk@0)SvC z)WBi63hD`SC)$34;Rbk7LfLG@O58$GM8|@QRmE_7+_i@?7_sAk3dgjFLJl;89F0gK zRzuMYU0#XPM;>Z3C$1n=QHreGSq*hS3|^j$NM*-bM(Gt0cwAG;#6zH_U>O6rSn&|} zmk1pf{cH*(KT8tLtsb?62n6}RQgLy7E>Hf$%`jB8K(gBalse$%4Q$HtN*)#vM+DH3 z1$=N{h8j}cM6v;N(Th2C&IsX%MXVi$AJ8Y(bJmd3vCilQR#CCg47dknEC*o)54tTs zszs?1FfpJ4bN1*1ld^y@4t!<<6RdLZ38k)qNg_rIAigXMag7~Lr3bMb&kI9iQll}N zfsqbx!bC!Z=tzJ%d~9WPKnH1b%3{qVL;7@Y6Wz*SCdQ|1s$Q;)7U1V?U}etN!1&Zk zu+QIaU=^bp7>__pZeYCRjj!iyV7$`~4GcTdDoXr`YGCS=%_{$V17o=VPYp~fGzr?} znx7e^GfvD@LsI4^t?Tg4)f!i-@dXTh3MsoHjFzQT9yA`7wz~i3L6mL;-0F(6Vbd}d z1$7z)nuHQF=yuSj;R))!l7zFA9TLXoF#n0PMP_Q&s`v(M=QBK&{m38YbUZT`RzyM{}&GBR2O9u|Ws`EMp^$M^RcU9n&;m=&@Yv%%VV6=MQ`WCtIhW ztLBZ(80G_{lEy3(m}o5fl=g|5cL)|tMMqhbWV&-zbW_G>4KW;MK@B&UAgw;_xQtBf ztjt*VSA82649ItK+b zO_{Plw!};wSGoGs0~UFeXF<&4gdnuzI-M$q!CtaPr^>-9n0F7rRSHk=BGn)BSS=t_H;zL~xbuxm z#$+^iRBDikN7O=0_-S5Rc^czXwtZy9M(GsLB+}utQyS3K0Tt%p%EYxQvcdgQHgT<~ zU~2}5WnKaS*g_FG;Uxr%dg<_ty4MxY9X%pMI%A%witAVz92bd;Grti73K8_9G`@w3 zi(92vfuC>-ubw=a!MBocRd&icH~~ryw~Pc?_fm!o*=nLqqJ9SjV_CtgZ)Wf_Gi!hw zSgJa?IT%EfialZnk$k%J8& zo7m~hEHvH*vPF-|d^{a8l6W`sK8ROsN{j5B-i*5d?#~cQ)uyVqAa4N=rb27>$Sc)%{L!Af{XnZV2PgQ*tu6iFI zM6IiSAlG)9GDC~1g@Q_HP^dz*rXO7)C`VO^KWA0QK+vy9g+$EyOH}q%)8q={N&vBe zHs)GXJ-QX7rq!zH(LmIIt|EAh+Y89Z%!Nd7*{a^)z;1+SM;gLK${J3yIafK10#PF| zu>6H`t)|PJffRfC&{Gpi(j_UrWUF5_>!OB{RtC7EWF;g?Dw^$_v zx`{^#D6k0g1@Gm>-Uc8Z2a$tG7zDh#lsO0rIsT^Lo0?9+Qxm_ zF`WOhB0~q6jP_j`%>#22s!<396^{I^8R?Vge(b0Pb|~K{X2h`9>T0y_LGxT~11NlS5yeR{nxEVY%<`JEUPtn@jaPa><=khCV711N})WXiCJ z9U@$S(^jk%U9j_#=w(plw6*B!?0L8LG6cOe`;TnxEkG#ag4Siv+WW}>^s;R6PFsuY z{p9FHownwd;IuV*!(k-dzp&wuJ&P4`+Ip5rJhb5O1#UQGU~`o*)<3=BumH`!z2Q)S z`gb=Rau#~SVNK0g#cjR7c1=+0U)*|8fJI)4Sr2Rb?6?G?B({ctY{cq25P2OiLuPh zW(9EE6Uzn}=vnY0?{loDRlpmZ0I6QgpQvV@0umor5)0%&06hv02diVAGCj&#`U@eU0c|tU3au0+athGQ7A0J-% z3C4l7@qv|oJkOu1*4S7h!a}wX(=Z=pEdUWD{>_@zu5GXWZ7`kw;T;`jw;Nh&V(S_0 z-p`rYW_I9Wpy4ctIxC?Kfp^6QViBfXuSAv=)GARBEk}(C>L9oB&V5~cS7N{pJtPuyAp+NUzqWmH#xq(I~swXE{1^Q2*2J=Kd56A*lk&B6XF=bWe z1?wu*I#UI-hcUY{a|hpK|m18m3Scpk-THcrCn1ZlFa#E_X;2>LPz<}4FdLuu;3pvWNr3LW(^ z1)C&`|H8ZGivJ>{A!{Hbt^}qIa*mFuoN;l{F#l5zwE{yJy$f@)8EBzM&4k3s6-c!D zbExRtCKU@Sx*!!-AE)Ad)_$aFiB#nd)e+Dqelr5|z_p1~w1C$c6u~kCg>815Hq)O=Tnf0eU5*B1(%7O`VAq z&{R3ggL^*qsHJo`Ow(ZC&G%|6f@U{9iv!dCYFkAV?^V&f$AYLB=BxTQnNLrumn*~u zCD&&ZS=BO?sai*p+JcA$Q{6T!HEqEnP|q6joS|}2tHh$7J#<)~bB|0vDav?si{>dr zu&ffb%tUGh8B8?2F-!Tdw-YPl5t+|Z2oYh7FSQzo2MmM->GmIriB1^lI2=`-2Z~W; z!^Eam#<7xu9*?!{3w53hZvq$MJozu|JuJ{*E_bZKV_l=%B0C0wLLOSS>x>l71b|% z?;&T7Tu@U<5L%oWMkC$5UwdK_aFUU6w}Dg3w4%bhl9sjQiAO3!yYka0rsxL zjt%3~TY_F?%*IX}%E9;!!$G!A#5zE(EEjFb81weC+IB^3z%kMcSG#T~U)Y4De3S_b zD+z3Y=i^0o#{dsv)itGq$6~xsYBxK8BdXiocH3>RQ&1SHb1lUcuzACl#Rnaex#R+i z!Q^O*K?_itHETvaV2Y3ecp13EZfe}2D}o*thq9u@#G-}3Zz!A68F<97%`v5et+s1Q zmw;QC(j_7&Fs0)eXUyNLStT~1<7XJfu{NSj=`eO39At}c_1-b1Q(t)kTYcsF#)VY? zL(MR|rgZuv0|NizuZo~e=`ai)iNwm34&!!RM(JSSH^bHWa*o&HihnQf~h6e ziNblx@&l^_%FHfia6rvTKz6};OfRH>`FMf?3joNLwH{?on4@NZp$T9b#>7A1ti16l zHt7nQ=!Juz(HX_Ux$_HW1(QMLu^oEgIl0|ym-QyD=dm4TtM^cg`7;b7*j$IrRMc9f zauBgZFQ8`xxF`Y(m^yIQ&69zvArqCHEk?}&O_i05#eXpqgc(b0g2MrqG6fnqpD>A6 zF?aZ~4F$fOjU&Gx8_{tKkV+zZ#Yo`qp822)yU zawH}RhMqbX4N=97?4{$*!CR8I>!SPA3WR}c?R=rzz_5-0xxqaalsG6A&OR0!pAWS8H#U|PWbW)+ip*3n8#{ed1IZIu89bMj$C&7T(w#>u%0`i@j^2ND z!94V;Kc;+cit3y&vd+Uq9=il}x+#ffgl-Baw5bjXu0WjL34N0`=&})Ge>*8>>l5j0 z*8nO*Dr0qR(pAYDs410k06M!Wm>b8y(BPh}PLZCiPIS)(S42@g8>6Cowz`FTwz|di zY?Y#VwmJnp8+L3v{aF>s@VJkw%0+W~wixtmmEE4LazW2lxp2?MMdAL;qYBCWStahz z*b;47ThIcN3RRuXFCGFrrldX&ExJe_$D*ciALlL7$HkzJiK9&qISmrBY zF0Q`vi~=sVkBfEtIQ_BMJ`VHLBcXG;eVi^W_i@#Eqw(xOEqCt3=T4cFa;Ho@vRXTT zx8tBlZHENhAJ*V5ut-OU328Nd;`E2HFgwS*eM0!r(aPaWJS+83gQRnwJm%>!eJ9}u zhpm+?-4$|o$p2KoDJ|FhtTc!S!#Cx9q$@9~bKeMsT=k7y8txkfcp z%H$$_V>P4{8G))Ch(MYS0y^M5@!U7^;QZ_v00VgQ_}}RoW4LRqq&9R{Mb}srqi4K| zQ5(Z6qbEe;VB_dY7<1xsUsRI;j)tx=fDvq^837Dqb=RoIEZl2hDgkbQ9gDkUSVJI& z>MGUZKUVTQUdPa}oyfpKT9w&B-71|{D>GCpmAchd@dhes>T1xAQN6M~2pW1-Bnjiz zI9}d>PZ`V_soYT07#{HwbX8fs2Tng^Z9@jp6$j82V+qoLVp2FVCTFi?5txD!vq5W6<=P}U1hdMv*clOpPsOBsW0 z+0uYP)me%rz?ezH_N90MTXA;yFvCADE?9zCK%;yD?F@g=U}M5hV$%)&sKy#OGG%TY zsx=lY&TE*lgRmMFJ}xd-wjj|oah7m+g-+JQ37V+s%J-`|G-u7(vBGjVu^Kl9j2*o^ z|AaPk9r!Ge2%=#Yu`JjQ+ja1^D@Oik3UKJ4=cd^Inc`G6C245>ZGai36g|U)k2tzI z{J@GWA~U>x>wBB94;EfT_&955T&kkg(y^+oT!r9p8eU_Iff=UK^&(USN5FeA8Xf<|Ja8R&;HYEPNUbU!g3+?3 z9|+-oNJ_0JRMfLSaT>Hnp871yQzn=l<>tn-r9rTGAyCfj7M5g-{{W&gpn^2qpvyVR zE_P{Y^f4o=i6JHI=PGEAc-Yqqh1=k{D{M_uGetpADh+Y)65^lb4RiMFS+n>de)bFq zooX^T109uPno~&z*yn|od3t^bLX;gyD5V!GrFvldH+GV<>ZA3|e{3hYQWKRb-0lLE zO)#6IPP1-o;z7Yss^$gmBNEu~Bv%`c^2ZzA3)u@^koG(qMh7DkD1ZRYI-%C) z^v+6be#X|yOysNw1kvXyEQ>J{at+KDpyxziDgq)r{%*BX0uzi8-;DU$4bxZxuz8fp zXLClD!Q**&XJ#N{KEjsg{@w0GaGO+Lc=8$R_}tXgjPRfo%Mb#MERMMpaugxfC@?F^ zaucS7N^W`!)G2S2It4^FGbWqaPQVOrxf}Oe?vB{%M1jP3FAC%XX!jX#$5S#`h+|WW zW0S=(|A9DGzK>ur4mmvjZWv9Vd(n(uXu(`ntX?n|yn>E$TaZ7BqDuXcOi*pB$JCCd zCl>sfo~*&ZY$J-E*q>gMo}ja)rkW#&q9%7+OwAy~02@zuIKVa@mJqylg2@k9P{8XG ztA{+x4&mn}h}8)Y@P>GmfLB>CJA%KQfQ_+BF0N|uPCGBUxXr>G6Ayl{ClF!=Rgd2p zphq-2UeMO#!aNSB=V$P+ZszCTdd%%3YU^=qgK451Qv2o-=)NkGYmaIq&Vu-%EJPgX#z3p!aL9zD47cs`I1RZywm8VD~r zJp_G8hbpu&OdUIsLk5d$ok{3Gl zjE#t#qQGrjpQ6D2lVE6%gR6NaERbSlaD(A}Tn3+_;Nzfc0DXBwBO}1(M#}R$o*IMi zA->F{;Ah4A8dz^1R5Qt;6 z!_>r%MWDlbcoUdJyr~3zH57L~je+N#BG8JSXaH!~vr`lrmS!Mi7!>wjFa!q_nqUE_ zI7W;;NEIN4F?LZ<@Js9XzfZ~3tP#Fc+6DkP(Nr07A z1bSB@oGhw&Yj=*JxYnT?=wE6YmTnqstix{jP;JZujQB0Or8i2t|SMx}A1g&U=T^8#$*en7oJ4K@0oGxk6*2&^o(9v8V+L zfhp;e?eObI}1M$m=?Ig(yXO>lnd)% z&SgOL7kZbA!A#7WK!xQ2+NJbB&B%jmM!ev`OnCl8Xy6kux~j~&Pb$2}c{47kPlDp9 zwKlDHYOU>DW>QMc{J3DBGf`{XLia0EYX4h zu*id^!Lw%tEw%_)?!ka9%-k=q8@n*D*h|JD6oLjFLcl;KZaXQ#0#4Op(JDNj1>Dsr zSspK*YAMM~P}G-wS7faft|(Wj7vypuz+Le0r^hyNGr1f^f$2Ht^I5xHREtuY{r&{AbZ%_KkubX-H84Sh<#9F6#x_&O4ol7a@Dd5; zl=OU0QAfhO;fKxX&vGDK7EK+4##97qdk`E5tBvisfhu7GJF@kl6N~EXHX%N|6fS#{ zlt0*j32-UOA2COY#f%nAVDKj5LfG{tjHzb07iRI5!b4gl!zS;}JdevUpgcu`Mei05 z?FwhBpw|l`H#MgguRI9jNsXeR$YZrgIX_kVbzBd^$w-7;wC_<7h6iB}_Km@VFywp0 zgRsw`1fq6i9AG4=a${wHv(yfP3tR}Zhu>JG{dNGN8!Xtra}OLW(S@*Dr)Jk+Q9gv@ zFz|IGxI+To1gNsda&scG!1Ewi@xiNTC&KYXoCwF68H!?$=;CZG~PN#!zEbvw?)9Qq#SKNw8$Th^wr znuCc)w!`GZDb?=7Ts5&9hiZ-kcW@cYgI?^gi2vbb(p7lJV-Lq?@8vv!${n2J8~CbZ zre5STcC7LYPXVVymBVpEoR_!sjB-QF78~qXnpIooBwYxQoT&nh3dmRBRv^nN#Pmco zx0;C2BoDvPATZJiCLqMjPduh4F=s8gu$XHt#dEDNlvQmGuW_g5qhZK`(OAK%M?nG5 z#Z_`ANcs2=-IFsP=wk5>B(5G_K4RD0s3>j(?9`UaQd(C|nDbZLPO8WXGcX;^3L@sA z7&$L$4(Dp%4ztwCsII7gU*2*7T(z?d`1h^g`u9!1QV&qV8?O2UOa-GRlz(3wR)Q}T zm4DxgcnhAv{!+#nb*~+aKnz_Mh?5nuwwf4#k85@gtXM>C0n&50Zu8c@dBL8{RUYN; z*B9kE+JK3J@RnfmbTyMdqLLQz#v3&mdT)u&d=&((4i!o6bOL927lncqmXP{GQ7d_D z$Pld)HBf!{Qe`7C1juP6Cfb$nrFx7}qKO2+x`0(S-y221=o#yhj+`z5JK%eM)Y@O* zlr`q4xolRkZhX7z@)hg%R`=&X1RA&AV3ViZ_zpQ=nYDGqIlTBn=PAL9FMmM|S?qN_ z2&B2Ws>KjRT{j)HedybW$2E(WSQt>o7B`-wG@7P=ttdkrQpY+YO_z%lOeSr{AYQNm zrJ*_%cH+w~RDrlSF#l&=yih#XiLX++wANe_x2WR&MMiE{0wcRHxt1e#J|%E*R}JH= zHs->JZeSP0!fh{*h1IGHGqJnq(i-T_Rf{gpKCYr3bcb@}h^UG3q1y>rDnL9azPC_q zIWJUgVS0z_i~A2$Z1GXO^)>p%<_*^6WQ-_U59UA4?Y#FOvf?2mj||O%C7bpDW4WB#=BUd1!4W4hJan2B`` z=epkqTjtQ-c!k>*&3opE@Q8i` zhPLnDcWA%lEP{rX29hGq61qrP^{>^-D+mf*~zpCg&{y#rtSX7iM}7v zq(z~}W=)+(5K;8b%pBUcch1nP^y}=_t(~X-b+QMH?cXy;4yh|^52-EtkM7&Qf4^)w zxcBG*gGUUO*&~Jx11*`Rh$pi9=O|)bs~&m}9+ug^XIAf={-WQ|5q&ZdD2j@aLkIK| zOxwP4$j}@YNNZWMA45>oY{y?C@bpuca2IiTmrD!LV{re$L$k*8966x>sB~4Wc8Q-O zHFKVL;DHMOa?V(ao6Z3Qi7)ASj$F?7o%ys$i}OG@cLWB}tm%0`oI3(@_&Eycwl*D2 zF=I4)rbp`I+;E&Wd+tcw5-tFhb4SxmYKw-V&X5tAnRUe_gG|xnl1ncgJgooig(N}? z{Z8QbB;t&S7vfWdy%6T%>RN0fA@0hABNcq--!zWbsrZN-?|pnXoOlBUh>>FC0Pzam z#U}{SrAgxgna~U(p@YUFAKwQcvI{>IH>Gfu##IJaSzP>M9LpgrkE;T%inuD_T077b z@hAs}Tz0;q?-8ZYb9;Or>14?97(YB?nzOX`3zJjx8<~i+QE}hp+MH%Rdp2#-G@1)8 z@7v|to=uu??e@&c>OCMQ`|`dWI^bQah&Oj$Ga5k8zC#BO9y;Xm&V8D2 zEd01e_JK+gRGg2He@w{=z=MB47&y9=FC^SmE!v1zs1^%HQMK61fps0if?6ybk!x`p zzH{CjZ!|8hJ^t}C*Fa@lRd7|sRSlO*Z4Q}ce1-Ry^-eUR-?(4+9Yf_GQ=9KyYR9Nw ze0;pWN{zGb@j59f$?x~;FEQ%b?=Ry#;u&AdxR3Z6&yVPF%X=R(+(;3q3K)Z{P^Cuw zjDnv=Oq?BG=Ut`(;@3Ir7Zsl~#t+c}ybQ;OJ^oq0Uf{P1-ev{a=v3!R1~?+Tp@Mf+ zY(YvUM4{Aft~F}Zso%JHb5%CsMnTA^sUK*GxEe(i3Xv~KM{Gp`H%=s?j*G}#APpL^ zyCx$xUv=v?YSN@xqed59bP-dhVUs3J8aAv~uU?%x_*kPx&9pQH7JsT&uUU=R23r)8 zl2TGqeEL`DArPnqAa(23tXVS{RB^YTvBXwf+i-2cb@+@&9Kf{)*AZNMaqYvkAJ<7- zr*NIYbsE=ET*q+zf$KP~%}9R&;U$nH$5gtQ$+`@ZYhjAT4t2&D71WI%a*AZM}aKV&U zT!M?mnHN_KF8*;VNy5bqt`)8}xJKg|i|Z(^*{fPaMZ;Ji40Tt{#n#dVl* z!Icj@kKj7S7vUM#{xb-3@gCt}gd0JVpFo?Ras7g89j;$-{f28TuJ3WJ!nGRL54hIg zI*4mMu5Gxsvvomac#o28P^tEKjPYrD<9V(T<`+xooAN9uXN#G zsnVrVQ~jyTuRb4G2EXKFFpM|Jo0yoGkN~Fk#KpzNSZL?5ad93`e0)LzzFx@xv~ClJjWeF3 z25L6EUwY>mhm4`(l(9=x7dydL+rlMPi7kBX)o_ZUd`r0}CAhxIqB1 zThtSoqCS|bwzwTEcUaUA@ghyIkoQ2Qdqrch5AwYqWP6gRD-MZ9V!t?P3>OEDd=U^^ z!FqRqmG@$Ks=sI=Oi@eh5jDj?@rRKmPJ;{$!PsYv!OWWBc|q@7BLM)t=&<*LdRvWy zR-(9A>@%8+mY~QU0~E0K8hfl0X}gVsDCsfJG3%Hw9xdXC)k2IA2drJzZY$qc0o2d; zv=TXDpLNK{H;#C=8#}F&X$Qpt;}73q>yYQ9Z!hR|I(I+n>{RX_X(#B+nFFZBleE*= zYyCk-d?$P-a}RnB`%a(9N8SFBd(?N_cOqAWS5^l-J*cE3&@JMD?mpuX7@;Dna}TP~ z5F3H~Fo4=?91tfwd&OpP5EZk}I^~IlmU0l(ixFEyzSs^%i33fx3A95oNNf@VP|dqQ zwIkLL&?w*7ZS6OXTZhGN@rP$8nB}N-9F=~?w*w4v%*q694+B}y+H(|)ciOkdI)LJw z21A}i#pl%oqG!^M`tm*7@p-QY^zxlbJLNmz*=}t&_KV$|*mJ^{@7o6;+ky0Mu^)6g zliEGL|@r;K)N_hi9K>udxp#NC3m^LhbDK9P#V|wfBfD zFw+6l(oxS5-+s>yYYzyq6NNeEIqo}|cG7p)w-d!UXdU+a;X9os!t-kZ(bJw&z%oDD*+&n6(**4+IGYfN4-~))~)n>j+rx zn6bk+Z2X}py0Nx*WlSu1F$dMSOO-GNjDImu+zmSIMZ^}OIm*8iAay+=b?+8=gI%1vh zoC43D@ui>;ejq=Tku*+Q%sMfU9QA?x2sB?GiXI0xYlwnmp}{tSBr1)9HU%Mfqc<52 zQZxYZ1_Q5yX!83&+-4x$5a54YoV1P^IUw2|V0;9P@|1B380VuIA2t3kP8tyS$iF36 z_BZ1j>nCfO=WEY0-><&SX}i-jCAjQ+#75&gYn8RZTI>1N_k)jVG92u_Tl{W(YyE2d zVy*Oi;alz7?Ar<~c8Fh%O~&`uI%|bzx#u^}THj9JFKO%15Y|Bg{9yfNedYPpv(EFi zZ=-LU@AtHo)&^sjTYVEbY6W5~+-5|Q5EBZ!kfE@eTSZ!^xc6q)uZWZ0dEuybj zE`AnY7|V?f#xK@(Yqtj#C%zIZ#gF0_@wxGXvDR1)a_;mTK&Q7_d@I(7-^A}?rLhJK z@dFrnujda4gs+Wd##hF7#*fB&FvJFHpS2aD{Dg0p^{cVU_{sPM?63k1vD4b)IRvqF z+;`CP4O-||)>>zUVMuw+-|FL30+<3H@mZGhgAzl{`8P6MU8gs0r);#NL zYmMhM2zC$1UjcemhWL+oR=gt~GhQ)1GTyKrwm!6$TTh8}2>x=Amu*CQ@sN04d?+3^ zUNhb`p0OUXo=3rFiN{3?^ir)wSlln35c9<+Vvg~$@xJl2^`P~V^{q8iED^RK(N1&_ zbHsneyJD6x&sc1HV!UAe*Lu%dZ9OgK8V`yG#B}kfctN}+J{3ut2w@6axP^(+#X~H5MB8SqrRptZzW#4c7ObEuOcNPwx84UsuSP5W z1ubX4=Oc7z%dBUu+169mE7oh)XQOc7LSP8;xRE-%oDGOm&6-lp?FU$6%QIQ zP@tN5ul6Q*6FrIguP4@%pzaeq33!9Q>J9&mHE`kCd85CoRQipEz^R}|H1}SOnDKG( z3HTT1iHpS*p8$Q7{}#N#`&bKCoQ~sug&M2k#PEC0QKdp>dNC}NW8!0CS*?wUONfh0 zz)eD8azcXFo0t?6ml)@Px|C&mEWf;Svj#fhYXmJbyl za6sFZs4^6ei>@L<%?B>=ar^^eJaHHkgKWjzxN#Ufeq1^S4rqIccYK^-#i@KP0N}9$ z#t>=<;f^HS@dS#3aRrK|0)-owG6@Az0Aeh@@t}Y@jEm*rh#H;nYh~E z35m!bWl^A#lN}^@{F0QUG12#+wv#`PYFu1!pOnl9@nDBPB%}J(z();zn0)FjhC#{d zK|Q4;r>F|z#26l>puW^C-}@L051a7d^YK7S-{T407XQGxs=NxeTUb?sxEQC%Od%9s zkwamP5gHO{x}xfFt7rfapoV_WB;dgulSYxleNbaLU1xaD1yT>V)ujeYI`?`=sNMr_ z9zF9NMJnt4^Y^b&yA1sBiUi zzT*WLP(@eqfec>gA7jtR#e1Wkxq{*quj%+aoaGmhpL&6Yr1Mv_z$?6Pe=33(l0g6T zV^WeDF>Bm3g0WCoY;U=%MZv!ebc`?IUjU=HjkfpFyd?q$=M{f3i3@$Bg6AUN!VAco z<;GRtqT=R7-*aAgE|i|XJ8=rVM_l*0Xz0WbzqV9(e-DS3Gq!qM%+j`e&;+#hb}B9e)#*3gtxn!SbdC6b@V@K!{u6-gZx(M8`)fambTp9pWFi#EUbA6`VryBH6OyvrkR z5#=}c?P+y`H}`(ZiI5c_g&)U*sX*Z-sNT9r=oke>b5g8{L|hV8G&d36DU6ZNl+UiFH;TfOf^myk%f8-DPW3izE z5dGbW9|62Xr+1&-`0lfVeE2_KxOIc#&BKEt^J}=#tPikmQdO>~XZO7uIv@+sbx?4N zQ7B&YHy38XyYPZ#!fU$#3nfHk7ohu{!(!ru|MR6&oF{P;Q=vm31H9pQ;fn8BVQvB-R~Mo!T0F*`aU|x z!q`M(S`gQbufp*6-w5vnU{icbw|wsR0&H9;E@tj?bQlej@7-^l#(j1}tPy=1X$^aE z`+cmNDHAukiup++q5-yeRks)0{AYR=+KR?-*G9K@-z zh&-0?H_lgwdBh>7hJD4b{A+{)u985Sq;3%qd$rQCY#QR98ow!UH#C35fT+cCVXa8Mz`;r9$jhlR?Z;5g~gQ_fi{ zya%mwQBa7hR=}Aje*YQXP=(X!2823|4iz<(5aMSSdpCETK96+zJmT~hN->Vd={e-| z9CCV{$N4G6@i;w)oSs8Yf1woOc$}U?PR}8y*JW~PlSeL&ZeDI04&95>^F62M`vRJ3 z+PGzOadq?LG#uZ(I6YsSUWWxV<>%-!@^f^a{H)T1=d459N&G7{&-v!5+$(>IEl2pR z>i&uj-~2>{XO{hf@b7Vm!&wTB&L@v_J_uDldBpiJ)ffjImfZIEJ5$1?GKWkFC!Gp8 zAAaV1RET^y2aLD=mT~62O^AsG; zho3ng6(S!FIUmKRe2Z|>DL9-DKXX1RL_QpHJ}&R;P)R<;BmC^vv0Dc&jodQ0 zc{pjqoDbh~J}N{$9CAMT8*D#x9O969kweahL(Ydo&WA(JheOVXLx#nndvQK|&+Ugp z&PV6%wqf1I+%}+i6KNFhAXIgWP|+Ttq76c~3<@@$8K%0B4~HrrRW{_K%c$D0+s0Hr zc(3w7sPaLm@+sL(I!?NXbmM1kFDgWP;gDM-hl~e@j0cB|2Z!8V+_tB~f3JsN_>2dK zj0cB|hm$Y2Th*p@`0w=~44?7fkn!M<@o@5O>&hM-=KX6u48vzUIAlCHWIUXF+eT!c zl7atX4+Qv(2j|ClaL9P*{PWuCp6TE3p*SCf2SSAhLWKuH)J+Xz`C>ereAPYU!S4W1 z^?`05|m;1HR|!9?to@A`grcgF@g5;Ce16; z=ekX^Hr43UZ_{&|;sYJ$O`BJtPq$5vZmQGgj!iFaGE&1c#?MH-=IT`stqNSzd(|_m zVw-kYIC){&?CbMq=hw{cpZ|P*Let9^-m|b`_D%VZ<=4#~kpEJ?nc8;7gc+r-xn|Xj zRl#feteUqfuIZ%o%ClPJwY#d02zB6qmtP>~=9qOocgA1z40_B09nr><*ZbPZQzqPYUl!%Wp`dv5{eP zHF_Dt3?ntw446&exbjK2Q%jjav#HtEyvFQfW|>xMX|uZ7%xq^~YxXs>&6w0O zW(~8s+1|X)>}Tefv8iRvn&!o32lINfzd6E;OD$*Cf=8W8%^S?y%#o%iwY*u|Y-wI* z-e}%#jxvQPoPVA%-Ixn2q@`zJGTwa1e8zmk{OBy4CYUqKdFBH1xybzVEQ}|cv(4wtH_gw^!hMSQu=#@dmihTvrI>0yV*b~B+x)_ePptr_ zw3nD2&2Hu$=4f-8`KbA#`Hs2FOh~P0)-_w1mzy`41I#hzJ?3NPOXj=gmu6yWC9|H{ z+PuQ-ZVoiZn)jNIoBuNxo6AjaYGv~xvyIuwyxAON-f7-vK4HFWzGr@ACZ$#}>znCj zXY&>_)4a>P-+a=1#eCmffxR~i@(l0N7(WguZtTzSclG!35A)~wr~Bvn=lhrXSNb>j z_xnXD!=EYxvWX1Kt7UIFT#lCy$!Fvn@+0}3{9PW9I5*H=N(N<9*;Za7`^YRgLC%o# z^Wi#1MUMu^`Y&lWRl+VhA@)NmAZjy(j6^!whku_v<*n|&7%8O+OdA;l}N65)?wtQZ`DL<1x$Sv})j19*5 z%gI`@g}hYWAa9c+gmp{v$@`Owbdi|B< zMY4_TByX03J}94-ugfL!Te)8DlV_wa2=|Tw8E72H z2y_kf3JeS61*Qk)2IdEr237_(1oj6Yg~Agi8{TVTAUTp?o?HgstkZa8$ zOEMr$xFOndvx&iWw#!A?6OEk1$Xktsv?WW(l#Oh^DgJI%Y&ISL^ zhTphYtmndb^HT*q-lze*djbAj;JyLaOW@xNC76pmHlP#|<>-Zy%vB{>FxBwh_HSpj z6jqujO?cik!~0eVWNQw4)%Kz@I*D7*O=O~@xCDB_N%<7Q~zL!`mo{sw`Q$R zAHPC`ysJ|~ue=oub?@IS)N5zE(6Fnn3qAE@ztFL@IiY2fCxqU4>fX>xZ_fxNt$sZ8 z%l>(xmy%u%eNby*Xbrs=T7A*7h3@|Nm(Y&MCmd`G=sv0q*>&F}Urw*B-~kJ@W?J#G)V z=PCPC?YZ{O&*$0i_J7_^hh`PleLuZ!zm&beo|E*Zz4*De?N;fF?N+Pa zx8EJG#D4b7NA~ZtKDE2m{lebx{+D*gt5(?kH+*B48TOqmPp`7O-n+&gS>`8u#FM|+ z^@6|IgP-4ESE;qh4nDWVekN_Zz2VWFw%5PMZZ>(J-R{@{yV8Js`|%%-*sr%cZeQ~1 zAGWW|X*(rd(94+yZGFO|WnWsz+nm^^-JjaDei#_>hxZ24LUucCas@Ti+WA2O?i{*P}>Q0>4m%N z(W_%FqHfvs>BT_}=&3#psYSO&l-;>8T}Mr5ZR4hNQZ}QHe9fu)DO@`)rVm!Npabu> zr1ze?gsR-viu}V`)5F)cp_eaCr%vTUlyx{nl~>u+;dP=t_hgX2Z3FQYFHT}CrL>`3#cUQTIOT|qyW=|sP+?L@Vo=uGo(zLIh( zb)g|YcA+O{Tt!Dab)|9E)l~1@tLb>=HMG6jwRGg0YbkBqb=14=_4Mwl>#4?FH_$V| z8>!(JH_{gay3xSIo2cANH_`GA-D%Q>?sVyxnrf~^Gf`VKjEfFluiOr|&BbryH9Mr?}3;=}^DnRQm4W zbkifl>D~FmsloE$w0P5S>V0ZB)hwSy2~DynrBfC)>z_qqaPJ=2wFXQ1f@JOf(E@gg7&N$L9-8z zpnj<%se9v*lylWcS}W%+sri6A>4E$2q{FY@NrP71N&Al6N#iTsMb+)Q=!f2S(W8^^qJb~nMIFDsi<%s` zi)xk~M>SiGqozH^(Us%J(WvLg(W_sMqdj}ZQOi*QjrY+s?rp~!{(?`$VO>LLm zP2cXmn{H3dB~Oc7dcAut-I|+ArJl>B<;!wu(w&DZy zw~wdy#*C-x_m8K0=ZvTQ^T*Q-pNyw>e;7{{w~wb0C&tq^NfW46+620@$preQ-2_Uz zVFC@hV*|kvECfJv51Y&rYJ|izdG3hg}Q8+LXGpMP>eN|mZeUmyX91>(P%0y4o#(S=c)8=_o-BUz*Nc|HI-IQo=W9r zO{Ht+O{K~6r_ysDPNn~?m`c-so=Uy9Po-8zrc%q8X_QlH8ht6J(KijJQHAtrl-_X~ zZM$X~z0+wLS-9Uy)9CYN(u_M==H)dlTi?cLO|7uwC1 zaWv=larFAOyQtD_chRIxchW<>?xY33j-{G6kEI$vjiIeKj-mQLj;3}ujHc|>qbUCB zQS{hXBPqW9NNTls1eIzyf*yT3hxVuB5Z#qcuWiesd#=u+OBWBPTY|$W}hGx>_9|u9c4WbX99!PV9duKrJLuw3 zx6{nkx6$mTx6y{_{i*D}ezc}@Kic(DUkam7`J#6p8vK55x};oh${5;<=6unUGShm} z$0Kj0#b5WJ%o;uD(AZn(w(oAHM{C|po$u^UDJyTHGu3aR(5P;-{mUDvT9q5=^xzxl zze}#CmZ{g%@;=v5|3%l*{@82j+8eK-5ied%Nyod=Gab9qI}cw)zisS7EgN*9yGC9~ z!GaF#iU&HtG10y?|QB2 z%2BQ8s*f+BixMxP?p<0^sRvuoe^y*fe$U0!nVQp}kMTwu~=#|&EE%AnwAL5FWYWB+&EDZ5VBllJ4^oUnU` zj@z3S9<{TY9tt=PZ;oAWzw!95_T0wn?B_oF*6P~By5HK}-u~Kda@h)d;!n%%4nw}QJH#%tYtQ-Ie(;jd?6lRN z*i(mnY)?%7$X@xsC3gLeAKKHlyl=-&e9!(=F1B}k_>MiP$J_SIlW*GPpIii;c%gmQ zx;N~hpU;pGhTklp4;_Bd;F0X?50mWZ@=39IeYK!dG@~9 z&)EN?xptMEbL@7rpR%impR_;S^SIsMiO1~QE`QX{KK8JE{fo2hgqvpB(-UXfd)|M@ zt~G4B9j@`9-R`Fc?8Xn?Z^vAEpZ&q9d+hFSO|yR;I@Ru4Z;JiFmPz(S^CsHQ^qgR) zRU2=2eJ|G@lRnP=aLHJ^ZimtKrz=L-kKB-Lzp!zby=&MIySI^P$IKdF|4`?4d;OAr zcKw_B*k9!Lv|pdm!~VJH&9?nRH~ZT$H`vqUb@m-!UTqJ{xypVzaHYL#@QxfWN&`0f<5-la(2d&GWO1|O4$v6 z@!R`$r`RowWIMHj*S@bwf<6CAk3B6j)~@^?%g$b4*cUH66YAhO8M?Ulu~6`%{807U z2STl9?g?eZ?hJi1ZfmIL$&I0wKhX)vLb?Z5s1UsBg`$LfwD- zBJ}fvpN95#`6%>SnGZwde_tG`x#;cC$_EyOd_&#{ZNKid&~0sB4n5K0#n8+q&xfvV zHZQci&C{X$E1nE}-s`bY#<+(=L+8#6^_x+y!ddr{Fr~mPNdYK=;N*}TO z)AV|4K1hG|#9Qe%UNS#Defmr3^Q~voE6sW`{rk2Lr+?s^o^Bt%C;hEc6Vp$%xGVjK zdBf7L4)ss>#dc4>|5%sw0TtS(r`_Hv{km-p)AOFFkv?f+rSun`^rwr>ap|AGdZJC$ z9oyQhzw3uK?+yB-&GL8NXfxpUxovvh^m@06Eq>R)TNS<-)b z>xFF}YW;rMrmc_HnbPXi#EagI{k;6*M`n*-Jf+K9iz}_(vG~EA$?qM^ule4B)#?Ao z+pyG#>#kdi&EC~rwX14Z=&pLEt5~mTlUdF9FxCa7vnZyR zH9EL}onEn=ZPs4TR)%h6vvyUpK5q}OIYNfrx%vouO8GRqCBKEGUtMP%t?sejc28O3 z_E+pjs)G&e`;`^scd@SfWw6f!IsD_20u~i1;k=*9_?xpTR+*`WJtwN;E>jI$a9aaA z=WF76eJ#ABN(-+r(Z)B|YU9H?I`~t84&L!f2mc(eiVGuCnxIjfL*)RyV{B^cu;UP8-5@ z%p{&_GA)ru85Fk zuBfcFrg52b4d08&qQX5dQD@tA1Rc)=g7<5K1$%!K3%KvA1tur=2nI|$B52xuMX;>t znc(NbZ-SPEiuBTYExNhEfbOx9HhTbumru(cKO`9AVPqQ^s==o`Ww0e(V z+A4hxy=HSfowz8Cjvk#$D?TWo^_5C!anEu(Uvoaq?^sBOo>)u=6fdJcTd$<`&#b0* zc&wwDLmTK4xlQ!&5nE`m*+y4s?4WZF?<7F&ZhF<8YI^UB8aiFEmJV0gOV53|m#)D3 z=$5SgbeH7;y7|TdIyb$JPExI>@08Zl{;%ul82f{Ce855a)9i!vUFsmc>0hM&wuLZPhQ3W0Iw2WS5QbIqpDx^>A zW53A7oSOFvs4Ov`Wgqn~F^p@$C|PaD)Z(-#E-+WnF>y>s4B`g@EC9iC}O zSJvpz@m(tP`e0f5X89*UYOkk)lVh$4p1nUIXi`5YFe}_5I5cLlz#C@?9NtY8Y)%~^ zFy5vpa7<{Tf|mGEeRGoe$3HbS$^@m0b`Ci$n!7}m`IcbC*i80e7P)0H>+KdZzH_%S z)h8R65pb3SuoMz1CshYE2>PE65(}e7&&#o+QsTaFv zs4tr)3TEd!MY9n{QdpP1dF+MDMQmzeIqNfGA!~4D3EPysl0Bfejy0~WV(*UG#=gA1 zi){|CW$%4Fz>dsqV2>zbc2mV+_J_s^wspa2cCgw7_G9s7c3Iaoc75_Kw(;dXHYe~g zyXJa3+v)k5^*!~TeL3bcyZXd8He>uRw)Le9USubavkMh*ziZ0)$8a^gw?YFye5-|{ z{dBSA#U5DQqZht-*$`WX^u=FzM)=Au6Kp(lAa2$%!*`Dj#Ts)h@IzTk96rw)U*Oqd zi%@&~`4AtU`6R&ZCPHjY0d^KT;qc+3ajuFBUUA74A1WS;RR)j4_`rBlP! zo=(Ik%_iYX(CXRBPi61rk;j6>^@YWT+_|&%aYWx-=f1 zMd7@A4meV1kEgD%#iAEBSdF&Ek4i1^{Y%4fjG+bI5@3#>R}H~;?+wPLeFkBVDFbl- zc_z5e5hHx*Yd<{It}m`m>W!B+8sN7wz3}WwJ#qLBJ)9x0iwz^S@!G4JIB=W>zS^vY zhkL5xd3TiY{bVKFrtRhT9>n5CM{+UUYgIQOete0 zw-vH;j^(hcA0)H(n$c|R_z*U6ogZtgFokU?8^_);cV??zQS7nv)@;oAq3pRAChYz} zy;-*$U6%c*$_ACov4b-^nIC2^n6LeAGv@;@Fgc$NGc&K%F~PDsn99^O%p<#nOyj5m z#@IHRc~b7f#Fma?Ol*fS`&Q^Pnf0>F5B+Z!PQ;8 z1hR5H1PWuc1?6+q1&=b61>!h)LH|iS!4cF+_2k}CV~0JX!Yb}kw_jbQ8m676>aQKA z9>inn+sJzA;D8z`-gPTwTeXhbG;BF_sC@y|>v9QoP)BlhL5L~ zC;*I;h*i_$`9Lrgn!F?KYv)oCjP4CCH#UX zMf`QUV)=aIY5Wz`DE{#?=KP$y`h4X%^8CX$pE~s2-t4epe6_=*s>KfJ{gNGSULWsp zGS?ob!>;$Qd_ybu(_{ z)uo;rCZPj_Z2pBL*Xl@E5{@U~BPDT3`nJFJd)j5_Z?l`c;gj8%GzIsaP^!g$6l}~_ za<<{Gv2fwvH<-a+p%cUZrBJ}1TfTt5Z^3H*aD(mqLH+CapSK?7JMXx_pV0dbe@4ek z{&>^x{D)o&)HN#&%4?NDJ9eaJdaW{SVX<_UrLRix033+d@Z#zzs$=#EYW3lh zl<&`Giu4;wyX!Qyrv40d+~zEGIr=Q6HR~+Z_g|O>U+pg`J?-`$wr= z_c$sm0#lWFjnrnFddi?|FBPzGHwDwTQH7lwsW16!s2x9+Q7Y4!xLP zd;2kECIgx2^URsK?N*GKa$tUt2|z}}XlB7fcc%2$L?&F_hsjl*$)tY>WW3LWGeHZY znN4&equrXu$WF;&M7Q&q+XY3;v)-l5h^^&}veA4dVctTf*V9Vov-MJjjb6@Zu3pKk zty|3;YFf+8I<%e{wP7POBWV*u>XEtqVk@(H-gd^m*G{Icau*}|yql?VuVF&U_ArWd zwal$kdztyC_b~?b`X?Z#^~{`I^-QwcL8kZZgN$GJA!h#bLyTN-19POc zfjLPxGU00*nQ!kKnadzzT#H1EHz#6tyc03cdoj!jTZUQS$}p=ZFpSWhVN587S=X0g zYC1&Bk0udwKSRXq87g8l&NebN0ga69lLlscKm#Lp_7LN4eu%l4b&!Fh^~~yTb&ao1SL zETHEzI-83GBPLeTQ*vI?Av-M{x0%N}uHCcRv2$>ftcc@I_g@@VZ@-u=2qP;m3s+ zgwsb~7mk#>FYMdWE^MoQFH~CdO}OZy462x=h%~!YQO{~EbUv&HT5N5IZmIT1A@5BQ zJT^ls9$FxSm)2(wK~v_s&EKPI;)Rvj81AP>gVF87jA|Kt>-HpyY;1# z>-#pKaXFjN#Bp0ubdMeA%I#g~z?K?xG-59rX>kC}cw3M9*EOJ%sSHvPHX%*f!zl0M zQ8aGe38XsV6mrr$i}s&Cj|Nt>APv`6)c*4-$~@49YJzW}a-F+K3ExNUL66Wq#iwZb zu69&6{v`^0{TeM>@DANJ??4}qe?lU^PE`Nq8%oLkiC)R^K*LQ2s>@_SpJ2Qbl@-9n zRT0h=D8aQRWeEAA0zsB)z=o92pwpisS7j9^~ic{4-ie(hh3Sy z;NxZkSaZq{*1zfvKQ;RTYbnKcy`zl4s>~Q-Hk*JRYYN7f2f&(V1EJviAZXJtgZ2G~ zKje#QlK@#y zhOKWW!?WrsARFclANxtM+zF*Vu$Mm#Zatd@7nV(j5|{xp?K1!^^aa|+55BefK}OVyd4z`qmBo|I+qa8IS~Ri z&Y_SY4uuMS7`)#n#c)Ti4~KC&5iq(YbNZ zurdxF?T>?p=i=bvGbw(X)HfbB*vG?9uXxxzHy*M|2yKdol{g;GT#tu79q~}1nE*!S z32@yd0qO%2pfOvD-C7??fbEwPVAR_L_@$NzPlhDICznJR5u6B1@)DunhD5l?Cc@4e zguWy~YtJMYYAeNUXT~RiZDkVJ?M;GN7m}dvHSudC!y}7i;5?GyWK=SInV$?3_asBh z`DDm?lMGX}q?m2lq!hTDK;&g9@Z(?#oVcC>4PR5>a-US_iBchVb}FbBrUJVym0<0u zQ1~(xsx+l|t?Se@IGdIRvFp;n>TnupKPIG{4%Qawkl>XL7n9P#ZFM^7L+OzFFddwg zGQiYAiq%@BWPtD53|MtI171AI057#nIB%5+K|YzFo|Oq_Hf6%9=1fR_O|I!>K_Ha{ ziL<0Q?fL2~(78;mb!I_R|7;lIk`0^YW`o6&Y&g-F4N>>9p`T(7v{~f9hABA^pOFKT zH%T#CcuR06{ao-95*#Wd7gkr~!jS{HgEiOl!0BZkJnzaQ5JEmU4$g-sR6fj~kPlXY`Oum~@Yk|@&|jAihxSTw z*^X=E{)>Dt>B@&X9fFq)Du5P#0r+_oz=K%@5S&;5cS;Ii%9;W=x~Bj}94Ub1SEQJ% z*Y^Tq^FnAhAy}&&!DGi3!eYNdU}6g4Mt&i@Sw=9r9fi=r6vC79g>a7GcDp*Hcq}p` z80@ejSc8hdW>OI}1s8!Jr3iMH6@lv7BJkZ)1gp6sXuecL@cttB@TmyiD@n0fJggXs zg~dQmEQY(Yiyr}Sz-})F*~Vh9KV1w{Zx%z~%VO~RL9j&)DGqy!V36gc z$D4YUz|Pqv&@a9O^72dI^5PQE-CP2Q;Fi;lmO#Me5}5q31nfQ#%vM&4!KRrI%+s3S zouf*jzgH=g&nksSF{NOcQwlK)N@4T5QaD>(3J;l5xOch~8rn)B`I!`d9imVM{yoZI z(||IFvnd1jQDv~-qYNfaD+3L`G8i|h49o}yyMihM*&$^xkc55GRSK;HzYV!u3SBJ0 ze7BXt^hKqxB&`&N1eU`0v4jXFtff!z-R~u^<6a5D%uB#)M+v+jxN>?-38+pc<+LjS z7sC=bOza?YzZjk!Ee6MJ#8xH6FfhCroLq~cb3ifJ@QUHq%_4YRR|FXqMX)@u2qxPX zL5m8ho7;uJ5^Oy^rw|r+7J>%B;k92Ez-G1pPL&rx?li&&7Qm|a`EaEvAA-vBVF>v> zfOh|UPL709ToSByj@;_7HMpOz|+)RcWW0K)PO%lZDl5rg0DXQ894%d^G4=MuY#ND46kjF2s+W3wNvL z!28dU&^0a+R;`bK!nfg2>=X|4vM`wcEEIkULZQ#X5SVvA7|d*f;a))ytiK!xfhK|A zM)1{WJPSIMXTcZm09aY&4o?fS6r#=mwj{p=`Qt_Vf`Rj-#!qudk=&?V+X+0BvTl--UJkn8^e!wBM_?_!2qlN z(963Y6sGqDi%orC^V!~z_|*^w4Ksx2vkhSPnqDxiO&@9v^8*XdEeN}DvWupZhQ#Ij4k_L=jtPZ?dHApIR7#W} z<%A-9QBeegNeU3PN*)aE%0Z{G9Pnn#0)LGRoV&<_78xFx1$Uux@egEZ@*Pdg_==pb zenB4kM8KcLk3IUphWUpzB3gsQMKF)B%9ujYF|A?J7+yX<60k~ z-tG@k{n7jAdbIfP0i-x-KeB$f7nvm0q9=-b(84v<$ii|rI)8j8O7Yu) z`gLqWEfrhQ^?_SZA-f5ccvhhscQ&BrIqQ*H=UNm}vIdg5}U)^X9O!)z|nSQ>$@^TN>7_+YgB@oaR^HvnC3 z^+OLP&Om1`_#jg+Z?vd&64IM75gohlf!@yJaw8CICGOihg7C0evvyDcc z2^5ObbU-Wj*dj|W8?^MZB^tD8I2!FW3{8+9incTjM)$-6(BlddG$p_YU9{_me(Cf< zxHl6_6v0y_6X0#?-q`*-60&^wMD4hQYB2-wO*Jw zZ;ensai!2Yc$rY$Z?SNj??Pc$pcD^nDlHZ&Z!ZwGuFMra{g5u4?Vlu^aXm)J%#IWW zeGL{4+7uw{m^MRrv!A!{^#@Pkxa;o1cW0zn=(c+TVFu4$=w@Xtw2ZY71~i!oU-TXz zJXP9XcvY^q@a4ju!Vg1qgzcBqh3CqZg*&|Dg`R_XLJ1Cfz4NW3Mdvfe5Z(KZ8E$Qk z(JNaVr^}vpTvv9)@whqT82J2vZ#4c#=?c# z-PmXFDG^h!@*T7Ff-d`hxCOg#$Qbr=g)e(5AeL{orN7d>EkZ`xUf_P6ZtsLyOk#1D2#I}Zyc%i#lw z3V5Wa64rPs#XM(5t6`^Tb<88{*#cEfys%yq>rK?c7w%}`xL|Fp`$!u<@Ylg1mvr!R zN*8}ws*7*klH#5AgY7b+Oe_9ekl#8#}gY;me0KasOluyk1uw z7cEo8kAEp+GhZpzdALIkb4V8ZRPgYNnxE`w!8dkvBgt$34mLCRE!&>`l9dgA#wzuH z#9rKTmsR+BgS};PwHxPb&^gPVd~t%cXgtiyXS3{1$3yJ;ulv{ub=7QL_;&VDk4^0K z#GRsnX=U< z_1VMPYV7VqUCi|f&luJAi;P=YV>iC3^r4*LF9>A};~bcnl`71_-i@MbF|=r#ja72-!3U`&g^B|EVK#z|+5Q55ha$n_^wk2zyjp>1%rSxc(d&W(pI!>y-}xnw zYf_=Bg7xSN5Bk!o_Jir20haV6KR$hPm=kT#;!dlNolN^y`qCbogXsK}IrI^Q1p0wz zI&C{Fj~-rGNDsJCLQhkkM?W@NK&zWp(m%D9(r4S3(>B$s=;o9Q$RwB6dx zbnT(7^qVc)X_MfcbjinEbinj#I&Mh~{bt7=I(?bWr94%)MyPMdsy zwrf8?KZ>ZM(=XJ~uXXF`dsYPFG_9xIAJ@^R6YA*o=MT`wI`-3-p6sJFckZR-pq38Y zTSKq;xtk6ev5Q{ex`S>Vw~elVEwsYWO|-k(M*7zCb+p;>HT3qCtLRlhD`*qbW%Qy; zi|IFW7ts@5&8Lkg%%fGyO6jf@MYKv%KJ7te(ZfuWY0J&g^i3v|ewpe|?|k7+*P43J zCu~O3$3_b1DPT=k#SWnjE*sHyA-!l<6D|6cyb|5>>rcVG>#qe?F?R&}%g+f4RawFC z+dBoNPnQcS1{VnA7x)QAe6$vIb-UQbCAF-=v^rLGP$N749VQt45!NU7BwOx$mhF^nVLK0BVUx3Ou!_`O z_VveyZ2o~~?1_X|>^J-OtOM^eyZhodcG>n{to3MF?9nKXtwt*0W%Vj}kWd}pIIoG< zh3nu-wH|m6qmMh14Y4oki_hs9;h^^>c=*MEIBBaHc9>(12lpS2XLFYLv4;&lal#fC z40XW!QYrj)FOBss3$fB&z`I+WuyWmKY?9@Idsw<*hjU}`t108~`jg}Fmw^-TnpjU9 zv11}WcHRqnKAwbEzM71cpH0EnE_-96y#y1?^ucBJ)9|kc(=eMo9Sc=w;O(U|u+!%m znD66@U+wV4s;_*p;{ZSG>*zm$;qRw?@tZ7P zJj~P=8;WM&TTV0Zx~Az^b;NZ1Y}qvYy2A%|c=+H`o2KH?AH8vat2Z9uP5Q^@b7n(P;}@ z`oSFQ8VtoU0yA7UZ4l<-rI=*hW+ObVsUIGDs}DZ*(-7l92H4zNA2a1WutBpfZdBL7 zHsp6D?+<9;xjodeOr9!k{UpUBRe6foaG5-=wU)zu+hnkODG$F&>tZiH{Lbo7U)kz8 zpV@m+9jxJ~ckISzuh{Wn&slX&ibbALzRO-BENipy5WD~Oes+uL9#$o2CmX&_ibMWXT*FSFmb3nIE7`ppD%gEjO4vrt0+w5s z!EQ5;XUTdz`y(fS9XMes+sgM~7rTyT1JeZE800;dq3peT#%%Oj1NL5;Hfx)v%*L+a zv4fAjXR0m#LRl2 z#biDIB>Gf)UbN-YcG1jj`J$z+v?$);Wh2#hY-7RBOb4r=josLzrJg%=^Ftn0aA_@- z^|YP}{B)LjcIiH4RoOwUwUiZf9#RnmW@rm~R_P0-d-WB>)|m+M9}Mos9ZxY<0DqX@#Z&?H5wK z(IBdqpsh$x5RtDX=ohFa*gQ~4F!8*s;1~WuofCCXhu6NKoT463nBPW?(YQ#temOx6 z<~4O=jf2-!Q?p?U#WPw<{jy(5DV9`F8p=gf--L9k-eN9w#lfE%wqhdHYl1U1c9tF0 z_wo>`YER#8oYCvJ0%c+JnNKh`ern(a{>NUJKcHndUw+;i{%V&B{=6sYe4PQa_!CCB z@=v@U!FNbAip(2X%#H=b}9xo?NVsJ8hI1mAPm+=>nyma5~aLMC@gY2${4x=n(_*?CD`LRx_TubjX{sz2;9D>4j4d=fqLm<#eiRqZCtY{yvW?S-Oad(OyP1&t27x z5l`D$MWtnLrC#*iNqHAnQ(BF+l;OesR8m$wbwRs<8j&KRmesJ-EKw6B+{jTSvyM>j zdB>=f+~ZVu+X+ffrJ0IVIYq@^Jw?q5I!(21KTV0(oTdUSPg5JGpQ4VbHB%bs1ai`lwfXAI$^bpa)V??4CU3&X zH=8js*&`UiKs#nHrkOxjXJ*IIvCL4biHzgIsZ7}|KSotQh!N8f%%*WMjGt2yv%G%> zv+-UoLmw$%914pW1G_TD=Gr{QDr^Cx{bUi7J$VUZTDy#y+PQ+!wOY;iOl&CXGaHx`tp?`ifkRBX>mlaH z>4QudI>@MRt!LhSuVZvv>X_bn2N?A|`&_c7mZ?Pa#ztz{Op?qO!JHB8*{YDOHm zo7rfzi_vS@!JJIk&SX7mfH7`0~`m{+i#(OR&UF}k>#>8G@c(Q;V9 zY?!r-NiSH!bXHX|eegnN@zwc^!kc*v>B?|ycQG7YUIDGg7Q;J-RbcaJ16=Rg1~7dO zbjTlst;$Vc9)1Gm54-?B$6SYd=k7!E;TMoS=o7fdB!wo#1V$N$CM3irSQy78C(Q~X zXE_@OC5MHDCKxBh#u_I^lM|hPA6Bfcp{1?U!?3qO-~L7tCo3x}M~>=IR3-;6{W)sp z!c%YYX=o7}r0a7{2yxfz{JHqFMDFLR94@v!2W$l?5H&OuZjJMRNvRg#d|VN#KQ@xz zS39ErHa|B^bRl}G4Jey<0e^fXM3`p5;eBPWuYDEV^4JSJ85vnwa&D6nIf$4iN1Wu; z7Yz*^r^Lk2grvyW7~?^S#$kbxQK2Emfl0(87!;yPwq}Tm3<^x?KIq;uFfceYCU{nS za$rnSWJaJQ(ufH13Amhs0y+Dp`=lDR|CG#sQJnuDa`b?*8G}@Rn z#MqF~1RhaKj!&0JqhmuNW5SICqrzhoB9kJbdA|e1L?`f^JSR*xjt)(Vh$VYwrN&0Z z#>VlyQ)7)Kf^lMKU_x+&B<}AJVS$NByfL9+fyq%xq)Q|w{SMNdSac%KH8vqQ)OdpB z6yroPW`xEXlaxsG?%R=xJW0EVNsLTN|2MbeViI{?p(J`-QZgB9Vqzl`LyZ%YgA$V> zlaeJJs#{4C3FRFc9T%JMSD1*vxIbw`CB^YPVo82U>e0q=385j8!T*RW@$!g;hEE8L zjQJlogF~gcPc%-7AiFD(#ACyZy+*qvO3Ox~@JMe@N*fWE5F19ug6_*vv8mlWF;Qyo z22}?_o)Agt zw_k}g3yE`(GG6y?x4m8=iOF%qEJQ?0`yZK*RB2>FXyQL zFG={+_TM3INCZj9b|R?!In{MR;C+aF98EX9wD~T!*{}y#$jWlYDgp<5f?jb7ViHc1`ke58H z$YG5{)F20JcROi(r&Hvbq;&1S`Kel|f9KwAQ<6I(iPW9_Q$#WxDUJTOwEyUHs@f-w zo3~%e4--zRgXp*tD$;nev%{Hg=ec%8p_TbEe zNy9%`qNQG{rShPZ@B7W)5w1WiLUQhue@IeOk|#K^6p;=8jG+IfQrgM=?)q<#^0LN% zcsmf!px;eV9wYyL~=5hDLXX$$cfI{b^$-x-$_ ztL&6i>CWH0{WmW=O|BCYoFZJ(swJhlLF9iZZYLhY=Krj?itLXmiFEik&pRviS4lWg ze4p??ir*9YABywNNo@NsivMQYHgdna*hKlN^HQaag#R%`Cy^B;9!cuu7i86jNNerS zkjuOHpLM?@!T;#qcTuXlh44SRD_j1idlT{etL|T<9Z1~2X=r7a{?dJl$dc@}|G7pC zvh(uabc=}RUv)eDOK<&~P4Zf$`l^2O`@ebK6_TbjFHVOgGAW28-AhFNAL@TUX(Yk_ zkfbOQGhh8}=HI-N@IPi+b?tW&qzG+9R#cP>4kXfZ;<5N`ddXBl;yV6g8r|vayZ+nc zzxl`Cyt0j4C;Imht{{1c6ZP+iOwuByA)fpjvT9a;(o*S8is$e}E>F_XB`*V#^8EEu zAiYnbog&fxl%t)>8?nPb8ieGCYRO^ATH3_vNSyB9oZkQDNM9k^4wKay$^2YViM-0Gs&*e(OlIop zDw-0_TG|@gI=Xs2dg|-<>SbVHXxO`VpFVy1_U+rRU%&qSyVs+Pi8J~4E;2G?Ry3J1 zOQtmB<(a(mh9;zhhKx|e+p_kq^#- zVhBaY#>6JY#)J}OPE`+O)s~WGCw0qy+{`X4FyXe{PT*^zW~!DShLJ zjEV{kCv$0%1X26P6C6y|^6I-}cn1lk{FLFP5=tVJOlTgtRzawYP+k{Vh9JCv@J2$; zxjbGiA+oB*yJW=UJ(my}X4^SgvdVZW31@QY9uDZV42zJ&gqKTR%o_a2FDB(esf zeuRXC$Vv#=@{|y{@q_63Na!We`9h+fq;ri>3y`#PdA!ktL?l0jgc?Zx@(C{|d?BGl zgys`kKiqRj<&Xzrl$0Kb#mCX0(sT{$NG@8F-sb< z?qBVgWbumURnH5a7d_8;Uh{18be%YRqJf#AS%_JvS+v=Hvj)9udd(`&RbH#Sk^dr} zCQHez;ces@lU>hMe-9pNWWRG0viIRyoXOSLiAa)?lbK}KvFhSLX!1;V?ySHBsU~ea~+;j(JNWCk1`$dcEpN#1Wk}|@_r$2#}PmGoBxOF z-QnQa)G*=K=RCC5%LA=#--Hg;Jw{O_CSWjQe7DZDft%peoikwPrZwtl(6~{~fmNdd zEW1XTk6!5HfF{!G#x&BZ*9SOKdloxBERhjP^zGTRS=jT;6QSaGQ^casZoTza&Y}ww zc<}FZ9|`#d+)?9h{gdA<9HrELdeoNHnocXC-JK-qBz*tjbolLTXCCjA^T$@}(PsTN zj3#@BzL8biG&m3Fd$F)|+BA4_)et7qSYjPs{VDx!3rJ*q@DTdxtP7WWMZ?~E1b5In z4bQKskGiGhK8kcQQm?9-y84okq}eD+)`X0~K+)PMW^cA||$-?=aF{`>@TS+df5g}4B{cb$yLC5- zm!2Diw=NAqToBopvwK0B$5XtU%W1e7aIWNgjqH0CT+jX5=t@i?r&j$=EMv)u@2&BK zovka;h2_m+PtQ>3S7w37%^AjdZ;j-Fe!gtthp2h>p8Gpta2!aD_tJO^_-9iPM)sZ z;!kRv+q%oR*PMBH*<453Eq*39_QnmAZ=TIHf1S-yx$-bz>M&^0&gC+X^x$5<%;k=f zJ^ws1HK5$e0FdT>H2iS_Y?x~dY#QRO2puKroWR7LTb<;@t>q_kBTOfWzjaQAC9z~L#e0J}|DnO0D-+92uFi#e zjXAJ;V1bKYV23%$iJ}#-CdLCeRuQ1N>Sq@ihq68Ct)2IQnvXi;bMR&xvi_^fjODycMFpBej z>I=u-T63X!Sy21E6ph(S!~BJdkjvd3Xy{oXr|6gi=TPxmQ7-uQ{@Jvrp9fcxIEQ<= zBL&8VrNV?A9-LS8K$v;&RnxA3CFoN4IdOAm92iz-gL&;-ZuQC~h*6K^T%D$JJN+#< zXU8Pic<4L2-K(f+%|HcV!Sft$fXWSYrPhp#nluHT%X)Fq=JFgE9b_p~(9$olFq5- z{}c}T5ee5LdO+C4T+aNP9dv~SaOtNfil@ye5#K&Cf^)0P5)1ujbKl;baP$yVpd5qA zVA?u^i>M8P*=eEN=3WBvz^BFHt*bfVgm87p=}_Z7ll@fF>zdG^07Fi7h%NVJUL?FX z+b@2*IEPcyw&J#5UL#hGD;MuQ=?%R`eMb+3?c((do6(1&B+ zb06;Hg1miCuoyjYM}O_r0!(cUKQaS_gB%Ugxp!v4RfQ zusfU^-$lM_+**&UZaHz$(^X)>jLAs;NIW;7BNxU5dO+rbWoW9yK|~Jz;5su-qC0c$ zqA6}!+~=*C+-~P-$g#x@$vee!E9NF~HZ7UprV$HNvK{weq%Zg8#_pyC;Ljzey%6VX zlW!;#$Ud%{=R)xnBW{sX2<)m+hy0aT{QOM{w9h1amg#<|D(VxbtzG(Z*JE zWNI#$PPY*ExX>W(ee8{RPLYq$$E{Fo^om96o}Cb1*)#_(tz9P$*lGoHu0_DPHz< zq8!+CY`OSZ1No)3PH*nHSpYytI=B8)3JgyPf`fcLIR3#~IPm-oRQO4m6TC|UuO2_e z%`-A#fNM4vsCPlUUO$t|EfjFOIxEE2?&ZQMlrPlYsK#lPP7<#z&=Dt>4TY&S6b$_} zo$EF2sH6G&U~WxrFjyBR!@|@tuzQ#zxMmqP>6C32+mSMgx7CVwJUEXEj(kMt+fIvT zZp(xY-WJD~r5nVmeJJsu@3}C%vP8TtC59`i&E#&J&xJzs30xQ|7TYdz=K9C=D-}$ z3zQIK%5A+d4e4E5-_*-Hl;eeDfx**2c&af0ifgfW+QzZ)wyPcen0kPG>o5^igaMpq z@@ce0=Zu(E9>y(QlmR706qoLi$eE1|1qag+NdKoAI6of4=}k-Fj!w%3g>^Sk+oU9j zCwuxTlYMa$3st$2or_RPi7(gSM0WccKZt8tD8sc?4&jt;r*REAQQ|)CNua2i!<{op zZ4#kAFBJ7VVB{+BRrm)BB7$;=9Rduz8+P99G_e zmY%!T^kUy^Zj}p$W&2=W_clCv&d70r*U( z&@BqMD-Gr1^pWJ-xS8WPHX;dLJ=xpzBj_udMZUfB=D$X(EA9(>Tpi8128O`Lx4Q7E zwjOzX8U<`+DwJpS;_B~*aOcuY|kcid+fv}R|)#r$+` zhWA(I*oiP;<8lFlW^p2w9N@g>aQq|2V#{!)roGu>@ygdrg)l9clW)j@ql?m@?g((% zpL1dDMOr9Fz5~?!9?W^1+$>Jb^x@8Tq{Bn^YP9e0Om5~V(vJ4Uz^}uRVhuMZRBL7d z9y5A2`JbQMG*B~|OCjS4T^kF%LWjXCn`}7yJ%_up>9N?wYBDIa=D@ud+0Zqc56_Lw zxL&Ij;P~`72w{Pnvo#fN*G7Qas$lU2M_mwodLUjjHk#84^yAFpgUKGubD(|tYwU8a+(5lPcz||?iqyRIuL9p-@zFV z0rv(PUC~n%nqL8~r}jy4LX;fbv?b31^Hi=YOqnxNo5Q)5$!tBerATUaRSmX^F`T0!`hv{=mo|A8$KaLd7SpQj^yK*Yn%v2C(E>09?Do;kS zJG>w$G=YnEdn)z`yo5#_4&{>8=EBKAXVH-=;6BV<+jL;B5ZvNM!$9#>bZtN4mgXkF zwO)ha%+^-KmK(uy?-;KCpf<$+w7zNG!aI&m-8=Bx_hN+Jev##i_-{_q>2>u?`V(b)F6c@Q7f_kY zC7oRDXg11@>xi#G<3epYXpVti#3t>SygS;Pa`W~L5x>tIEZ)5)nKMhhCyuU5;0~+`$I&+UgiyA@R!C3r<)Vkrfx~31&!3#jJv#eY zTyi;;dpm3ay4PDDdhZ#+6>rdoQpIfW_>l{)X;Z|8N7Z1Mni2PEiXrz-kDR3t8NkU; z&)^2-r@+4DkAw;`GttBgt>W2fmB`B|6}fuJ!HO?Kxt?xW|2i zP`PLpge%L51NBCuvF?SALEf*$k=GJA`nr3Tutw@M&B!K_{ zV&9t65E+1wroN6Niq|U z6R(MPTefU#7l?iN-?!@Crjd~1W%SJR{Quulaksj4t4^Id=hUflPQ83+DEYgcL&rBh zdu;Nb_YOVq!lxg9_%oX=7hfM3D*OC%gYmTkme9Kkhc1-;Wbl{I*1|_R$da`Ch~@1c zeR6Pk>~_nB3(-T*-HTYkZ&VJgKD}$`SZV3dfup-DHx>_A%AWY-;K%Hlmb1TjY4EPj z>n)w=u}`&FZc6gAJeGLl(7q$*%R*``gMT<3KXeH5 z^P9i?>fqzE1C~$Rahs(-C1j}k@S35!lO01P`_~-X`)>BooyM;WwuRhx>>J(Bmi^lD zlhViTx^bvz$L*H?icPaTmJvGGw>)nsX0&ps?w2mhwig~TKk|0t&>jErGxPUzzBxF1 zK(Um&mRP=V{p~~MnMVifZ~l_G>cW8KCl5sp&h>N-{p_h*hd$nNd~nCJp+h4s_^5s< z-*T*Vxp~<$Yb_6cUT^vSeb*0N=X4L%-S^Lr$3Au25S(NzRnJ&0e|ynx`9Eu&L;v;6 zQ)P!wA-==S-IlNik62#)#~UpVE*r26{W!;R`jC5QgXfEbf4$=tOKQbOhCb~4|5+&i zo90tCLwW(}5oqHcMLLS~7}DcN$B+h*hLC=N^h=~)A^jTZH%Pxl`W@1LApIWc z4@iGR`cI_)Li!WZ6G;D!^d!=sk^X}86w+JJ06vZHo|}Wt8t2d8`~;5YaeWHuG}0NQ zkpXBSEs8RRG-<>+(iF6g(^POm&juB_G6TKJ?MPIjtU=Ngqqu`P9Y=Z-=`ExaNN*#(gY+)aNu*Oqr;*Meokco_bROvf(lF8p(nX|Eq%kCF zPJK1A)3}~NnnjvJDu3`^o#BlDsaL<+B2RP-)^DJ4mrD2WFhgjFRJudmsjl^i1*E9x zsH+uo=`#Uz#oN@sK&kr_($h%KAU%up9Mbbh1mR!BF%qDR1SokVIC-vtH4-4y0kn|- zZ6rV&DM0-?j&C3xMVdNHh`{2 znzYQLm_P}j#RSld%P2&ZNu((ieTYVJNYuSk7w?N|zRM_+ct%v?GR!2(8Ao}OEE8!0 zhte0HQ@=c_fUOwgA20KUklsZ)iR4RBII`L88kmU&M2FXrrqLawEZUMwJjzzBCd9f1 z*EgsJo<*8Lz8T~{H=qE_pc+V{NMlIjNE1ktNTcY&F{E*%2_!D@_%8WyS!NEY{M=V{ zhAeei$mb9?zcOJ6)0U37a3g;h?O#I|_z^>h9ULjdb`4878aN7wJ;WIH`e~#yNN17G zA+gHmPzA0QiIpRQ08P9DX|W|80Rmt&LBJ)T$pP8)^C;^A(lF8p(nX|Eq%ov%qzR-+ zq$#9nq!}cxNO=j@onHqCyz7DTBq}<>UHapIo&h-y|R9>g8gD zjPMf_W$97@o0yoTO9XF>j1X*5u0fJY(eMGoP}ov{8VO=2Y0(AauyMqA(Ku=xGmaa_ zBWE#yBGkpncrH%*O&BMQQ^slIj1h~GmO1QDe&;uJhDIzH^A`pz7wg3#@;ZXZ#UG24 zuZ~+LEYm@1<6n(`GrnMa(fE?_W#cQxSBgaSc*c0vc+Pm9K|!=)DSF%!Z?>0y|0{ z>4EX}B32xZP6y4oO+80k4pUbLe6V_2+G+WbU>0U0JDeufBMF8fc3Y24T7a}V-6l`7 z+iHhhH~f`okaBfnqGoq`8DGDlrTsugv&Y)q+huih_rdi4QVSp!+XMHEPPhxe6sY|8 zcXfteF8%y-QAZ!DTynJJVZWo9UzvOKhqcPl@2v|s`kH^p(SiENqsyOLdNlDw?9q+b z6{Pdl#G_8n#-ls`E$e9Wc;3-pK2UP>x0}k2?u{N2l!7M{j<`a`Xp@=A*ao&pVp2H{<9d=A@&KzOwqL z`IYFS``-vW8g|$DNB{7XXCIyX+|M8Vm)F1e=o5iAK05xr6_38$ch@5u+M5f^AAPg% zFGYKc&VJ)7MLSkMRkZ32eevMu))im8tFn0O_ie?m{NKBZD|-KL@y#!OvpA^eXT{Io z^2g#gSG-hw_Z{bo-wE{5_mzANf%6|T zeXHa?&v#3{e&Poubp<~z`Ro@TD!K8`KPhSZ{ZC5@>V96bz37pW@YzR79{k-SB`zzD z#Xm3k%x8XD@~2yVQqq3#!IDkK{;lNRo4#A}xrT3)Bz^0?l3%^}g_7@o;&UY}X`d)b z47#nv>DOMec~@h}v998hkAB@$()n^g$ybj*QJnbJKNWxPjg`gucb_OoEsH!_c>foV zcDhd;-Tm)tADh{->#@kVyB^zg>?@BI?*8dxF9iSjvAZvve(d`Jfsg;o{mUM|_0hz~ zO}6~Uzx0hQk4L!om(Kq7VCj?h-BJ3fm`|0yJ#$a#=QHjr?fUF@N;fAxT)J-J@zUym z-Un8G8nqkKIvi{^8N>=8p5b%q!#fnd>rdG9NFnn|H6h#r(4wr}^U#^_pGP zA2GMt?lgZ&_c8M)@BO%WHu96^zx96F{QAFt#(eUXe=?g+-EIEjbN85k@b!DmPnUhc zeD;@LG>0zzvUz#gSIqt9ubQuq_?r1&e(*K(f5zTtKGb-h*|z6C^8?2F%n$wOYv#}T zea-y9%CDNsPJP+@;$2@dzy9PG%%`5a*L?EJ_m~~a?lxDHeb)Tx^`ADMedr&|O&33E zj{M{8<_7;>bHYC#G@m?dGZ+3~uX*i;?Pm8}nfb}3+2#@Fdh?^pmYZ#Jf#!m;Go|(6 ze=1F~f4}sbtNx)>_w&uA4{SPKlKv^blGnC2KDMSi?D3~>YkU0DuRrj3=BJ-}eCuoe z$AbS5cWn4z!Lfvw8jqb{<~(*v{}0E0^Xk3F^u})<`^_UiIoAKsua7McdHUF!j~+kv z?cZHIcJDvy2HV|XgC}lXHmLtm{NOKwlLrSsoi*srEg5`3S3UUR#E!wQM(!VcX+y;IbR;8XWv778BNdX7Jv7K0o-tk}nPx-v711s)7dwk3ajJ!5`fD!@(ul zKN)=Hokz+(`Q5>?|33JevbdZ-mVIsJzsnx}&u7Z6|H=zx8#-Pqizz%&R;52(w)M#i zWxxBvc-hdt*|L=eY6EPO&HA-`78M>`7QY_`7ik}`7!x2`7`-6`8D}A`8WAE`8oMI`8)YM`91kQ`9I|V$^(=O zgnR%wf${?72FeeVBPdT$uAqEDIfL>B=u&Ji&FumzBOihP7 zAhOcqkL) z@zAW?#Baft-0tW%H9L+taba`2ZE)#z_Im5qgr>ozm)^YHEqp|acF~yjj<$CBk)|G- z8-028OkRg!>Cp|Fc1}N9Z1DMQ#hk|JR)OIXlNb7{_PBe6)3%BwK0e1HkK+>Pd7EfT zH?_d=+1X>Vxm+-JS5a!gEQuY+`_&5!?ZvzZXy)zOd8m22k8fepk@8P_*8D1%eZHT==yd=o!A@1#N z^jD+mpdq^2>pS65%HR5}&amg4DsmaVVdYN>8)+}UUS3{>vI*(_41$OJsIC@h z&ao&|{O0hT-|Gy^HLp$08IT71<4_Ra`3Ifhgq~q1><$@K!VX^(xW{xmg^!HVgy9Dl zbM~ATmH-_sGXqX;6Y~okQ*6CGPVvVh-eJfG`n79CFnYkII!7x!m1KMa1=Lh~*wov+ zsS)s;f7tBoY1f|eTzd=gBQ%Pvmg501d+iOrDNg5tzUSvsDx~ zdD)W)iy$c}`&WBTza6^+;TNu$Q-09de2V}M^*4#0L_0|nVtbI9fHAh4it;lhSuu4w zy4%nm0cfen@pN={fHXTy$*rBXHjgQ>KSgo4DrL=CluzIWSwrAC;tI530BQ}?NTb~e zl13Dh8YFg>FZ+|POQ3*1+o6$?9V$J>9B!ba>`|+$1tdiJlc~{x9R2OKUIv7~=th4# zOw~K8OxlOV$o_l!r%RPg_>`}bsSd!d62J!BKpg4I_CCI?^_g9bYNBDO)?5+H$CR9C zPeDD;KcO=`1TQ`YG~yatfIbRtM!LY?flnQFWl#6PZs*}{Q+1;k!VCKi13~Lh4d)W=82}=N zH4z?uan2S})KCTVTZS+Zno<=rNyy|_tZb+bRVZK~s*M<&O_jK@yB!5d2@9cc99@F( z`XYhb!JsTAhRf*_IqbgM%L&$oa!3kOoSvvZy+ zgH@vtp~@7hznqq17^eGnZCY^@HI zF+`WJG9W=RtdDOmstsU#pSnuqV!#+w3YbBniI20TM;z!12DG8xT(Hp{y(!Xsm}KjRNk@j4y4}qP21)hCmX~{U!fhXCd3LdwZrolvw?1t4GfWCc_83- z5GI(%v{Mf0;xqxb(MN5B4~dQ>M(zw#WoL&Rn3slm@;btz0;Y6E3`$XI|0lmFCEPY* zq0c9pILlCbR5YE@kkHd^TX!3=dN%?CA(RsZYdO6^?SP_fn7Hv?55x>KxWA*Tw+mHf zZ~o>LonbJ*Kk4PcxTLK^uikrP=*GC)EC^m_Ir`c4mZ~*B=K7)XVS?N7eU^Wv@-7XA z=ciy5$v;@}_xIC__oLQvIAOrD#>H zt}IDfiKQhGJSr5Szg%!5r)=H={O%;v!}}ar^U4 z0Vzo>@D0;SK$agAlb_|{& zjB=b+qx_(`J*3yTEhm|*yuG)%!`X}VHAoEzTt&3l-%xF>sjd3}1FoI|j=&pudW&{8 zR#k}TSmjl_foz=oAOOH|o#D3y49Cb&j10esPT%Y~*x|CW!=P56>OiaZ2dIX3DkMQl z;t2s#ge?@ZrFTxHiewzctsQP3_N0Og(BKOnW{y_NFi|a_m4nrp zY1Y;%hn`j;0Wwqr{ZUt(2vHp&3|cXx;eZ5lCtDy;L6$i)P$?3W7QKky2A0$b7yRzF zP-U06(;dwjz$kia^jJ3`$NHWJmv)KcW9c+=uW|5T9DsClPS6K&Q^=KSJWDHd9NpQ;ka&fBQ@*#7 zIV&OV1GB`G+$%Q;9-gSeDA8kb*#MKp%MyivK6_FG#X$EQZtv)EbanvmHY9pBfSa~; zBSImGipo|Y2lupZYL`+8N4f(T0ENNATutRv&Gl|d>_vsO$=$qsqRCvU-l$4WRMF3B zSTju|6MZE5TD_xEHb>7qpZA#-NmYp^05n66JP2_Tm6H!-YsJz$t77*q(6b40YT#C9 zO>Pmm4ZtH5NRxa+wTTKXxFNa?1PfhC%IoN+;s){d7}9OS{5%0ANfvt;i~K}v#x(2@ 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 m%VQ8j=hmK(-IH>?9ql3;V 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 diff --git a/console/client/assets/js/jessibuca/jessibuca.js b/console/client/assets/js/jessibuca/jessibuca.js index 32e245d..70eb861 100644 --- a/console/client/assets/js/jessibuca/jessibuca.js +++ b/console/client/assets/js/jessibuca/jessibuca.js @@ -1 +1,13125 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).jessibuca=t()}(this,(function(){"use strict";const e=0,t=1,i="flv",n="m7s",o={videoBuffer:1e3,isResize:!0,isFullResize:!1,isFlv:!1,debug:!1,loadingTimeout:10,heartTimeout:10,timeout:10,supportDblclickFullscreen:!1,showBandwidth:!1,keepScreenOn:!1,isNotMute:!1,hasAudio:!0,hasVideo:!0,operateBtns:{fullscreen:!1,screenshot:!1,play:!1,audio:!1,record:!1},hasControl:!1,loadingText:"",background:"",decoder:"/assets/js/jessibuca/decoder.js",url:"",rotate:0,forceNoOffscreen:!0,hiddenAutoPause:!1,protocol:t,demuxType:i,useWCS:!1,useMSE:!1,useOffscreen:!1},r="init",s="initVideo",a="render",A="playAudio",c="initAudio",d="audioCode",l="videoCode",u=1,h=2,f=8,p=9,g="init",m="decode",b="audioDecode",y="close",v={fullscreen:"fullscreen$2",webFullscreen:"webFullscreen",decoderWorkerInit:"decoderWorkerInit",play:"play",playing:"playing",pause:"pause",mute:"mute",load:"load",loading:"loading",videoInfo:"videoInfo",timeUpdate:"timeUpdate",audioInfo:"audioInfo",log:"log",error:"error",kBps:"kBps",timeout:"timeout",delayTimeout:"delayTimeout",loadingTimeout:"loadingTimeout",stats:"stats",performance:"performance",record:"record",recording:"recording",recordingTimestamp:"recordingTimestamp",recordStart:"recordStart",recordEnd:"recordEnd",recordCreateError:"recordCreateError",buffer:"buffer",videoFrame:"videoFrame",start:"start",metadata:"metadata",resize:"resize",streamEnd:"streamEnd",streamSuccess:"streamSuccess",streamMessage:"streamMessage",streamError:"streamError",volumechange:"volumechange",destroy:"destroy",mseSourceOpen:"mseSourceOpen",mseSourceClose:"mseSourceClose",mseSourceBufferError:"mseSourceBufferError",mseSourceBufferBusy:"mseSourceBufferBusy",videoWaiting:"videoWaiting",videoTimeUpdate:"videoTimeUpdate",videoSyncAudio:"videoSyncAudio"},w={load:v.load,timeUpdate:v.timeUpdate,videoInfo:v.videoInfo,audioInfo:v.audioInfo,error:v.error,kBps:v.kBps,log:v.log,start:v.start,timeout:v.timeout,loadingTimeout:v.loadingTimeout,delayTimeout:v.delayTimeout,fullscreen:"fullscreen",play:v.play,pause:v.pause,mute:v.mute,stats:v.stats,performance:v.performance,recordingTimestamp:v.recordingTimestamp,recordStart:v.recordStart,recordEnd:v.recordEnd},E={playError:"playIsNotPauseOrUrlIsNull",fetchError:"fetchError",websocketError:"websocketError",webcodecsH265NotSupport:"webcodecsH265NotSupport",mediaSourceH265NotSupport:"mediaSourceH265NotSupport",wasmDecodeError:"wasmDecodeError"},S="notConnect",R="open",C="close",B="error",k={download:"download",base64:"base64",blob:"blob"},I={7:"H264(AVC)",12:"H265(HEVC)"},T=7,x=12,L={10:"AAC",7:"ALAW",8:"MULAW"},D=32,O=33,j=34,U=0,F=1,P=2,M="mp4",V="webm",Q="webcodecs",N="webgl",W="offscreen",G="key",H="delta",J='video/mp4; codecs="avc1.64002A"',q="ended",z="open",X="closed";class Y{constructor(e){this.log=function(t){if(e._opt.debug){for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;o1?i-1:0),o=1;o1?i-1:0),o=1;o3&&void 0!==arguments[3]?arguments[3]:{};if(!e)return;if(Array.isArray(t))return t.map((t=>this.proxy(e,t,i,n)));e.addEventListener(t,i,n);const o=()=>e.removeEventListener(t,i,n);return this.destroys.push(o),o}destroy(){this.master.debug.log("Events","destroy"),this.destroys.forEach((e=>e()))}}var K="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function _(e,t){return e(t={exports:{}},t.exports),t.exports}var $=_((function(e){!function(){var t="undefined"!=typeof window&&void 0!==window.document?window.document:{},i=e.exports,n=function(){for(var e,i=[["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=i.length,r={};n0&&void 0!==arguments[0]?arguments[0]:"";const t=e.split(","),i=atob(t[1]),n=t[0].replace("data:","").replace(";base64","");let o=i.length,r=new Uint8Array(o);for(;o--;)r[o]=i.charCodeAt(o);return new File([r],"file",{type:n})}function ie(e,t){const i=document.createElement("a");i.download=t,i.href=URL.createObjectURL(e),i.click(),URL.revokeObjectURL(e)}function ne(){return(new Date).getTime()}function oe(e,t,i){return Math.max(Math.min(e,Math.max(t,i)),Math.min(t,i))}function re(e,t,i){if(e)return"object"==typeof t&&Object.keys(t).forEach((i=>{re(e,i,t[i])})),e.style[t]=i,e}function se(e,t){let i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(!e)return 0;const n=getComputedStyle(e,null).getPropertyValue(t);return i?parseFloat(n):n}function ae(){return performance&&"function"==typeof performance.now?performance.now():Date.now()}function Ae(e){let t=0,i=ae();return n=>{t+=n;const o=ae(),r=o-i;r>=1e3&&(e(t/r*1e3),i=o,t=0)}}function ce(e){if(null==e||""===e)return"0 KB/S";let t=parseFloat(e);return t=t.toFixed(2),t+"KB/S"}function de(e){return null==e}function le(e){return!de(e)}$.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){}})();class ue{on(e,t,i){const n=this.e||(this.e={});return(n[e]||(n[e]=[])).push({fn:t,ctx:i}),this}once(e,t,i){const n=this;function o(){n.off(e,o);for(var r=arguments.length,s=new Array(r),a=0;a1?i-1:0),o=1;o{delete i[e]})),void delete this.e;const n=i[e],o=[];if(n&&t)for(let e=0,i=n.length;e{var t=["attribute vec4 vertexPos;","attribute vec4 texturePos;","varying vec2 textureCoord;","void main()","{","gl_Position = vertexPos;","textureCoord = texturePos.xy;","}"].join("\n"),i=["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"),n=e.createShader(e.VERTEX_SHADER);e.shaderSource(n,t),e.compileShader(n),e.getShaderParameter(n,e.COMPILE_STATUS)||console.log("Vertex shader failed to compile: "+e.getShaderInfoLog(n));var o=e.createShader(e.FRAGMENT_SHADER);e.shaderSource(o,i),e.compileShader(o),e.getShaderParameter(o,e.COMPILE_STATUS)||console.log("Fragment shader failed to compile: "+e.getShaderInfoLog(o));var r=e.createProgram();e.attachShader(r,n),e.attachShader(r,o),e.linkProgram(r),e.getProgramParameter(r,e.LINK_STATUS)||console.log("Program failed to compile: "+e.getProgramInfoLog(r)),e.useProgram(r);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 a=e.getAttribLocation(r,"vertexPos");e.enableVertexAttribArray(a),e.vertexAttribPointer(a,2,e.FLOAT,!1,0,0);var A=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,A),e.bufferData(e.ARRAY_BUFFER,new Float32Array([1,0,0,0,1,1,0,1]),e.STATIC_DRAW);var c=e.getAttribLocation(r,"texturePos");function d(t,i){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(r,t),i),n}e.enableVertexAttribArray(c),e.vertexAttribPointer(c,2,e.FLOAT,!1,0,0);var l=d("ySampler",0),u=d("uSampler",1),h=d("vSampler",2);return{render:function(t,i,n,o,r){e.viewport(0,0,t,i),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,l),e.texImage2D(e.TEXTURE_2D,0,e.LUMINANCE,t,i,0,e.LUMINANCE,e.UNSIGNED_BYTE,n),e.activeTexture(e.TEXTURE1),e.bindTexture(e.TEXTURE_2D,u),e.texImage2D(e.TEXTURE_2D,0,e.LUMINANCE,t/2,i/2,0,e.LUMINANCE,e.UNSIGNED_BYTE,o),e.activeTexture(e.TEXTURE2),e.bindTexture(e.TEXTURE_2D,h),e.texImage2D(e.TEXTURE_2D,0,e.LUMINANCE,t/2,i/2,0,e.LUMINANCE,e.UNSIGNED_BYTE,r),e.drawArrays(e.TRIANGLE_STRIP,0,4)},destroy:function(){try{e.deleteProgram(r),e.deleteBuffer(s),e.deleteBuffer(A),e.deleteTexture(l),e.deleteTexture(u),e.deleteBuffer(h)}catch(e){}}}})(this.contextGl);this.contextGlRender=e.render,this.contextGlDestroy=e.destroy}_initContext2D(){this.context2D=this.$videoElement.getContext("2d")}_initCanvasRender(){this.player._opt.useWCS&&!this._supportOffscreen()?(this.renderType=Q,this._initContext2D()):this._supportOffscreen()?(this.renderType=W,this._bindOffscreen()):(this.renderType=N,this._initContextGl())}_supportOffscreen(){return"function"==typeof this.$videoElement.transferControlToOffscreen&&this.player._opt.useOffscreen}_bindOffscreen(){this.bitmaprenderer=this.$videoElement.getContext("bitmaprenderer")}initCanvasViewSize(){this.$videoElement.width=this.videoInfo.width,this.$videoElement.height=this.videoInfo.height,this.resize()}render(e){switch(this.player.videoTimestamp=e.ts,this.renderType){case W:this.bitmaprenderer.transferFromImageBitmap(e.buffer);break;case N:this.contextGlRender(this.$videoElement.width,this.$videoElement.height,e.output[0],e.output[1],e.output[2]);break;case Q:this.context2D.drawImage(e.videoFrame,0,0,this.$videoElement.width,this.$videoElement.height)}}screenshot(e,t,i,n){e=e||ne(),n=n||k.download;const o={png:"image/png",jpeg:"image/jpeg",webp:"image/webp"};let r=.92;!o[t]&&k[t]&&(n=t,t="png",i=void 0),"string"==typeof i&&(n=i,i=void 0),void 0!==i&&(r=Number(i));const s=this.$videoElement.toDataURL(o[t]||o.png,r),a=te(s);return n===k.base64?s:n===k.blob?a:void(n===k.download&&ie(a,e))}clearView(){switch(this.renderType){case W:(function(e,t){const i=document.createElement("canvas");return i.width=e,i.height=t,createImageBitmap(i,0,0,e,t)})(this.$videoElement.width,this.$videoElement.height).then((e=>{this.bitmaprenderer.transferFromImageBitmap(e)}));break;case N:this.contextGl.clear(this.contextGl.COLOR_BUFFER_BIT);break;case Q:this.context2D.clearRect(0,0,this.$videoElement.width,this.$videoElement.height)}}resize(){this.player.debug.log("canvasVideo","resize");const e=this.player._opt,t=this.player.width;let i=this.player.height;e.hasControl&&(i-=38);let n=this.$videoElement.width,o=this.$videoElement.height;const r=e.rotate;let s=(t-n)/2,a=(i-o)/2;270!==r&&90!==r||(n=this.$videoElement.height,o=this.$videoElement.width);const A=t/n,c=i/o;let d=A>c?c:A;e.isResize||A!==c&&(d=A+","+c),e.isFullResize&&(d=A>c?A:c);let l="scale("+d+")";r&&(l+=" rotate("+r+"deg)"),this.$videoElement.style.transform=l,this.$videoElement.style.left=s+"px",this.$videoElement.style.top=a+"px"}destroy(){this.contextGl&&(this.contextGl=null),this.context2D&&(this.context2D=null),this.contextGlRender&&(this.contextGlDestroy&&this.contextGlDestroy(),this.contextGlDestroy=null,this.contextGlRender=null),this.bitmaprenderer&&(this.bitmaprenderer=null),this.renderType=null,this.videoInfo={width:"",height:"",encType:"",encTypeCode:""},this.player.$container.removeChild(this.$videoElement),this.init=!1,this.off(),this.player.debug.log("CanvasVideoLoader","destroy")}}class pe extends he{constructor(e){super(),this.player=e;const t=document.createElement("video");t.muted=!0,t.style.position="absolute",t.style.top=0,t.style.left=0,e.$container.appendChild(t),this.$videoElement=t,this.videoInfo={width:"",height:"",encType:""},this.resize();const{proxy:i}=this.player.events;i(this.$videoElement,"canplay",(()=>{this.player.debug.log("Video","canplay")})),i(this.$videoElement,"waiting",(()=>{this.player.emit(v.videoWaiting)})),i(this.$videoElement,"timeupdate",(e=>{})),this.player.debug.log("Video","init")}play(){this.$videoElement.play()}clearView(){}screenshot(e,t,i,n){e=e||ne(),n=n||k.download;let o=.92;!{png:"image/png",jpeg:"image/jpeg",webp:"image/webp"}[t]&&k[t]&&(n=t,t="png",i=void 0),"string"==typeof i&&(n=i,i=void 0),void 0!==i&&(o=Number(i));const r=this.$videoElement;let s=document.createElement("canvas");s.width=r.videoWidth,s.height=r.videoHeight;s.getContext("2d").drawImage(r,0,0,s.width,s.height);const a=s.toDataURL(k[t]||k.png,o),A=te(a);return n===k.base64?a:n===k.blob?A:void(n===k.download&&ie(A,e))}initCanvasViewSize(){this.resize()}resize(){this.$videoElement.width=this.player.width,this.$videoElement.height=this.player._opt.hasControl?this.player.height-38:this.player.height;const e=this.player._opt;let t="contain";const i=e.rotate;e.isResize||(t="fill"),e.isFullResize&&(t="none"),this.$videoElement.style.objectFit=t,this.$videoElement.style.transform="rotate("+i+"deg)"}destroy(){this.player.$container.removeChild(this.$videoElement),this.init=!1,this.off(),this.player.debug.log("Video","destroy")}}class ge{constructor(e){return new(ge.getLoaderFactory(e._opt))(e)}static getLoaderFactory(e){return e.useMSE?pe:fe}}class me extends ue{constructor(e){super(),this.bufferList=[],this.player=e,this.scriptNode=null,this.hasInitScriptNode=!1,this.audioContextChannel=null,this.audioContext=new(window.AudioContext||window.webkitAudioContext),this.gainNode=this.audioContext.createGain();const t=this.audioContext.createBufferSource();t.buffer=this.audioContext.createBuffer(1,1,22050),t.connect(this.audioContext.destination),t.noteOn?t.noteOn(0):t.start(0),this.audioBufferSourceNode=t,this.mediaStreamAudioDestinationNode=this.audioContext.createMediaStreamDestination(),this.audioEnabled(!0),this.gainNode.gain.value=0,this.playing=!1,this.audioSyncVideoOption={diff:null},this.audioInfo={encType:"",channels:"",sampleRate:""},this.init=!1,this.on(v.videoSyncAudio,(e=>{this.player.debug.log("AudioContext",`videoSyncAudio , audioTimestamp: ${e.audioTimestamp},videoTimestamp: ${e.videoTimestamp},diff:${e.diff}`),this.audioSyncVideoOption=e})),this.player.debug.log("AudioContext","init")}updateAudioInfo(e){e.encTypeCode&&(this.audioInfo.encType=L[e.encTypeCode]),e.channels&&(this.audioInfo.channels=e.channels),e.sampleRate&&(this.audioInfo.sampleRate=e.sampleRate),this.audioInfo.sampleRate&&this.audioInfo.channels&&this.audioInfo.encType&&!this.init&&(this.player.emit(v.audioInfo,this.audioInfo),this.init=!0)}get isPlaying(){return this.playing}get isMute(){return 0===this.gainNode.gain.value||this.isStateSuspended()}get volume(){return this.gainNode.gain.value}get bufferSize(){return this.bufferList.length}initScriptNode(){if(this.playing=!0,this.hasInitScriptNode)return;const e=this.audioInfo.channels,t=this.audioContext.createScriptProcessor(1024,0,e);t.onaudioprocess=t=>{const i=t.outputBuffer;if(this.bufferList.length&&this.playing){if(!this.player._opt.useWCS&&!this.player._opt.useMSE){if(this.audioSyncVideoOption.diff>200)return void this.player.debug.warn("AudioContext",`audioSyncVideoOption more than diff :${this.audioSyncVideoOption.diff}`);if(this.audioSyncVideoOption.diff<-200){this.player.debug.warn("AudioContext",`audioSyncVideoOption less than diff :${this.audioSyncVideoOption.diff}`);let e=this.bufferList.shift();for(;e.ts-this.player.videoTimestamp<-200&&this.bufferList.length>0;)e=this.bufferList.shift();if(0===this.bufferList.length)return}}if(0===this.bufferList.length)return;const t=this.bufferList.shift();t&&t.ts&&(this.player.audioTimestamp=t.ts);for(let n=0;n20&&(this.player.debug.warn("AudioContext",`bufferList is large: ${this.bufferList.length}`),this.bufferList.length>50&&this.bufferList.shift())}pause(){this.audioSyncVideoOption={diff:null},this.playing=!1,this.clear()}resume(){this.playing=!0}destroy(){this.closeAudio(),this.audioContext.close(),this.audioContext=null,this.gainNode=null,this.init=!1,this.scriptNode&&(this.scriptNode.onaudioprocess=ee,this.scriptNode=null),this.audioBufferSourceNode=null,this.mediaStreamAudioDestinationNode=null,this.hasInitScriptNode=!1,this.audioSyncVideoOption={diff:null},this.off(),this.player.debug.log("AudioContext","destroy")}}class be{constructor(e){return new(be.getLoaderFactory())(e)}static getLoaderFactory(){return me}}class ye extends ue{constructor(e){super(),this.player=e,this.playing=!1,this.abortController=new AbortController,this.streamRate=Ae((t=>{e.emit(v.kBps,(t/1024).toFixed(2))})),e.debug.log("FetchStream","init")}fetchStream(e){const{demux:t}=this.player;fetch(e,{signal:this.abortController.signal}).then((e=>{const i=e.body.getReader();this.emit(v.streamSuccess);const n=()=>{i.read().then((e=>{let{done:i,value:o}=e;i?t.close():(this.streamRate&&this.streamRate(o.byteLength),t.dispatch(o),n())})).catch((e=>{t.close(),this.emit(E.fetchError,e),this.player.emit(v.error,E.fetchError),this.abort()}))};n()})).catch((e=>{this.abort(),this.emit(E.fetchError,e),this.player.emit(v.error,E.fetchError)}))}abort(){this.abortController&&(this.abortController.abort(),this.abortController=null)}destroy(){this.abort(),this.off(),this.streamRate=null,this.player.debug.log("FetchStream","destroy")}}class ve extends ue{constructor(e){super(),this.player=e,this.socket=null,this.socketStatus=S,this.wsUrl=null,this.streamRate=Ae((t=>{e.emit(v.kBps,(t/1024).toFixed(2))}))}_createWebSocket(){const e=this.player,{debug:t,events:{proxy:i},demux:n}=e;this.socket=new WebSocket(this.wsUrl),this.socket.binaryType="arraybuffer",i(this.socket,"open",(()=>{this.emit(v.streamSuccess),t.log("websocketLoader","socket open"),this.socketStatus=R})),i(this.socket,"message",(e=>{this.streamRate&&this.streamRate(e.data.byteLength),this._handleMessage(e.data)})),i(this.socket,"close",(()=>{t.log("websocketLoader","socket close"),this.emit(v.streamEnd),this.socketStatus=C})),i(this.socket,"error",(e=>{t.log("websocketLoader","socket error"),this.emit(E.websocketError,e),this.player.emit(v.error,E.websocketError),this.socketStatus=B,n.close(),t.log("websocketLoader","socket error:",e)}))}_handleMessage(e){const{demux:t}=this.player;t.dispatch(e)}fetchStream(e){this.wsUrl=e,this._createWebSocket()}destroy(){this.socket&&(this.socket.close(),this.socket=null),this.socketStatus=S,this.streamRate=null,this.off(),this.player.debug.log("websocketLoader","destroy")}}class we{constructor(e){return new(we.getLoaderFactory(e._opt.protocol))(e)}static getLoaderFactory(i){return i===t?ye:i===e?ve:void 0}}var Ee=_((function(e){function t(e,o){if(!e)throw"First parameter is required.";o=new i(e,o=o||{type:"video"});var r=this;function s(t){t&&(o.initCallback=function(){t(),t=o.initCallback=null});var i=new n(e,o);(h=new i(e,o)).record(),u("recording"),o.disableLogs||console.log("Initialized recorderType:",h.constructor.name,"for output-type:",o.type)}function a(e){if(e=e||function(){},h){if("paused"===r.state)return r.resumeRecording(),void setTimeout((function(){a(e)}),1);"recording"===r.state||o.disableLogs||console.warn('Recording state should be: "recording", however current state is: ',r.state),o.disableLogs||console.log("Stopped recording "+o.type+" stream."),"gif"!==o.type?h.stop(t):(h.stop(),t()),u("stopped")}else p();function t(t){if(h){Object.keys(h).forEach((function(e){"function"!=typeof h[e]&&(r[e]=h[e])}));var i=h.blob;if(!i){if(!t)throw"Recording failed.";h.blob=i=t}if(i&&!o.disableLogs&&console.log(i.type,"->",m(i.size)),e){var n;try{n=d.createObjectURL(i)}catch(e){}"function"==typeof e.call?e.call(r,n):e(n)}o.autoWriteToDisk&&c((function(e){var t={};t[o.type+"Blob"]=e,T.Store(t)}))}else"function"==typeof e.call?e.call(r,""):e("")}}function A(e){postMessage((new FileReaderSync).readAsDataURL(e))}function c(e,t){if(!e)throw"Pass a callback function over getDataURL.";var i=t?t.blob:(h||{}).blob;if(!i)return o.disableLogs||console.warn("Blob encoder did not finish its job yet."),void setTimeout((function(){c(e,t)}),1e3);if("undefined"==typeof Worker||navigator.mozGetUserMedia){var n=new FileReader;n.readAsDataURL(i),n.onload=function(t){e(t.target.result)}}else{var r=function(e){try{var t=d.createObjectURL(new Blob([e.toString(),"this.onmessage = function (eee) {"+e.name+"(eee.data);}"],{type:"application/javascript"})),i=new Worker(t);return d.revokeObjectURL(t),i}catch(e){}}(A);r.onmessage=function(t){e(t.data)},r.postMessage(i)}}function l(e){e=e||0,"paused"!==r.state?"stopped"!==r.state&&(e>=r.recordingDuration?a(r.onRecordingStopped):(e+=1e3,setTimeout((function(){l(e)}),1e3))):setTimeout((function(){l(e)}),1e3)}function u(e){r&&(r.state=e,"function"==typeof r.onStateChanged.call?r.onStateChanged.call(r,e):r.onStateChanged(e))}var h,f='It seems that recorder is destroyed or "startRecording" is not invoked for '+o.type+" recorder.";function p(){!0!==o.disableLogs&&console.warn(f)}var g={startRecording:function(t){return o.disableLogs||console.log("RecordRTC version: ",r.version),t&&(o=new i(e,t)),o.disableLogs||console.log("started recording "+o.type+" stream."),h?(h.clearRecordedData(),h.record(),u("recording"),r.recordingDuration&&l(),r):(s((function(){r.recordingDuration&&l()})),r)},stopRecording:a,pauseRecording:function(){h?"recording"===r.state?(u("paused"),h.pause(),o.disableLogs||console.log("Paused recording.")):o.disableLogs||console.warn("Unable to pause the recording. Recording state: ",r.state):p()},resumeRecording:function(){h?"paused"===r.state?(u("recording"),h.resume(),o.disableLogs||console.log("Resumed recording.")):o.disableLogs||console.warn("Unable to resume the recording. Recording state: ",r.state):p()},initRecorder:s,setRecordingDuration:function(e,t){if(void 0===e)throw"recordingDuration is required.";if("number"!=typeof e)throw"recordingDuration must be a number.";return r.recordingDuration=e,r.onRecordingStopped=t||function(){},{onRecordingStopped:function(e){r.onRecordingStopped=e}}},clearRecordedData:function(){h?(h.clearRecordedData(),o.disableLogs||console.log("Cleared old recorded data.")):p()},getBlob:function(){if(h)return h.blob;p()},getDataURL:c,toURL:function(){if(h)return d.createObjectURL(h.blob);p()},getInternalRecorder:function(){return h},save:function(e){h?b(h.blob,e):p()},getFromDisk:function(e){h?t.getFromDisk(o.type,e):p()},setAdvertisementArray:function(e){o.advertisement=[];for(var t=e.length,i=0;i-1&&"netscape"in window&&/ rv:/.test(navigator.userAgent),f=!u&&!l&&!!navigator.webkitGetUserMedia||y()||-1!==navigator.userAgent.toLowerCase().indexOf("chrome/"),p=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);p&&!f&&-1!==navigator.userAgent.indexOf("CriOS")&&(p=!1,f=!0);var g=window.MediaStream;function m(e){if(0===e)return"0 Bytes";var t=parseInt(Math.floor(Math.log(e)/Math.log(1e3)),10);return(e/Math.pow(1e3,t)).toPrecision(3)+" "+["Bytes","KB","MB","GB","TB"][t]}function b(e,t){if(!e)throw"Blob object is required.";if(!e.type)try{e.type="video/webm"}catch(e){}var i=(e.type||"video/webm").split("/")[1];if(-1!==i.indexOf(";")&&(i=i.split(";")[0]),t&&-1!==t.indexOf(".")){var n=t.split(".");t=n[0],i=n[1]}var o=(t||Math.round(9999999999*Math.random())+888888888)+"."+i;if(void 0!==navigator.msSaveOrOpenBlob)return navigator.msSaveOrOpenBlob(e,o);if(void 0!==navigator.msSaveBlob)return navigator.msSaveBlob(e,o);var r=document.createElement("a");r.href=d.createObjectURL(e),r.download=o,r.style="display:none;opacity:0;color:transparent;",(document.body||document.documentElement).appendChild(r),"function"==typeof r.click?r.click():(r.target="_blank",r.dispatchEvent(new MouseEvent("click",{view:window,bubbles:!0,cancelable:!0}))),d.revokeObjectURL(r.href)}function y(){return"undefined"!=typeof window&&"object"==typeof window.process&&"renderer"===window.process.type||(!("undefined"==typeof process||"object"!=typeof process.versions||!process.versions.electron)||"object"==typeof navigator&&"string"==typeof navigator.userAgent&&navigator.userAgent.indexOf("Electron")>=0)}function v(e,t){return e&&e.getTracks?e.getTracks().filter((function(e){return e.kind===(t||"audio")})):[]}function w(e,t){"srcObject"in t?t.srcObject=e:"mozSrcObject"in t?t.mozSrcObject=e:t.srcObject=e}void 0===g&&"undefined"!=typeof webkitMediaStream&&(g=webkitMediaStream),void 0!==g&&void 0===g.prototype.stop&&(g.prototype.stop=function(){this.getTracks().forEach((function(e){e.stop()}))}),t.invokeSaveAsDialog=b,t.getTracks=v,t.getSeekableBlob=function(e,t){if("undefined"==typeof EBML)throw new Error("Please link: https://www.webrtc-experiment.com/EBML.js");var i=new EBML.Reader,n=new EBML.Decoder,o=EBML.tools,r=new FileReader;r.onload=function(e){n.decode(this.result).forEach((function(e){i.read(e)})),i.stop();var r=o.makeMetadataSeekable(i.metadatas,i.duration,i.cues),s=this.result.slice(i.metadataSize),a=new Blob([r,s],{type:"video/webm"});t(a)},r.readAsArrayBuffer(e)},t.bytesToSize=m,t.isElectron=y;var E={};function S(){if(h||p||l)return!0;var e,t,i=navigator.userAgent,n=""+parseFloat(navigator.appVersion),o=parseInt(navigator.appVersion,10);return(f||u)&&(e=i.indexOf("Chrome"),n=i.substring(e+7)),-1!==(t=n.indexOf(";"))&&(n=n.substring(0,t)),-1!==(t=n.indexOf(" "))&&(n=n.substring(0,t)),o=parseInt(""+n,10),isNaN(o)&&(n=""+parseFloat(navigator.appVersion),o=parseInt(navigator.appVersion,10)),o>=49}function R(e,t){var i=this;if(void 0===e)throw'First argument "MediaStream" is required.';if("undefined"==typeof MediaRecorder)throw"Your browser does not support the Media Recorder API. Please try other modules e.g. WhammyRecorder or StereoAudioRecorder.";if("audio"===(t=t||{mimeType:"video/webm"}).type){var n;if(v(e,"video").length&&v(e,"audio").length)navigator.mozGetUserMedia?(n=new g).addTrack(v(e,"audio")[0]):n=new g(v(e,"audio")),e=n;t.mimeType&&-1!==t.mimeType.toString().toLowerCase().indexOf("audio")||(t.mimeType=f?"audio/webm":"audio/ogg"),t.mimeType&&"audio/ogg"!==t.mimeType.toString().toLowerCase()&&navigator.mozGetUserMedia&&(t.mimeType="audio/ogg")}var o,r=[];function s(){i.timestamps.push((new Date).getTime()),"function"==typeof t.onTimeStamp&&t.onTimeStamp(i.timestamps[i.timestamps.length-1],i.timestamps)}function a(e){return o&&o.mimeType?o.mimeType:e.mimeType||"video/webm"}function A(){r=[],o=null,i.timestamps=[]}this.getArrayOfBlobs=function(){return r},this.record=function(){i.blob=null,i.clearRecordedData(),i.timestamps=[],c=[],r=[];var n=t;t.disableLogs||console.log("Passing following config over MediaRecorder API.",n),o&&(o=null),f&&!S()&&(n="video/vp8"),"function"==typeof MediaRecorder.isTypeSupported&&n.mimeType&&(MediaRecorder.isTypeSupported(n.mimeType)||(t.disableLogs||console.warn("MediaRecorder API seems unable to record mimeType:",n.mimeType),n.mimeType="audio"===t.type?"audio/webm":"video/webm"));try{o=new MediaRecorder(e,n),t.mimeType=n.mimeType}catch(t){o=new MediaRecorder(e)}n.mimeType&&!MediaRecorder.isTypeSupported&&"canRecordMimeType"in o&&!1===o.canRecordMimeType(n.mimeType)&&(t.disableLogs||console.warn("MediaRecorder API seems unable to record mimeType:",n.mimeType)),o.ondataavailable=function(e){if(e.data&&c.push("ondataavailable: "+m(e.data.size)),"number"!=typeof t.timeSlice)!e.data||!e.data.size||e.data.size<100||i.blob?i.recordingCallback&&(i.recordingCallback(new Blob([],{type:a(n)})),i.recordingCallback=null):(i.blob=t.getNativeBlob?e.data:new Blob([e.data],{type:a(n)}),i.recordingCallback&&(i.recordingCallback(i.blob),i.recordingCallback=null));else if(e.data&&e.data.size&&(r.push(e.data),s(),"function"==typeof t.ondataavailable)){var o=t.getNativeBlob?e.data:new Blob([e.data],{type:a(n)});t.ondataavailable(o)}},o.onstart=function(){c.push("started")},o.onpause=function(){c.push("paused")},o.onresume=function(){c.push("resumed")},o.onstop=function(){c.push("stopped")},o.onerror=function(e){e&&(e.name||(e.name="UnknownError"),c.push("error: "+e),t.disableLogs||(-1!==e.name.toString().toLowerCase().indexOf("invalidstate")?console.error("The MediaRecorder is not in a state in which the proposed operation is allowed to be executed.",e):-1!==e.name.toString().toLowerCase().indexOf("notsupported")?console.error("MIME type (",n.mimeType,") is not supported.",e):-1!==e.name.toString().toLowerCase().indexOf("security")?console.error("MediaRecorder security error",e):"OutOfMemory"===e.name?console.error("The UA has exhaused the available memory. User agents SHOULD provide as much additional information as possible in the message attribute.",e):"IllegalStreamModification"===e.name?console.error("A modification to the stream has occurred that makes it impossible to continue recording. An example would be the addition of a Track while recording is occurring. User agents SHOULD provide as much additional information as possible in the message attribute.",e):"OtherRecordingError"===e.name?console.error("Used for an fatal error other than those listed above. User agents SHOULD provide as much additional information as possible in the message attribute.",e):"GenericError"===e.name?console.error("The UA cannot provide the codec or recording option that has been requested.",e):console.error("MediaRecorder Error",e)),function(e){if(!i.manuallyStopped&&o&&"inactive"===o.state)return delete t.timeslice,void o.start(6e5);setTimeout(void 0,1e3)}(),"inactive"!==o.state&&"stopped"!==o.state&&o.stop())},"number"==typeof t.timeSlice?(s(),o.start(t.timeSlice)):o.start(36e5),t.initCallback&&t.initCallback()},this.timestamps=[],this.stop=function(e){e=e||function(){},i.manuallyStopped=!0,o&&(this.recordingCallback=e,"recording"===o.state&&o.stop(),"number"==typeof t.timeSlice&&setTimeout((function(){i.blob=new Blob(r,{type:a(t)}),i.recordingCallback(i.blob)}),100))},this.pause=function(){o&&"recording"===o.state&&o.pause()},this.resume=function(){o&&"paused"===o.state&&o.resume()},this.clearRecordedData=function(){o&&"recording"===o.state&&i.stop(A),A()},this.getInternalRecorder=function(){return o},this.blob=null,this.getState=function(){return o&&o.state||"inactive"};var c=[];this.getAllStates=function(){return c},void 0===t.checkForInactiveTracks&&(t.checkForInactiveTracks=!1);i=this;!function n(){if(o&&!1!==t.checkForInactiveTracks)return!1===function(){if("active"in e){if(!e.active)return!1}else if("ended"in e&&e.ended)return!1;return!0}()?(t.disableLogs||console.log("MediaStream seems stopped."),void i.stop()):void setTimeout(n,1e3)}(),this.name="MediaStreamRecorder",this.toString=function(){return this.name}}function C(e,i){if(!v(e,"audio").length)throw"Your stream has no audio tracks.";var n,o=this,r=[],s=[],a=!1,A=0,c=2,l=(i=i||{}).desiredSampRate;function u(){if(!1===i.checkForInactiveTracks)return!0;if("active"in e){if(!e.active)return!1}else if("ended"in e&&e.ended)return!1;return!0}function h(e,t){function i(e,t){var i,n=e.numberOfAudioChannels,o=e.leftBuffers.slice(0),r=e.rightBuffers.slice(0),s=e.sampleRate,a=e.internalInterleavedLength,A=e.desiredSampRate;function c(e,t,i){var n=Math.round(e.length*(t/i)),o=[],r=Number((e.length-1)/(n-1));o[0]=e[0];for(var s=1;s96e3)&&(i.disableLogs||console.log("sample-rate must be under range 22050 and 96000.")),i.disableLogs||i.desiredSampRate&&console.log("Desired sample-rate: "+i.desiredSampRate);var y=!1;function w(){r=[],s=[],A=0,S=!1,a=!1,y=!1,f=null,o.leftchannel=r,o.rightchannel=s,o.numberOfAudioChannels=c,o.desiredSampRate=l,o.sampleRate=b,o.recordingLength=A,R={left:[],right:[],recordingLength:0}}function E(){n&&(n.onaudioprocess=null,n.disconnect(),n=null),p&&(p.disconnect(),p=null),w()}this.pause=function(){y=!0},this.resume=function(){if(!1===u())throw"Please make sure MediaStream is active.";if(!a)return i.disableLogs||console.log("Seems recording has been restarted."),void this.record();y=!1},this.clearRecordedData=function(){i.checkForInactiveTracks=!1,a&&this.stop(E),E()},this.name="StereoAudioRecorder",this.toString=function(){return this.name};var S=!1;n.onaudioprocess=function(e){if(!y)if(!1===u()&&(i.disableLogs||console.log("MediaStream seems stopped."),n.disconnect(),a=!1),a){S||(S=!0,i.onAudioProcessStarted&&i.onAudioProcessStarted(),i.initCallback&&i.initCallback());var t=e.inputBuffer.getChannelData(0),d=new Float32Array(t);if(r.push(d),2===c){var l=e.inputBuffer.getChannelData(1),h=new Float32Array(l);s.push(h)}A+=m,o.recordingLength=A,void 0!==i.timeSlice&&(R.recordingLength+=m,R.left.push(d),2===c&&R.right.push(h))}else p&&(p.disconnect(),p=null)},f.createMediaStreamDestination?n.connect(f.createMediaStreamDestination()):n.connect(f.destination),this.leftchannel=r,this.rightchannel=s,this.numberOfAudioChannels=c,this.desiredSampRate=l,this.sampleRate=b,o.recordingLength=A;var R={left:[],right:[],recordingLength:0};function C(){a&&"function"==typeof i.ondataavailable&&void 0!==i.timeSlice&&(R.left.length?(h({desiredSampRate:l,sampleRate:b,numberOfAudioChannels:c,internalInterleavedLength:R.recordingLength,leftBuffers:R.left,rightBuffers:1===c?[]:R.right},(function(e,t){var n=new Blob([t],{type:"audio/wav"});i.ondataavailable(n),setTimeout(C,i.timeSlice)})),R={left:[],right:[],recordingLength:0}):setTimeout(C,i.timeSlice))}}function B(e,t){if("undefined"==typeof html2canvas)throw"Please link: https://www.webrtc-experiment.com/screenshot.js";(t=t||{}).frameInterval||(t.frameInterval=10);var i=!1;["captureStream","mozCaptureStream","webkitCaptureStream"].forEach((function(e){e in document.createElement("canvas")&&(i=!0)}));var n,o,r,s=!(!window.webkitRTCPeerConnection&&!window.webkitGetUserMedia||!window.chrome),a=50,A=navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);if(s&&A&&A[2]&&(a=parseInt(A[2],10)),s&&a<52&&(i=!1),t.useWhammyRecorder&&(i=!1),i)if(t.disableLogs||console.log("Your browser supports both MediRecorder API and canvas.captureStream!"),e instanceof HTMLCanvasElement)n=e;else{if(!(e instanceof CanvasRenderingContext2D))throw"Please pass either HTMLCanvasElement or CanvasRenderingContext2D.";n=e.canvas}else navigator.mozGetUserMedia&&(t.disableLogs||console.error("Canvas recording is NOT supported in Firefox."));this.record=function(){if(r=!0,i&&!t.useWhammyRecorder){var e;"captureStream"in n?e=n.captureStream(25):"mozCaptureStream"in n?e=n.mozCaptureStream(25):"webkitCaptureStream"in n&&(e=n.webkitCaptureStream(25));try{var s=new g;s.addTrack(v(e,"video")[0]),e=s}catch(e){}if(!e)throw"captureStream API are NOT available.";(o=new R(e,{mimeType:t.mimeType||"video/webm"})).record()}else h.frames=[],u=(new Date).getTime(),l();t.initCallback&&t.initCallback()},this.getWebPImages=function(i){if("canvas"===e.nodeName.toLowerCase()){var n=h.frames.length;h.frames.forEach((function(e,i){var o=n-i;t.disableLogs||console.log(o+"/"+n+" frames remaining"),t.onEncodingCallback&&t.onEncodingCallback(o,n);var r=e.image.toDataURL("image/webp",1);h.frames[i].image=r})),t.disableLogs||console.log("Generating WebM"),i()}else i()},this.stop=function(e){r=!1;var n=this;i&&o?o.stop(e):this.getWebPImages((function(){h.compile((function(i){t.disableLogs||console.log("Recording finished!"),n.blob=i,n.blob.forEach&&(n.blob=new Blob([],{type:"video/webm"})),e&&e(n.blob),h.frames=[]}))}))};var c=!1;function d(){h.frames=[],r=!1,c=!1}function l(){if(c)return u=(new Date).getTime(),setTimeout(l,500);if("canvas"===e.nodeName.toLowerCase()){var i=(new Date).getTime()-u;return u=(new Date).getTime(),h.frames.push({image:(n=document.createElement("canvas"),o=n.getContext("2d"),n.width=e.width,n.height=e.height,o.drawImage(e,0,0),n),duration:i}),void(r&&setTimeout(l,t.frameInterval))}var n,o;html2canvas(e,{grabMouse:void 0===t.showMousePointer||t.showMousePointer,onrendered:function(e){var i=(new Date).getTime()-u;if(!i)return setTimeout(l,t.frameInterval);u=(new Date).getTime(),h.frames.push({image:e.toDataURL("image/webp",1),duration:i}),r&&setTimeout(l,t.frameInterval)}})}this.pause=function(){c=!0,o instanceof R&&o.pause()},this.resume=function(){c=!1,o instanceof R?o.resume():r||this.record()},this.clearRecordedData=function(){r&&this.stop(d),d()},this.name="CanvasRecorder",this.toString=function(){return this.name};var u=(new Date).getTime(),h=new I.Video(100)}function k(e,t){function i(e){e=void 0!==e?e:10;var t=(new Date).getTime()-A;return t?r?(A=(new Date).getTime(),setTimeout(i,100)):(A=(new Date).getTime(),a.paused&&a.play(),l.drawImage(a,0,0,d.width,d.height),c.frames.push({duration:t,image:d.toDataURL("image/webp")}),void(o||setTimeout(i,e,e))):setTimeout(i,e,e)}function n(e,t,i,n,o){var r=document.createElement("canvas");r.width=d.width,r.height=d.height;var s,a,A,c=r.getContext("2d"),l=[],u=-1===t,h=t&&t>0&&t<=e.length?t:e.length,f=0,p=0,g=0,m=Math.sqrt(Math.pow(255,2)+Math.pow(255,2)+Math.pow(255,2)),b=i&&i>=0&&i<=1?i:0,y=n&&n>=0&&n<=1?n:0,v=!1;a=-1,A=(s={length:h,functionToLoop:function(t,i){var n,o,r,s=function(){!v&&r-n<=r*y||(u&&(v=!0),l.push(e[i])),t()};if(v)s();else{var a=new Image;a.onload=function(){c.drawImage(a,0,0,d.width,d.height);var e=c.getImageData(0,0,d.width,d.height);n=0,o=e.data.length,r=e.data.length/4;for(var t=0;t127)throw"TrackNumber > 127 not supported";return[128|e.trackNum,e.timecode>>8,255&e.timecode,t].map((function(e){return String.fromCharCode(e)})).join("")+e.frame}({discardable:0,frame:e.data.slice(4),invisible:0,keyframe:1,lacing:0,trackNum:1,timecode:Math.round(t)});return t+=e.duration,{data:i,id:163}})))}function i(e){for(var t=[];e>0;)t.push(255&e),e>>=8;return new Uint8Array(t.reverse())}function n(e){var t=[];e=(e.length%8?new Array(9-e.length%8).join("0"):"")+e;for(var i=0;i1?2*r[0].width:r[0].width;var a=1;3!==e&&4!==e||(a=2),5!==e&&6!==e||(a=3),7!==e&&8!==e||(a=4),9!==e&&10!==e||(a=5),o.height=r[0].height*a}else o.width=s.width||360,o.height=s.height||240;t&&t instanceof HTMLVideoElement&&u(t),r.forEach((function(e,t){u(e,t)})),setTimeout(l,s.frameInterval)}}function u(e,t){if(!n){var i=0,o=0,s=e.width,a=e.height;1===t&&(i=e.width),2===t&&(o=e.height),3===t&&(i=e.width,o=e.height),4===t&&(o=2*e.height),5===t&&(i=e.width,o=2*e.height),6===t&&(o=3*e.height),7===t&&(i=e.width,o=3*e.height),void 0!==e.stream.left&&(i=e.stream.left),void 0!==e.stream.top&&(o=e.stream.top),void 0!==e.stream.width&&(s=e.stream.width),void 0!==e.stream.height&&(a=e.stream.height),r.drawImage(e,i,o,s,a),"function"==typeof e.stream.onRender&&e.stream.onRender(r,i,o,s,a,t)}}function h(e){var i=document.createElement("video");return function(e,t){"srcObject"in t?t.srcObject=e:"mozSrcObject"in t?t.mozSrcObject=e:t.srcObject=e}(e,i),i.className=t,i.muted=!0,i.volume=0,i.width=e.width||s.width||360,i.height=e.height||s.height||240,i.play(),i}function f(t){i=[],(t=t||e).forEach((function(e){if(e.getTracks().filter((function(e){return"video"===e.kind})).length){var t=h(e);t.stream=e,i.push(t)}}))}void 0!==a?d.AudioContext=a:"undefined"!=typeof webkitAudioContext&&(d.AudioContext=webkitAudioContext),this.startDrawingFrames=function(){l()},this.appendStreams=function(t){if(!t)throw"First parameter is required.";t instanceof Array||(t=[t]),t.forEach((function(t){var n=new c;if(t.getTracks().filter((function(e){return"video"===e.kind})).length){var o=h(t);o.stream=t,i.push(o),n.addTrack(t.getTracks().filter((function(e){return"video"===e.kind}))[0])}if(t.getTracks().filter((function(e){return"audio"===e.kind})).length){var r=s.audioContext.createMediaStreamSource(t);s.audioDestination=s.audioContext.createMediaStreamDestination(),r.connect(s.audioDestination),n.addTrack(s.audioDestination.stream.getTracks().filter((function(e){return"audio"===e.kind}))[0])}e.push(n)}))},this.releaseStreams=function(){i=[],n=!0,s.gainNode&&(s.gainNode.disconnect(),s.gainNode=null),s.audioSources.length&&(s.audioSources.forEach((function(e){e.disconnect()})),s.audioSources=[]),s.audioDestination&&(s.audioDestination.disconnect(),s.audioDestination=null),s.audioContext&&s.audioContext.close(),s.audioContext=null,r.clearRect(0,0,o.width,o.height),o.stream&&(o.stream.stop(),o.stream=null)},this.resetVideoStreams=function(e){!e||e instanceof Array||(e=[e]),f(e)},this.name="MultiStreamsMixer",this.toString=function(){return this.name},this.getMixedStream=function(){n=!1;var t=function(){var e;f(),"captureStream"in o?e=o.captureStream():"mozCaptureStream"in o?e=o.mozCaptureStream():s.disableLogs||console.error("Upgrade to latest Chrome or otherwise enable this flag: chrome://flags/#enable-experimental-web-platform-features");var t=new c;return e.getTracks().filter((function(e){return"video"===e.kind})).forEach((function(e){t.addTrack(e)})),o.stream=t,t}(),i=function(){d.AudioContextConstructor||(d.AudioContextConstructor=new d.AudioContext);s.audioContext=d.AudioContextConstructor,s.audioSources=[],!0===s.useGainNode&&(s.gainNode=s.audioContext.createGain(),s.gainNode.connect(s.audioContext.destination),s.gainNode.gain.value=0);var t=0;if(e.forEach((function(e){if(e.getTracks().filter((function(e){return"audio"===e.kind})).length){t++;var i=s.audioContext.createMediaStreamSource(e);!0===s.useGainNode&&i.connect(s.gainNode),s.audioSources.push(i)}})),!t)return;return s.audioDestination=s.audioContext.createMediaStreamDestination(),s.audioSources.forEach((function(e){e.connect(s.audioDestination)})),s.audioDestination.stream}();return i&&i.getTracks().filter((function(e){return"audio"===e.kind})).forEach((function(e){t.addTrack(e)})),e.forEach((function(e){e.fullcanvas})),t}}function D(e,t){e=e||[];var i,n,o=this;(t=t||{elementClass:"multi-streams-mixer",mimeType:"video/webm",video:{width:360,height:240}}).frameInterval||(t.frameInterval=10),t.video||(t.video={}),t.video.width||(t.video.width=360),t.video.height||(t.video.height=240),this.record=function(){var o;i=new L(e,t.elementClass||"multi-streams-mixer"),(o=[],e.forEach((function(e){v(e,"video").forEach((function(e){o.push(e)}))})),o).length&&(i.frameInterval=t.frameInterval||10,i.width=t.video.width||360,i.height=t.video.height||240,i.startDrawingFrames()),t.previewStream&&"function"==typeof t.previewStream&&t.previewStream(i.getMixedStream()),(n=new R(i.getMixedStream(),t)).record()},this.stop=function(e){n&&n.stop((function(t){o.blob=t,e(t),o.clearRecordedData()}))},this.pause=function(){n&&n.pause()},this.resume=function(){n&&n.resume()},this.clearRecordedData=function(){n&&(n.clearRecordedData(),n=null),i&&(i.releaseStreams(),i=null)},this.addStreams=function(o){if(!o)throw"First parameter is required.";o instanceof Array||(o=[o]),e.concat(o),n&&i&&(i.appendStreams(o),t.previewStream&&"function"==typeof t.previewStream&&t.previewStream(i.getMixedStream()))},this.resetVideoStreams=function(e){i&&(!e||e instanceof Array||(e=[e]),i.resetVideoStreams(e))},this.getMixer=function(){return i},this.name="MultiStreamRecorder",this.toString=function(){return this.name}}function O(e,t){var i,n,o;function r(){return new ReadableStream({start:function(n){var o=document.createElement("canvas"),r=document.createElement("video"),s=!0;r.srcObject=e,r.muted=!0,r.height=t.height,r.width=t.width,r.volume=0,r.onplaying=function(){o.width=t.width,o.height=t.height;var e=o.getContext("2d"),a=1e3/t.frameRate,A=setInterval((function(){if(i&&(clearInterval(A),n.close()),s&&(s=!1,t.onVideoProcessStarted&&t.onVideoProcessStarted()),e.drawImage(r,0,0),"closed"!==n._controlledReadableStream.state)try{n.enqueue(e.getImageData(0,0,t.width,t.height))}catch(e){}}),a)},r.play()}})}function s(e,A){if(!t.workerPath&&!A)return i=!1,void fetch("https://unpkg.com/webm-wasm@latest/dist/webm-worker.js").then((function(t){t.arrayBuffer().then((function(t){s(e,t)}))}));if(!t.workerPath&&A instanceof ArrayBuffer){var c=new Blob([A],{type:"text/javascript"});t.workerPath=d.createObjectURL(c)}t.workerPath||console.error("workerPath parameter is missing."),(n=new Worker(t.workerPath)).postMessage(t.webAssemblyPath||"https://unpkg.com/webm-wasm@latest/dist/webm-wasm.wasm"),n.addEventListener("message",(function(e){"READY"===e.data?(n.postMessage({width:t.width,height:t.height,bitrate:t.bitrate||1200,timebaseDen:t.frameRate||30,realtime:t.realtime}),r().pipeTo(new WritableStream({write:function(e){i?console.error("Got image, but recorder is finished!"):n.postMessage(e.data.buffer,[e.data.buffer])}}))):e.data&&(o||a.push(e.data))}))}"undefined"!=typeof ReadableStream&&"undefined"!=typeof WritableStream||console.error("Following polyfill is strongly recommended: https://unpkg.com/@mattiasbuelens/web-streams-polyfill/dist/polyfill.min.js"),(t=t||{}).width=t.width||640,t.height=t.height||480,t.frameRate=t.frameRate||30,t.bitrate=t.bitrate||1200,t.realtime=t.realtime||!0,this.record=function(){a=[],o=!1,this.blob=null,s(e),"function"==typeof t.initCallback&&t.initCallback()},this.pause=function(){o=!0},this.resume=function(){o=!1};var a=[];this.stop=function(e){i=!0;var t=this;!function(e){n?(n.addEventListener("message",(function(t){null===t.data&&(n.terminate(),n=null,e&&e())})),n.postMessage(null)):e&&e()}((function(){t.blob=new Blob(a,{type:"video/webm"}),e(t.blob)}))},this.name="WebAssemblyRecorder",this.toString=function(){return this.name},this.clearRecordedData=function(){a=[],o=!1,this.blob=null},this.blob=null}t.DiskStorage=T,t.GifRecorder=x,t.MultiStreamRecorder=D,t.RecordRTCPromisesHandler=function(e,i){if(!this)throw'Use "new RecordRTCPromisesHandler()"';if(void 0===e)throw'First argument "MediaStream" is required.';var n=this;n.recordRTC=new t(e,i),this.startRecording=function(){return new Promise((function(e,t){try{n.recordRTC.startRecording(),e()}catch(e){t(e)}}))},this.stopRecording=function(){return new Promise((function(e,t){try{n.recordRTC.stopRecording((function(i){n.blob=n.recordRTC.getBlob(),n.blob&&n.blob.size?e(i):t("Empty blob.",n.blob)}))}catch(e){t(e)}}))},this.pauseRecording=function(){return new Promise((function(e,t){try{n.recordRTC.pauseRecording(),e()}catch(e){t(e)}}))},this.resumeRecording=function(){return new Promise((function(e,t){try{n.recordRTC.resumeRecording(),e()}catch(e){t(e)}}))},this.getDataURL=function(e){return new Promise((function(e,t){try{n.recordRTC.getDataURL((function(t){e(t)}))}catch(e){t(e)}}))},this.getBlob=function(){return new Promise((function(e,t){try{e(n.recordRTC.getBlob())}catch(e){t(e)}}))},this.getInternalRecorder=function(){return new Promise((function(e,t){try{e(n.recordRTC.getInternalRecorder())}catch(e){t(e)}}))},this.reset=function(){return new Promise((function(e,t){try{e(n.recordRTC.reset())}catch(e){t(e)}}))},this.destroy=function(){return new Promise((function(e,t){try{e(n.recordRTC.destroy())}catch(e){t(e)}}))},this.getState=function(){return new Promise((function(e,t){try{e(n.recordRTC.getState())}catch(e){t(e)}}))},this.blob=null,this.version="5.6.2"},t.WebAssemblyRecorder=O}));class Se extends ue{constructor(e){super(),this.player=e,this.fileName="",this.fileType=V,this.isRecording=!1,this.recordingTimestamp=0,this.recordingInterval=null,e.debug.log("Recorder","init")}setFileName(e,t){this.fileName=e,M!==t&&V!==t||(this.fileType=t)}get recording(){return this.isRecording}get recordTime(){return this.recordingTimestamp}startRecord(){const e=this.player.debug,t={type:"video",mimeType:"video/webm;codecs=h264",onTimeStamp:t=>{e.log("Recorder","record timestamp :"+t)},disableLogs:!this.player._opt.debug};try{const e=this.player.video.$videoElement.captureStream(25),i=this.player.audio.mediaStreamAudioDestinationNode.stream;e.addTrack(i.getAudioTracks()[0]),this.recorder=Ee(e,t)}catch(t){e.error("Recorder",t),this.emit(v.recordCreateError)}this.recorder&&(this.isRecording=!0,this.emit(v.recording,!0),this.recorder.startRecording(),e.log("Recorder","start recording"),this.player.emit(v.recordStart),this.recordingInterval=window.setInterval((()=>{this.recordingTimestamp+=1,this.player.emit(v.recordingTimestamp,this.recordingTimestamp)}),1e3))}stopRecordAndSave(){this.recorder&&this.isRecording&&this.recorder.stopRecording((()=>{this.player.debug.log("Recorder","stop recording"),this.player.emit(v.recordEnd),function(e,t,i){const n=window.URL.createObjectURL(e),o=document.createElement("a");o.href=n,o.download=(t||ne())+"."+(i||FILE_SUFFIX.webm),o.click(),window.URL.revokeObjectURL(n)}(this.recorder.getBlob(),this.fileName,this.fileType),this._reset(),this.emit(v.recording,!1)}))}_reset(){this.isRecording=!1,this.recordingTimestamp=0,this.recorder&&(this.recorder.destroy(),this.recorder=null),this.fileName=null,this.recordingInterval&&clearInterval(this.recordingInterval),this.recordingInterval=null}destroy(){this._reset(),this.player.debug.log("Recorder","destroy"),this.player=null}}class Re{constructor(e){return new(Re.getLoaderFactory())(e)}static getLoaderFactory(){return Se}}class Ce{constructor(e){this.player=e,this.decoderWorker=new Worker(e._opt.decoder),this._initDecoderWorker(),e.debug.log("decoderWorker","init")}_initDecoderWorker(){const{debug:e,events:{proxy:t}}=this.player;this.decoderWorker.onmessage=t=>{const i=t.data;switch(i.cmd){case r:e.log("decoderWorker","onmessage:",r),this.player.loaded||this.player.emit(v.load),this.player.emit(v.decoderWorkerInit),this._initWork();break;case l:e.log("decoderWorker","onmessage:",l,i.code),this.player.video.updateVideoInfo({encTypeCode:i.code});break;case d:e.log("decoderWorker","onmessage:",d,i.code),this.player.audio.updateAudioInfo({encTypeCode:i.code});break;case s:e.log("decoderWorker","onmessage:",s,`width:${i.w},height:${i.h}`),this.player.video.updateVideoInfo({width:i.w,height:i.h}),this.player.video.initCanvasViewSize();break;case c:e.log("decoderWorker","onmessage:",c,`channels:${i.channels},sampleRate:${i.sampleRate}`),this.player.audio.updateAudioInfo(i),this.player.audio.initScriptNode(i);break;case a:this.player.handleRender(),this.player.video.render(i),this.player.emit(v.timeUpdate,i.ts),this.player.updateStats({fps:!0,ts:i.ts,buf:i.delay});break;case A:this.player.playing&&this.player.audio.play(i.buffer,i.ts);break;default:this.player[i.cmd]&&this.player[i.cmd](i)}}}_initWork(){this.decoderWorker.postMessage({cmd:g,opt:JSON.stringify(this.player._opt),sampleRate:this.player.audio.audioContext.sampleRate})}decodeVideo(e,t,i){const n={type:h,ts:Math.max(t,0),isIFrame:i};this.decoderWorker.postMessage({cmd:m,buffer:e,options:n},[e.buffer])}decodeAudio(e,t){this.player._opt.useWCS&&!this.player._opt.useOffscreen||this.player._opt.useMSE?this._decodeAudioNoDelay(e,t):this._decodeAudio(e,t)}_decodeAudio(e,t){const i={type:u,ts:Math.max(t,0)};this.decoderWorker.postMessage({cmd:m,buffer:e,options:i},[e.buffer])}_decodeAudioNoDelay(e,t){this.decoderWorker.postMessage({cmd:b,buffer:e,ts:Math.max(t,0)},[e.buffer])}destroy(){this.player.debug.log("decoderWorker","destroy"),this.decoderWorker.postMessage({cmd:y}),this.decoderWorker.terminate(),this.decoderWorker=null,this.player=null}}class Be extends ue{constructor(e){super(),this.player=e,this.stopId=null,this.firstTimestamp=null,this.startTimestamp=null,this.delay=-1,this.bufferList=[],this.dropping=!1,this.initInterval()}getDelay(e){return e?(this.firstTimestamp?e&&(this.delay=Date.now()-this.startTimestamp-(e-this.firstTimestamp)):(this.firstTimestamp=e,this.startTimestamp=Date.now(),this.delay=-1),this.delay):-1}initInterval(){const e=this.player._opt.videoBuffer;this.player.debug.log("common dumex","init Interval");let t=()=>{let t;if(this.bufferList.length)if(this.dropping){for(t=this.bufferList.shift();!t.isIFrame&&this.bufferList.length;)t=this.bufferList.shift();t.isIFrame&&(this.dropping=!1,this._doDecoderDecode(t))}else if(t=this.bufferList[0],-1===this.getDelay(t.ts))this.bufferList.shift(),this._doDecoderDecode(t);else if(this.delay>e+1e3)this.dropping=!0;else for(;this.bufferList.length&&(t=this.bufferList[0],this.getDelay(t.ts)>e);)this.bufferList.shift(),this._doDecoderDecode(t)};t(),this.stopId=setInterval(t,10)}_doDecode(e,t,i,n){const o=this.player,{decoderWorker:r}=o;let s={ts:i,type:t,isIFrame:!1};o._opt.useWCS&&!o._opt.useOffscreen||o._opt.useMSE?(t===h&&(s.isIFrame=n),this.pushBuffer(e,s)):t===h?r.decodeVideo(e,i,n):t===u&&r.decodeAudio(e,i)}_doDecoderDecode(e){const t=this.player,{decoderWorker:i,webcodecsDecoder:n,mseDecoder:o}=t;e.type===u?i.decodeAudio(e.payload,e.ts):e.type===h&&(t._opt.useWCS&&!t._opt.useOffscreen?n.decodeVideo(e.payload,e.ts,e.isIFrame):t._opt.useMSE&&o.decodeVideo(e.payload,e.ts,e.isIFrame))}pushBuffer(e,t){t.type===u?this.bufferList.push({ts:t.ts,payload:e,type:u}):t.type===h&&this.bufferList.push({ts:t.ts,payload:e,type:h,isIFrame:t.isIFrame})}close(){}destroy(){this.stopId&&(clearInterval(this.stopId),this.stopId=null),this.firstTimestamp=null,this.startTimestamp=null,this.delay=-1,this.bufferList=[],this.dropping=!1,this.off()}}class ke extends Be{constructor(e){super(e),this.input=this._inputFlv(),this.flvDemux=this.dispatchFlvData(this.input),e.debug.log("FlvDemux","init")}dispatch(e){this.flvDemux(e)}*_inputFlv(){yield 9;const e=new ArrayBuffer(4),t=new Uint8Array(e),i=new Uint32Array(e),n=this.player;for(;;){t[3]=0;const e=yield 15,o=e[4];t[0]=e[7],t[1]=e[6],t[2]=e[5];const r=i[0];t[0]=e[10],t[1]=e[9],t[2]=e[8];let s=i[0];16777215===s&&(t[3]=e[11],s=i[0]);const a=yield r;switch(o){case f:n._opt.hasAudio&&(n.updateStats({abps:a.byteLength}),a.byteLength>0&&this._doDecode(a,u,s));break;case p:if(n._opt.hasVideo){n.updateStats({vbps:a.byteLength});const e=a[0]>>4==1;a.byteLength>0&&this._doDecode(a,h,s,e)}}}}dispatchFlvData(e){let t=e.next(),i=null;return n=>{let o=new Uint8Array(n);if(i){let e=new Uint8Array(i.length+o.length);e.set(i),e.set(o,i.length),o=e,i=null}for(;o.length>=t.value;){let i=o.slice(t.value);t=e.next(o.slice(0,t.value)),o=i}o.length>0&&(i=o)}}close(){this.input&&this.input.return(null)}destroy(){super.destroy(),this.input=null,this.flvDemux=null,this.player.debug.log("FlvDemux","destroy")}}class Ie extends Be{constructor(e){super(e),e.debug.log("M7sDemux","init")}dispatch(e){const t=this.player,i=new DataView(e),n=i.getUint8(0),o=i.getUint32(1,!1);switch(n){case u:if(t._opt.hasAudio){const i=new Uint8Array(e,5);t.updateStats({abps:i.byteLength}),i.byteLength>0&&this._doDecode(i,n,o)}break;case h:if(t._opt.hasVideo&&i.byteLength>5){const r=new Uint8Array(e,5),s=i.getUint8(5)>>4==1;t.updateStats({vbps:r.byteLength}),r.byteLength>0&&this._doDecode(r,n,o,s)}}}destroy(){super.destroy(),this.player.debug.log("M7sDemux","destroy")}}class Te{constructor(e){return new(Te.getLoaderFactory(e._opt.demuxType))(e)}static getLoaderFactory(e){return e===n?Ie:e===i?ke:void 0}}class xe extends ue{constructor(e){super(),this.player=e,this.hasInit=!1,this.isInitInfo=!1,this.decoder=null,this.initDecoder(),e.debug.log("Webcodecs","init")}initDecoder(){const e=this;this.decoder=new VideoDecoder({output(t){e.handleDecode(t)},error(t){e.handleError(t)}})}handleDecode(e){this.isInitInfo||(this.player.video.updateVideoInfo({width:e.codedWidth,height:e.codedHeight}),this.player.video.initCanvasViewSize(),this.isInitInfo=!0),this.player.handleRender(),this.player.video.render({videoFrame:e}),this.player.updateStats({fps:!0,ts:0,buf:this.player.demux.delay}),setTimeout((function(){e.close?e.close():e.destroy()}),100)}handleError(e){this.player.debug.log("Webcodecs","VideoDecoder handleError",e)}decodeVideo(e,t,i){if(this.hasInit){const n=new EncodedVideoChunk({data:e.slice(5),timestamp:t,type:i?G:H});this.decoder.decode(n)}else if(i&&0===e[1]){const t=15&e[0];if(this.player.video.updateVideoInfo({encTypeCode:t}),t===x)return void this.emit(E.webcodecsH265NotSupport);const i=function(e){let t=e.subarray(1,4),i="avc1.";for(let e=0;e<3;e++){let n=t[e].toString(16);n.length<2&&(n="0"+n),i+=n}return{codec:i,description:e}}(e.slice(5));this.decoder.configure(i),this.hasInit=!0}}destroy(){this.decoder.close(),this.decoder=null,this.hasInit=!1,this.isInitInfo=!1,this.off(),this.player.debug.log("Webcodecs","destroy"),this.player=null}}const Le={play:"播放",pause:"暂停",audio:"",mute:"",screenshot:"截图",loading:"加载",fullscreen:"全屏",fullscreenExit:"退出全屏",record:"录制",recordStop:"停止录制"};var De=Object.keys(Le).reduce(((e,t)=>(e[t]=`\n \n ${Le[t]?`${Le[t]}`:""}\n`,e)),{}),Oe=(e,t)=>{const{events:{proxy:i}}=e,n=document.createElement("object");n.setAttribute("aria-hidden","true"),n.setAttribute("tabindex",-1),n.type="text/html",n.data="about:blank",re(n,{display:"block",position:"absolute",top:"0",left:"0",height:"100%",width:"100%",overflow:"hidden",pointerEvents:"none",zIndex:"-1"});let o=e.width,r=e.height;i(n,"load",(()=>{i(n.contentDocument.defaultView,"resize",(()=>{e.width===o&&e.height===r||(o=e.width,r=e.height,e.emit(v.resize))}))})),e.$container.appendChild(n),e.on(v.destroy,(()=>{e.$container.removeChild(n)})),e.on(v.volumechange,(()=>{!function(e){if(0===e)re(t.$volumeOn,"display","none"),re(t.$volumeOff,"display","flex"),re(t.$volumeHandle,"top","48px");else if(t.$volumeHandle&&t.$volumePanel){const i=se(t.$volumePanel,"height")||60,n=se(t.$volumeHandle,"height"),o=i-(i-n)*e-n;re(t.$volumeHandle,"top",`${o}px`),re(t.$volumeOn,"display","flex"),re(t.$volumeOff,"display","none")}t.$volumePanelText&&(t.$volumePanelText.innerHTML=parseInt(100*e))}(e.volume)})),e.on(v.loading,(e=>{re(t.$loading,"display",e?"flex":"none"),re(t.$poster,"display","none"),e&&re(t.$playBig,"display","none")}));try{const i=()=>{re(t.$fullscreenExit,"display",e.fullscreen?"flex":"none"),re(t.$fullscreen,"display",e.fullscreen?"none":"flex")};$.on("change",i),e.events.destroys.push((()=>{$.off("change",i)}))}catch(e){}e.on(v.recording,(()=>{re(t.$record,"display",e.recording?"none":"flex"),re(t.$recordStop,"display",e.recording?"flex":"none")})),e.on(v.recordingTimestamp,(e=>{})),e.on(v.playing,(e=>{re(t.$play,"display",e?"none":"flex"),re(t.$playBig,"display",e?"none":"block"),re(t.$pause,"display",e?"flex":"none"),re(t.$screenshot,"display",e?"flex":"none"),re(t.$record,"display",e?"flex":"none"),re(t.$fullscreen,"display",e?"flex":"none"),e||t.$speed&&(t.$speed.innerHTML=ce(""))})),e.on(v.kBps,(e=>{const i=ce(e);t.$speed&&(t.$speed.innerHTML=i)}))};function je(e,t){void 0===t&&(t={});var i=t.insertAt;if(e&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===i&&n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}je('@keyframes rotation{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}.jessibuca-container .jessibuca-icon{cursor:pointer;width:16px;height:16px}.jessibuca-container .jessibuca-poster{position:absolute;z-index:10;left:0;top:0;right:0;bottom:0;height:100%;width:100%;background-position:50%;background-repeat:no-repeat;background-size:contain;pointer-events:none}.jessibuca-container .jessibuca-play-big{position:absolute;display:none;height:100%;width:100%;background:rgba(0,0,0,.4);background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACgklEQVRoQ+3ZPYsTQRjA8eeZZCFlWttAwCIkZOaZJt8hlvkeHrlccuAFT6wEG0FQOeQQLCIWih6chQgKgkkKIyqKCVYip54IWmiQkTmyYhFvd3Zn3yDb7szu/7cv7GaDkPEFM94PK0DSZ9DzDAyHw7uI2HRDlVJX5/N5r9FoHCYdr/fvCRiNRmpJ6AEidoUQ15NG+AH8BgD2n9AHANAmohdJQfwAfgGA4xF4bjabnW21Whob62ILoKNfAsAGEd2PU2ATcNSNiDf0/cE5/xAHxDpgEf0NADaJ6HLUiKgAbvcjpdSGlPJZVJCoAUfdSqkLxWLxTLlc/mkbEgtgET1TSnWklLdtIuIEuN23crlcp16vv7cBSQKgu38AwBYRXQyLSArg3hsjRDxNRE+CQhIF/BN9qVAobFYqle+mkLQAdLd+8K0T0U0TRJoAbvc9fVkJId75gaQRoLv1C2STiPTb7rFLWgE6+g0RncwyYEJEtawCvjDGmpzzp5kD6NfxfD7frtVqB17xen2a7oG3ALBm+oMoFQBEPD+dTvtBfpImDXjIGFvjnD/3c7ksG5MU4HDxWeZa0HB3XhKAXcdxOn5vUi9gnIDXSqm2lHLPK8pkfVyAbSLqm4T5HRs1YB8RO0KIid8g03FRAT4rpbpSyh3TINPxUQB2GGM9zvkn05gg420CJovLZT9ISNA5tgB9ItoOGhFmnh/AcZ/X9xhj65zzV2Eiwsz1A1j2B8dHAOgS0W6YnduY6wkYj8d3lFKn/j66Ea84jtOrVqtfbQSE3YYnYDAY5Eql0hYAnNDv6kKIx2F3anO+J8DmzqLY1goQxVE12ebqDJgcrSjGrs5AFEfVZJt/AF0m+jHzUTtnAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:50%;cursor:pointer;background-size:48px 48px}.jessibuca-container .jessibuca-play-big:hover{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACEElEQVRoQ+2ZXStEQRjH/3/yIXwDdz7J+i7kvdisXCk3SiFJW27kglBcSFFKbqwQSa4krykuKB09Naf2Yndn5jgzc06d53Znd36/mWfeniVyHsw5PwqB0DOonYEoijYBlOpAFwCMkHwLDS/9mwhEDUCfAAyTXA4tYSLwC6CtCegegH6S56FETAR+AHRoACcBTJAUWa+RloBAXwAYIrnt0yBNgZi7qtbHgw8RFwLC/QFglOScawlXAjH3gUqrE1cirgVi7mkAYyS/0xbxJSDcdwAGSa6nKeFTIOZeUyL3aYiEEBDuLwDjJGf+KxFKIOY+BdBL8iipSGiBmHtWbbuftiJZERBuOfgGSK7aSGRJIObeUml1ayKSRQHhlgtkiaTcdltGVgUE+ppkV54FaiS78yrwqlLoOI8Cch2XV548W7WRpTVwA6DP9kGUFYEpAOUkT9LQAvtq1M+0udKkQSgBqSlJWWYxKXj8vRACK+o6bbRIdYI+Ba7U7rKjg7L53JdAhWTZBsy0rWuBXZUuNVMg23auBF7UIl2yBbJt70JAoKV6/WwLk6R9mgKSJlJ1kLTxFmkJyCla8UZd15GJQKvyumyJ8gy8DAEvfZoINPqD41EtUjmUgoaJwAaAnjrKebVI34OSq85NBNqlCAWgE0CV5GEWwI3vQlmCbcSinYFCwPEIFDPgeIC1P1/MgHaIHDf4Aydx2TF7wnKeAAAAAElFTkSuQmCC")}.jessibuca-container .jessibuca-loading{display:none;flex-direction:column;justify-content:center;align-items:center;position:absolute;z-index:20;left:0;top:0;right:0;bottom:0;width:100%;height:100%;pointer-events:none}.jessibuca-container .jessibuca-loading-text{line-height:20px;font-size:13px;color:#fff;margin-top:10px}.jessibuca-container .jessibuca-controls{background-color:#161616;display:flex;flex-direction:column;justify-content:flex-end;position:absolute;z-index:40;left:0;right:0;bottom:0;height:38px;padding-left:13px;padding-right:13px;font-size:14px;color:#fff;opacity:0;visibility:hidden;transition:all .2s ease-in-out;-webkit-user-select:none;user-select:none}.jessibuca-container .jessibuca-controls .jessibuca-controls-item{position:relative;display:flex;justify-content:center;padding:0 8px}.jessibuca-container .jessibuca-controls .jessibuca-controls-item:hover .icon-title-tips{visibility:visible;opacity:1}.jessibuca-container .jessibuca-controls .jessibuca-fullscreen,.jessibuca-container .jessibuca-controls .jessibuca-fullscreen-exit,.jessibuca-container .jessibuca-controls .jessibuca-icon-audio,.jessibuca-container .jessibuca-controls .jessibuca-microphone-close,.jessibuca-container .jessibuca-controls .jessibuca-pause,.jessibuca-container .jessibuca-controls .jessibuca-play,.jessibuca-container .jessibuca-controls .jessibuca-record,.jessibuca-container .jessibuca-controls .jessibuca-record-stop,.jessibuca-container .jessibuca-controls .jessibuca-screenshot{display:none}.jessibuca-container .jessibuca-controls .jessibuca-icon-audio,.jessibuca-container .jessibuca-controls .jessibuca-icon-mute{z-index:1}.jessibuca-container .jessibuca-controls .jessibuca-controls-bottom{display:flex;justify-content:space-between;height:100%}.jessibuca-container .jessibuca-controls .jessibuca-controls-bottom .jessibuca-controls-left,.jessibuca-container .jessibuca-controls .jessibuca-controls-bottom .jessibuca-controls-right{display:flex;align-items:center}.jessibuca-container.jessibuca-controls-show .jessibuca-controls{opacity:1;visibility:visible}.jessibuca-container.jessibuca-hide-cursor *{cursor:none!important}.jessibuca-container.jessibuca-fullscreen-web{position:fixed;z-index:9999;left:0;top:0;right:0;bottom:0;width:100%!important;height:100%!important;background:#000}.jessibuca-container .jessibuca-icon-loading{width:50px;height:50px;background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%;animation:rotation 1s linear infinite}.jessibuca-container .jessibuca-icon-screenshot{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAE5UlEQVRoQ+1YW2sdVRT+1s7JxbsoVkEUrIIX0ouz15zYNA+N1RdtQfCltlUfvLbqL/BCwZ8grbHtizQqPojgBSr0JkiMmT2nxgapqBURtPVCq7HxJCeZJVPmxDlzZubMmXOSEsnAvOy917fXt9e39tp7E5b4R0vcfywTuNgRbBgBx3HuJqLVzPzmYjprjHkcwAlmLqXNm4XAISLaSESPaq2HF4OE67rbRGRYRA7btn1fbgLGmKsA/Azg0gBkGzO/vZAkHMd5hIiqc5wHcCMz/5k0Z2oExsfHV1QqldPAf8lORNu11m8tBAljzFYAYWxRSl1vWdZvuQj4RsYYF4AVBlgIOVVlE55HRIxt23ZuCfmGjuOsJ6LPoiAistW27XfaEYmIbOYhPc9bXywWR1oiEJDYQkR1zrYjEjGyqfqbKd8a7kJVtLgQ+30i8pht2wfyRKIdmJkJBPkQTbILfudJ7CTZNBvVpggEcgpvc/ML38zESbLJsxBNE/A9biX0rdjGyTQXgbxyapdsarb0PMlXtWnGoXbKpm0Essqp3bJpK4E0OXmed3+hUBDP8w5FI91M0rdcyLLILElOCbaZilSWeXMncRx4klTCY1spfG3dhZJWx3GcDUR0EEB3ZMw0ET2gtT6SZWWzjmlrBIJCl0hAKfWgZVmHszqXZVxbCSxpCS2JJA6umIhe8ZKKVLPbaBJ+S9toqVRa53nedgAbAKwIwH4FcAzAa0R0l4i8F7PPz189k6RFRA+LyNcAXojDV0oNW5b1eW4Cxpg9AHZkSaaa6hhzb065uDSCH2LmRB8Sk9gY4293g43Qo/1pV80m8yQMfZSZ781cB1zXHRKRZ2IMpgD8A+DamL4ZItqitX4/jbQx5iEA7wLoihn3V/ACckWMJN/QWj9b1x5tGBsbW6uUOh5pPy0iL3Z2dn6ilJqanp5ep5TaJSLhF4NppdRNaU8gPmapVLrO87yfIoXuWyJ6uVKp+HmFjo6OQSJ6FcBtYT+UUmstyxqvkWuUgDFmP4AnQu2/e563qlgs+u9DNZ8xZhRAX7VRRPbath0XuXk7Y8xeAE+FgL6fnJzsHRwcLIfBR0ZGLunq6poAsDLUvp+Zw7b1r9PGmJMAbg8Z7WDmoThZuK67WkS+DD18fcPMdzSQUBR/EzN/nIC/SUQ+DPXV4dclsTHmHAD/SfHCNzc3t7Kvr++HJKeMMacA3BL0nyuXyzcPDAxMxo0fHR29slAo/Ajg6qD/fE9Pzw29vb1/x42fmJi4vFwu+5G/LOg/y8zXNJLQ2dAES5JANMQ7mfn1jBI6ycx3NiMhItqstf4oAX+ziHwQ6qvDj5NQNIn/ALCKmX+JSeIvABRD7fuY+ekGBPYBeDI05tTMzExvf3+/vz2Hk91/ET8RSeI6/DoCpVJpjed5fmKGvzMAXpqdnT3oed5Ud3d3v4jsAqBr9Ei0Rmv9VRqBBPzvROQVETnq2xJRdRu9tRF+bCVOKWT+Kvl/TSIFk6SW/LAjKfjV5K8rZABi8dOOEv7FI7Z8x6zwEWbemLbyMfJr5qiSiJ96oclymBOR3bZtP9+M89WxxpjdAHY2sN3DzM8ljWl4I3Nd9x7/OE1ENcdpETnmH3e11n41zv0l4J8RkU+J6AAz+xtF4teQQG7PFslwmcAiLfSyhC72Qv9/I/Avns2OT7QJskoAAAAASUVORK5CYII=") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-screenshot:hover{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAED0lEQVRoQ+2ZycsdRRTFf2ejqHFAMQqiYBTUoElUHLNx3GgCgpuYRF2o0UT9CxwQ/BMkMSbZSKLiQgQHUDCJgjiAxiEiESdEcJbEedgcKaj3UV+/6q7u/jovPPkK3qbr1ql76p5bt6qemPKmKfefeQKHOoLFCNg+H1gi6fFJOmv7VmCvpD1N87Yh8ApwNXCzpB2TIGF7DRDm2inpmt4EbB8LfAMcGUHWSHryYJKwfRMwmuMP4BRJv9TN2RgB2wuB72BWsq+V9MTBIGF7NZBiGzhJ0o+9CIRBtt8FLqgADC6nRDbpVO9Iuqi3hCKB5cDrGZDVkp4aIhIV2aSQyyW9MScCkcQqIOfsnCORkc3I31b5VtyFRmg1IQ7dt0ja3icSQ2C2JhAjUU2ykd+dE7tBNp2i2olAJJFuc+nCt564QTadF6IzgUhiVGiqyinKaQjZpJP2ItBXTkPJZhACXeU0pGwGI9BWTkPLZlACBTldG4o5EA6E1dY66edcyNrs8Q36zg1vVaTazNs7iXPgDVJJzYs7VRvHRzaDEohyugJ4CTi84sg/wHWSdnVxsGQ7aQLXS9pZcqpL/6AEplpCU5HE8YpJ9YrXUKQ6baN1+HPaRm1fBqwFQnKGK2ZoPwCvAo8Ai4FnMpPMHMwapHUj8DFwbw3+Dklv9iZgexOwvktSRduxU2VDlErwmyXV+lCbxLbDdndlCT3TX3vV7JgnKfRuSVflfMkSsL0ZuDMz4E/gL+CETN+/wCpJzzaRtn0D8DRwWMbu1/gCcnSm7zFJd1W/jxGwvQx4r2IYnlbuA14GAomQFw8B6YtBKFSnNj2BxEJ3IvB1pdB9CjwQ8yqYhcg/DJxZ8WOZpA/SbzkC24DbEqOfgPMkBRKzmu23gEuSj1sk5SI3Y2J7C3BHMuZz4FxJf6fgto8APgIWJd+3SUrHjr9O294HnJUMWi8pSGqs2V4CvJ88fH0i6eyChKr4KyS9WIO/Ang+6RvDz0XgABCeFEdtkaQv65yy/QVweuwPY0+T9FuNQ8cAXwHHxf7wdHiypN9r7BfEl8GjYv9+SceXJLQ/mSDYTh2Baog3SHq0pYT2STqno4RWSnqhBn8l8FzSN4bfJol/jkn8bXUS228DFyfft0paVyCwFbg9sQkSDEkctueZZju8iO+tJPEYfo7A0piYKd73wP3xnB+20cvjNnphxdmlkj4sEMjhfwY8COyOY0fb6Bkl/K6FLKxS+M1KpDhJY8mvrG5doRwlf66QZfGbjhLh4pEt35kV3iUp/IvTunU8qtTil/7gaHOY2yjpntaez9b5RmBDYewmSXfX2RRvZLYvbThOh+NuqMa9Ww1+yLnXgO2SwkZR24oEens2oYHzBCa00PMSOtQL/f+NwH+Hg8hAnbrYgQAAAABJRU5ErkJggg==") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-play{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACgklEQVRoQ+3ZPYsTQRjA8eeZZCFlWttAwCIkZOaZJt8hlvkeHrlccuAFT6wEG0FQOeQQLCIWih6chQgKgkkKIyqKCVYip54IWmiQkTmyYhFvd3Zn3yDb7szu/7cv7GaDkPEFM94PK0DSZ9DzDAyHw7uI2HRDlVJX5/N5r9FoHCYdr/fvCRiNRmpJ6AEidoUQ15NG+AH8BgD2n9AHANAmohdJQfwAfgGA4xF4bjabnW21Whob62ILoKNfAsAGEd2PU2ATcNSNiDf0/cE5/xAHxDpgEf0NADaJ6HLUiKgAbvcjpdSGlPJZVJCoAUfdSqkLxWLxTLlc/mkbEgtgET1TSnWklLdtIuIEuN23crlcp16vv7cBSQKgu38AwBYRXQyLSArg3hsjRDxNRE+CQhIF/BN9qVAobFYqle+mkLQAdLd+8K0T0U0TRJoAbvc9fVkJId75gaQRoLv1C2STiPTb7rFLWgE6+g0RncwyYEJEtawCvjDGmpzzp5kD6NfxfD7frtVqB17xen2a7oG3ALBm+oMoFQBEPD+dTvtBfpImDXjIGFvjnD/3c7ksG5MU4HDxWeZa0HB3XhKAXcdxOn5vUi9gnIDXSqm2lHLPK8pkfVyAbSLqm4T5HRs1YB8RO0KIid8g03FRAT4rpbpSyh3TINPxUQB2GGM9zvkn05gg420CJovLZT9ISNA5tgB9ItoOGhFmnh/AcZ/X9xhj65zzV2Eiwsz1A1j2B8dHAOgS0W6YnduY6wkYj8d3lFKn/j66Ea84jtOrVqtfbQSE3YYnYDAY5Eql0hYAnNDv6kKIx2F3anO+J8DmzqLY1goQxVE12ebqDJgcrSjGrs5AFEfVZJt/AF0m+jHzUTtnAAAAAElFTkSuQmCC") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-play:hover{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACEElEQVRoQ+2ZXStEQRjH/3/yIXwDdz7J+i7kvdisXCk3SiFJW27kglBcSFFKbqwQSa4krykuKB09Naf2Yndn5jgzc06d53Znd36/mWfeniVyHsw5PwqB0DOonYEoijYBlOpAFwCMkHwLDS/9mwhEDUCfAAyTXA4tYSLwC6CtCegegH6S56FETAR+AHRoACcBTJAUWa+RloBAXwAYIrnt0yBNgZi7qtbHgw8RFwLC/QFglOScawlXAjH3gUqrE1cirgVi7mkAYyS/0xbxJSDcdwAGSa6nKeFTIOZeUyL3aYiEEBDuLwDjJGf+KxFKIOY+BdBL8iipSGiBmHtWbbuftiJZERBuOfgGSK7aSGRJIObeUml1ayKSRQHhlgtkiaTcdltGVgUE+ppkV54FaiS78yrwqlLoOI8Cch2XV548W7WRpTVwA6DP9kGUFYEpAOUkT9LQAvtq1M+0udKkQSgBqSlJWWYxKXj8vRACK+o6bbRIdYI+Ba7U7rKjg7L53JdAhWTZBsy0rWuBXZUuNVMg23auBF7UIl2yBbJt70JAoKV6/WwLk6R9mgKSJlJ1kLTxFmkJyCla8UZd15GJQKvyumyJ8gy8DAEvfZoINPqD41EtUjmUgoaJwAaAnjrKebVI34OSq85NBNqlCAWgE0CV5GEWwI3vQlmCbcSinYFCwPEIFDPgeIC1P1/MgHaIHDf4Aydx2TF7wnKeAAAAAElFTkSuQmCC") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-pause{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABA0lEQVRoQ+1YwQqCUBAcfWXXsLr2AXWTPXno8yVB8AP6Aa3oHI+kCDqYaawJljSe133uzO44bx0M/HEG/v1gAd9mkAyQgY4I/F8LJUlyrQFtD2AtIkcNoFEU+Z7n7QD4DfFHEVlocrVmgAUAIAOl3mILPcDgEFcUhyrUKMGUUcroc3NQRimj9XJBGaWMvvPydKN0o6/9QTdKN6rZANxj6EbpRulGuZnjYqs8BbyR8Ub2Izeys+u6yyAIDpo/ehzHM2NMDsA0xFsRmWhyfTIDWSXxCEBmrd2EYXjSHJqm6bQoii2AOYBL5Z0xgFxEVppcrQvQJO0zhgX0iXbdWWSADHRE4AZQ731AhEUeNwAAAABJRU5ErkJggg==") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-pause:hover{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAA7klEQVRoQ+2YSwrCQBBEX6HiVvxsPYDewfN7By/gD9ciQkvERQwJdBSiYs0mEDo96aruombEjy/9+P/jAj7NoBkwA28i8H8tFBFRA9oeWEo6ZgCNiDGwAYpn3TpKmmVytWbABQBmoNRbbqEHGB7iiuJYhRol2DJqGX1uDsuoZdRmLuNZSzGWUcuoZdRHSp/IylNgK2ErYSthK3FHwLcSvpXIjoLt9Jfa6TMwl3TIMBkRE2AH9BriL5KGmVyvWIltJXEfKN6tJJ0ym0bECFgDU+Ba+WZQFCdpkcnVuoBM0i5jXECXaNftZQbMwJsI3AAPN3dAQflHegAAAABJRU5ErkJggg==") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-record{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAC+UlEQVRoQ+1ZS2sTURT+zlDJYE3XSq219QHVuEjnJDT+Bff9Abqw2voAEfGxqygUqWhVFHGl/yMLu9BwByxk5SNI66ML6U7axjhHbmhgWiftncxoOiV3FcI53z3f/e65594zhIQPSnj86BBot4IdBToKRFyBnbeFlFIScVEiuYvIWC6Xe2YK8pcC7SYA4CMzH4mDQBXAqilQBDsLQLfPf9FxnF4i8kwwmypARI+Wl5dvmIBEsUmlUkNE9NaHsVCpVAZGR0d/m+A2JSAid3K53E0TkCg2pVKpz7KseR/GfKVSGYxMAMA0M1+JEpyJb6lUOm5ZVnkrAsVisaunp+esiByr1Wp3R0ZGvmifzZK4XQQWHMc52MgBpdQuAOcAXABwuB400ZTjONdaIjA7O5u2bVsnWU1EujzP+5nP5xdMVjvIJkCBD8x8VCm1G8AYgAkAAxt8Z5j5YmgCSqlTAJ4D2OcD/AXgATNfbYVEAIFPIvKKiE4D6GuCea8xX6gtpJT6DmBvECgRFRzHeROWRAABE4iWCbwHEFhkPM/L5vP5dyaz+23+KwHXdR3P854S0YG1ILSCuthNMfNM2OC1/RYENLY+ygcBnPfht6ZAA6BYLNr6dyqVokKhsGpaNQ2TWJstreXaE2aed133sojcj41AKyvdzCdAgSXLsk4MDw9/a/i4rntbRPxFNZoC/5jAV2be759DKTUJ4FZSFFi0bbs/k8noy2R9dAjEuWU2YgXkQOK3kD6BMsysi2Z9JC2Jdcw/ALzwPO+xvmcl7Rj177JVEbkO4BARjSflFDJJuW1dBxJPoCIiL4noDIB1BS0pW6j+oJmbm+uuVqvjRKQfLr0bZHnIzJf0f6HeAybahrUJqAPruhLlcnnPysqKfpXp11n/Gv62zoHAroS+AafT6QkiGrIsazKbzX7eVIHEt1US39gCkOzWYthkjNE+tuZujDGZQ8XRXn8N4KT5lLFZ6uaYPt+nwyDuvC80YdhvB9uOAu1WoaNAR4GIK/AHvdr+QAexB7EAAAAASUVORK5CYII=") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-record:hover{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACfUlEQVRoQ+2ZSYsUQRCFvycK4nJXXEbHBdwO4kn/gv9CD467ICIutxEFkREdFUU86T/xojcPntyQcT2INw+uISFVkD1Wd2dWlU7nUHlqisiX+fJFZGREi8yHMt8/HYG5VrBToFOg4QnMPxcyM2t4KE2nT0i6EwvylwIjQOCFpE1tEPgGfI0FamC3AFgazP8IrJL0KwZzkAI3gLMxIA1ttgCPA4w3wHpJP2NwBxG4KOlcDEgTGzNbA8wEGP57vA0CU5JONtlczFwz2wY8HUbAzBYCB4CtwCVJb33OIAXmioC70LoyBsxsEXAQOApsLIhelnS6FgEzW+5BBvwA/FS+SPJFa40KBZ5L2mxmS4AJ4IjHxCzwaUnHkgmY2V7gLrAyAPwOXJN0qg6DCgIvgQfAPsDjo2pcKddLciEz+wCs6AO6W9KjVBIVBGIgahN4BvRLMjslPYlZPbT53wR2AbeBtcUmXEFPdh5U06mbd/shBBzbr/Jx4FCAX0+BEsDMFocEYrNmFcE+BD4XsXZL0oyZnQCutkagzkn3m1NBwDe/Q9L74MAuFEqUn5op8I8JvJO0elacTALnc1HAH3Njkvwx+WeYWUegTa/pwaqIgexdyIN4uyRPmqULZRXEvulPwD3gpr+zcrtGQxfzRHYG2AAczuUWiom3kc4D2RN4BdwH9gM9CS0XFyoLGu9UuN974eIFVDiuSzruH5LqgRhtU20q8kBPV8LMlhVVmVdnYwX+SMdAZVeieAF7eeltmElJr4cpkH1bJfvGVvatxdR4bMu+teZuWxtKxWncXn8I7EldtQV7vz79fp9KwZp//9CksB8F206BuVahU6BToOEJ/Ab7+KdABdTt8AAAAABJRU5ErkJggg==") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-recordStop{background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-recordStop:hover{background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-fullscreen{background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-fullscreen:hover{background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-fullscreenExit{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAADd0lEQVRoQ+2Zz2sdVRTHv+fJBDW6anDVXen6wZszYxYBiYgtFGst3VSDunKjpS0GpUlqfjVpsVVs6aaL0or4YxMVFCJZ2ZLdPUP+gq5bQnTxtNAkfTnlhnnlkmQy9yV9780rudt77tzv5/y4v4bQ4Y06XD/2ANodwec/AiJygJnvtdvTWfPnRkBEJAiCN8rl8kMfiPn5+Ve7u7v3rays0Orq6lJfX99/PuN2auMDoAD+BvA2M6/mTWSMOUtE48D6AjHGzN/kjdlNvy+AnWOOmQ/lTSYiEwDOWzsimgrDcCRvzG76GwGw8/zJzO9sN6GInAMwbW1UdSSKoqndCMwb6wNwGsB39Q+p6h/M/C4R2dTa1AoHYBWKyCkA1+pqiWi2Wq0e7e/vf7yRoJAAKcQggMtuJKIoOtoxACnE0/xOi/SXMAxPuhCFjUBdpIjYVWXSEf0TM3/g9BeriDMKdSPEz8z8vrU1xgwT0YXCrEJZy1iSJKOqOub0/8jMA0mSfKKqNwoPkHp7ioiGHIhRIvpHVa93BEBa2JcAfOlALAHo6RgAKzRJkk9V1S6xL7kpV4idOM31taxaIKJHqmpPnMMA9hcOQES2PDJkAT1XAAC+ZebPfWB3auNzmLObVsNRUNUXVHUujuM7OxXnMy4XwOcj29mIyOuq+lapVGrYCelKpkEQ3CyXy4tbzdN0AGPMxr2iYZ+sra3FcRybtgCIiK2BKw2rdgaUSqWoUqlIkQAepFDdAF7cBq5ERI9rtdr1OI7tmE2t6SmUEYFHAEaexYW/1QC2EF+ru5GIvg7D0D2GNJxprQY4o6qv1I/b6SpzOYqiLxpWng5oOQAzXxWRWwA+dkRfYOb1p5hGW6sBJpn5KytSRG4D+KguWFXHoyhy7xdeLC0F2ChSRL4H8OFuINoKYIUbY34gogHH3eeZef1K6tPaDpCm068A3nMEDzHzxY4BUNWSiPxORO6z5aDPPlGICNQ9bYyZIaLjjudzIQoFkKbTbwCO+UI0HcB9J/LdeY0xs0R02IGYYObRrWqiFQCfEZEtSHsfmGZm+4qxbbM/hQD8BeBNa0hEM2EYnmgLgP3lFARBT1dXly4vL//b29tbzQNIU+llAHeJaLFSqRzJes5vegR8xGbZLCwsHKzVav8z8/0sm0ID+MDvAfh4qZk2exFopnd9vv0ELrXBQO7fD10AAAAASUVORK5CYII=") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-fullscreenExit:hover{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAC/ElEQVRoQ+2Zy49NQRCHvx+ReK6IlZ34E7CUiCAR4xEbTLCyQRATYswwb2IQZDYWgojHZpCQECts+ResiQwLj0RClNSkb9Lu3HtPz7mZc8+V6eXt6tP1VVV3VdcVbT7U5vozC9BqD/7/HjCzlZLet9rS9fbP9ICZvQPWSfqRAmFmS4ClMHm+JiR9S1mXVyYFwIBXwEZJv7I2MrPjQH8A6JN0OWtNM/OpAL7HS0mbsjYzswGgN8gNS+rJWtPM/HQAfJ9nkrY22tDMTgMjQaZH0nAzCmatTQE4ClyNPvQU2CbJQ2vKKB2Aa2hmR4DrkbbPgQ5Jv6sJSgkQILqA0dgTkjraBiBAxPHtPz2UtDuGKK0HKkqamd8qg5HS9yXtjebLdYjrHNRqiAeS9gQvnQGGSnML1bvGzOwc0BfN35PUaWYHgRulBwjW9ju+O4JwqM/AWFsABIgLwKkIYgJY1jYAAeJQuGIXVIVcKTKxh8WfBin9J+AVpx/eFWUEqFkyNACKp0rhgWYArkg6kQibSyylmPOklQdibijBX+fSLHFRJkDid+qKmdlaYENOI0zeEcBNSZ9qbVIEQHWuyGOTNZLetgrAz8ClPFpHa1ZL8rf5lFGEB2oBfAxQi4D5DeDmAP7mGJPka0oD4LnDr9imH/xFe8AP4vLIjBclxWXItCOtaIBjwOKo3HaFRyWdnLbmYUHhAJKumdkt4ECk9JCkSitmWixFAwxKOjt5uZvdBvZH2vZLit8XSSBFA/yjpJndAfY1A9FSgOCJu0BnBNErqfIkzfRCywECxCNgR6Rtt6TzmdqHBmyKXG4ZM4sTWc04NzNPWE+AuG3ZlZInSuGBinXMbBzYGVkrE6JUACGcHgPbUyGKAIj7REmZ18y897o5ghiQ5E/bltRChwE/kF7Xj0jyLkbDYWbzgBfA+iA4LmlXqwD8LydvszjAF0lfswBCKC0E3gBeP22p186f8RBKUbaejJmtAr5L+lBPptQAKfCzAClWmkmZWQ/MpHVTvv0X9iFAQGQyevIAAAAASUVORK5CYII=") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-audio{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACrUlEQVRoQ+2ZPYgTURCAZzbBXJnCeL2Cnb87b9MEtPBUrrMQFAtrtT5/ClGs9LBWWz0RtbBUFCF4oJDsbO68wsLA2YqQSmLlvpEHu7IuMdlLcus+yUKKhJfZ+ebnvZl5CJY/aLn+MAP41x7M1QPMfFtr/crzvHfTAs8FoNPp1LTWzwHgqIg0lFLvrQHwfX8BER8DwC6jNCIecF13wwoA3/dvIuKNpLJa60Oe560XGoCZd4rICiKeTCtaeABmPg4AJmRqg6xcaABmvg4At4aFRyEBhoVM4UMoCplHADCfJTEL5YEsIVNID5iQAYCHALCYxeq5b6PMfF5EBAAEESthGK7W6/XPRpFWq7W3VCqtZg2ZcT3g+/6i4zjzIlLSWn/yPO/DIGMNLCWY2Sj/+xGRK0qpZfNDEASnROTFVi0fr8+aA8z8Ld6KEfGt67oLYwMAwEUium8EREn7OgeAjwCwPyo/nrque3YSgAtE9GDaAM1mc65arc4Zuf1+P2w0Gt9jJZl5DQAORt+fENG5wgEw8zUAMB/zbBBRwyqAIAjuiMjlSOlNItpjFUCqWl0josMzgChR/9hGAWBbknjmAdPhDdqa0gfZzAMJKyVP4v8hhJYRcSni+0JEu63ahZj5anyQici6UuqIVQDdbrfS6/UqRulyufyTiH5sF8AlIro37VpoWEHIzGZ2tM+sEZFnSqkzk9RCS0R01wjIsZz+mug53hDRia0AnI4bGgDYISItz/M2jYC8Gpp2u30MEWuO4zha665Sqp0ZYFStX/iWchRAItFGzoHSsrJ2ZFl1mHg6bfVYJeGJv85CC++BpIJZ5kSFC6G0ha0e7mYJqcJ7IOkRay84UhD2XjHFIFZf8iW9YcYoYRi+tO6aNeupOs66iU/icV46zf/MAKZpzXFk/QL+JG1PUPhRiQAAAABJRU5ErkJggg==") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-audio:hover{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACSElEQVRoQ+2Zu4sUQRCHf5+C+gf4yBXMfMYHGvjCzEBQDIzV+HwEohipGKupD0QNDE8UEwUFTe68wEDhTMVUMFJ+0tArzbjs9u3Ojt0wBR0M9MzUV1XdXVWNKhcq1189wP/2YKcesH1d0nPgdVvgnQDY3iTpqaT9kuaAt9UA2D4o6aGkzVHpXcByFQC2r0q60lB2D7BUNIDtjZIeSDoyRNGyAWwfiiET4n6YlAtg+7Kka2PCozyAMSHT5CkLIIbMfUlbMhdmOQCZIVOeB2LI3JN0NNPq6bTZe8D2aUmOY72kN8DnoIXt7eF5FSEzkQdsB+OEsFwr6RPwbpixhqYStoPyqVwAbkaAY5KeTWD5wStZHrD9XdJgK34FhBP9H8kFOAvciQBhn3/RAcBHSTvjfx4DJ6cBOAPcbRvA9gZJYQT5DfwYKGl7UdLu+PwIOFUiwCVJYQRZBuZqA7gh6XxUegXYVhtAmq0uAnt7gLhQm9vorBZx74Hcc6D3QLKH/z2JGyVnlYs4pCfzEe4rsLW2XehicpAtAftqAwiZbhhBfgE/ZwVwDrjddi40KiG0HXpHO+KcJ8CJaXKheeBWBOgqnf6W1BwvgcOrATieFDTrJL0HViJAVwXNgVgPrJH0BfiQDTDKtREiNK7KLSnHASQLLacP1PxcVkWWq8PU3emq2yqJJ0b1Qsv2QKpdZp+orBBqmrfq5m5mSJXtgUZI1XnB0YCo94opCal6L/ka3ghtlIXqrllzT9VJ5k19Ek/y0zbf6QHatOYk3/oDujC8QMWgjf4AAAAASUVORK5CYII=") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-mute{background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-mute:hover{background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-text{font-size:14px;width:30px}.jessibuca-container .jessibuca-speed{font-size:14px;color:#fff}.jessibuca-container .jessibuca-quality-menu-list{position:absolute;left:50%;bottom:100%;visibility:hidden;opacity:0;transform:translateX(-50%);transition:visibility .3s,opacity .3s;background-color:rgba(0,0,0,.5);border-radius:4px}.jessibuca-container .jessibuca-quality-menu-list.jessibuca-quality-menu-shown{visibility:visible;opacity:1}.jessibuca-container .icon-title-tips{pointer-events:none;position:absolute;left:50%;bottom:100%;visibility:hidden;opacity:0;transform:translateX(-50%);transition:visibility .3s ease 0s,opacity .3s ease 0s;background-color:rgba(0,0,0,.5);border-radius:4px}.jessibuca-container .icon-title{display:inline-block;padding:5px 10px;font-size:12px;white-space:nowrap;color:#fff}.jessibuca-container .jessibuca-quality-menu{padding:8px 0}.jessibuca-container .jessibuca-quality-menu-item{display:block;height:25px;margin:0;padding:0 10px;cursor:pointer;font-size:14px;text-align:center;width:50px;color:hsla(0,0%,100%,.5);transition:color .3s,background-color .3s}.jessibuca-container .jessibuca-quality-menu-item:hover{background-color:hsla(0,0%,100%,.2)}.jessibuca-container .jessibuca-quality-menu-item:focus{outline:none}.jessibuca-container .jessibuca-quality-menu-item.jessibuca-quality-menu-item-active{color:#2298fc}.jessibuca-container .jessibuca-volume-panel-wrap{position:absolute;left:50%;bottom:100%;visibility:hidden;opacity:0;transform:translateX(-50%) translateY(22%);transition:visibility .3s,opacity .3s;background-color:rgba(0,0,0,.5);border-radius:4px;height:120px;width:50px;overflow:hidden}.jessibuca-container .jessibuca-volume-panel-wrap.jessibuca-volume-panel-wrap-show{visibility:visible;opacity:1}.jessibuca-container .jessibuca-volume-panel{cursor:pointer;position:absolute;top:21px;height:60px;width:50px;overflow:hidden}.jessibuca-container .jessibuca-volume-panel-text{position:absolute;left:0;top:0;width:50px;height:20px;line-height:20px;text-align:center;color:#fff;font-size:12px}.jessibuca-container .jessibuca-volume-panel-handle{position:absolute;top:48px;left:50%;width:12px;height:12px;border-radius:12px;margin-left:-6px;background:#fff}.jessibuca-container .jessibuca-volume-panel-handle:before{bottom:-54px;background:#fff}.jessibuca-container .jessibuca-volume-panel-handle:after{bottom:6px;background:hsla(0,0%,100%,.2)}.jessibuca-container .jessibuca-volume-panel-handle:after,.jessibuca-container .jessibuca-volume-panel-handle:before{content:"";position:absolute;display:block;left:50%;width:3px;margin-left:-1px;height:60px}');class Ue{constructor(e){var t;this.player=e,((e,t)=>{e.$container.classList.add("jessibuca-controls-show");const i=e._opt,n=i.operateBtns;e.$container.insertAdjacentHTML("beforeend",`\n ${i.background?`
`:""}\n
\n ${De.loading}\n ${i.loadingText?`
${i.loadingText}
`:""}\n
\n ${i.hasControl&&n.play?'
':""}\n ${i.hasControl?`\n
\n
\n
\n ${i.showBandwidth?'
':""}\n
\n
\n ${n.audio?`\n
\n ${De.audio}\n ${De.mute}\n
\n
\n
\n
\n
\n
\n
\n `:""}\n ${n.play?`
${De.play}
${De.pause}
`:""}\n ${n.screenshot?`
${De.screenshot}
`:""}\n ${n.record?`
${De.record}
${De.recordStop}
`:""}\n ${n.fullscreen?`
${De.fullscreen}
${De.fullscreenExit}
`:""}\n
\n
\n
\n `:""}\n\n `),Object.defineProperty(t,"$poster",{value:e.$container.querySelector(".jessibuca-poster")}),Object.defineProperty(t,"$loading",{value:e.$container.querySelector(".jessibuca-loading")}),Object.defineProperty(t,"$play",{value:e.$container.querySelector(".jessibuca-play")}),Object.defineProperty(t,"$playBig",{value:e.$container.querySelector(".jessibuca-play-big")}),Object.defineProperty(t,"$pause",{value:e.$container.querySelector(".jessibuca-pause")}),Object.defineProperty(t,"$controls",{value:e.$container.querySelector(".jessibuca-controls")}),Object.defineProperty(t,"$fullscreen",{value:e.$container.querySelector(".jessibuca-fullscreen")}),Object.defineProperty(t,"$fullscreen",{value:e.$container.querySelector(".jessibuca-fullscreen")}),Object.defineProperty(t,"$volume",{value:e.$container.querySelector(".jessibuca-volume")}),Object.defineProperty(t,"$volumePanelWrap",{value:e.$container.querySelector(".jessibuca-volume-panel-wrap")}),Object.defineProperty(t,"$volumePanelText",{value:e.$container.querySelector(".jessibuca-volume-panel-text")}),Object.defineProperty(t,"$volumePanel",{value:e.$container.querySelector(".jessibuca-volume-panel")}),Object.defineProperty(t,"$volumeHandle",{value:e.$container.querySelector(".jessibuca-volume-panel-handle")}),Object.defineProperty(t,"$volumeOn",{value:e.$container.querySelector(".jessibuca-icon-audio")}),Object.defineProperty(t,"$volumeOff",{value:e.$container.querySelector(".jessibuca-icon-mute")}),Object.defineProperty(t,"$fullscreen",{value:e.$container.querySelector(".jessibuca-fullscreen")}),Object.defineProperty(t,"$fullscreenExit",{value:e.$container.querySelector(".jessibuca-fullscreen-exit")}),Object.defineProperty(t,"$record",{value:e.$container.querySelector(".jessibuca-record")}),Object.defineProperty(t,"$recordStop",{value:e.$container.querySelector(".jessibuca-record-stop")}),Object.defineProperty(t,"$screenshot",{value:e.$container.querySelector(".jessibuca-screenshot")}),Object.defineProperty(t,"$speed",{value:e.$container.querySelector(".jessibuca-speed")})})(e,this),Oe(e,this),t=this,Object.defineProperty(t,"controlsRect",{get:()=>t.$controls.getBoundingClientRect()}),((e,t)=>{const{events:{proxy:i}}=e;function n(e){const{bottom:i,height:n}=t.$volumePanel.getBoundingClientRect(),{height:o}=t.$volumeHandle.getBoundingClientRect();return oe(i-e.y-o/2,0,n-o/2)/(n-o)}i(window,["click","contextmenu"],(i=>{i.composedPath().indexOf(e.$container)>-1?t.isFocus=!0:t.isFocus=!1})),i(window,"orientationchange",(()=>{setTimeout((()=>{e.resize()}),300)})),i(t.$controls,"click",(e=>{e.stopPropagation()})),i(t.$pause,"click",(t=>{e.pause()})),i(t.$play,"click",(t=>{e.play()})),i(t.$playBig,"click",(t=>{e.play()})),i(t.$volume,"mouseover",(()=>{t.$volumePanelWrap.classList.add("jessibuca-volume-panel-wrap-show")})),i(t.$volume,"mouseout",(()=>{t.$volumePanelWrap.classList.remove("jessibuca-volume-panel-wrap-show")})),i(t.$volumeOn,"click",(i=>{i.stopPropagation(),re(t.$volumeOn,"display","none"),re(t.$volumeOff,"display","block"),e.lastVolume=e.volume,e.volume=0})),i(t.$volumeOff,"click",(i=>{i.stopPropagation(),re(t.$volumeOn,"display","block"),re(t.$volumeOff,"display","none"),e.volume=e.lastVolume||.5})),i(t.$screenshot,"click",(t=>{t.stopPropagation(),e.video.screenshot()})),i(t.$volumePanel,"click",(t=>{t.stopPropagation(),e.volume=n(t)})),i(t.$volumeHandle,"mousedown",(()=>{t.isVolumeDroging=!0})),i(t.$volumeHandle,"mousemove",(i=>{t.isVolumeDroging&&(e.volume=n(i))})),i(document,"mouseup",(()=>{t.isVolumeDroging&&(t.isVolumeDroging=!1)})),i(t.$record,"click",(t=>{t.stopPropagation(),e.recording=!0})),i(t.$recordStop,"click",(t=>{t.stopPropagation(),e.recording=!1})),i(t.$fullscreen,"click",(t=>{t.stopPropagation(),e.fullscreen=!0})),i(t.$fullscreenExit,"click",(t=>{t.stopPropagation(),e.fullscreen=!1}))})(e,this),this.player.debug.log("Control","init")}autoSize(){const e=this.player;e.$container.style.padding="0 0";const t=e.width,i=e.height,n=t/i,o=e.audio.$videoElement.width/e.audio.$videoElement.height;if(n>o){const n=(t-i*o)/2;e.$container.style.padding=`0 ${n}px`}else{const n=(i-t/o)/2;e.$container.style.padding=`${n}px 0`}}destroy(){this.player.debug.log("control","destroy"),this.$poster&&this.player.$container.removeChild(this.$poster),this.player.$container.removeChild(this.$loading),this.$controls&&this.player.$container.removeChild(this.$controls),this.player=null}}je(".jessibuca-container{position:relative;width:100%;height:100%;overflow:hidden}.jessibuca-container.jessibuca-fullscreen-web{position:fixed;z-index:9999;left:0;top:0;right:0;bottom:0;width:100%!important;height:100%!important;background:#000}");class Fe{static init(){Fe.types={avc1:[],avcC:[],hvc1:[],hvcC:[],btrt:[],dinf:[],dref:[],esds:[],ftyp:[],hdlr:[],mdat:[],mdhd:[],mdia:[],mfhd:[],minf:[],moof:[],moov:[],mp4a:[],mvex:[],mvhd:[],sdtp:[],stbl:[],stco:[],stsc:[],stsd:[],stsz:[],stts:[],tfdt:[],tfhd:[],traf:[],trak:[],trun:[],trex:[],tkhd:[],vmhd:[],smhd:[]};for(let e in Fe.types)Fe.types.hasOwnProperty(e)&&(Fe.types[e]=[e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2),e.charCodeAt(3)]);let e=Fe.constants={};e.FTYP=new Uint8Array([105,115,111,109,0,0,0,1,105,115,111,109,97,118,99,49]),e.STSD_PREFIX=new Uint8Array([0,0,0,0,0,0,0,1]),e.STTS=new Uint8Array([0,0,0,0,0,0,0,0]),e.STSC=e.STCO=e.STTS,e.STSZ=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0]),e.HDLR_VIDEO=new Uint8Array([0,0,0,0,0,0,0,0,118,105,100,101,0,0,0,0,0,0,0,0,0,0,0,0,86,105,100,101,111,72,97,110,100,108,101,114,0]),e.HDLR_AUDIO=new Uint8Array([0,0,0,0,0,0,0,0,115,111,117,110,0,0,0,0,0,0,0,0,0,0,0,0,83,111,117,110,100,72,97,110,100,108,101,114,0]),e.DREF=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,12,117,114,108,32,0,0,0,1]),e.SMHD=new Uint8Array([0,0,0,0,0,0,0,0]),e.VMHD=new Uint8Array([0,0,0,1,0,0,0,0,0,0,0,0])}static box(e){let t=8,i=null,n=Array.prototype.slice.call(arguments,1),o=n.length;for(let e=0;e>>24&255,i[1]=t>>>16&255,i[2]=t>>>8&255,i[3]=255&t,i.set(e,4);let r=8;for(let e=0;e>>24&255,e>>>16&255,e>>>8&255,255&e,t>>>24&255,t>>>16&255,t>>>8&255,255&t,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]))}static trak(e){return Fe.box(Fe.types.trak,Fe.tkhd(e),Fe.mdia(e))}static tkhd(e){let t=e.id,i=e.duration,n=e.presentWidth,o=e.presentHeight;return Fe.box(Fe.types.tkhd,new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t,0,0,0,0,i>>>24&255,i>>>16&255,i>>>8&255,255&i,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,n>>>8&255,255&n,0,0,o>>>8&255,255&o,0,0]))}static mdia(e){return Fe.box(Fe.types.mdia,Fe.mdhd(e),Fe.hdlr(e),Fe.minf(e))}static mdhd(e){let t=e.timescale,i=e.duration;return Fe.box(Fe.types.mdhd,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t,i>>>24&255,i>>>16&255,i>>>8&255,255&i,85,196,0,0]))}static hdlr(e){let t=null;return t="audio"===e.type?Fe.constants.HDLR_AUDIO:Fe.constants.HDLR_VIDEO,Fe.box(Fe.types.hdlr,t)}static minf(e){let t=null;return t="audio"===e.type?Fe.box(Fe.types.smhd,Fe.constants.SMHD):Fe.box(Fe.types.vmhd,Fe.constants.VMHD),Fe.box(Fe.types.minf,t,Fe.dinf(),Fe.stbl(e))}static dinf(){return Fe.box(Fe.types.dinf,Fe.box(Fe.types.dref,Fe.constants.DREF))}static stbl(e){return Fe.box(Fe.types.stbl,Fe.stsd(e),Fe.box(Fe.types.stts,Fe.constants.STTS),Fe.box(Fe.types.stsc,Fe.constants.STSC),Fe.box(Fe.types.stsz,Fe.constants.STSZ),Fe.box(Fe.types.stco,Fe.constants.STCO))}static stsdOld(e){return"audio"===e.type?Fe.box(Fe.types.stsd,Fe.constants.STSD_PREFIX,Fe.mp4a(e)):"avc"===e.videoType?Fe.box(Fe.types.stsd,Fe.constants.STSD_PREFIX,Fe.avc1(e)):Fe.box(Fe.types.stsd,Fe.constants.STSD_PREFIX,Fe.hvc1(e))}static stsd(e){return"audio"===e.type?Fe.box(Fe.types.stsd,Fe.constants.STSD_PREFIX,Fe.mp4a(e)):"avc"===e.videoType?Fe.box(Fe.types.stsd,Fe.constants.STSD_PREFIX,Fe.avc1(e)):Fe.box(Fe.types.stsd,Fe.constants.STSD_PREFIX,Fe.hvc1(e))}static mp4a(e){let t=e.channelCount,i=e.audioSampleRate,n=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t,0,16,0,0,0,0,i>>>8&255,255&i,0,0]);return Fe.box(Fe.types.mp4a,n,Fe.esds(e))}static esds(e){let t=e.config||[],i=t.length,n=new Uint8Array([0,0,0,0,3,23+i,0,1,0,4,15+i,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([i]).concat(t).concat([6,1,2]));return Fe.box(Fe.types.esds,n)}static avc1(e){let t=e.avcc;const i=e.codecWidth,n=e.codecHeight;let o=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,i>>>8&255,255&i,n>>>8&255,255&n,0,72,0,0,0,72,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,255,255]);return Fe.box(Fe.types.avc1,o,Fe.box(Fe.types.avcC,t))}static hvc1(e){let t=e.avcc;const i=e.codecWidth,n=e.codecHeight;let o=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,i>>>8&255,255&i,n>>>8&255,255&n,0,72,0,0,0,72,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,255,255]);return Fe.box(Fe.types.hvc1,o,Fe.box(Fe.types.hvcC,t))}static mvex(e){return Fe.box(Fe.types.mvex,Fe.trex(e))}static trex(e){let t=e.id,i=new Uint8Array([0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]);return Fe.box(Fe.types.trex,i)}static moof(e,t){return Fe.box(Fe.types.moof,Fe.mfhd(e.sequenceNumber),Fe.traf(e,t))}static mfhd(e){let t=new Uint8Array([0,0,0,0,e>>>24&255,e>>>16&255,e>>>8&255,255&e]);return Fe.box(Fe.types.mfhd,t)}static traf(e,t){let i=e.id,n=Fe.box(Fe.types.tfhd,new Uint8Array([0,0,0,0,i>>>24&255,i>>>16&255,i>>>8&255,255&i])),o=Fe.box(Fe.types.tfdt,new Uint8Array([0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t])),r=Fe.sdtp(e),s=Fe.trun(e,r.byteLength+16+16+8+16+8+8);return Fe.box(Fe.types.traf,n,o,s,r)}static sdtpOld(e){let t=new Uint8Array(5),i=e.flags;return t[4]=i.isLeading<<6|i.dependsOn<<4|i.isDependedOn<<2|i.hasRedundancy,Fe.box(Fe.types.sdtp,t)}static sdtp(e){let t=new Uint8Array(5),i=e.flags;return t[4]=i.isLeading<<6|i.dependsOn<<4|i.isDependedOn<<2|i.hasRedundancy,Fe.box(Fe.types.sdtp,t)}static trun(e,t){let i=new Uint8Array(28);t+=36,i.set([0,0,15,1,0,0,0,1,t>>>24&255,t>>>16&255,t>>>8&255,255&t],0);let n=e.duration,o=e.size,r=e.flags,s=e.cts;return i.set([n>>>24&255,n>>>16&255,n>>>8&255,255&n,o>>>24&255,o>>>16&255,o>>>8&255,255&o,r.isLeading<<2|r.dependsOn,r.isDependedOn<<6|r.hasRedundancy<<4|r.isNonSync,0,0,s>>>24&255,s>>>16&255,s>>>8&255,255&s],12),Fe.box(Fe.types.trun,i)}static mdat(e){return Fe.box(Fe.types.mdat,e)}}Fe.init();class Pe{constructor(e){this.TAG="ExpGolomb",this._buffer=e,this._buffer_index=0,this._total_bytes=e.byteLength,this._total_bits=8*e.byteLength,this._current_word=0,this._current_word_bits_left=0}destroy(){this._buffer=null}_fillCurrentWord(){let e=this._total_bytes-this._buffer_index,t=Math.min(4,e),i=new Uint8Array(4);i.set(this._buffer.subarray(this._buffer_index,this._buffer_index+t)),this._current_word=new DataView(i.buffer).getUint32(0,!1),this._buffer_index+=t,this._current_word_bits_left=8*t}readBits(e){if(e<=this._current_word_bits_left){let t=this._current_word>>>32-e;return this._current_word<<=e,this._current_word_bits_left-=e,t}let t=this._current_word_bits_left?this._current_word:0;t>>>=32-this._current_word_bits_left;let i=e-this._current_word_bits_left;this._fillCurrentWord();let n=Math.min(i,this._current_word_bits_left),o=this._current_word>>>32-n;return this._current_word<<=n,this._current_word_bits_left-=n,t=t<>>e))return this._current_word<<=e,this._current_word_bits_left-=e,e;return this._fillCurrentWord(),e+this._skipLeadingZero()}readUEG(){let e=this._skipLeadingZero();return this.readBits(e+1)-1}readSEG(){let e=this.readUEG();return 1&e?e+1>>>1:-1*(e>>>1)}}class Me{static _ebsp2rbsp(e){let t=e,i=t.byteLength,n=new Uint8Array(i),o=0;for(let e=0;e=2&&3===t[e]&&0===t[e-1]&&0===t[e-2]||(n[o]=t[e],o++);return new Uint8Array(n.buffer,0,o)}static parseSPS(e){let t=Me._ebsp2rbsp(e),i=new Pe(t);i.readByte();let n=i.readByte();i.readByte();let o=i.readByte();i.readUEG();let r=Me.getProfileString(n),s=Me.getLevelString(o),a=1,A=420,c=[0,420,422,444],d=8;if((100===n||110===n||122===n||244===n||44===n||83===n||86===n||118===n||128===n||138===n||144===n)&&(a=i.readUEG(),3===a&&i.readBits(1),a<=3&&(A=c[a]),d=i.readUEG()+8,i.readUEG(),i.readBits(1),i.readBool())){let e=3!==a?8:12;for(let t=0;t0&&e<16?(v=t[e-1],w=n[e-1]):255===e&&(v=i.readByte()<<8|i.readByte(),w=i.readByte()<<8|i.readByte())}if(i.readBool()&&i.readBool(),i.readBool()&&(i.readBits(4),i.readBool()&&i.readBits(24)),i.readBool()&&(i.readUEG(),i.readUEG()),i.readBool()){let e=i.readBits(32),t=i.readBits(32);S=i.readBool(),R=t,C=2*e,E=R/C}}let B=1;1===v&&1===w||(B=v/w);let k=0,I=0;if(0===a)k=1,I=2-p;else{k=3===a?1:2,I=(1===a?2:1)*(2-p)}let T=16*(h+1),x=16*(f+1)*(2-p);T-=(g+m)*k,x-=(b+y)*I;let L=Math.ceil(T*B);return i.destroy(),i=null,{profile_string:r,level_string:s,bit_depth:d,ref_frames:u,chroma_format:A,chroma_format_string:Me.getChromaFormatString(A),frame_rate:{fixed:S,fps:E,fps_den:C,fps_num:R},sar_ratio:{width:v,height:w},codec_size:{width:T,height:x},present_size:{width:L,height:x}}}static _skipScalingList(e,t){let i=8,n=8,o=0;for(let r=0;r{this.mediaSourceOpen=!0,this.player.emit(v.mseSourceOpen)})),i(this.mediaSource,"sourceclose",(()=>{this.player.emit(v.mseSourceClose)})),e.debug.log("MediaSource","init")}get state(){return this.mediaSource.readyState}get isStateOpen(){return this.state===z}get isStateClosed(){return this.state===X}get isStateEnded(){return this.state===q}get duration(){return this.mediaSource.duration}set duration(e){this.mediaSource.duration=e}decodeVideo(e,t,i){const n=this.player;if(this.hasInit)this._decodeVideo(e,t,i);else if(i&&0===e[1]){const o=15&e[0];if(n.video.updateVideoInfo({encTypeCode:o}),o===x)return void this.emit(E.mediaSourceH265NotSupport);this._decodeConfigurationRecord(e,t,i,o),this.hasInit=!0}}_doDecode(){const e=this.bufferList.shift();e&&this._decodeVideo(e.payload,e.ts,e.isIframe)}_decodeConfigurationRecord(e,t,i,n){let o=e.slice(5),r={};n===T?r=function(e){const t={},i=new DataView(e.buffer);let n=i.getUint8(0),o=i.getUint8(1);if(i.getUint8(2),i.getUint8(3),1!==n||0===o)return;const r=1+(3&i.getUint8(4));if(3!==r&&4!==r)return;let s=31&i.getUint8(5);if(0===s)return;let a=6;for(let n=0;n1&&(this.removeBuffer(a.buffered.start(0),a.buffered.end(0)),this.timeInit=!1),a.drop&&s-this.cacheTrack.dts>1e3)a.drop=!1,this.cacheTrack={};else if(this.cacheTrack&&s>this.cacheTrack.dts){let e=8+this.cacheTrack.size,i=new Uint8Array(e);i[0]=e>>>24&255,i[1]=e>>>16&255,i[2]=e>>>8&255,i[3]=255&e,i.set(Fe.types.mdat,4),i.set(this.cacheTrack.data,8),this.cacheTrack.duration=s-this.cacheTrack.dts;let o=Fe.moof(this.cacheTrack,this.cacheTrack.dts),r=new Uint8Array(o.byteLength+i.byteLength);r.set(o,0),r.set(i,o.byteLength),this.appendBuffer(r.buffer),n.handleRender(),n.updateStats({fps:!0,ts:t,buf:n.demux.delay})}else n.debug.log("MediaSource","timeInit set false , cacheTrack = {}"),this.timeInit=!1,this.cacheTrack={};this.cacheTrack.id=1,this.cacheTrack.sequenceNumber=++this.sequenceNumber,this.cacheTrack.size=r,this.cacheTrack.dts=s,this.cacheTrack.cts=0,this.cacheTrack.isKeyframe=i,this.cacheTrack.data=o,this.cacheTrack.flags={isLeading:0,dependsOn:i?2:1,isDependedOn:i?1:0,hasRedundancy:0,isNonSync:i?0:1},this.timeInit||1!==a.buffered.length||(n.debug.log("MediaSource","timeInit set true"),this.timeInit=!0,a.currentTime=a.buffered.end(0)),!this.isInitInfo&&a.videoWidth>0&&a.videoHeight>0&&(n.debug.log("MediaSource",`updateVideoInfo: ${a.videoWidth},${a.videoHeight}`),n.video.updateVideoInfo({width:a.videoWidth,height:a.videoHeight}),n.video.initCanvasViewSize(),this.isInitInfo=!0)}appendBuffer(e){const{debug:t,events:{proxy:i}}=this.player;null===this.sourceBuffer&&(this.sourceBuffer=this.mediaSource.addSourceBuffer(J),i(this.sourceBuffer,"error",(e=>{this.player.emit(v.mseSourceBufferError,e)}))),!1===this.sourceBuffer.updating&&this.isStateOpen?this.sourceBuffer.appendBuffer(e):this.isStateClosed?this.player.emit(v.mseSourceBufferError,"mediaSource is not attached to video or mediaSource is closed"):this.isStateEnded?this.player.emit(v.mseSourceBufferError,"mediaSource is closed"):!0===this.sourceBuffer.updating&&(this.player.emit(v.mseSourceBufferBusy),this.dropSourceBuffer(!0))}stop(){this.isStateOpen&&this.sourceBuffer&&this.sourceBuffer.abort(),this.endOfStream()}dropSourceBuffer(e){const t=this.player.video.$videoElement;this.dropping=e,t.buffered.length>0&&t.buffered.end(0)-t.currentTime>1&&(t.currentTime=t.buffered.end(0))}removeBuffer(e,t){if(this.isStateOpen&&!1===this.sourceBuffer.updating)try{this.sourceBuffer.remove(e,t)}catch(e){console.error(e)}}endOfStream(){this.isStateOpen&&this.mediaSource.endOfStream()}destroy(){this.stop(),this.bufferList=[],this.mediaSource=null,this.mediaSourceOpen=!1,this.sourceBuffer=null,this.hasInit=!1,this.isInitInfo=!1,this.sequenceNumber=0,this.cacheTrack=null,this.timeInit=!1,this.off(),this.player.debug.log("MediaSource","destroy")}}const Qe=()=>"undefined"!=typeof navigator&&parseFloat((""+(/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))<10&&!window.MSStream,Ne=()=>"wakeLock"in navigator;class We{constructor(e){if(this.player=e,this.enabled=!1,Ne()){this._wakeLock=null;const e=()=>{null!==this._wakeLock&&"visible"===document.visibilityState&&this.enable()};document.addEventListener("visibilitychange",e),document.addEventListener("fullscreenchange",e)}else Qe()?this.noSleepTimer=null:(this.noSleepVideo=document.createElement("video"),this.noSleepVideo.setAttribute("title","No Sleep"),this.noSleepVideo.setAttribute("playsinline",""),this._addSourceToVideo(this.noSleepVideo,"webm","data:video/webm;base64,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"),this._addSourceToVideo(this.noSleepVideo,"mp4","data:video/mp4;base64,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"),this.noSleepVideo.addEventListener("loadedmetadata",(()=>{this.noSleepVideo.duration<=1?this.noSleepVideo.setAttribute("loop",""):this.noSleepVideo.addEventListener("timeupdate",(()=>{this.noSleepVideo.currentTime>.5&&(this.noSleepVideo.currentTime=Math.random())}))})))}_addSourceToVideo(e,t,i){var n=document.createElement("source");n.src=i,n.type=`video/${t}`,e.appendChild(n)}get isEnabled(){return this.enabled}enable(){const e=this.player.debug;if(Ne())return navigator.wakeLock.request("screen").then((t=>{this._wakeLock=t,this.enabled=!0,e.log("wakeLock","Wake Lock active."),this._wakeLock.addEventListener("release",(()=>{e.log("wakeLock","Wake Lock released.")}))})).catch((t=>{throw this.enabled=!1,e.error("wakeLock",`${t.name}, ${t.message}`),t}));if(Qe())return this.disable(),this.noSleepTimer=window.setInterval((()=>{document.hidden||(window.location.href=window.location.href.split("#")[0],window.setTimeout(window.stop,0))}),15e3),this.enabled=!0,Promise.resolve();return this.noSleepVideo.play().then((e=>(this.enabled=!0,e))).catch((e=>{throw this.enabled=!1,e}))}disable(){const e=this.player.debug;Ne()?(this._wakeLock&&this._wakeLock.release(),this._wakeLock=null):Qe()?this.noSleepTimer&&(e.warn("wakeLock","NoSleep now disabled for older iOS devices."),window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause(),this.enabled=!1}}class Ge extends ue{constructor(e,t){var i;super(),this.$container=e,this._opt=Object.assign({},o,t),this.debug=new Y(this),this._opt.useWCS&&(this._opt.useWCS="VideoEncoder"in window),this._opt.useMSE&&(this._opt.useMSE=window.MediaSource&&window.MediaSource.isTypeSupported(J)),this._opt.useMSE?(this._opt.useWCS&&this.debug.log("Player","useWCS set true->false"),this._opt.forceNoOffscreen||this.debug.log("Player","forceNoOffscreen set false->true"),this._opt.useWCS=!1,this._opt.forceNoOffscreen=!0):this._opt.useWCS,this._opt.forceNoOffscreen||("undefined"==typeof OffscreenCanvas?(this._opt.forceNoOffscreen=!0,this._opt.useOffscreen=!1):this._opt.useOffscreen=!0),this._opt.hasControl=this._hasControl(),this._loading=!1,this._playing=!1,this._hasLoaded=!1,this._checkHeartTimeout=null,this._checkLoadingTimeout=null,this._startBpsTime=null,this._isPlayingBeforePageHidden=!1,this._stats={buf:0,fps:0,abps:0,vbps:0,ts:0},this._videoTimestamp=0,this._audioTimestamp=0,i=this,Object.defineProperty(i,"rect",{get:()=>i.$container.getBoundingClientRect()}),["bottom","height","left","right","top","width"].forEach((e=>{Object.defineProperty(i,e,{get:()=>i.rect[e]})})),this.events=new Z(this),this.video=new ge(this),this.audio=new be(this),this.recorder=new Re(this),this.decoderWorker=new Ce(this),this.stream=null,this.demux=null,this._opt.useWCS&&(this.webcodecsDecoder=new xe(this)),this._opt.useMSE&&(this.mseDecoder=new Ve(this)),this.control=new Ue(this),this.keepScreenOn=new We(this),(e=>{try{const t=()=>{e.emit(w.fullscreen,e.fullscreen),e.fullscreen?e._opt.useMSE&&e.resize():e.resize()};$.on("change",t),e.events.destroys.push((()=>{$.off("change",t)}))}catch(e){}if(e.on(v.decoderWorkerInit,(()=>{e.debug.log("player","has loaded"),e._hasLoaded=!0})),e.on(v.play,(()=>{e.loading=!1})),e.on(v.fullscreen,(t=>{if(t)try{$.request(e.$container).then((()=>{})).catch((t=>{e.webFullscreen=!0}))}catch(t){e.webFullscreen=!0}else try{$.exit().then((()=>{})).catch((()=>{e.webFullscreen=!1}))}catch(t){e.webFullscreen=!1}})),e.on(v.webFullscreen,(t=>{if(t){e.$container.classList.add("webmediaplayer-fullscreen-web");const{clientHeight:t,clientWidth:i}=document.body,{clientHeight:n,clientWidth:o}=e.video.$videoElement;if(i/t{e.video.resize()})),e._opt.debug){const t=[v.timeUpdate];Object.keys(v).forEach((i=>{e.on(v[i],(n=>{t.includes(i)||e.debug.log("player events",v[i],n)}))})),Object.keys(E).forEach((t=>{e.on(E[t],(i=>{e.debug.log("player event error",E[t],i)}))}))}})(this),(e=>{const{_opt:t,debug:i,events:{proxy:n}}=e;t.supportDblclickFullscreen&&n(e.$container,"dblclick",(()=>{e.fullscreen=!e.fullscreen})),n(document,"visibilitychange",(()=>{t.hiddenAutoPause&&(i.log("visibilitychange",document.visibilityState,e._isPlayingBeforePageHidden),"visible"===document.visibilityState?e._isPlayingBeforePageHidden&&e.play():(e._isPlayingBeforePageHidden=e.playing,e.playing&&e.pause()))})),n(window,"fullscreenchange",(()=>{null!==e.keepScreenOn&&"visible"===document.visibilityState&&e.enableWakeLock()}))})(this),this._opt.useWCS&&this.debug.log("Player","use WCS"),this._opt.useMSE&&this.debug.log("Player","use MSE"),this._opt.useOffscreen&&this.debug.log("Player","use offscreen"),this.debug.log("Player options",this._opt)}set fullscreen(e){this.emit(v.fullscreen,e)}get fullscreen(){return document.isFullScreen||document.mozIsFullScreen||document.webkitIsFullScreen||this.webFullscreen}set webFullscreen(e){this.emit(v.webFullscreen,e)}get webFullscreen(){return this.$container.classList.contains("jessibuca-fullscreen-web")}get loaded(){return this._hasLoaded}set playing(e){e&&(this.loading=!1),this.playing!==e&&(this._playing=e,this.emit(v.playing,e),this.emit(v.volumechange,this.volume),e?this.emit(v.play):this.emit(v.pause))}get playing(){return this._playing}get volume(){return this.audio.volume}set volume(e){this.audio.setVolume(e)}set loading(e){this.loading!==e&&(this._loading=e,this.emit(v.loading,this._loading))}get loading(){return this._loading}set recording(e){this.playing&&(e?this.recorder.startRecord():this.recorder.stopRecordAndSave())}get recording(){return this.recorder.recording}set audioTimestamp(e){null!==e&&(this._audioTimestamp=e)}get audioTimestamp(){return this._audioTimestamp}set videoTimestamp(e){null!==e&&(this._videoTimestamp=e,this._opt.useWCS||this._opt.useMSE||this.audioTimestamp&&this.videoTimestamp&&this.audio.emit(v.videoSyncAudio,{audioTimestamp:this.audioTimestamp,videoTimestamp:this.videoTimestamp,diff:this.audioTimestamp-this.videoTimestamp}))}get videoTimestamp(){return this._videoTimestamp}updateOption(e){this._opt=Object.assign({},this._opt,e)}init(){return new Promise(((e,t)=>{this.stream||(this.stream=new we(this)),this.demux||(this.demux=new Te(this)),this._opt.useWCS&&(this.webcodecsDecoder||(this.webcodecsDecoder=new xe(this))),this._opt.useMSE&&(this.mseDecoder||(this.mseDecoder=new Ve(this))),this.decoderWorker?e():(this.decoderWorker=new Ce(this),this.once(v.decoderWorkerInit,(()=>{e()})))}))}play(e){return new Promise(((t,i)=>{if(!e&&!this._opt.url)return i();this.loading=!0,this.playing=!1,e||(e=this._opt.url),this._opt.url=e,this.clearCheckHeartTimeout(),this.init().then((()=>{this._opt.isNotMute&&this.mute(!1),this.webcodecsDecoder&&this.webcodecsDecoder.once(E.webcodecsH265NotSupport,(()=>{this.emit(E.webcodecsH265NotSupport),this.emit(v.error,E.webcodecsH265NotSupport)})),this.mseDecoder&&this.mseDecoder.once(E.mediaSourceH265NotSupport,(()=>{this.emit(E.mediaSourceH265NotSupport),this.emit(v.error,E.mediaSourceH265NotSupport)})),this.enableWakeLock(),this.stream.fetchStream(e),this.checkLoadingTimeout(),this.stream.once(E.fetchError,(e=>{i(e)})),this.stream.once(E.websocketError,(e=>{i(e)})),this.stream.once(v.streamSuccess,(()=>{t(),this._opt.useMSE&&this.video.play()}))})).catch((e=>{i(e)}))}))}close(){return new Promise(((e,t)=>{this._close().then((()=>{this.video.clearView(),e()}))}))}_close(){return new Promise(((e,t)=>{this.stream&&(this.stream.destroy(),this.stream=null),this.demux&&(this.demux.destroy(),this.demux=null),this.decoderWorker&&(this.decoderWorker.destroy(),this.decoderWorker=null),this.webcodecsDecoder&&(this.webcodecsDecoder.destroy(),this.webcodecsDecoder=null),this.mseDecoder&&(this.mseDecoder.destroy(),this.mseDecoder=null),this.clearCheckHeartTimeout(),this.clearCheckLoadingTimeout(),this.playing=!1,this.loading=!1,this.recording=!1,this.audio.pause(),this.releaseWakeLock(),this.resetStats(),this._audioTimestamp=0,this._videoTimestamp=0,setTimeout((()=>{e()}),0)}))}pause(e){return e?this.close():this._close()}mute(e){this.audio.mute(e)}resize(){this.video.resize()}startRecord(e,t){this.recording||(this.recorder.setFileName(e,t),this.recording=!0)}stopRecordAndSave(){this.recording&&(this.recording=!1)}_hasControl(){let e=!1,t=!1;return Object.keys(this._opt.operateBtns).forEach((e=>{this._opt.operateBtns[e]&&(t=!0)})),(this._opt.showBandwidth||this._opt.text||t)&&(e=!0),e}checkHeart(){this.clearCheckHeartTimeout(),this.checkHeartTimeout()}checkHeartTimeout(){this._checkHeartTimeout=setTimeout((()=>{this.pause(!1).then((()=>{this.emit(v.timeout,v.delayTimeout),this.emit(v.delayTimeout)}))}),1e3*this._opt.heartTimeout)}clearCheckHeartTimeout(){this._checkHeartTimeout&&(clearTimeout(this._checkHeartTimeout),this._checkHeartTimeout=null)}checkLoadingTimeout(){this._checkLoadingTimeout=setTimeout((()=>{this.pause(!1).then((()=>{this.emit(v.timeout,v.loadingTimeout),this.emit(v.loadingTimeout)}))}),1e3*this._opt.loadingTimeout)}clearCheckLoadingTimeout(){this._checkLoadingTimeout&&(clearTimeout(this._checkLoadingTimeout),this._checkLoadingTimeout=null)}handleRender(){this.loading&&(this.emit(v.start),this.loading=!1,this.clearCheckLoadingTimeout()),this.playing||(this.playing=!0),this.checkHeart()}updateStats(e){e=e||{},this._startBpsTime||(this._startBpsTime=ne()),le(e.ts)&&(this._stats.ts=e.ts),le(e.buf)&&(this._stats.buf=e.buf),e.fps&&(this._stats.fps+=1),e.abps&&(this._stats.abps+=e.abps),e.vbps&&(this._stats.vbps+=e.vbps);const t=ne();t-this._startBpsTime<1e3||(this.emit(v.stats,this._stats),this.emit(v.performance,function(e){let t=0;return e>=24?t=2:e>=15&&(t=1),t}(this._stats.fps)),this._stats.fps=0,this._stats.abps=0,this._stats.vbps=0,this._startBpsTime=t)}resetStats(){this._startBpsTime=null,this._stats={buf:0,fps:0,abps:0,vbps:0,ts:0}}enableWakeLock(){this._opt.keepScreenOn&&this.keepScreenOn.enable()}releaseWakeLock(){this._opt.keepScreenOn&&this.keepScreenOn.disable()}destroy(){this._loading=!1,this._playing=!1,this._hasLoaded=!1,this.decoderWorker&&(this.decoderWorker.destroy(),this.decoderWorker=null),this.video&&(this.video.destroy(),this.video=null),this.audio&&(this.audio.destroy(),this.audio=null),this.stream&&(this.stream.destroy(),this.stream=null),this.recorder&&(this.recorder.destroy(),this.recorder=null),this.control&&(this.control.destroy(),this.control=null),this.webcodecsDecoder&&(this.webcodecsDecoder.destroy(),this.webcodecsDecoder=null),this.mseDecoder&&(this.mseDecoder.destroy(),this.mseDecoder=null),this.demux&&(this.demux.destroy(),this.demux=null),this.events&&(this.events.destroy(),this.events=null),this.clearCheckHeartTimeout(),this.clearCheckLoadingTimeout(),this.releaseWakeLock(),this.keepScreenOn=null,this.resetStats(),this._audioTimestamp=0,this._videoTimestamp=0,this.emit("destroy"),this.off(),this.debug.log("play","destroy end")}}var He=_((function(e,t){e.exports=function(){var e,t;function i(t){this.name="__st"+(1e9*Math.random()>>>0)+e+"__",null==t||t.forEach(this.add,this),e+=1}Array.prototype.find||Object.defineProperty(Array.prototype,"find",{configurable:!0,writable:!0,value:function(e){if(null===this)throw new TypeError('"this" is null or not defined');var t=Object(this),i=t.length>>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var n=arguments[1],o=0;o=t)return n=T(n),r(n.splice(0,n.length)),void(i&&clearTimeout(i));i&&clearTimeout(i),i=setTimeout((function(){i=null,0<(n=T(n)).length&&r(n.splice(0,n.length))}),o.delay)}},G=function(e,t){return Array.isArray(e)?t(e.map((function(e){return o(o({},e),{msg:"string"==typeof e.msg?e.msg:[].concat(e.msg).map(w).join(" ")})}))):t(o(o({},e),{msg:"string"==typeof e.msg?e.msg:w(e.msg)}))},H=function(e){var t,i=!1,n=!1,o=!1,r=[];return e.lifeCycle.on("onConfigChange",(function(){t&&clearTimeout(t),t=setTimeout((function(){var t,s;!o&&e.config&&(o=!0,t=e.config.whiteListUrl,(s=void 0===t?"":t)&&e.sendPipeline([function(t,o){o({url:s,type:g.WHITE_LIST,success:function(t){n=!0;try{var o=t.data||JSON.parse(t),s=o.retcode,a=o.result,A=void 0===a?{}:a;if(0===s){if(i=A.is_in_white_list,e.isWhiteList=i,A.shutdown)return void e.destroy();0<=A.rate&&A.rate<=1&&(e.config.random=A.rate,e.isGetSample=!1)}e.isWhiteList&&r.length?X(e)(r.splice(0),(function(){})):!e.isWhiteList&&r.length&&(r.length=0);var c=e.config.onWhitelist;"function"==typeof c&&c(i)}catch(t){}},fail:function(t){"403 forbidden"===t&&e.destroy(),n=!0}})}],g.WHITE_LIST)(null),o=!1)}),e.config.uin?50:500)})),e.lifeCycle.on("destroy",(function(){r.length=0})),function(t,o){var s;i||null!==(s=null===(s=e.config)||void 0===s?void 0:s.api)&&void 0!==s&&s.reportRequest?o(t.concat(r.splice(0)).map((function(e){return x(e),e}))):(t=t.filter((function(e){return e.level!==p.INFO&&e.level!==p.API_RESPONSE?(x(e),!0):(n||(r.push(e),200<=r.length&&(r.length=200)),!1)}))).length&&o(t)}},J=function(e){return setTimeout((function(){var t=e.config.pvUrl,i=void 0===t?"":t;i&&e.sendPipeline([function(t,n){n({url:i,type:g.PV,fail:function(t){"403 forbidden"===t&&e.destroy()}})}],g.PV)(null)}),100),function(e,t){t(e)}},q=function(e){var t={};return function(i,n){var o,r;e.speedSample?(r="object"==typeof e.repeat?e.repeat:{repeat:e.repeat},o=+r.speed||+r.repeat||5,Array.isArray(i)?(r=i.filter((function(e){var i=!t[e.url]||t[e.url]o))})))}},X=function(e){return function(t){return e.sendPipeline([function(t,i){return i({url:e.config.url||"",data:s(t),method:"post",contentType:"application/x-www-form-urlencoded",type:g.LOG,log:t,requestConfig:{timeout:5e3},success:function(){var n=e.config.onReport;"function"==typeof n&&t.forEach((function(e){n(e)})),"function"==typeof i&&i([])},fail:function(t){"403 forbidden"===t&&e.destroy()}})}],g.LOG)(t)}},Y=function(e){if(!e||!e.reduce||!e.length)throw new TypeError("createPipeline need at least one function param");return 1===e.length?function(t,i){e[0](t,i||O)}:e.reduce((function(e,t){return function(i,n){return void 0===n&&(n=O),e(i,(function(e){return null==t?void 0:t(e,n)}))}}))},Z=(Object.defineProperty(Ae.prototype,"__version__",{get:function(){return console.warn("__version__ has discard, please use version"),"1.24.48"},enumerable:!1,configurable:!0}),Object.defineProperty(Ae.prototype,"LogType",{get:function(){return console.warn("LogType has discard, please use logType"),p},enumerable:!1,configurable:!0}),Ae.prototype.init=function(e){this.setConfig(e);for(var t=0;tc&&o.isInFirstScreen(t.roots[n])&&(c=t.rootsDomNum[n],d=t.time,("object"!=typeof(null===(i=e.config)||void 0===i?void 0:i.pagePerformance)||null!==(i=e.config.pagePerformance)&&void 0!==i&&i.firstScreenInfo)&&(e.firstScreenInfo={element:t.roots[n],timing:d}))})),!d&&Se?A=setTimeout((function(){return a()}),3e3):(s.disconnect(),null==t||t(d)),--Se},A=setTimeout((function(){return a()}),3e3)},isEleInArray:function(e,t){return!(!e||e===document.documentElement)&&(-1!==t.indexOf(e)||this.isEleInArray(e.parentElement,t))},isInFirstScreen:function(e){if(!e||"function"!=typeof e.getBoundingClientRect)return!1;var t=e.getBoundingClientRect(),i=window.innerHeight;return e=window.innerWidth,0<=t.left&&t.left{this.player.on(w[e],(t=>{this.emit(e,t)}))}))}setDebug(e){this.player.updateOption({isDebug:!!e})}mute(){this.player.mute(!0)}cancelMute(){this.player.mute(!1)}setVolume(e){this.player.volume=e}audioResume(){this.player.audio.audioEnabled(!0)}setTimeout(e){e=Number(e),this.player.updateOption({timeout:e,loadingTimeout:e,heartTimeout:e})}setScaleMode(e){let t={isFullResize:!1,isResize:!1};switch(e=Number(e)){case U:t.isFullResize=!1,t.isResize=!1;break;case F:t.isFullResize=!1,t.isResize=!0;break;case P:t.isFullResize=!0,t.isResize=!0}this.player.updateOption(t),this.resize()}pause(){return this.player.pause()}close(){return this._opt.url="",this.player.close()}clearView(){this.player.video.clearView()}play(e){return new Promise(((t,i)=>{if(!e&&!this._opt.url)return this.emit(v.error,E.playError),void i();if(e){if(!this._opt.url)return this._play(e);e===this._opt.url?this.player.playing?t():(this.clearView(),this.player.play(this._opt.url).then((()=>{t()})).catch((()=>{this.player.pause().then((()=>{i()}))}))):this.player.pause().then((()=>(this.clearView(),this._play(e)))).catch((()=>{i()}))}else this.player.play(this._opt.url).then((()=>{t()})).catch((()=>{this.player.pause().then((()=>{i()}))}))}))}_play(o){return new Promise(((r,s)=>{this._opt.url=o;const a=0===o.indexOf("http"),A=a?t:e,c=a||-1!==o.indexOf(".flv")||this._opt.isFlv?i:n;this.player.updateOption({protocol:A,demuxType:c}),this.player.once(E.mediaSourceH265NotSupport,(()=>{this.close()})),this.player.once(E.webcodecsH265NotSupport,(()=>{this.close()})),this.hasLoaded()?this.player.play(o).then((()=>{r()})).catch((()=>{this.player.pause().then((()=>{s()}))})):this.player.once(v.decoderWorkerInit,(()=>{this.player.play(o).then((()=>{r()})).catch((()=>{this.player.pause().then((()=>{s()}))}))}))}))}resize(){this.player.resize()}setBufferTime(e){e=Number(e),this.player.updateOption({videoBuffer:1e3*e})}setRotate(e){e=parseInt(e,10);this._opt.rotate!==e&&-1!==[0,90,270].indexOf(e)&&(this.player.updateOption({rotate:e}),this.resize())}hasLoaded(){return this.player.loaded}setKeepScreenOn(){this.player.updateOption({keepScreenOn:!0})}setFullscreen(e){const t=!!e;this.player.fullscreen!==t&&(this.player.fullscreen=t)}screenshot(e,t,i,n){return this.player.video.screenshot(e,t,i,n)}startRecord(e,t){return new Promise(((i,n)=>{this.player.playing?(this.player.startRecord(e,t),i()):n()}))}stopRecordAndSave(){this.player.recording&&this.player.stopRecordAndSave()}isPlaying(){return this.player.playing}isMute(){return this.player.audio.isMute}isRecording(){return this.player.recorder.recording}destroy(){this.player.destroy(),this.player=null,this.off()}}return window.Jessibuca=Je,Je})); +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.jessibuca = factory()); +})(this, (function () { 'use strict'; + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function unwrapExports (x) { + return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; + } + + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } + + var defineProperty = createCommonjsModule(function (module) { + function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + } + + module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports; + }); + + var _defineProperty = unwrapExports(defineProperty); + + // 播放协议 + const PLAYER_PLAY_PROTOCOL = { + websocket: 0, + fetch: 1, + webrtc: 2 + }; + const DEMUX_TYPE = { + flv: 'flv', + m7s: 'm7s' + }; + const FILE_SUFFIX = { + mp4: 'mp4', + webm: 'webm' + }; + + const DEFAULT_PLAYER_OPTIONS = { + videoBuffer: 1000, + //1000ms 1 second + videoBufferDelay: 1000, + // 1000ms + isResize: true, + isFullResize: false, + // + isFlv: false, + debug: false, + hotKey: false, + // 快捷键 + loadingTimeout: 10, + // loading timeout + heartTimeout: 5, + // heart timeout + timeout: 10, + // second + loadingTimeoutReplay: true, + // loading timeout replay. default is true + heartTimeoutReplay: true, + // heart timeout replay. + loadingTimeoutReplayTimes: 3, + // loading timeout replay fail times + heartTimeoutReplayTimes: 3, + // heart timeout replay fail times + supportDblclickFullscreen: false, + // support double click toggle fullscreen + showBandwidth: false, + // show band width + keepScreenOn: false, + // + isNotMute: false, + // + hasAudio: true, + // has audio + hasVideo: true, + // has video + operateBtns: { + fullscreen: false, + screenshot: false, + play: false, + audio: false, + record: false + }, + controlAutoHide: false, + // control auto hide + hasControl: false, + loadingText: '', + // loading Text + background: '', + decoder: '/assets/js/jessibuca/decoder.js', + url: '', + // play url + rotate: 0, + // + // text: '', + forceNoOffscreen: true, + // 默认是不采用 + hiddenAutoPause: false, + // + protocol: PLAYER_PLAY_PROTOCOL.fetch, + demuxType: DEMUX_TYPE.flv, + // demux type + useWCS: false, + // + wcsUseVideoRender: true, + // 默认设置为true + useMSE: false, + // + useOffscreen: false, + // + autoWasm: true, + // 自动降级到 wasm 模式 + wasmDecodeErrorReplay: true, + // 解码失败重新播放。 + openWebglAlignment: false, + // https://github.com/langhuihui/jessibuca/issues/152 + wasmDecodeAudioSyncVideo: false, + // wasm 解码之后音视频同步 + recordType: FILE_SUFFIX.webm, + useWebFullScreen: false // use web full screen + + }; + const WORKER_CMD_TYPE = { + init: 'init', + initVideo: 'initVideo', + render: 'render', + playAudio: 'playAudio', + initAudio: 'initAudio', + kBps: 'kBps', + decode: 'decode', + audioCode: 'audioCode', + videoCode: 'videoCode', + wasmError: 'wasmError' + }; + const WASM_ERROR = { + invalidNalUnitSize: 'Invalid NAL unit size' // errorSplittingTheInputIntoNALUnits: 'Error splitting the input into NAL units' + + }; + const MEDIA_TYPE = { + audio: 1, + video: 2 + }; + const FLV_MEDIA_TYPE = { + audio: 8, + video: 9 + }; + const WORKER_SEND_TYPE = { + init: 'init', + decode: 'decode', + audioDecode: 'audioDecode', + videoDecode: 'videoDecode', + close: 'close', + updateConfig: 'updateConfig' + }; // + + const EVENTS = { + fullscreen: 'fullscreen$2', + webFullscreen: 'webFullscreen', + decoderWorkerInit: 'decoderWorkerInit', + play: 'play', + playing: 'playing', + pause: 'pause', + mute: 'mute', + load: 'load', + loading: 'loading', + videoInfo: 'videoInfo', + timeUpdate: 'timeUpdate', + audioInfo: "audioInfo", + log: 'log', + error: "error", + kBps: 'kBps', + timeout: 'timeout', + delayTimeout: 'delayTimeout', + loadingTimeout: 'loadingTimeout', + stats: 'stats', + performance: "performance", + record: 'record', + recording: 'recording', + recordingTimestamp: 'recordingTimestamp', + recordStart: 'recordStart', + recordEnd: 'recordEnd', + recordCreateError: 'recordCreateError', + buffer: 'buffer', + videoFrame: 'videoFrame', + start: 'start', + metadata: 'metadata', + resize: 'resize', + streamEnd: 'streamEnd', + streamSuccess: 'streamSuccess', + streamMessage: 'streamMessage', + streamError: 'streamError', + volumechange: 'volumechange', + destroy: 'destroy', + mseSourceOpen: 'mseSourceOpen', + mseSourceClose: 'mseSourceClose', + mseSourceBufferError: 'mseSourceBufferError', + mseSourceBufferBusy: 'mseSourceBufferBusy', + mseSourceBufferFull: 'mseSourceBufferFull', + videoWaiting: 'videoWaiting', + videoTimeUpdate: 'videoTimeUpdate', + videoSyncAudio: 'videoSyncAudio', + playToRenderTimes: 'playToRenderTimes' + }; + const JESSIBUCA_EVENTS = { + load: EVENTS.load, + timeUpdate: EVENTS.timeUpdate, + videoInfo: EVENTS.videoInfo, + audioInfo: EVENTS.audioInfo, + error: EVENTS.error, + kBps: EVENTS.kBps, + log: EVENTS.log, + start: EVENTS.start, + timeout: EVENTS.timeout, + loadingTimeout: EVENTS.loadingTimeout, + delayTimeout: EVENTS.delayTimeout, + fullscreen: 'fullscreen', + webFullscreen: EVENTS.webFullscreen, + play: EVENTS.play, + pause: EVENTS.pause, + mute: EVENTS.mute, + stats: EVENTS.stats, + volumechange: EVENTS.volumechange, + performance: EVENTS.performance, + recordingTimestamp: EVENTS.recordingTimestamp, + recordStart: EVENTS.recordStart, + recordEnd: EVENTS.recordEnd, + playToRenderTimes: EVENTS.playToRenderTimes + }; + const EVENTS_ERROR = { + playError: 'playIsNotPauseOrUrlIsNull', + fetchError: "fetchError", + websocketError: 'websocketError', + webcodecsH265NotSupport: 'webcodecsH265NotSupport', + webcodecsDecodeError: 'webcodecsDecodeError', + webcodecsWidthOrHeightChange: 'webcodecsWidthOrHeightChange', + mediaSourceH265NotSupport: 'mediaSourceH265NotSupport', + mediaSourceFull: EVENTS.mseSourceBufferFull, + mseSourceBufferError: EVENTS.mseSourceBufferError, + mediaSourceAppendBufferError: 'mediaSourceAppendBufferError', + mediaSourceBufferListLarge: 'mediaSourceBufferListLarge', + mediaSourceAppendBufferEndTimeout: 'mediaSourceAppendBufferEndTimeout', + wasmDecodeError: 'wasmDecodeError', + webglAlignmentError: 'webglAlignmentError' + }; + const WEBSOCKET_STATUS = { + notConnect: 'notConnect', + open: 'open', + close: 'close', + error: 'error' + }; + const SCREENSHOT_TYPE = { + download: 'download', + base64: 'base64', + blob: 'blob' + }; + const VIDEO_ENC_TYPE = { + 7: 'H264(AVC)', + // + 12: 'H265(HEVC)' // + + }; + const VIDEO_ENC_CODE = { + h264: 7, + h265: 12 + }; + const AUDIO_ENC_TYPE = { + 10: 'AAC', + 7: 'ALAW', + 8: 'MULAW' + }; + const CONTROL_HEIGHT = 38; + const SCALE_MODE_TYPE = { + full: 0, + // 视频画面完全填充canvas区域,画面会被拉伸 + auto: 1, + // 视频画面做等比缩放后,高或宽对齐canvas区域,画面不被拉伸,但有黑边 + fullAuto: 2 // 视频画面做等比缩放后,完全填充canvas区域,画面不被拉伸,没有黑边,但画面显示不全 + + }; + const CANVAS_RENDER_TYPE = { + webcodecs: 'webcodecs', + webgl: 'webgl', + offscreen: 'offscreen' + }; + const ENCODED_VIDEO_TYPE = { + key: 'key', + delta: 'delta' + }; + const MP4_CODECS = { + avc: 'video/mp4; codecs="avc1.64002A"', + hev: 'video/mp4; codecs="hev1.1.6.L123.b0"' + }; + const MEDIA_SOURCE_STATE = { + ended: 'ended', + open: 'open', + closed: 'closed' + }; // frag duration + const AUDIO_SYNC_VIDEO_DIFF = 1000; + const HOT_KEY = { + esc: 27, + // + arrowUp: 38, + // + arrowDown: 40 // + + }; + const WCS_ERROR = { + keyframeIsRequiredError: 'A key frame is required after configure() or flush()', + canNotDecodeClosedCodec: "Cannot call 'decode' on a closed codec" + }; + const FETCH_ERROR = { + abortError1: 'The user aborted a request', + abortError2: 'AbortError', + abort: 'AbortError' + }; + + class Debug { + constructor(master) { + this.log = function (name) { + if (master._opt.debug) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + console.log(`Jessibuca: [${name}]`, ...args); + } + }; + + this.warn = function (name) { + if (master._opt.debug) { + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + console.warn(`Jessibuca: [${name}]`, ...args); + } + }; + + this.error = function (name) { + for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { + args[_key3 - 1] = arguments[_key3]; + } + + console.error(`Jessibuca: [${name}]`, ...args); + }; + } + + } + + class Events { + constructor(master) { + this.destroys = []; + this.proxy = this.proxy.bind(this); + this.master = master; + } + + proxy(target, name, callback) { + let option = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + + if (!target) { + return; + } + + if (Array.isArray(name)) { + return name.map(item => this.proxy(target, item, callback, option)); + } + + target.addEventListener(name, callback, option); + + const destroy = () => target.removeEventListener(name, callback, option); + + this.destroys.push(destroy); + return destroy; + } + + destroy() { + this.master.debug && this.master.debug.log(`Events`, 'destroy'); + this.destroys.forEach(event => event()); + } + + } + + var property$1 = (player => { + Object.defineProperty(player, 'rect', { + get: () => { + const clientRect = player.$container.getBoundingClientRect(); + clientRect.width = Math.max(clientRect.width, player.$container.clientWidth); + clientRect.height = Math.max(clientRect.height, player.$container.clientHeight); + return clientRect; + } + }); + ['bottom', 'height', 'left', 'right', 'top', 'width'].forEach(key => { + Object.defineProperty(player, key, { + get: () => { + return player.rect[key]; + } + }); + }); + }); + + var screenfull = createCommonjsModule(function (module) { + /*! + * screenfull + * v5.1.0 - 2020-12-24 + * (c) Sindre Sorhus; MIT License + */ + (function () { + + var document = typeof window !== 'undefined' && typeof window.document !== 'undefined' ? window.document : {}; + var isCommonjs = module.exports; + + var fn = (function () { + var val; + + var fnMap = [ + [ + 'requestFullscreen', + 'exitFullscreen', + 'fullscreenElement', + 'fullscreenEnabled', + 'fullscreenchange', + 'fullscreenerror' + ], + // New WebKit + [ + 'webkitRequestFullscreen', + 'webkitExitFullscreen', + 'webkitFullscreenElement', + 'webkitFullscreenEnabled', + 'webkitfullscreenchange', + 'webkitfullscreenerror' + + ], + // Old WebKit + [ + 'webkitRequestFullScreen', + 'webkitCancelFullScreen', + 'webkitCurrentFullScreenElement', + 'webkitCancelFullScreen', + 'webkitfullscreenchange', + 'webkitfullscreenerror' + + ], + [ + 'mozRequestFullScreen', + 'mozCancelFullScreen', + 'mozFullScreenElement', + 'mozFullScreenEnabled', + 'mozfullscreenchange', + 'mozfullscreenerror' + ], + [ + 'msRequestFullscreen', + 'msExitFullscreen', + 'msFullscreenElement', + 'msFullscreenEnabled', + 'MSFullscreenChange', + 'MSFullscreenError' + ] + ]; + + var i = 0; + var l = fnMap.length; + var ret = {}; + + for (; i < l; i++) { + val = fnMap[i]; + if (val && val[1] in document) { + for (i = 0; i < val.length; i++) { + ret[fnMap[0][i]] = val[i]; + } + return ret; + } + } + + return false; + })(); + + var eventNameMap = { + change: fn.fullscreenchange, + error: fn.fullscreenerror + }; + + var screenfull = { + request: function (element, options) { + return new Promise(function (resolve, reject) { + var onFullScreenEntered = function () { + this.off('change', onFullScreenEntered); + resolve(); + }.bind(this); + + this.on('change', onFullScreenEntered); + + element = element || document.documentElement; + + var returnPromise = element[fn.requestFullscreen](options); + + if (returnPromise instanceof Promise) { + returnPromise.then(onFullScreenEntered).catch(reject); + } + }.bind(this)); + }, + exit: function () { + return new Promise(function (resolve, reject) { + if (!this.isFullscreen) { + resolve(); + return; + } + + var onFullScreenExit = function () { + this.off('change', onFullScreenExit); + resolve(); + }.bind(this); + + this.on('change', onFullScreenExit); + + var returnPromise = document[fn.exitFullscreen](); + + if (returnPromise instanceof Promise) { + returnPromise.then(onFullScreenExit).catch(reject); + } + }.bind(this)); + }, + toggle: function (element, options) { + return this.isFullscreen ? this.exit() : this.request(element, options); + }, + onchange: function (callback) { + this.on('change', callback); + }, + onerror: function (callback) { + this.on('error', callback); + }, + on: function (event, callback) { + var eventName = eventNameMap[event]; + if (eventName) { + document.addEventListener(eventName, callback, false); + } + }, + off: function (event, callback) { + var eventName = eventNameMap[event]; + if (eventName) { + document.removeEventListener(eventName, callback, false); + } + }, + raw: fn + }; + + if (!fn) { + if (isCommonjs) { + module.exports = {isEnabled: false}; + } else { + window.screenfull = {isEnabled: false}; + } + + return; + } + + Object.defineProperties(screenfull, { + isFullscreen: { + get: function () { + return Boolean(document[fn.fullscreenElement]); + } + }, + element: { + enumerable: true, + get: function () { + return document[fn.fullscreenElement]; + } + }, + isEnabled: { + enumerable: true, + get: function () { + // Coerce to boolean in case of old WebKit + return Boolean(document[fn.fullscreenEnabled]); + } + } + }); + + if (isCommonjs) { + module.exports = screenfull; + } else { + window.screenfull = screenfull; + } + })(); + }); + screenfull.isEnabled; + + function noop() {} + function supportOffscreen($canvas) { + return typeof $canvas.transferControlToOffscreen === 'function'; + } + function supportOffscreenV2() { + return typeof OffscreenCanvas !== "undefined"; + } + function createContextGL($canvas) { + let gl = null; + const validContextNames = ["webgl", "experimental-webgl", "moz-webgl", "webkit-3d"]; + let nameIndex = 0; + + while (!gl && nameIndex < validContextNames.length) { + const contextName = validContextNames[nameIndex]; + + try { + let contextOptions = { + preserveDrawingBuffer: true + }; + gl = $canvas.getContext(contextName, contextOptions); + } catch (e) { + gl = null; + } + + if (!gl || typeof gl.getParameter !== "function") { + gl = null; + } + + ++nameIndex; + } + + return gl; + } + function dataURLToFile() { + let dataURL = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + const arr = dataURL.split(","); + const bstr = atob(arr[1]); + const type = arr[0].replace("data:", "").replace(";base64", ""); + let n = bstr.length, + u8arr = new Uint8Array(n); + + while (n--) { + u8arr[n] = bstr.charCodeAt(n); + } + + return new File([u8arr], 'file', { + type + }); + } + function now() { + return new Date().getTime(); + } + (() => { + try { + if (typeof WebAssembly === "object" && typeof WebAssembly.instantiate === "function") { + const module = new WebAssembly.Module(Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00)); + if (module instanceof WebAssembly.Module) return new WebAssembly.Instance(module) instanceof WebAssembly.Instance; + } + } catch (e) {} + + return false; + })(); + function clamp(num, a, b) { + return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b)); + } + function setStyle(element, key, value) { + if (!element) { + return; + } + + if (typeof key === 'object') { + Object.keys(key).forEach(item => { + setStyle(element, item, key[item]); + }); + } + + element.style[key] = value; + return element; + } + function getStyle(element, key) { + let numberType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + + if (!element) { + return 0; + } + + const value = getComputedStyle(element, null).getPropertyValue(key); + return numberType ? parseFloat(value) : value; + } + function getNowTime() { + if (performance && typeof performance.now === 'function') { + return performance.now(); + } + + return Date.now(); + } + function calculationRate(callback) { + let totalSize = 0; + let lastTime = getNowTime(); + return size => { + totalSize += size; + const thisTime = getNowTime(); + const diffTime = thisTime - lastTime; + + if (diffTime >= 1000) { + callback(totalSize / diffTime * 1000); + lastTime = thisTime; + totalSize = 0; + } + }; + } + function isMobile() { + return /iphone|ipod|android.*mobile|windows.*phone|blackberry.*mobile/i.test(window.navigator.userAgent.toLowerCase()); + } + + function supportWCS() { + return "VideoEncoder" in window; + } + function formatVideoDecoderConfigure(avcC) { + let codecArray = avcC.subarray(1, 4); + let codecString = "avc1."; + + for (let j = 0; j < 3; j++) { + let h = codecArray[j].toString(16); + + if (h.length < 2) { + h = "0" + h; + } + + codecString += h; + } + + return { + codec: codecString, + description: avcC + }; + } + function isFullScreen() { + return screenfull.isFullscreen; + } + function bpsSize(value) { + if (null == value || value === '' || parseInt(value) === 0 || isNaN(parseInt(value))) { + return "0KB/s"; + } + + let size = parseFloat(value); + size = size.toFixed(2); + return size + 'KB/s'; + } + function fpsStatus(fps) { + let result = 0; + + if (fps >= 24) { + result = 2; + } else if (fps >= 15) { + result = 1; + } + + return result; + } + function createEmptyImageBitmap(width, height) { + const $canvasElement = document.createElement("canvas"); + $canvasElement.width = width; + $canvasElement.height = height; + return window.createImageBitmap($canvasElement, 0, 0, width, height); + } + function supportMSE() { + return window.MediaSource && window.MediaSource.isTypeSupported(MP4_CODECS.avc); + } + function supportMediaStreamTrack() { + return window.MediaStreamTrackGenerator && typeof window.MediaStreamTrackGenerator === 'function'; + } + function isEmpty(value) { + return value === null || value === undefined; + } + function isBoolean(value) { + return value === true || value === false; + } + function isNotEmpty(value) { + return !isEmpty(value); + } + function initPlayTimes() { + return { + playInitStart: '', + //1 + playStart: '', + // 2 + streamStart: '', + //3 + streamResponse: '', + // 4 + demuxStart: '', + // 5 + decodeStart: '', + // 6 + videoStart: '', + // 7 + playTimestamp: '', + // playStart- playInitStart + streamTimestamp: '', + // streamStart - playStart + streamResponseTimestamp: '', + // streamResponse - streamStart + demuxTimestamp: '', + // demuxStart - streamResponse + decodeTimestamp: '', + // decodeStart - demuxStart + videoTimestamp: '', + // videoStart - decodeStart + allTimestamp: '' // videoStart - playInitStart + + }; + } // create watermark + function formatTimeTips(time) { + var result; // + + if (time > -1) { + var hour = Math.floor(time / 3600); + var min = Math.floor(time / 60) % 60; + var sec = time % 60; + sec = Math.round(sec); + + if (hour < 10) { + result = '0' + hour + ":"; + } else { + result = hour + ":"; + } + + if (min < 10) { + result += "0"; + } + + result += min + ":"; + + if (sec < 10) { + result += "0"; + } + + result += sec.toFixed(0); + } + + return result; + } + function getTarget(e) { + const event = e || window.event; + const target = event.target || event.srcElement; + return target; + } + function isWebglRenderSupport(width) { + return width / 2 % 4 === 0; + } + function getBrowser() { + const UserAgent = navigator.userAgent.toLowerCase(); + const browserInfo = {}; + const browserArray = { + IE: window.ActiveXObject || "ActiveXObject" in window, + // IE + Chrome: UserAgent.indexOf('chrome') > -1 && UserAgent.indexOf('safari') > -1, + // Chrome浏览器 + Firefox: UserAgent.indexOf('firefox') > -1, + // 火狐浏览器 + Opera: UserAgent.indexOf('opera') > -1, + // Opera浏览器 + Safari: UserAgent.indexOf('safari') > -1 && UserAgent.indexOf('chrome') == -1, + // safari浏览器 + Edge: UserAgent.indexOf('edge') > -1, + // Edge浏览器 + QQBrowser: /qqbrowser/.test(UserAgent), + // qq浏览器 + WeixinBrowser: /MicroMessenger/i.test(UserAgent) // 微信浏览器 + + }; // console.log(browserArray) + + for (let i in browserArray) { + if (browserArray[i]) { + let versions = ''; + + if (i === 'IE') { + versions = UserAgent.match(/(msie\s|trident.*rv:)([\w.]+)/)[2]; + } else if (i === 'Chrome') { + for (let mt in navigator.mimeTypes) { + //检测是否是360浏览器(测试只有pc端的360才起作用) + if (navigator.mimeTypes[mt]['type'] === 'application/360softmgrplugin') { + i = '360'; + } + } + + versions = UserAgent.match(/chrome\/([\d.]+)/)[1]; + } else if (i === 'Firefox') { + versions = UserAgent.match(/firefox\/([\d.]+)/)[1]; + } else if (i === 'Opera') { + versions = UserAgent.match(/opera\/([\d.]+)/)[1]; + } else if (i === 'Safari') { + versions = UserAgent.match(/version\/([\d.]+)/)[1]; + } else if (i === 'Edge') { + versions = UserAgent.match(/edge\/([\d.]+)/)[1]; + } else if (i === 'QQBrowser') { + versions = UserAgent.match(/qqbrowser\/([\d.]+)/)[1]; + } + + browserInfo.type = i; + browserInfo.version = parseInt(versions); + } + } + + return browserInfo; + } + function closeVideoFrame(videoFrame) { + if (videoFrame.close) { + videoFrame.close(); + } else if (videoFrame.destroy) { + videoFrame.destroy(); + } + } + + var events$1 = (player => { + try { + const screenfullChange = e => { + if (getTarget(e) === player.$container) { + player.emit(JESSIBUCA_EVENTS.fullscreen, player.fullscreen); // 如果不是fullscreen,则触发下 resize 方法 + + if (!player.fullscreen) { + player.resize(); + } else { + if (player._opt.useMSE) { + player.resize(); + } + } + } + }; + + screenfull.on('change', screenfullChange); + player.events.destroys.push(() => { + screenfull.off('change', screenfullChange); + }); + } catch (error) {// + } // + + + player.on(EVENTS.decoderWorkerInit, () => { + player.debug.log('player', 'has loaded'); + player.loaded = true; + }); // + + player.on(EVENTS.play, () => { + player.loading = false; + }); // + + player.on(EVENTS.fullscreen, value => { + if (value) { + try { + screenfull.request(player.$container).then(() => {}).catch(e => { + if (isMobile() && player._opt.useWebFullScreen) { + player.webFullscreen = true; + } + }); + } catch (e) { + if (isMobile() && player._opt.useWebFullScreen) { + player.webFullscreen = true; + } + } + } else { + try { + screenfull.exit().then(() => { + if (player.webFullscreen) { + player.webFullscreen = false; + } + }).catch(() => { + player.webFullscreen = false; + }); + } catch (e) { + player.webFullscreen = false; + } + } + }); + + if (isMobile()) { + player.on(EVENTS.webFullscreen, value => { + if (value) { + player.$container.classList.add('jessibuca-fullscreen-web'); + } else { + player.$container.classList.remove('jessibuca-fullscreen-web'); + } // + + + player.emit(JESSIBUCA_EVENTS.fullscreen, player.fullscreen); + }); + } // + + + player.on(EVENTS.resize, () => { + player.video && player.video.resize(); + }); + + if (player._opt.debug) { + const ignoreList = [EVENTS.timeUpdate]; + Object.keys(EVENTS).forEach(key => { + player.on(EVENTS[key], value => { + if (ignoreList.includes(key)) { + return; + } + + player.debug.log('player events', EVENTS[key], value); + }); + }); + Object.keys(EVENTS_ERROR).forEach(key => { + player.on(EVENTS_ERROR[key], value => { + player.debug.log('player event error', EVENTS_ERROR[key], value); + }); + }); + } + }); + + class Emitter { + on(name, fn, ctx) { + const e = this.e || (this.e = {}); + (e[name] || (e[name] = [])).push({ + fn, + ctx + }); + return this; + } + + once(name, fn, ctx) { + const self = this; + + function listener() { + self.off(name, listener); + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + fn.apply(ctx, args); + } + + listener._ = fn; + return this.on(name, listener, ctx); + } + + emit(name) { + const evtArr = ((this.e || (this.e = {}))[name] || []).slice(); + + for (var _len2 = arguments.length, data = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + data[_key2 - 1] = arguments[_key2]; + } + + for (let i = 0; i < evtArr.length; i += 1) { + evtArr[i].fn.apply(evtArr[i].ctx, data); + } + + return this; + } + + off(name, callback) { + const e = this.e || (this.e = {}); + + if (!name) { + Object.keys(e).forEach(key => { + delete e[key]; + }); + delete this.e; + return; + } + + const evts = e[name]; + const liveEvents = []; + + if (evts && callback) { + for (let i = 0, len = evts.length; i < len; i += 1) { + if (evts[i].fn !== callback && evts[i].fn._ !== callback) liveEvents.push(evts[i]); + } + } + + if (liveEvents.length) { + e[name] = liveEvents; + } else { + delete e[name]; + } + + return this; + } + + } + + var createWebGL = ((gl, openWebglAlignment) => { + var vertexShaderScript = ['attribute vec4 vertexPos;', 'attribute vec4 texturePos;', 'varying vec2 textureCoord;', 'void main()', '{', 'gl_Position = vertexPos;', 'textureCoord = texturePos.xy;', '}'].join('\n'); + var fragmentShaderScript = ['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'); + + if (openWebglAlignment) { + gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1); + } + + var vertexShader = gl.createShader(gl.VERTEX_SHADER); + gl.shaderSource(vertexShader, vertexShaderScript); + gl.compileShader(vertexShader); + + if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) { + console.log('Vertex shader failed to compile: ' + gl.getShaderInfoLog(vertexShader)); + } + + var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER); + gl.shaderSource(fragmentShader, fragmentShaderScript); + gl.compileShader(fragmentShader); + + if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) { + console.log('Fragment shader failed to compile: ' + gl.getShaderInfoLog(fragmentShader)); + } + + var program = gl.createProgram(); + gl.attachShader(program, vertexShader); + gl.attachShader(program, fragmentShader); + gl.linkProgram(program); + + if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { + console.log('Program failed to compile: ' + gl.getProgramInfoLog(program)); + } + + gl.useProgram(program); // initBuffers + + var vertexPosBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, vertexPosBuffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1, 1, -1, 1, 1, -1, -1, -1]), gl.STATIC_DRAW); + var vertexPosRef = gl.getAttribLocation(program, 'vertexPos'); + gl.enableVertexAttribArray(vertexPosRef); + gl.vertexAttribPointer(vertexPosRef, 2, gl.FLOAT, false, 0, 0); + var texturePosBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, texturePosBuffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1, 0, 0, 0, 1, 1, 0, 1]), gl.STATIC_DRAW); + var texturePosRef = gl.getAttribLocation(program, 'texturePos'); + gl.enableVertexAttribArray(texturePosRef); + gl.vertexAttribPointer(texturePosRef, 2, gl.FLOAT, false, 0, 0); + + function _initTexture(name, index) { + var textureRef = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, textureRef); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.bindTexture(gl.TEXTURE_2D, null); + gl.uniform1i(gl.getUniformLocation(program, name), index); + return textureRef; + } + + var yTextureRef = _initTexture('ySampler', 0); + + var uTextureRef = _initTexture('uSampler', 1); + + var vTextureRef = _initTexture('vSampler', 2); + + return { + render: function (w, h, y, u, v) { + gl.viewport(0, 0, w, h); + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, yTextureRef); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, w, h, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, y); + gl.activeTexture(gl.TEXTURE1); + gl.bindTexture(gl.TEXTURE_2D, uTextureRef); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, w / 2, h / 2, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, u); + gl.activeTexture(gl.TEXTURE2); + gl.bindTexture(gl.TEXTURE_2D, vTextureRef); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, w / 2, h / 2, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, v); + gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4); + }, + destroy: function () { + try { + gl.deleteProgram(program); + gl.deleteBuffer(vertexPosBuffer); + gl.deleteBuffer(texturePosBuffer); + gl.deleteTexture(yTextureRef); + gl.deleteTexture(uTextureRef); + gl.deleteTexture(vTextureRef); + } catch (e) {// console.error(e); + } + } + }; + }); + + class CommonLoader$1 extends Emitter { + constructor() { + super(); + this.init = false; + } + + resetInit() { + this.init = false; + this.videoInfo = { + width: '', + height: '', + encType: '', + encTypeCode: '' + }; + } + + destroy() { + this.resetInit(); + this.player.$container.removeChild(this.$videoElement); + this.off(); + } // + + + updateVideoInfo(data) { + if (data.encTypeCode) { + this.videoInfo.encType = VIDEO_ENC_TYPE[data.encTypeCode]; + } + + if (data.width) { + this.videoInfo.width = data.width; + } + + if (data.height) { + this.videoInfo.height = data.height; + } // video 基本信息 + + + if (this.videoInfo.encType && this.videoInfo.height && this.videoInfo.width && !this.init) { + this.player.emit(EVENTS.videoInfo, this.videoInfo); + this.init = true; + } + } + + play() {} + + pause() {} + + clearView() {} + + } + + /* + * FileSaver.js + * A saveAs() FileSaver implementation. + * + * By Eli Grey, http://eligrey.com + * + * License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT) + * source : http://purl.eligrey.com/github/FileSaver.js + */ + // The one and only way of getting global scope in all environments + // https://stackoverflow.com/q/3277182/1008999 + var _global = typeof window === 'object' && window.window === window ? window : typeof self === 'object' && self.self === self ? self : typeof global === 'object' && global.global === global ? global : undefined; + + function bom(blob, opts) { + if (typeof opts === 'undefined') opts = { + autoBom: false + };else if (typeof opts !== 'object') { + console.warn('Deprecated: Expected third argument to be a object'); + opts = { + autoBom: !opts + }; + } // prepend BOM for UTF-8 XML and text/* types (including HTML) + // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF + + if (opts.autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { + return new Blob([String.fromCharCode(0xFEFF), blob], { + type: blob.type + }); + } + + return blob; + } + + function download(url, name, opts) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url); + xhr.responseType = 'blob'; + + xhr.onload = function () { + saveAs(xhr.response, name, opts); + }; + + xhr.onerror = function () { + console.error('could not download file'); + }; + + xhr.send(); + } + + function corsEnabled(url) { + var xhr = new XMLHttpRequest(); // use sync to avoid popup blocker + + xhr.open('HEAD', url, false); + + try { + xhr.send(); + } catch (e) {} + + return xhr.status >= 200 && xhr.status <= 299; + } // `a.click()` doesn't work for all browsers (#465) + + + function click(node) { + try { + node.dispatchEvent(new MouseEvent('click')); + } catch (e) { + var evt = document.createEvent('MouseEvents'); + evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null); + node.dispatchEvent(evt); + } + } // Detect WebView inside a native macOS app by ruling out all browsers + // We just need to check for 'Safari' because all other browsers (besides Firefox) include that too + // https://www.whatismybrowser.com/guides/the-latest-user-agent/macos + + + var isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent); + var saveAs = // probably in some web worker + typeof window !== 'object' || window !== _global ? function saveAs() { + /* noop */ + } // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView + : 'download' in HTMLAnchorElement.prototype && !isMacOSWebView ? function saveAs(blob, name, opts) { + var URL = _global.URL || _global.webkitURL; // Namespace is used to prevent conflict w/ Chrome Poper Blocker extension (Issue #561) + + var a = document.createElementNS('http://www.w3.org/1999/xhtml', 'a'); + name = name || blob.name || 'download'; + a.download = name; + a.rel = 'noopener'; // tabnabbing + // TODO: detect chrome extensions & packaged apps + // a.target = '_blank' + + if (typeof blob === 'string') { + // Support regular links + a.href = blob; + + if (a.origin !== location.origin) { + corsEnabled(a.href) ? download(blob, name, opts) : click(a, a.target = '_blank'); + } else { + click(a); + } + } else { + // Support blobs + a.href = URL.createObjectURL(blob); + setTimeout(function () { + URL.revokeObjectURL(a.href); + }, 4E4); // 40s + + setTimeout(function () { + click(a); + }, 0); + } + } // Use msSaveOrOpenBlob as a second approach + : 'msSaveOrOpenBlob' in navigator ? function saveAs(blob, name, opts) { + name = name || blob.name || 'download'; + + if (typeof blob === 'string') { + if (corsEnabled(blob)) { + download(blob, name, opts); + } else { + var a = document.createElement('a'); + a.href = blob; + a.target = '_blank'; + setTimeout(function () { + click(a); + }); + } + } else { + navigator.msSaveOrOpenBlob(bom(blob, opts), name); + } + } // Fallback to using FileReader and a popup + : function saveAs(blob, name, opts, popup) { + // Open a popup immediately do go around popup blocker + // Mostly only available on user interaction and the fileReader is async so... + popup = popup || open('', '_blank'); + + if (popup) { + popup.document.title = popup.document.body.innerText = 'downloading...'; + } + + if (typeof blob === 'string') return download(blob, name, opts); + var force = blob.type === 'application/octet-stream'; + + var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari; + + var isChromeIOS = /CriOS\/[\d]+/.test(navigator.userAgent); + + if ((isChromeIOS || force && isSafari || isMacOSWebView) && typeof FileReader !== 'undefined') { + // Safari doesn't allow downloading of blob URLs + var reader = new FileReader(); + + reader.onloadend = function () { + var url = reader.result; + url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;'); + if (popup) popup.location.href = url;else location = url; + popup = null; // reverse-tabnabbing #460 + }; + + reader.readAsDataURL(blob); + } else { + var URL = _global.URL || _global.webkitURL; + var url = URL.createObjectURL(blob); + if (popup) popup.location = url;else location.href = url; + popup = null; // reverse-tabnabbing #460 + + setTimeout(function () { + URL.revokeObjectURL(url); + }, 4E4); // 40s + } + }; + + class CanvasVideoLoader extends CommonLoader$1 { + constructor(player) { + super(); + this.player = player; + const $canvasElement = document.createElement("canvas"); + $canvasElement.style.position = "absolute"; + $canvasElement.style.top = 0; + $canvasElement.style.left = 0; + this.$videoElement = $canvasElement; + player.$container.appendChild(this.$videoElement); + this.context2D = null; + this.contextGl = null; + this.contextGlRender = null; + this.contextGlDestroy = null; + this.bitmaprenderer = null; + this.renderType = null; + this.videoInfo = { + width: '', + height: '', + encType: '' + }; // + + this._initCanvasRender(); + + this.player.debug.log('CanvasVideo', 'init'); + } + + destroy() { + super.destroy(); + + if (this.contextGl) { + this.contextGl = null; + } + + if (this.context2D) { + this.context2D = null; + } + + if (this.contextGlRender) { + this.contextGlDestroy && this.contextGlDestroy(); + this.contextGlDestroy = null; + this.contextGlRender = null; + } + + if (this.bitmaprenderer) { + this.bitmaprenderer = null; + } + + this.renderType = null; + this.player.debug.log(`CanvasVideoLoader`, 'destroy'); + } + + _initContextGl() { + this.contextGl = createContextGL(this.$videoElement); + const webgl = createWebGL(this.contextGl, this.player._opt.openWebglAlignment); + this.contextGlRender = webgl.render; + this.contextGlDestroy = webgl.destroy; + } + + _initContext2D() { + this.context2D = this.$videoElement.getContext('2d'); + } // 渲染类型 + + + _initCanvasRender() { + if (this.player._opt.useWCS && !this._supportOffscreen()) { + this.renderType = CANVAS_RENDER_TYPE.webcodecs; + + this._initContext2D(); + } else if (this._supportOffscreen()) { + this.renderType = CANVAS_RENDER_TYPE.offscreen; + + this._bindOffscreen(); + } else { + this.renderType = CANVAS_RENDER_TYPE.webgl; + + this._initContextGl(); + } + } + + _supportOffscreen() { + return supportOffscreen(this.$videoElement) && this.player._opt.useOffscreen; + } // + + + _bindOffscreen() { + this.bitmaprenderer = this.$videoElement.getContext('bitmaprenderer'); + } + + initCanvasViewSize() { + this.$videoElement.width = this.videoInfo.width; + this.$videoElement.height = this.videoInfo.height; + this.resize(); + } // + + + render(msg) { + this.player.videoTimestamp = msg.ts; + + switch (this.renderType) { + case CANVAS_RENDER_TYPE.offscreen: + this.bitmaprenderer.transferFromImageBitmap(msg.buffer); + break; + + case CANVAS_RENDER_TYPE.webgl: + this.contextGlRender(this.$videoElement.width, this.$videoElement.height, msg.output[0], msg.output[1], msg.output[2]); + break; + + case CANVAS_RENDER_TYPE.webcodecs: + // can use createImageBitmap in wexin + this.context2D.drawImage(msg.videoFrame, 0, 0, this.$videoElement.width, this.$videoElement.height); + closeVideoFrame(msg.videoFrame); + break; + } + } + + screenshot(filename, format, quality, type) { + filename = filename || now(); + type = type || SCREENSHOT_TYPE.download; + const formatType = { + png: 'image/png', + jpeg: 'image/jpeg', + webp: 'image/webp' + }; + let encoderOptions = 0.92; + + if (!formatType[format] && SCREENSHOT_TYPE[format]) { + type = format; + format = 'png'; + quality = undefined; + } + + if (typeof quality === "string") { + type = quality; + quality = undefined; + } + + if (typeof quality !== 'undefined') { + encoderOptions = Number(quality); + } + + const dataURL = this.$videoElement.toDataURL(formatType[format] || formatType.png, encoderOptions); + + if (type === SCREENSHOT_TYPE.base64) { + return dataURL; + } else { + const file = dataURLToFile(dataURL); + + if (type === SCREENSHOT_TYPE.blob) { + return file; + } else if (type === SCREENSHOT_TYPE.download) { + // downloadImg(file, filename); + saveAs(file, filename); + } + } + } // + + + clearView() { + switch (this.renderType) { + case CANVAS_RENDER_TYPE.offscreen: + createEmptyImageBitmap(this.$videoElement.width, this.$videoElement.height).then(imageBitMap => { + this.bitmaprenderer.transferFromImageBitmap(imageBitMap); + }); + break; + + case CANVAS_RENDER_TYPE.webgl: + this.contextGl.clear(this.contextGl.COLOR_BUFFER_BIT); + break; + + case CANVAS_RENDER_TYPE.webcodecs: + this.context2D.clearRect(0, 0, this.$videoElement.width, this.$videoElement.height); + break; + } + } + + resize() { + this.player.debug.log('canvasVideo', 'resize'); + const option = this.player._opt; + let width = this.player.width; + let height = this.player.height; + + if (option.hasControl && !option.controlAutoHide) { + if (isMobile() && this.player.fullscreen && option.useWebFullScreen) { + width -= CONTROL_HEIGHT; + } else { + height -= CONTROL_HEIGHT; + } + } + + let resizeWidth = this.$videoElement.width; + let resizeHeight = this.$videoElement.height; + const rotate = option.rotate; + let left = (width - resizeWidth) / 2; + let top = (height - resizeHeight) / 2; + + if (rotate === 270 || rotate === 90) { + resizeWidth = this.$videoElement.height; + resizeHeight = this.$videoElement.width; + } + + const wScale = width / resizeWidth; + const hScale = height / resizeHeight; + let scale = wScale > hScale ? hScale : wScale; // + + if (!option.isResize) { + if (wScale !== hScale) { + scale = wScale + ',' + hScale; + } + } // + + + if (option.isFullResize) { + scale = wScale > hScale ? wScale : hScale; + } + + let transform = "scale(" + scale + ")"; + + if (rotate) { + transform += ' rotate(' + rotate + 'deg)'; + } + + this.$videoElement.style.transform = transform; + this.$videoElement.style.left = left + "px"; + this.$videoElement.style.top = top + "px"; + } + + } + + class VideoLoader extends CommonLoader$1 { + constructor(player) { + super(); + this.player = player; + const $videoElement = document.createElement('video'); + const $canvasElement = document.createElement('canvas'); + $videoElement.muted = true; + $videoElement.style.position = "absolute"; + $videoElement.style.top = 0; + $videoElement.style.left = 0; + this._delayPlay = false; + player.$container.appendChild($videoElement); + this.videoInfo = { + width: '', + height: '', + encType: '' + }; + const _opt = this.player._opt; + + if (_opt.useWCS && _opt.wcsUseVideoRender) { + this.trackGenerator = new MediaStreamTrackGenerator({ + kind: 'video' + }); + $videoElement.srcObject = new MediaStream([this.trackGenerator]); + this.vwriter = this.trackGenerator.writable.getWriter(); + } + + this.$videoElement = $videoElement; + this.$canvasElement = $canvasElement; + this.canvasContext = $canvasElement.getContext('2d'); + this.fixChromeVideoFlashBug(); + this.resize(); + const { + proxy + } = this.player.events; + proxy(this.$videoElement, 'canplay', () => { + this.player.debug.log('Video', `canplay and _delayPlay is ${this._delayPlay}`); + + if (this._delayPlay) { + this._play(); + } + }); + proxy(this.$videoElement, 'waiting', () => { + this.player.emit(EVENTS.videoWaiting); + }); + proxy(this.$videoElement, 'timeupdate', event => { + // this.player.emit(EVENTS.videoTimeUpdate, event.timeStamp); + const timeStamp = parseInt(event.timeStamp, 10); + this.player.emit(EVENTS.timeUpdate, timeStamp); // check is pause; + + if (!this.isPlaying() && this.init) { + this.player.debug.log('Video', `timeupdate and this.isPlaying is false and retry play`); + this.$videoElement.play(); + } + }); + this.player.debug.log('Video', 'init'); + } + + destroy() { + super.destroy(); + this.$canvasElement = null; + this.canvasContext = null; + + if (this.$videoElement) { + this.$videoElement.pause(); + this.$videoElement.currentTime = 0; + this.$videoElement.src = ''; + this.$videoElement.removeAttribute('src'); + this.$videoElement = null; + } + + if (this.trackGenerator) { + this.trackGenerator.stop(); + this.trackGenerator = null; + } + + if (this.vwriter) { + this.vwriter.close(); + this.vwriter = null; + } + + this.player.debug.log('Video', 'destroy'); + } + + fixChromeVideoFlashBug() { + const browser = getBrowser(); + const type = browser.type.toLowerCase(); + + if (type === 'chrome' || type === 'edge') { + const $container = this.player.$container; + $container.style.backdropFilter = 'blur(0px)'; + $container.style.translateZ = '0'; + } + } + + play() { + if (this.$videoElement) { + const readyState = this._getVideoReadyState(); + + this.player.debug.log('Video', `play and readyState: ${readyState}`); + + if (readyState === 0) { + this.player.debug.warn('Video', 'readyState is 0 and set _delayPlay to true'); + this._delayPlay = true; + return; + } + + this._play(); + } + } + + _getVideoReadyState() { + let result = 0; + + if (this.$videoElement) { + result = this.$videoElement.readyState; + } + + return result; + } + + _play() { + this.$videoElement && this.$videoElement.play().then(() => { + this._delayPlay = false; + this.player.debug.log('Video', '_play success'); + setTimeout(() => { + if (!this.isPlaying()) { + this.player.debug.warn('Video', `play failed and retry play`); + + this._play(); + } + }, 100); + }).catch(e => { + this.player.debug.error('Video', '_play error', e); + }); + } + + pause(isNow) { + // 预防 + // https://developer.chrome.com/blog/play-request-was-interrupted/ + // http://alonesuperman.com/?p=23 + if (isNow) { + this.$videoElement && this.$videoElement.pause(); + } else { + setTimeout(() => { + this.$videoElement && this.$videoElement.pause(); + }, 100); + } + } + + clearView() {} + + screenshot(filename, format, quality, type) { + filename = filename || now(); + type = type || SCREENSHOT_TYPE.download; + const formatType = { + png: 'image/png', + jpeg: 'image/jpeg', + webp: 'image/webp' + }; + let encoderOptions = 0.92; + + if (!formatType[format] && SCREENSHOT_TYPE[format]) { + type = format; + format = 'png'; + quality = undefined; + } + + if (typeof quality === "string") { + type = quality; + quality = undefined; + } + + if (typeof quality !== 'undefined') { + encoderOptions = Number(quality); + } + + const $video = this.$videoElement; + let canvas = this.$canvasElement; + canvas.width = $video.videoWidth; + canvas.height = $video.videoHeight; + this.canvasContext.drawImage($video, 0, 0, canvas.width, canvas.height); + const dataURL = canvas.toDataURL(formatType[format] || formatType.png, encoderOptions); // release memory + + this.canvasContext.clearRect(0, 0, canvas.width, canvas.height); + canvas.width = 0; + canvas.height = 0; + + if (type === SCREENSHOT_TYPE.base64) { + return dataURL; + } else { + const file = dataURLToFile(dataURL); + + if (type === SCREENSHOT_TYPE.blob) { + return file; + } else if (type === SCREENSHOT_TYPE.download) { + // downloadImg(file, filename); + saveAs(file, filename); + } + } + } + + initCanvasViewSize() { + this.resize(); + } // + + + render(msg) { + if (this.vwriter) { + this.vwriter.write(msg.videoFrame); + } + } + + resize() { + let width = this.player.width; + let height = this.player.height; + const option = this.player._opt; + const rotate = option.rotate; + + if (option.hasControl && !option.controlAutoHide) { + if (isMobile() && this.player.fullscreen && option.useWebFullScreen) { + width -= CONTROL_HEIGHT; + } else { + height -= CONTROL_HEIGHT; + } + } + + this.$videoElement.width = width; + this.$videoElement.height = height; + + if (rotate === 270 || rotate === 90) { + this.$videoElement.width = height; + this.$videoElement.height = width; + } + + let resizeWidth = this.$videoElement.width; + let resizeHeight = this.$videoElement.height; + let left = (width - resizeWidth) / 2; + let top = (height - resizeHeight) / 2; + let objectFill = 'contain'; // 默认是true + // 视频画面做等比缩放后,高或宽对齐canvas区域,画面不被拉伸,但有黑边 + // 视频画面完全填充canvas区域,画面会被拉伸 + + if (!option.isResize) { + objectFill = 'fill'; + } // 视频画面做等比缩放后,完全填充canvas区域,画面不被拉伸,没有黑边,但画面显示不全 + + + if (option.isFullResize) { + objectFill = 'none'; + } + + this.$videoElement.style.objectFit = objectFill; + this.$videoElement.style.transform = 'rotate(' + rotate + 'deg)'; + this.$videoElement.style.left = left + "px"; + this.$videoElement.style.top = top + "px"; + } + + isPlaying() { + return this.$videoElement && !this.$videoElement.paused; + } + + } + + class Video { + constructor(player) { + const Loader = Video.getLoaderFactory(player._opt); + return new Loader(player); + } + + static getLoaderFactory(opt) { + if (opt.useMSE || opt.useWCS && !opt.useOffscreen && opt.wcsUseVideoRender) { + return VideoLoader; + } else { + return CanvasVideoLoader; + } + } + + } + + class AudioContextLoader extends Emitter { + constructor(player) { + super(); + this.bufferList = []; + this.player = player; + this.scriptNode = null; + this.hasInitScriptNode = false; + this.audioContextChannel = null; + this.audioContext = new (window.AudioContext || window.webkitAudioContext)(); // + + this.gainNode = this.audioContext.createGain(); // Get an AudioBufferSourceNode. + // This is the AudioNode to use when we want to play an AudioBuffer + + const source = this.audioContext.createBufferSource(); // set the buffer in the AudioBufferSourceNode + + source.buffer = this.audioContext.createBuffer(1, 1, 22050); // connect the AudioBufferSourceNode to the + // destination so we can hear the sound + + source.connect(this.audioContext.destination); // noteOn as start + // start the source playing + + if (source.noteOn) { + source.noteOn(0); + } else { + source.start(0); + } + + this.audioBufferSourceNode = source; // + + this.mediaStreamAudioDestinationNode = this.audioContext.createMediaStreamDestination(); // + + this.audioEnabled(true); // default setting 0 + + this.gainNode.gain.value = 0; + this.playing = false; // + + this.audioSyncVideoOption = { + diff: null + }; + this.audioInfo = { + encType: '', + channels: '', + sampleRate: '' + }; + this.init = false; + this.hasAudio = false; // update + + this.on(EVENTS.videoSyncAudio, options => { + // this.player.debug.log('AudioContext', `videoSyncAudio , audioTimestamp: ${options.audioTimestamp},videoTimestamp: ${options.videoTimestamp},diff:${options.diff}`) + this.audioSyncVideoOption = options; + }); + this.player.debug.log('AudioContext', 'init'); + } + + resetInit() { + this.init = false; + this.audioInfo = { + encType: '', + channels: '', + sampleRate: '' + }; + } + + destroy() { + this.closeAudio(); + this.resetInit(); + this.audioContext.close(); + this.audioContext = null; + this.gainNode = null; + this.hasAudio = false; + this.playing = false; + + if (this.scriptNode) { + this.scriptNode.onaudioprocess = noop; + this.scriptNode = null; + } + + this.audioBufferSourceNode = null; + this.mediaStreamAudioDestinationNode = null; + this.hasInitScriptNode = false; + this.audioSyncVideoOption = { + diff: null + }; + this.off(); + this.player.debug.log('AudioContext', 'destroy'); + } + + updateAudioInfo(data) { + if (data.encTypeCode) { + this.audioInfo.encType = AUDIO_ENC_TYPE[data.encTypeCode]; + } + + if (data.channels) { + this.audioInfo.channels = data.channels; + } + + if (data.sampleRate) { + this.audioInfo.sampleRate = data.sampleRate; + } // audio 基本信息 + + + if (this.audioInfo.sampleRate && this.audioInfo.channels && this.audioInfo.encType && !this.init) { + this.player.emit(EVENTS.audioInfo, this.audioInfo); + this.init = true; + } + } // + + + get isPlaying() { + return this.playing; + } + + get isMute() { + return this.gainNode.gain.value === 0; + } + + get volume() { + return this.gainNode.gain.value; + } + + get bufferSize() { + return this.bufferList.length; + } + + initScriptNode() { + this.playing = true; + + if (this.hasInitScriptNode) { + return; + } + + const channels = this.audioInfo.channels; + const scriptNode = this.audioContext.createScriptProcessor(1024, 0, channels); // tips: if audio isStateSuspended onaudioprocess method not working + + scriptNode.onaudioprocess = audioProcessingEvent => { + const outputBuffer = audioProcessingEvent.outputBuffer; + + if (this.bufferList.length && this.playing) { + // just for wasm + if (!this.player._opt.useWCS && !this.player._opt.useMSE && this.player._opt.wasmDecodeAudioSyncVideo) { + // audio > video + // wait + if (this.audioSyncVideoOption.diff > AUDIO_SYNC_VIDEO_DIFF) { + this.player.debug.warn('AudioContext', `audioSyncVideoOption more than diff :${this.audioSyncVideoOption.diff}, waiting`); // wait + + return; + } // audio < video + // throw away then chase video + else if (this.audioSyncVideoOption.diff < -AUDIO_SYNC_VIDEO_DIFF) { + this.player.debug.warn('AudioContext', `audioSyncVideoOption less than diff :${this.audioSyncVideoOption.diff}, dropping`); // + + let bufferItem = this.bufferList.shift(); // + + while (bufferItem.ts - this.player.videoTimestamp < -AUDIO_SYNC_VIDEO_DIFF && this.bufferList.length > 0) { + // this.player.debug.warn('AudioContext', `audioSyncVideoOption less than inner ts is:${bufferItem.ts}, videoTimestamp is ${this.player.videoTimestamp},diff:${bufferItem.ts - this.player.videoTimestamp}`) + bufferItem = this.bufferList.shift(); + } + + if (this.bufferList.length === 0) { + return; + } + } + } + + if (this.bufferList.length === 0) { + return; + } + + const bufferItem = this.bufferList.shift(); // update audio time stamp + + if (bufferItem && bufferItem.ts) { + this.player.audioTimestamp = bufferItem.ts; + } + + for (let channel = 0; channel < channels; channel++) { + const b = bufferItem.buffer[channel]; + const nowBuffering = outputBuffer.getChannelData(channel); + + for (let i = 0; i < 1024; i++) { + nowBuffering[i] = b[i] || 0; + } + } + } + }; + + scriptNode.connect(this.gainNode); + this.scriptNode = scriptNode; + this.gainNode.connect(this.audioContext.destination); + this.gainNode.connect(this.mediaStreamAudioDestinationNode); + this.hasInitScriptNode = true; + } + + mute(flag) { + if (flag) { + if (!this.isMute) { + this.player.emit(EVENTS.mute, flag); + } + + this.setVolume(0); + this.clear(); + } else { + if (this.isMute) { + this.player.emit(EVENTS.mute, flag); + } + + this.setVolume(0.5); + } + } + + setVolume(volume) { + volume = parseFloat(volume).toFixed(2); + + if (isNaN(volume)) { + return; + } + + this.audioEnabled(true); + volume = clamp(volume, 0, 1); + this.gainNode.gain.value = volume; + this.gainNode.gain.setValueAtTime(volume, this.audioContext.currentTime); + this.player.emit(EVENTS.volumechange, this.player.volume); + } + + closeAudio() { + if (this.hasInitScriptNode) { + this.scriptNode && this.scriptNode.disconnect(this.gainNode); + this.gainNode && this.gainNode.disconnect(this.audioContext.destination); + this.gainNode && this.gainNode.disconnect(this.mediaStreamAudioDestinationNode); + } + + this.clear(); + } // 是否播放。。。 + + + audioEnabled(flag) { + if (flag) { + if (this.audioContext.state === 'suspended') { + // resume + this.audioContext.resume(); + } + } else { + if (this.audioContext.state === 'running') { + // suspend + this.audioContext.suspend(); + } + } + } + + isStateRunning() { + return this.audioContext.state === 'running'; + } + + isStateSuspended() { + return this.audioContext.state === 'suspended'; + } + + clear() { + this.bufferList = []; + } + + play(buffer, ts) { + // if is mute + if (this.isMute) { + return; + } + + this.hasAudio = true; + this.bufferList.push({ + buffer, + ts + }); + + if (this.bufferList.length > 20) { + this.player.debug.warn('AudioContext', `bufferList is large: ${this.bufferList.length}`); // out of memory + + if (this.bufferList.length > 50) { + this.bufferList.shift(); + } + } // this.player.debug.log('AudioContext', `bufferList is ${this.bufferList.length}`) + + } + + pause() { + this.audioSyncVideoOption = { + diff: null + }; + this.playing = false; + this.clear(); + } + + resume() { + this.playing = true; + } + + } + + class Audio { + constructor(player) { + const Loader = Audio.getLoaderFactory(); + return new Loader(player); + } + + static getLoaderFactory() { + return AudioContextLoader; + } + + } + + class FetchLoader extends Emitter { + constructor(player) { + super(); + this.player = player; + this.playing = false; + this.abortController = new AbortController(); // + + this.streamRate = calculationRate(rate => { + player.emit(EVENTS.kBps, (rate / 1024).toFixed(2)); + }); + player.debug.log('FetchStream', 'init'); + } + + destroy() { + this.abort(); + this.off(); + this.streamRate = null; + this.player.debug.log('FetchStream', 'destroy'); + } + /** + * + * @param url + * @param options + */ + + + fetchStream(url) { + let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + const { + demux + } = this.player; + this.player._times.streamStart = now(); + const fetchOptions = Object.assign({ + signal: this.abortController.signal + }, { + headers: options.headers || {} + }); + fetch(url, fetchOptions).then(res => { + const reader = res.body.getReader(); + this.emit(EVENTS.streamSuccess); + + const fetchNext = () => { + reader.read().then(_ref => { + let { + done, + value + } = _ref; + + if (done) { + demux.close(); + } else { + this.streamRate && this.streamRate(value.byteLength); + demux.dispatch(value); + fetchNext(); + } + }).catch(e => { + demux.close(); + const errorString = e.toString(); // aborted a request 。 + + if (errorString.indexOf(FETCH_ERROR.abortError1) !== -1) { + return; + } + + if (errorString.indexOf(FETCH_ERROR.abortError2) !== -1) { + return; + } + + if (e.name === FETCH_ERROR.abort) { + return; + } + + this.abort(); + this.emit(EVENTS_ERROR.fetchError, e); + this.player.emit(EVENTS.error, EVENTS_ERROR.fetchError); + }); + }; + + fetchNext(); + }).catch(e => { + if (e.name === 'AbortError') { + return; + } + + demux.close(); + this.abort(); + this.emit(EVENTS_ERROR.fetchError, e); + this.player.emit(EVENTS.error, EVENTS_ERROR.fetchError); + }); + } + + abort() { + if (this.abortController) { + this.abortController.abort(); + this.abortController = null; + } + } + + } + + class WebsocketLoader extends Emitter { + constructor(player) { + super(); + this.player = player; + this.socket = null; + this.socketStatus = WEBSOCKET_STATUS.notConnect; + this.wsUrl = null; // + + this.streamRate = calculationRate(rate => { + player.emit(EVENTS.kBps, (rate / 1024).toFixed(2)); + }); + player.debug.log('WebsocketLoader', 'init'); + } + + destroy() { + if (this.socket) { + this.socket.close(); + this.socket = null; + } + + this.socketStatus = WEBSOCKET_STATUS.notConnect; + this.streamRate = null; + this.wsUrl = null; + this.off(); + this.player.debug.log('websocketLoader', 'destroy'); + } + + _createWebSocket() { + const player = this.player; + const { + debug, + events: { + proxy + }, + demux + } = player; + this.socket = new WebSocket(this.wsUrl); + this.socket.binaryType = 'arraybuffer'; + proxy(this.socket, 'open', () => { + this.emit(EVENTS.streamSuccess); + debug.log('websocketLoader', 'socket open'); + this.socketStatus = WEBSOCKET_STATUS.open; + }); + proxy(this.socket, 'message', event => { + this.streamRate && this.streamRate(event.data.byteLength); + + this._handleMessage(event.data); + }); + proxy(this.socket, 'close', () => { + debug.log('websocketLoader', 'socket close'); + this.emit(EVENTS.streamEnd); + this.socketStatus = WEBSOCKET_STATUS.close; + }); + proxy(this.socket, 'error', error => { + debug.log('websocketLoader', 'socket error'); + this.emit(EVENTS_ERROR.websocketError, error); + this.player.emit(EVENTS.error, EVENTS_ERROR.websocketError); + this.socketStatus = WEBSOCKET_STATUS.error; + demux.close(); + debug.log('websocketLoader', `socket error:`, error); + }); + } // + + + _handleMessage(message) { + const { + demux + } = this.player; + + if (!demux) { + this.player.debug.warn('websocketLoader', 'websocket handle message demux is null'); + return; + } + + demux.dispatch(message); + } + /** + * + * @param url + * @param options + */ + + + fetchStream(url, options) { + this.player._times.streamStart = now(); + this.wsUrl = url; + + this._createWebSocket(); + } + + } + + class Stream { + constructor(player) { + const Loader = Stream.getLoaderFactory(player._opt.protocol); + return new Loader(player); + } + + static getLoaderFactory(protocol) { + if (protocol === PLAYER_PLAY_PROTOCOL.fetch) { + return FetchLoader; + } else if (protocol === PLAYER_PLAY_PROTOCOL.websocket) { + return WebsocketLoader; + } + } + + } + + var RecordRTC_1 = createCommonjsModule(function (module) { + + // Last time updated: 2021-03-09 3:20:22 AM UTC + + // ________________ + // RecordRTC v5.6.2 + + // Open-Sourced: https://github.com/muaz-khan/RecordRTC + + // -------------------------------------------------- + // Muaz Khan - www.MuazKhan.com + // MIT License - www.WebRTC-Experiment.com/licence + // -------------------------------------------------- + + // ____________ + // RecordRTC.js + + /** + * {@link https://github.com/muaz-khan/RecordRTC|RecordRTC} is a WebRTC JavaScript library for audio/video as well as screen activity recording. It supports Chrome, Firefox, Opera, Android, and Microsoft Edge. Platforms: Linux, Mac and Windows. + * @summary Record audio, video or screen inside the browser. + * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT} + * @author {@link https://MuazKhan.com|Muaz Khan} + * @typedef RecordRTC + * @class + * @example + * var recorder = RecordRTC(mediaStream or [arrayOfMediaStream], { + * type: 'video', // audio or video or gif or canvas + * recorderType: MediaStreamRecorder || CanvasRecorder || StereoAudioRecorder || Etc + * }); + * recorder.startRecording(); + * @see For further information: + * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code} + * @param {MediaStream} mediaStream - Single media-stream object, array of media-streams, html-canvas-element, etc. + * @param {object} config - {type:"video", recorderType: MediaStreamRecorder, disableLogs: true, numberOfAudioChannels: 1, bufferSize: 0, sampleRate: 0, desiredSampRate: 16000, video: HTMLVideoElement, etc.} + */ + + function RecordRTC(mediaStream, config) { + if (!mediaStream) { + throw 'First parameter is required.'; + } + + config = config || { + type: 'video' + }; + + config = new RecordRTCConfiguration(mediaStream, config); + + // a reference to user's recordRTC object + var self = this; + + function startRecording(config2) { + if (!config.disableLogs) { + console.log('RecordRTC version: ', self.version); + } + + if (!!config2) { + // allow users to set options using startRecording method + // config2 is similar to main "config" object (second parameter over RecordRTC constructor) + config = new RecordRTCConfiguration(mediaStream, config2); + } + + if (!config.disableLogs) { + console.log('started recording ' + config.type + ' stream.'); + } + + if (mediaRecorder) { + mediaRecorder.clearRecordedData(); + mediaRecorder.record(); + + setState('recording'); + + if (self.recordingDuration) { + handleRecordingDuration(); + } + return self; + } + + initRecorder(function() { + if (self.recordingDuration) { + handleRecordingDuration(); + } + }); + + return self; + } + + function initRecorder(initCallback) { + if (initCallback) { + config.initCallback = function() { + initCallback(); + initCallback = config.initCallback = null; // recorder.initRecorder should be call-backed once. + }; + } + + var Recorder = new GetRecorderType(mediaStream, config); + + mediaRecorder = new Recorder(mediaStream, config); + mediaRecorder.record(); + + setState('recording'); + + if (!config.disableLogs) { + console.log('Initialized recorderType:', mediaRecorder.constructor.name, 'for output-type:', config.type); + } + } + + function stopRecording(callback) { + callback = callback || function() {}; + + if (!mediaRecorder) { + warningLog(); + return; + } + + if (self.state === 'paused') { + self.resumeRecording(); + + setTimeout(function() { + stopRecording(callback); + }, 1); + return; + } + + if (self.state !== 'recording' && !config.disableLogs) { + console.warn('Recording state should be: "recording", however current state is: ', self.state); + } + + if (!config.disableLogs) { + console.log('Stopped recording ' + config.type + ' stream.'); + } + + if (config.type !== 'gif') { + mediaRecorder.stop(_callback); + } else { + mediaRecorder.stop(); + _callback(); + } + + setState('stopped'); + + function _callback(__blob) { + if (!mediaRecorder) { + if (typeof callback.call === 'function') { + callback.call(self, ''); + } else { + callback(''); + } + return; + } + + Object.keys(mediaRecorder).forEach(function(key) { + if (typeof mediaRecorder[key] === 'function') { + return; + } + + self[key] = mediaRecorder[key]; + }); + + var blob = mediaRecorder.blob; + + if (!blob) { + if (__blob) { + mediaRecorder.blob = blob = __blob; + } else { + throw 'Recording failed.'; + } + } + + if (blob && !config.disableLogs) { + console.log(blob.type, '->', bytesToSize(blob.size)); + } + + if (callback) { + var url; + + try { + url = URL.createObjectURL(blob); + } catch (e) {} + + if (typeof callback.call === 'function') { + callback.call(self, url); + } else { + callback(url); + } + } + + if (!config.autoWriteToDisk) { + return; + } + + getDataURL(function(dataURL) { + var parameter = {}; + parameter[config.type + 'Blob'] = dataURL; + DiskStorage.Store(parameter); + }); + } + } + + function pauseRecording() { + if (!mediaRecorder) { + warningLog(); + return; + } + + if (self.state !== 'recording') { + if (!config.disableLogs) { + console.warn('Unable to pause the recording. Recording state: ', self.state); + } + return; + } + + setState('paused'); + + mediaRecorder.pause(); + + if (!config.disableLogs) { + console.log('Paused recording.'); + } + } + + function resumeRecording() { + if (!mediaRecorder) { + warningLog(); + return; + } + + if (self.state !== 'paused') { + if (!config.disableLogs) { + console.warn('Unable to resume the recording. Recording state: ', self.state); + } + return; + } + + setState('recording'); + + // not all libs have this method yet + mediaRecorder.resume(); + + if (!config.disableLogs) { + console.log('Resumed recording.'); + } + } + + function readFile(_blob) { + postMessage(new FileReaderSync().readAsDataURL(_blob)); + } + + function getDataURL(callback, _mediaRecorder) { + if (!callback) { + throw 'Pass a callback function over getDataURL.'; + } + + var blob = _mediaRecorder ? _mediaRecorder.blob : (mediaRecorder || {}).blob; + + if (!blob) { + if (!config.disableLogs) { + console.warn('Blob encoder did not finish its job yet.'); + } + + setTimeout(function() { + getDataURL(callback, _mediaRecorder); + }, 1000); + return; + } + + if (typeof Worker !== 'undefined' && !navigator.mozGetUserMedia) { + var webWorker = processInWebWorker(readFile); + + webWorker.onmessage = function(event) { + callback(event.data); + }; + + webWorker.postMessage(blob); + } else { + var reader = new FileReader(); + reader.readAsDataURL(blob); + reader.onload = function(event) { + callback(event.target.result); + }; + } + + function processInWebWorker(_function) { + try { + var blob = URL.createObjectURL(new Blob([_function.toString(), + 'this.onmessage = function (eee) {' + _function.name + '(eee.data);}' + ], { + type: 'application/javascript' + })); + + var worker = new Worker(blob); + URL.revokeObjectURL(blob); + return worker; + } catch (e) {} + } + } + + function handleRecordingDuration(counter) { + counter = counter || 0; + + if (self.state === 'paused') { + setTimeout(function() { + handleRecordingDuration(counter); + }, 1000); + return; + } + + if (self.state === 'stopped') { + return; + } + + if (counter >= self.recordingDuration) { + stopRecording(self.onRecordingStopped); + return; + } + + counter += 1000; // 1-second + + setTimeout(function() { + handleRecordingDuration(counter); + }, 1000); + } + + function setState(state) { + if (!self) { + return; + } + + self.state = state; + + if (typeof self.onStateChanged.call === 'function') { + self.onStateChanged.call(self, state); + } else { + self.onStateChanged(state); + } + } + + var WARNING = 'It seems that recorder is destroyed or "startRecording" is not invoked for ' + config.type + ' recorder.'; + + function warningLog() { + if (config.disableLogs === true) { + return; + } + + console.warn(WARNING); + } + + var mediaRecorder; + + var returnObject = { + /** + * This method starts the recording. + * @method + * @memberof RecordRTC + * @instance + * @example + * var recorder = RecordRTC(mediaStream, { + * type: 'video' + * }); + * recorder.startRecording(); + */ + startRecording: startRecording, + + /** + * This method stops the recording. It is strongly recommended to get "blob" or "URI" inside the callback to make sure all recorders finished their job. + * @param {function} callback - Callback to get the recorded blob. + * @method + * @memberof RecordRTC + * @instance + * @example + * recorder.stopRecording(function() { + * // use either "this" or "recorder" object; both are identical + * video.src = this.toURL(); + * var blob = this.getBlob(); + * }); + */ + stopRecording: stopRecording, + + /** + * This method pauses the recording. You can resume recording using "resumeRecording" method. + * @method + * @memberof RecordRTC + * @instance + * @todo Firefox is unable to pause the recording. Fix it. + * @example + * recorder.pauseRecording(); // pause the recording + * recorder.resumeRecording(); // resume again + */ + pauseRecording: pauseRecording, + + /** + * This method resumes the recording. + * @method + * @memberof RecordRTC + * @instance + * @example + * recorder.pauseRecording(); // first of all, pause the recording + * recorder.resumeRecording(); // now resume it + */ + resumeRecording: resumeRecording, + + /** + * This method initializes the recording. + * @method + * @memberof RecordRTC + * @instance + * @todo This method should be deprecated. + * @example + * recorder.initRecorder(); + */ + initRecorder: initRecorder, + + /** + * Ask RecordRTC to auto-stop the recording after 5 minutes. + * @method + * @memberof RecordRTC + * @instance + * @example + * var fiveMinutes = 5 * 1000 * 60; + * recorder.setRecordingDuration(fiveMinutes, function() { + * var blob = this.getBlob(); + * video.src = this.toURL(); + * }); + * + * // or otherwise + * recorder.setRecordingDuration(fiveMinutes).onRecordingStopped(function() { + * var blob = this.getBlob(); + * video.src = this.toURL(); + * }); + */ + setRecordingDuration: function(recordingDuration, callback) { + if (typeof recordingDuration === 'undefined') { + throw 'recordingDuration is required.'; + } + + if (typeof recordingDuration !== 'number') { + throw 'recordingDuration must be a number.'; + } + + self.recordingDuration = recordingDuration; + self.onRecordingStopped = callback || function() {}; + + return { + onRecordingStopped: function(callback) { + self.onRecordingStopped = callback; + } + }; + }, + + /** + * This method can be used to clear/reset all the recorded data. + * @method + * @memberof RecordRTC + * @instance + * @todo Figure out the difference between "reset" and "clearRecordedData" methods. + * @example + * recorder.clearRecordedData(); + */ + clearRecordedData: function() { + if (!mediaRecorder) { + warningLog(); + return; + } + + mediaRecorder.clearRecordedData(); + + if (!config.disableLogs) { + console.log('Cleared old recorded data.'); + } + }, + + /** + * Get the recorded blob. Use this method inside the "stopRecording" callback. + * @method + * @memberof RecordRTC + * @instance + * @example + * recorder.stopRecording(function() { + * var blob = this.getBlob(); + * + * var file = new File([blob], 'filename.webm', { + * type: 'video/webm' + * }); + * + * var formData = new FormData(); + * formData.append('file', file); // upload "File" object rather than a "Blob" + * uploadToServer(formData); + * }); + * @returns {Blob} Returns recorded data as "Blob" object. + */ + getBlob: function() { + if (!mediaRecorder) { + warningLog(); + return; + } + + return mediaRecorder.blob; + }, + + /** + * Get data-URI instead of Blob. + * @param {function} callback - Callback to get the Data-URI. + * @method + * @memberof RecordRTC + * @instance + * @example + * recorder.stopRecording(function() { + * recorder.getDataURL(function(dataURI) { + * video.src = dataURI; + * }); + * }); + */ + getDataURL: getDataURL, + + /** + * Get virtual/temporary URL. Usage of this URL is limited to current tab. + * @method + * @memberof RecordRTC + * @instance + * @example + * recorder.stopRecording(function() { + * video.src = this.toURL(); + * }); + * @returns {String} Returns a virtual/temporary URL for the recorded "Blob". + */ + toURL: function() { + if (!mediaRecorder) { + warningLog(); + return; + } + + return URL.createObjectURL(mediaRecorder.blob); + }, + + /** + * Get internal recording object (i.e. internal module) e.g. MutliStreamRecorder, MediaStreamRecorder, StereoAudioRecorder or WhammyRecorder etc. + * @method + * @memberof RecordRTC + * @instance + * @example + * var internalRecorder = recorder.getInternalRecorder(); + * if(internalRecorder instanceof MultiStreamRecorder) { + * internalRecorder.addStreams([newAudioStream]); + * internalRecorder.resetVideoStreams([screenStream]); + * } + * @returns {Object} Returns internal recording object. + */ + getInternalRecorder: function() { + return mediaRecorder; + }, + + /** + * Invoke save-as dialog to save the recorded blob into your disk. + * @param {string} fileName - Set your own file name. + * @method + * @memberof RecordRTC + * @instance + * @example + * recorder.stopRecording(function() { + * this.save('file-name'); + * + * // or manually: + * invokeSaveAsDialog(this.getBlob(), 'filename.webm'); + * }); + */ + save: function(fileName) { + if (!mediaRecorder) { + warningLog(); + return; + } + + invokeSaveAsDialog(mediaRecorder.blob, fileName); + }, + + /** + * This method gets a blob from indexed-DB storage. + * @param {function} callback - Callback to get the recorded blob. + * @method + * @memberof RecordRTC + * @instance + * @example + * recorder.getFromDisk(function(dataURL) { + * video.src = dataURL; + * }); + */ + getFromDisk: function(callback) { + if (!mediaRecorder) { + warningLog(); + return; + } + + RecordRTC.getFromDisk(config.type, callback); + }, + + /** + * This method appends an array of webp images to the recorded video-blob. It takes an "array" object. + * @type {Array.} + * @param {Array} arrayOfWebPImages - Array of webp images. + * @method + * @memberof RecordRTC + * @instance + * @todo This method should be deprecated. + * @example + * var arrayOfWebPImages = []; + * arrayOfWebPImages.push({ + * duration: index, + * image: 'data:image/webp;base64,...' + * }); + * recorder.setAdvertisementArray(arrayOfWebPImages); + */ + setAdvertisementArray: function(arrayOfWebPImages) { + config.advertisement = []; + + var length = arrayOfWebPImages.length; + for (var i = 0; i < length; i++) { + config.advertisement.push({ + duration: i, + image: arrayOfWebPImages[i] + }); + } + }, + + /** + * It is equivalent to "recorder.getBlob()" method. Usage of "getBlob" is recommended, though. + * @property {Blob} blob - Recorded Blob can be accessed using this property. + * @memberof RecordRTC + * @instance + * @readonly + * @example + * recorder.stopRecording(function() { + * var blob = this.blob; + * + * // below one is recommended + * var blob = this.getBlob(); + * }); + */ + blob: null, + + /** + * This works only with {recorderType:StereoAudioRecorder}. Use this property on "stopRecording" to verify the encoder's sample-rates. + * @property {number} bufferSize - Buffer-size used to encode the WAV container + * @memberof RecordRTC + * @instance + * @readonly + * @example + * recorder.stopRecording(function() { + * alert('Recorder used this buffer-size: ' + this.bufferSize); + * }); + */ + bufferSize: 0, + + /** + * This works only with {recorderType:StereoAudioRecorder}. Use this property on "stopRecording" to verify the encoder's sample-rates. + * @property {number} sampleRate - Sample-rates used to encode the WAV container + * @memberof RecordRTC + * @instance + * @readonly + * @example + * recorder.stopRecording(function() { + * alert('Recorder used these sample-rates: ' + this.sampleRate); + * }); + */ + sampleRate: 0, + + /** + * {recorderType:StereoAudioRecorder} returns ArrayBuffer object. + * @property {ArrayBuffer} buffer - Audio ArrayBuffer, supported only in Chrome. + * @memberof RecordRTC + * @instance + * @readonly + * @example + * recorder.stopRecording(function() { + * var arrayBuffer = this.buffer; + * alert(arrayBuffer.byteLength); + * }); + */ + buffer: null, + + /** + * This method resets the recorder. So that you can reuse single recorder instance many times. + * @method + * @memberof RecordRTC + * @instance + * @example + * recorder.reset(); + * recorder.startRecording(); + */ + reset: function() { + if (self.state === 'recording' && !config.disableLogs) { + console.warn('Stop an active recorder.'); + } + + if (mediaRecorder && typeof mediaRecorder.clearRecordedData === 'function') { + mediaRecorder.clearRecordedData(); + } + mediaRecorder = null; + setState('inactive'); + self.blob = null; + }, + + /** + * This method is called whenever recorder's state changes. Use this as an "event". + * @property {String} state - A recorder's state can be: recording, paused, stopped or inactive. + * @method + * @memberof RecordRTC + * @instance + * @example + * recorder.onStateChanged = function(state) { + * console.log('Recorder state: ', state); + * }; + */ + onStateChanged: function(state) { + if (!config.disableLogs) { + console.log('Recorder state changed:', state); + } + }, + + /** + * A recorder can have inactive, recording, paused or stopped states. + * @property {String} state - A recorder's state can be: recording, paused, stopped or inactive. + * @memberof RecordRTC + * @static + * @readonly + * @example + * // this looper function will keep you updated about the recorder's states. + * (function looper() { + * document.querySelector('h1').innerHTML = 'Recorder\'s state is: ' + recorder.state; + * if(recorder.state === 'stopped') return; // ignore+stop + * setTimeout(looper, 1000); // update after every 3-seconds + * })(); + * recorder.startRecording(); + */ + state: 'inactive', + + /** + * Get recorder's readonly state. + * @method + * @memberof RecordRTC + * @example + * var state = recorder.getState(); + * @returns {String} Returns recording state. + */ + getState: function() { + return self.state; + }, + + /** + * Destroy RecordRTC instance. Clear all recorders and objects. + * @method + * @memberof RecordRTC + * @example + * recorder.destroy(); + */ + destroy: function() { + var disableLogsCache = config.disableLogs; + + config = { + disableLogs: true + }; + self.reset(); + setState('destroyed'); + returnObject = self = null; + + if (Storage.AudioContextConstructor) { + Storage.AudioContextConstructor.close(); + Storage.AudioContextConstructor = null; + } + + config.disableLogs = disableLogsCache; + + if (!config.disableLogs) { + console.log('RecordRTC is destroyed.'); + } + }, + + /** + * RecordRTC version number + * @property {String} version - Release version number. + * @memberof RecordRTC + * @static + * @readonly + * @example + * alert(recorder.version); + */ + version: '5.6.2' + }; + + if (!this) { + self = returnObject; + return returnObject; + } + + // if someone wants to use RecordRTC with the "new" keyword. + for (var prop in returnObject) { + this[prop] = returnObject[prop]; + } + + self = this; + + return returnObject; + } + + RecordRTC.version = '5.6.2'; + + { + module.exports = RecordRTC; + } + + RecordRTC.getFromDisk = function(type, callback) { + if (!callback) { + throw 'callback is mandatory.'; + } + + console.log('Getting recorded ' + (type === 'all' ? 'blobs' : type + ' blob ') + ' from disk!'); + DiskStorage.Fetch(function(dataURL, _type) { + if (type !== 'all' && _type === type + 'Blob' && callback) { + callback(dataURL); + } + + if (type === 'all' && callback) { + callback(dataURL, _type.replace('Blob', '')); + } + }); + }; + + /** + * This method can be used to store recorded blobs into IndexedDB storage. + * @param {object} options - {audio: Blob, video: Blob, gif: Blob} + * @method + * @memberof RecordRTC + * @example + * RecordRTC.writeToDisk({ + * audio: audioBlob, + * video: videoBlob, + * gif : gifBlob + * }); + */ + RecordRTC.writeToDisk = function(options) { + console.log('Writing recorded blob(s) to disk!'); + options = options || {}; + if (options.audio && options.video && options.gif) { + options.audio.getDataURL(function(audioDataURL) { + options.video.getDataURL(function(videoDataURL) { + options.gif.getDataURL(function(gifDataURL) { + DiskStorage.Store({ + audioBlob: audioDataURL, + videoBlob: videoDataURL, + gifBlob: gifDataURL + }); + }); + }); + }); + } else if (options.audio && options.video) { + options.audio.getDataURL(function(audioDataURL) { + options.video.getDataURL(function(videoDataURL) { + DiskStorage.Store({ + audioBlob: audioDataURL, + videoBlob: videoDataURL + }); + }); + }); + } else if (options.audio && options.gif) { + options.audio.getDataURL(function(audioDataURL) { + options.gif.getDataURL(function(gifDataURL) { + DiskStorage.Store({ + audioBlob: audioDataURL, + gifBlob: gifDataURL + }); + }); + }); + } else if (options.video && options.gif) { + options.video.getDataURL(function(videoDataURL) { + options.gif.getDataURL(function(gifDataURL) { + DiskStorage.Store({ + videoBlob: videoDataURL, + gifBlob: gifDataURL + }); + }); + }); + } else if (options.audio) { + options.audio.getDataURL(function(audioDataURL) { + DiskStorage.Store({ + audioBlob: audioDataURL + }); + }); + } else if (options.video) { + options.video.getDataURL(function(videoDataURL) { + DiskStorage.Store({ + videoBlob: videoDataURL + }); + }); + } else if (options.gif) { + options.gif.getDataURL(function(gifDataURL) { + DiskStorage.Store({ + gifBlob: gifDataURL + }); + }); + } + }; + + // __________________________ + // RecordRTC-Configuration.js + + /** + * {@link RecordRTCConfiguration} is an inner/private helper for {@link RecordRTC}. + * @summary It configures the 2nd parameter passed over {@link RecordRTC} and returns a valid "config" object. + * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT} + * @author {@link https://MuazKhan.com|Muaz Khan} + * @typedef RecordRTCConfiguration + * @class + * @example + * var options = RecordRTCConfiguration(mediaStream, options); + * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code} + * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API. + * @param {object} config - {type:"video", disableLogs: true, numberOfAudioChannels: 1, bufferSize: 0, sampleRate: 0, video: HTMLVideoElement, getNativeBlob:true, etc.} + */ + + function RecordRTCConfiguration(mediaStream, config) { + if (!config.recorderType && !config.type) { + if (!!config.audio && !!config.video) { + config.type = 'video'; + } else if (!!config.audio && !config.video) { + config.type = 'audio'; + } + } + + if (config.recorderType && !config.type) { + if (config.recorderType === WhammyRecorder || config.recorderType === CanvasRecorder || (typeof WebAssemblyRecorder !== 'undefined' && config.recorderType === WebAssemblyRecorder)) { + config.type = 'video'; + } else if (config.recorderType === GifRecorder) { + config.type = 'gif'; + } else if (config.recorderType === StereoAudioRecorder) { + config.type = 'audio'; + } else if (config.recorderType === MediaStreamRecorder) { + if (getTracks(mediaStream, 'audio').length && getTracks(mediaStream, 'video').length) { + config.type = 'video'; + } else if (!getTracks(mediaStream, 'audio').length && getTracks(mediaStream, 'video').length) { + config.type = 'video'; + } else if (getTracks(mediaStream, 'audio').length && !getTracks(mediaStream, 'video').length) { + config.type = 'audio'; + } else ; + } + } + + if (typeof MediaStreamRecorder !== 'undefined' && typeof MediaRecorder !== 'undefined' && 'requestData' in MediaRecorder.prototype) { + if (!config.mimeType) { + config.mimeType = 'video/webm'; + } + + if (!config.type) { + config.type = config.mimeType.split('/')[0]; + } + + if (!config.bitsPerSecond) ; + } + + // consider default type=audio + if (!config.type) { + if (config.mimeType) { + config.type = config.mimeType.split('/')[0]; + } + if (!config.type) { + config.type = 'audio'; + } + } + + return config; + } + + // __________________ + // GetRecorderType.js + + /** + * {@link GetRecorderType} is an inner/private helper for {@link RecordRTC}. + * @summary It returns best recorder-type available for your browser. + * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT} + * @author {@link https://MuazKhan.com|Muaz Khan} + * @typedef GetRecorderType + * @class + * @example + * var RecorderType = GetRecorderType(options); + * var recorder = new RecorderType(options); + * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code} + * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API. + * @param {object} config - {type:"video", disableLogs: true, numberOfAudioChannels: 1, bufferSize: 0, sampleRate: 0, video: HTMLVideoElement, etc.} + */ + + function GetRecorderType(mediaStream, config) { + var recorder; + + // StereoAudioRecorder can work with all three: Edge, Firefox and Chrome + // todo: detect if it is Edge, then auto use: StereoAudioRecorder + if (isChrome || isEdge || isOpera) { + // Media Stream Recording API has not been implemented in chrome yet; + // That's why using WebAudio API to record stereo audio in WAV format + recorder = StereoAudioRecorder; + } + + if (typeof MediaRecorder !== 'undefined' && 'requestData' in MediaRecorder.prototype && !isChrome) { + recorder = MediaStreamRecorder; + } + + // video recorder (in WebM format) + if (config.type === 'video' && (isChrome || isOpera)) { + recorder = WhammyRecorder; + + if (typeof WebAssemblyRecorder !== 'undefined' && typeof ReadableStream !== 'undefined') { + recorder = WebAssemblyRecorder; + } + } + + // video recorder (in Gif format) + if (config.type === 'gif') { + recorder = GifRecorder; + } + + // html2canvas recording! + if (config.type === 'canvas') { + recorder = CanvasRecorder; + } + + if (isMediaRecorderCompatible() && recorder !== CanvasRecorder && recorder !== GifRecorder && typeof MediaRecorder !== 'undefined' && 'requestData' in MediaRecorder.prototype) { + if (getTracks(mediaStream, 'video').length || getTracks(mediaStream, 'audio').length) { + // audio-only recording + if (config.type === 'audio') { + if (typeof MediaRecorder.isTypeSupported === 'function' && MediaRecorder.isTypeSupported('audio/webm')) { + recorder = MediaStreamRecorder; + } + // else recorder = StereoAudioRecorder; + } else { + // video or screen tracks + if (typeof MediaRecorder.isTypeSupported === 'function' && MediaRecorder.isTypeSupported('video/webm')) { + recorder = MediaStreamRecorder; + } + } + } + } + + if (mediaStream instanceof Array && mediaStream.length) { + recorder = MultiStreamRecorder; + } + + if (config.recorderType) { + recorder = config.recorderType; + } + + if (!config.disableLogs && !!recorder && !!recorder.name) { + console.log('Using recorderType:', recorder.name || recorder.constructor.name); + } + + if (!recorder && isSafari) { + recorder = MediaStreamRecorder; + } + + return recorder; + } + + // _____________ + // MRecordRTC.js + + /** + * MRecordRTC runs on top of {@link RecordRTC} to bring multiple recordings in a single place, by providing simple API. + * @summary MRecordRTC stands for "Multiple-RecordRTC". + * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT} + * @author {@link https://MuazKhan.com|Muaz Khan} + * @typedef MRecordRTC + * @class + * @example + * var recorder = new MRecordRTC(); + * recorder.addStream(MediaStream); + * recorder.mediaType = { + * audio: true, // or StereoAudioRecorder or MediaStreamRecorder + * video: true, // or WhammyRecorder or MediaStreamRecorder or WebAssemblyRecorder or CanvasRecorder + * gif: true // or GifRecorder + * }; + * // mimeType is optional and should be set only in advance cases. + * recorder.mimeType = { + * audio: 'audio/wav', + * video: 'video/webm', + * gif: 'image/gif' + * }; + * recorder.startRecording(); + * @see For further information: + * @see {@link https://github.com/muaz-khan/RecordRTC/tree/master/MRecordRTC|MRecordRTC Source Code} + * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API. + * @requires {@link RecordRTC} + */ + + function MRecordRTC(mediaStream) { + + /** + * This method attaches MediaStream object to {@link MRecordRTC}. + * @param {MediaStream} mediaStream - A MediaStream object, either fetched using getUserMedia API, or generated using captureStreamUntilEnded or WebAudio API. + * @method + * @memberof MRecordRTC + * @example + * recorder.addStream(MediaStream); + */ + this.addStream = function(_mediaStream) { + if (_mediaStream) { + mediaStream = _mediaStream; + } + }; + + /** + * This property can be used to set the recording type e.g. audio, or video, or gif, or canvas. + * @property {object} mediaType - {audio: true, video: true, gif: true} + * @memberof MRecordRTC + * @example + * var recorder = new MRecordRTC(); + * recorder.mediaType = { + * audio: true, // TRUE or StereoAudioRecorder or MediaStreamRecorder + * video: true, // TRUE or WhammyRecorder or MediaStreamRecorder or WebAssemblyRecorder or CanvasRecorder + * gif : true // TRUE or GifRecorder + * }; + */ + this.mediaType = { + audio: true, + video: true + }; + + /** + * This method starts recording. + * @method + * @memberof MRecordRTC + * @example + * recorder.startRecording(); + */ + this.startRecording = function() { + var mediaType = this.mediaType; + var recorderType; + var mimeType = this.mimeType || { + audio: null, + video: null, + gif: null + }; + + if (typeof mediaType.audio !== 'function' && isMediaRecorderCompatible() && !getTracks(mediaStream, 'audio').length) { + mediaType.audio = false; + } + + if (typeof mediaType.video !== 'function' && isMediaRecorderCompatible() && !getTracks(mediaStream, 'video').length) { + mediaType.video = false; + } + + if (typeof mediaType.gif !== 'function' && isMediaRecorderCompatible() && !getTracks(mediaStream, 'video').length) { + mediaType.gif = false; + } + + if (!mediaType.audio && !mediaType.video && !mediaType.gif) { + throw 'MediaStream must have either audio or video tracks.'; + } + + if (!!mediaType.audio) { + recorderType = null; + if (typeof mediaType.audio === 'function') { + recorderType = mediaType.audio; + } + + this.audioRecorder = new RecordRTC(mediaStream, { + type: 'audio', + bufferSize: this.bufferSize, + sampleRate: this.sampleRate, + numberOfAudioChannels: this.numberOfAudioChannels || 2, + disableLogs: this.disableLogs, + recorderType: recorderType, + mimeType: mimeType.audio, + timeSlice: this.timeSlice, + onTimeStamp: this.onTimeStamp + }); + + if (!mediaType.video) { + this.audioRecorder.startRecording(); + } + } + + if (!!mediaType.video) { + recorderType = null; + if (typeof mediaType.video === 'function') { + recorderType = mediaType.video; + } + + var newStream = mediaStream; + + if (isMediaRecorderCompatible() && !!mediaType.audio && typeof mediaType.audio === 'function') { + var videoTrack = getTracks(mediaStream, 'video')[0]; + + if (isFirefox) { + newStream = new MediaStream(); + newStream.addTrack(videoTrack); + + if (recorderType && recorderType === WhammyRecorder) { + // Firefox does NOT supports webp-encoding yet + // But Firefox do supports WebAssemblyRecorder + recorderType = MediaStreamRecorder; + } + } else { + newStream = new MediaStream(); + newStream.addTrack(videoTrack); + } + } + + this.videoRecorder = new RecordRTC(newStream, { + type: 'video', + video: this.video, + canvas: this.canvas, + frameInterval: this.frameInterval || 10, + disableLogs: this.disableLogs, + recorderType: recorderType, + mimeType: mimeType.video, + timeSlice: this.timeSlice, + onTimeStamp: this.onTimeStamp, + workerPath: this.workerPath, + webAssemblyPath: this.webAssemblyPath, + frameRate: this.frameRate, // used by WebAssemblyRecorder; values: usually 30; accepts any. + bitrate: this.bitrate // used by WebAssemblyRecorder; values: 0 to 1000+ + }); + + if (!mediaType.audio) { + this.videoRecorder.startRecording(); + } + } + + if (!!mediaType.audio && !!mediaType.video) { + var self = this; + + var isSingleRecorder = isMediaRecorderCompatible() === true; + + if (mediaType.audio instanceof StereoAudioRecorder && !!mediaType.video) { + isSingleRecorder = false; + } else if (mediaType.audio !== true && mediaType.video !== true && mediaType.audio !== mediaType.video) { + isSingleRecorder = false; + } + + if (isSingleRecorder === true) { + self.audioRecorder = null; + self.videoRecorder.startRecording(); + } else { + self.videoRecorder.initRecorder(function() { + self.audioRecorder.initRecorder(function() { + // Both recorders are ready to record things accurately + self.videoRecorder.startRecording(); + self.audioRecorder.startRecording(); + }); + }); + } + } + + if (!!mediaType.gif) { + recorderType = null; + if (typeof mediaType.gif === 'function') { + recorderType = mediaType.gif; + } + this.gifRecorder = new RecordRTC(mediaStream, { + type: 'gif', + frameRate: this.frameRate || 200, + quality: this.quality || 10, + disableLogs: this.disableLogs, + recorderType: recorderType, + mimeType: mimeType.gif + }); + this.gifRecorder.startRecording(); + } + }; + + /** + * This method stops recording. + * @param {function} callback - Callback function is invoked when all encoders finished their jobs. + * @method + * @memberof MRecordRTC + * @example + * recorder.stopRecording(function(recording){ + * var audioBlob = recording.audio; + * var videoBlob = recording.video; + * var gifBlob = recording.gif; + * }); + */ + this.stopRecording = function(callback) { + callback = callback || function() {}; + + if (this.audioRecorder) { + this.audioRecorder.stopRecording(function(blobURL) { + callback(blobURL, 'audio'); + }); + } + + if (this.videoRecorder) { + this.videoRecorder.stopRecording(function(blobURL) { + callback(blobURL, 'video'); + }); + } + + if (this.gifRecorder) { + this.gifRecorder.stopRecording(function(blobURL) { + callback(blobURL, 'gif'); + }); + } + }; + + /** + * This method pauses recording. + * @method + * @memberof MRecordRTC + * @example + * recorder.pauseRecording(); + */ + this.pauseRecording = function() { + if (this.audioRecorder) { + this.audioRecorder.pauseRecording(); + } + + if (this.videoRecorder) { + this.videoRecorder.pauseRecording(); + } + + if (this.gifRecorder) { + this.gifRecorder.pauseRecording(); + } + }; + + /** + * This method resumes recording. + * @method + * @memberof MRecordRTC + * @example + * recorder.resumeRecording(); + */ + this.resumeRecording = function() { + if (this.audioRecorder) { + this.audioRecorder.resumeRecording(); + } + + if (this.videoRecorder) { + this.videoRecorder.resumeRecording(); + } + + if (this.gifRecorder) { + this.gifRecorder.resumeRecording(); + } + }; + + /** + * This method can be used to manually get all recorded blobs. + * @param {function} callback - All recorded blobs are passed back to the "callback" function. + * @method + * @memberof MRecordRTC + * @example + * recorder.getBlob(function(recording){ + * var audioBlob = recording.audio; + * var videoBlob = recording.video; + * var gifBlob = recording.gif; + * }); + * // or + * var audioBlob = recorder.getBlob().audio; + * var videoBlob = recorder.getBlob().video; + */ + this.getBlob = function(callback) { + var output = {}; + + if (this.audioRecorder) { + output.audio = this.audioRecorder.getBlob(); + } + + if (this.videoRecorder) { + output.video = this.videoRecorder.getBlob(); + } + + if (this.gifRecorder) { + output.gif = this.gifRecorder.getBlob(); + } + + if (callback) { + callback(output); + } + + return output; + }; + + /** + * Destroy all recorder instances. + * @method + * @memberof MRecordRTC + * @example + * recorder.destroy(); + */ + this.destroy = function() { + if (this.audioRecorder) { + this.audioRecorder.destroy(); + this.audioRecorder = null; + } + + if (this.videoRecorder) { + this.videoRecorder.destroy(); + this.videoRecorder = null; + } + + if (this.gifRecorder) { + this.gifRecorder.destroy(); + this.gifRecorder = null; + } + }; + + /** + * This method can be used to manually get all recorded blobs' DataURLs. + * @param {function} callback - All recorded blobs' DataURLs are passed back to the "callback" function. + * @method + * @memberof MRecordRTC + * @example + * recorder.getDataURL(function(recording){ + * var audioDataURL = recording.audio; + * var videoDataURL = recording.video; + * var gifDataURL = recording.gif; + * }); + */ + this.getDataURL = function(callback) { + this.getBlob(function(blob) { + if (blob.audio && blob.video) { + getDataURL(blob.audio, function(_audioDataURL) { + getDataURL(blob.video, function(_videoDataURL) { + callback({ + audio: _audioDataURL, + video: _videoDataURL + }); + }); + }); + } else if (blob.audio) { + getDataURL(blob.audio, function(_audioDataURL) { + callback({ + audio: _audioDataURL + }); + }); + } else if (blob.video) { + getDataURL(blob.video, function(_videoDataURL) { + callback({ + video: _videoDataURL + }); + }); + } + }); + + function getDataURL(blob, callback00) { + if (typeof Worker !== 'undefined') { + var webWorker = processInWebWorker(function readFile(_blob) { + postMessage(new FileReaderSync().readAsDataURL(_blob)); + }); + + webWorker.onmessage = function(event) { + callback00(event.data); + }; + + webWorker.postMessage(blob); + } else { + var reader = new FileReader(); + reader.readAsDataURL(blob); + reader.onload = function(event) { + callback00(event.target.result); + }; + } + } + + function processInWebWorker(_function) { + var blob = URL.createObjectURL(new Blob([_function.toString(), + 'this.onmessage = function (eee) {' + _function.name + '(eee.data);}' + ], { + type: 'application/javascript' + })); + + var worker = new Worker(blob); + var url; + if (typeof URL !== 'undefined') { + url = URL; + } else if (typeof webkitURL !== 'undefined') { + url = webkitURL; + } else { + throw 'Neither URL nor webkitURL detected.'; + } + url.revokeObjectURL(blob); + return worker; + } + }; + + /** + * This method can be used to ask {@link MRecordRTC} to write all recorded blobs into IndexedDB storage. + * @method + * @memberof MRecordRTC + * @example + * recorder.writeToDisk(); + */ + this.writeToDisk = function() { + RecordRTC.writeToDisk({ + audio: this.audioRecorder, + video: this.videoRecorder, + gif: this.gifRecorder + }); + }; + + /** + * This method can be used to invoke a save-as dialog for all recorded blobs. + * @param {object} args - {audio: 'audio-name', video: 'video-name', gif: 'gif-name'} + * @method + * @memberof MRecordRTC + * @example + * recorder.save({ + * audio: 'audio-file-name', + * video: 'video-file-name', + * gif : 'gif-file-name' + * }); + */ + this.save = function(args) { + args = args || { + audio: true, + video: true, + gif: true + }; + + if (!!args.audio && this.audioRecorder) { + this.audioRecorder.save(typeof args.audio === 'string' ? args.audio : ''); + } + + if (!!args.video && this.videoRecorder) { + this.videoRecorder.save(typeof args.video === 'string' ? args.video : ''); + } + if (!!args.gif && this.gifRecorder) { + this.gifRecorder.save(typeof args.gif === 'string' ? args.gif : ''); + } + }; + } + + /** + * This method can be used to get all recorded blobs from IndexedDB storage. + * @param {string} type - 'all' or 'audio' or 'video' or 'gif' + * @param {function} callback - Callback function to get all stored blobs. + * @method + * @memberof MRecordRTC + * @example + * MRecordRTC.getFromDisk('all', function(dataURL, type){ + * if(type === 'audio') { } + * if(type === 'video') { } + * if(type === 'gif') { } + * }); + */ + MRecordRTC.getFromDisk = RecordRTC.getFromDisk; + + /** + * This method can be used to store recorded blobs into IndexedDB storage. + * @param {object} options - {audio: Blob, video: Blob, gif: Blob} + * @method + * @memberof MRecordRTC + * @example + * MRecordRTC.writeToDisk({ + * audio: audioBlob, + * video: videoBlob, + * gif : gifBlob + * }); + */ + MRecordRTC.writeToDisk = RecordRTC.writeToDisk; + + if (typeof RecordRTC !== 'undefined') { + RecordRTC.MRecordRTC = MRecordRTC; + } + + var browserFakeUserAgent = 'Fake/5.0 (FakeOS) AppleWebKit/123 (KHTML, like Gecko) Fake/12.3.4567.89 Fake/123.45'; + + (function(that) { + if (!that) { + return; + } + + if (typeof window !== 'undefined') { + return; + } + + if (typeof commonjsGlobal === 'undefined') { + return; + } + + commonjsGlobal.navigator = { + userAgent: browserFakeUserAgent, + getUserMedia: function() {} + }; + + if (!commonjsGlobal.console) { + commonjsGlobal.console = {}; + } + + if (typeof commonjsGlobal.console.log === 'undefined' || typeof commonjsGlobal.console.error === 'undefined') { + commonjsGlobal.console.error = commonjsGlobal.console.log = commonjsGlobal.console.log || function() { + console.log(arguments); + }; + } + + if (typeof document === 'undefined') { + /*global document:true */ + that.document = { + documentElement: { + appendChild: function() { + return ''; + } + } + }; + + document.createElement = document.captureStream = document.mozCaptureStream = function() { + var obj = { + getContext: function() { + return obj; + }, + play: function() {}, + pause: function() {}, + drawImage: function() {}, + toDataURL: function() { + return ''; + }, + style: {} + }; + return obj; + }; + + that.HTMLVideoElement = function() {}; + } + + if (typeof location === 'undefined') { + /*global location:true */ + that.location = { + protocol: 'file:', + href: '', + hash: '' + }; + } + + if (typeof screen === 'undefined') { + /*global screen:true */ + that.screen = { + width: 0, + height: 0 + }; + } + + if (typeof URL === 'undefined') { + /*global screen:true */ + that.URL = { + createObjectURL: function() { + return ''; + }, + revokeObjectURL: function() { + return ''; + } + }; + } + + /*global window:true */ + that.window = commonjsGlobal; + })(typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : null); + + // _____________________________ + // Cross-Browser-Declarations.js + + // animation-frame used in WebM recording + + /*jshint -W079 */ + var requestAnimationFrame = window.requestAnimationFrame; + if (typeof requestAnimationFrame === 'undefined') { + if (typeof webkitRequestAnimationFrame !== 'undefined') { + /*global requestAnimationFrame:true */ + requestAnimationFrame = webkitRequestAnimationFrame; + } else if (typeof mozRequestAnimationFrame !== 'undefined') { + /*global requestAnimationFrame:true */ + requestAnimationFrame = mozRequestAnimationFrame; + } else if (typeof msRequestAnimationFrame !== 'undefined') { + /*global requestAnimationFrame:true */ + requestAnimationFrame = msRequestAnimationFrame; + } else if (typeof requestAnimationFrame === 'undefined') { + // via: https://gist.github.com/paulirish/1579671 + var lastTime = 0; + + /*global requestAnimationFrame:true */ + requestAnimationFrame = function(callback, element) { + var currTime = new Date().getTime(); + var timeToCall = Math.max(0, 16 - (currTime - lastTime)); + var id = setTimeout(function() { + callback(currTime + timeToCall); + }, timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + } + } + + /*jshint -W079 */ + var cancelAnimationFrame = window.cancelAnimationFrame; + if (typeof cancelAnimationFrame === 'undefined') { + if (typeof webkitCancelAnimationFrame !== 'undefined') { + /*global cancelAnimationFrame:true */ + cancelAnimationFrame = webkitCancelAnimationFrame; + } else if (typeof mozCancelAnimationFrame !== 'undefined') { + /*global cancelAnimationFrame:true */ + cancelAnimationFrame = mozCancelAnimationFrame; + } else if (typeof msCancelAnimationFrame !== 'undefined') { + /*global cancelAnimationFrame:true */ + cancelAnimationFrame = msCancelAnimationFrame; + } else if (typeof cancelAnimationFrame === 'undefined') { + /*global cancelAnimationFrame:true */ + cancelAnimationFrame = function(id) { + clearTimeout(id); + }; + } + } + + // WebAudio API representer + var AudioContext = window.AudioContext; + + if (typeof AudioContext === 'undefined') { + if (typeof webkitAudioContext !== 'undefined') { + /*global AudioContext:true */ + AudioContext = webkitAudioContext; + } + + if (typeof mozAudioContext !== 'undefined') { + /*global AudioContext:true */ + AudioContext = mozAudioContext; + } + } + + /*jshint -W079 */ + var URL = window.URL; + + if (typeof URL === 'undefined' && typeof webkitURL !== 'undefined') { + /*global URL:true */ + URL = webkitURL; + } + + if (typeof navigator !== 'undefined' && typeof navigator.getUserMedia === 'undefined') { // maybe window.navigator? + if (typeof navigator.webkitGetUserMedia !== 'undefined') { + navigator.getUserMedia = navigator.webkitGetUserMedia; + } + + if (typeof navigator.mozGetUserMedia !== 'undefined') { + navigator.getUserMedia = navigator.mozGetUserMedia; + } + } + + var isEdge = navigator.userAgent.indexOf('Edge') !== -1 && (!!navigator.msSaveBlob || !!navigator.msSaveOrOpenBlob); + var isOpera = !!window.opera || navigator.userAgent.indexOf('OPR/') !== -1; + var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1 && ('netscape' in window) && / rv:/.test(navigator.userAgent); + var isChrome = (!isOpera && !isEdge && !!navigator.webkitGetUserMedia) || isElectron() || navigator.userAgent.toLowerCase().indexOf('chrome/') !== -1; + + var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); + + if (isSafari && !isChrome && navigator.userAgent.indexOf('CriOS') !== -1) { + isSafari = false; + isChrome = true; + } + + var MediaStream = window.MediaStream; + + if (typeof MediaStream === 'undefined' && typeof webkitMediaStream !== 'undefined') { + MediaStream = webkitMediaStream; + } + + /*global MediaStream:true */ + if (typeof MediaStream !== 'undefined') { + // override "stop" method for all browsers + if (typeof MediaStream.prototype.stop === 'undefined') { + MediaStream.prototype.stop = function() { + this.getTracks().forEach(function(track) { + track.stop(); + }); + }; + } + } + + // below function via: http://goo.gl/B3ae8c + /** + * Return human-readable file size. + * @param {number} bytes - Pass bytes and get formatted string. + * @returns {string} - formatted string + * @example + * bytesToSize(1024*1024*5) === '5 GB' + * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code} + */ + function bytesToSize(bytes) { + var k = 1000; + var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; + if (bytes === 0) { + return '0 Bytes'; + } + var i = parseInt(Math.floor(Math.log(bytes) / Math.log(k)), 10); + return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i]; + } + + /** + * @param {Blob} file - File or Blob object. This parameter is required. + * @param {string} fileName - Optional file name e.g. "Recorded-Video.webm" + * @example + * invokeSaveAsDialog(blob or file, [optional] fileName); + * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code} + */ + function invokeSaveAsDialog(file, fileName) { + if (!file) { + throw 'Blob object is required.'; + } + + if (!file.type) { + try { + file.type = 'video/webm'; + } catch (e) {} + } + + var fileExtension = (file.type || 'video/webm').split('/')[1]; + if (fileExtension.indexOf(';') !== -1) { + // extended mimetype, e.g. 'video/webm;codecs=vp8,opus' + fileExtension = fileExtension.split(';')[0]; + } + if (fileName && fileName.indexOf('.') !== -1) { + var splitted = fileName.split('.'); + fileName = splitted[0]; + fileExtension = splitted[1]; + } + + var fileFullName = (fileName || (Math.round(Math.random() * 9999999999) + 888888888)) + '.' + fileExtension; + + if (typeof navigator.msSaveOrOpenBlob !== 'undefined') { + return navigator.msSaveOrOpenBlob(file, fileFullName); + } else if (typeof navigator.msSaveBlob !== 'undefined') { + return navigator.msSaveBlob(file, fileFullName); + } + + var hyperlink = document.createElement('a'); + hyperlink.href = URL.createObjectURL(file); + hyperlink.download = fileFullName; + + hyperlink.style = 'display:none;opacity:0;color:transparent;'; + (document.body || document.documentElement).appendChild(hyperlink); + + if (typeof hyperlink.click === 'function') { + hyperlink.click(); + } else { + hyperlink.target = '_blank'; + hyperlink.dispatchEvent(new MouseEvent('click', { + view: window, + bubbles: true, + cancelable: true + })); + } + + URL.revokeObjectURL(hyperlink.href); + } + + /** + * from: https://github.com/cheton/is-electron/blob/master/index.js + **/ + function isElectron() { + // Renderer process + if (typeof window !== 'undefined' && typeof window.process === 'object' && window.process.type === 'renderer') { + return true; + } + + // Main process + if (typeof process !== 'undefined' && typeof process.versions === 'object' && !!process.versions.electron) { + return true; + } + + // Detect the user agent when the `nodeIntegration` option is set to true + if (typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0) { + return true; + } + + return false; + } + + function getTracks(stream, kind) { + if (!stream || !stream.getTracks) { + return []; + } + + return stream.getTracks().filter(function(t) { + return t.kind === (kind || 'audio'); + }); + } + + function setSrcObject(stream, element) { + if ('srcObject' in element) { + element.srcObject = stream; + } else if ('mozSrcObject' in element) { + element.mozSrcObject = stream; + } else { + element.srcObject = stream; + } + } + + /** + * @param {Blob} file - File or Blob object. + * @param {function} callback - Callback function. + * @example + * getSeekableBlob(blob or file, callback); + * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code} + */ + function getSeekableBlob(inputBlob, callback) { + // EBML.js copyrights goes to: https://github.com/legokichi/ts-ebml + if (typeof EBML === 'undefined') { + throw new Error('Please link: https://www.webrtc-experiment.com/EBML.js'); + } + + var reader = new EBML.Reader(); + var decoder = new EBML.Decoder(); + var tools = EBML.tools; + + var fileReader = new FileReader(); + fileReader.onload = function(e) { + var ebmlElms = decoder.decode(this.result); + ebmlElms.forEach(function(element) { + reader.read(element); + }); + reader.stop(); + var refinedMetadataBuf = tools.makeMetadataSeekable(reader.metadatas, reader.duration, reader.cues); + var body = this.result.slice(reader.metadataSize); + var newBlob = new Blob([refinedMetadataBuf, body], { + type: 'video/webm' + }); + + callback(newBlob); + }; + fileReader.readAsArrayBuffer(inputBlob); + } + + if (typeof RecordRTC !== 'undefined') { + RecordRTC.invokeSaveAsDialog = invokeSaveAsDialog; + RecordRTC.getTracks = getTracks; + RecordRTC.getSeekableBlob = getSeekableBlob; + RecordRTC.bytesToSize = bytesToSize; + RecordRTC.isElectron = isElectron; + } + + // __________ (used to handle stuff like http://goo.gl/xmE5eg) issue #129 + // Storage.js + + /** + * Storage is a standalone object used by {@link RecordRTC} to store reusable objects e.g. "new AudioContext". + * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT} + * @author {@link https://MuazKhan.com|Muaz Khan} + * @example + * Storage.AudioContext === webkitAudioContext + * @property {webkitAudioContext} AudioContext - Keeps a reference to AudioContext object. + * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code} + */ + + var Storage = {}; + + if (typeof AudioContext !== 'undefined') { + Storage.AudioContext = AudioContext; + } else if (typeof webkitAudioContext !== 'undefined') { + Storage.AudioContext = webkitAudioContext; + } + + if (typeof RecordRTC !== 'undefined') { + RecordRTC.Storage = Storage; + } + + function isMediaRecorderCompatible() { + if (isFirefox || isSafari || isEdge) { + return true; + } + var nAgt = navigator.userAgent; + var fullVersion = '' + parseFloat(navigator.appVersion); + var majorVersion = parseInt(navigator.appVersion, 10); + var verOffset, ix; + + if (isChrome || isOpera) { + verOffset = nAgt.indexOf('Chrome'); + fullVersion = nAgt.substring(verOffset + 7); + } + + // trim the fullVersion string at semicolon/space if present + if ((ix = fullVersion.indexOf(';')) !== -1) { + fullVersion = fullVersion.substring(0, ix); + } + + if ((ix = fullVersion.indexOf(' ')) !== -1) { + fullVersion = fullVersion.substring(0, ix); + } + + majorVersion = parseInt('' + fullVersion, 10); + + if (isNaN(majorVersion)) { + fullVersion = '' + parseFloat(navigator.appVersion); + majorVersion = parseInt(navigator.appVersion, 10); + } + + return majorVersion >= 49; + } + + // ______________________ + // MediaStreamRecorder.js + + /** + * MediaStreamRecorder is an abstraction layer for {@link https://w3c.github.io/mediacapture-record/MediaRecorder.html|MediaRecorder API}. It is used by {@link RecordRTC} to record MediaStream(s) in both Chrome and Firefox. + * @summary Runs top over {@link https://w3c.github.io/mediacapture-record/MediaRecorder.html|MediaRecorder API}. + * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT} + * @author {@link https://github.com/muaz-khan|Muaz Khan} + * @typedef MediaStreamRecorder + * @class + * @example + * var config = { + * mimeType: 'video/webm', // vp8, vp9, h264, mkv, opus/vorbis + * audioBitsPerSecond : 256 * 8 * 1024, + * videoBitsPerSecond : 256 * 8 * 1024, + * bitsPerSecond: 256 * 8 * 1024, // if this is provided, skip above two + * checkForInactiveTracks: true, + * timeSlice: 1000, // concatenate intervals based blobs + * ondataavailable: function() {} // get intervals based blobs + * } + * var recorder = new MediaStreamRecorder(mediaStream, config); + * recorder.record(); + * recorder.stop(function(blob) { + * video.src = URL.createObjectURL(blob); + * + * // or + * var blob = recorder.blob; + * }); + * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code} + * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API. + * @param {object} config - {disableLogs:true, initCallback: function, mimeType: "video/webm", timeSlice: 1000} + * @throws Will throw an error if first argument "MediaStream" is missing. Also throws error if "MediaRecorder API" are not supported by the browser. + */ + + function MediaStreamRecorder(mediaStream, config) { + var self = this; + + if (typeof mediaStream === 'undefined') { + throw 'First argument "MediaStream" is required.'; + } + + if (typeof MediaRecorder === 'undefined') { + throw 'Your browser does not support the Media Recorder API. Please try other modules e.g. WhammyRecorder or StereoAudioRecorder.'; + } + + config = config || { + // bitsPerSecond: 256 * 8 * 1024, + mimeType: 'video/webm' + }; + + if (config.type === 'audio') { + if (getTracks(mediaStream, 'video').length && getTracks(mediaStream, 'audio').length) { + var stream; + if (!!navigator.mozGetUserMedia) { + stream = new MediaStream(); + stream.addTrack(getTracks(mediaStream, 'audio')[0]); + } else { + // webkitMediaStream + stream = new MediaStream(getTracks(mediaStream, 'audio')); + } + mediaStream = stream; + } + + if (!config.mimeType || config.mimeType.toString().toLowerCase().indexOf('audio') === -1) { + config.mimeType = isChrome ? 'audio/webm' : 'audio/ogg'; + } + + if (config.mimeType && config.mimeType.toString().toLowerCase() !== 'audio/ogg' && !!navigator.mozGetUserMedia) { + // forcing better codecs on Firefox (via #166) + config.mimeType = 'audio/ogg'; + } + } + + var arrayOfBlobs = []; + + /** + * This method returns array of blobs. Use only with "timeSlice". Its useful to preview recording anytime, without using the "stop" method. + * @method + * @memberof MediaStreamRecorder + * @example + * var arrayOfBlobs = recorder.getArrayOfBlobs(); + * @returns {Array} Returns array of recorded blobs. + */ + this.getArrayOfBlobs = function() { + return arrayOfBlobs; + }; + + /** + * This method records MediaStream. + * @method + * @memberof MediaStreamRecorder + * @example + * recorder.record(); + */ + this.record = function() { + // set defaults + self.blob = null; + self.clearRecordedData(); + self.timestamps = []; + allStates = []; + arrayOfBlobs = []; + + var recorderHints = config; + + if (!config.disableLogs) { + console.log('Passing following config over MediaRecorder API.', recorderHints); + } + + if (mediaRecorder) { + // mandatory to make sure Firefox doesn't fails to record streams 3-4 times without reloading the page. + mediaRecorder = null; + } + + if (isChrome && !isMediaRecorderCompatible()) { + // to support video-only recording on stable + recorderHints = 'video/vp8'; + } + + if (typeof MediaRecorder.isTypeSupported === 'function' && recorderHints.mimeType) { + if (!MediaRecorder.isTypeSupported(recorderHints.mimeType)) { + if (!config.disableLogs) { + console.warn('MediaRecorder API seems unable to record mimeType:', recorderHints.mimeType); + } + + recorderHints.mimeType = config.type === 'audio' ? 'audio/webm' : 'video/webm'; + } + } + + // using MediaRecorder API here + try { + mediaRecorder = new MediaRecorder(mediaStream, recorderHints); + + // reset + config.mimeType = recorderHints.mimeType; + } catch (e) { + // chrome-based fallback + mediaRecorder = new MediaRecorder(mediaStream); + } + + // old hack? + if (recorderHints.mimeType && !MediaRecorder.isTypeSupported && 'canRecordMimeType' in mediaRecorder && mediaRecorder.canRecordMimeType(recorderHints.mimeType) === false) { + if (!config.disableLogs) { + console.warn('MediaRecorder API seems unable to record mimeType:', recorderHints.mimeType); + } + } + + // Dispatching OnDataAvailable Handler + mediaRecorder.ondataavailable = function(e) { + if (e.data) { + allStates.push('ondataavailable: ' + bytesToSize(e.data.size)); + } + + if (typeof config.timeSlice === 'number') { + if (e.data && e.data.size) { + arrayOfBlobs.push(e.data); + updateTimeStamp(); + + if (typeof config.ondataavailable === 'function') { + // intervals based blobs + var blob = config.getNativeBlob ? e.data : new Blob([e.data], { + type: getMimeType(recorderHints) + }); + config.ondataavailable(blob); + } + } + return; + } + + if (!e.data || !e.data.size || e.data.size < 100 || self.blob) { + // make sure that stopRecording always getting fired + // even if there is invalid data + if (self.recordingCallback) { + self.recordingCallback(new Blob([], { + type: getMimeType(recorderHints) + })); + self.recordingCallback = null; + } + return; + } + + self.blob = config.getNativeBlob ? e.data : new Blob([e.data], { + type: getMimeType(recorderHints) + }); + + if (self.recordingCallback) { + self.recordingCallback(self.blob); + self.recordingCallback = null; + } + }; + + mediaRecorder.onstart = function() { + allStates.push('started'); + }; + + mediaRecorder.onpause = function() { + allStates.push('paused'); + }; + + mediaRecorder.onresume = function() { + allStates.push('resumed'); + }; + + mediaRecorder.onstop = function() { + allStates.push('stopped'); + }; + + mediaRecorder.onerror = function(error) { + if (!error) { + return; + } + + if (!error.name) { + error.name = 'UnknownError'; + } + + allStates.push('error: ' + error); + + if (!config.disableLogs) { + // via: https://w3c.github.io/mediacapture-record/MediaRecorder.html#exception-summary + if (error.name.toString().toLowerCase().indexOf('invalidstate') !== -1) { + console.error('The MediaRecorder is not in a state in which the proposed operation is allowed to be executed.', error); + } else if (error.name.toString().toLowerCase().indexOf('notsupported') !== -1) { + console.error('MIME type (', recorderHints.mimeType, ') is not supported.', error); + } else if (error.name.toString().toLowerCase().indexOf('security') !== -1) { + console.error('MediaRecorder security error', error); + } + + // older code below + else if (error.name === 'OutOfMemory') { + console.error('The UA has exhaused the available memory. User agents SHOULD provide as much additional information as possible in the message attribute.', error); + } else if (error.name === 'IllegalStreamModification') { + console.error('A modification to the stream has occurred that makes it impossible to continue recording. An example would be the addition of a Track while recording is occurring. User agents SHOULD provide as much additional information as possible in the message attribute.', error); + } else if (error.name === 'OtherRecordingError') { + console.error('Used for an fatal error other than those listed above. User agents SHOULD provide as much additional information as possible in the message attribute.', error); + } else if (error.name === 'GenericError') { + console.error('The UA cannot provide the codec or recording option that has been requested.', error); + } else { + console.error('MediaRecorder Error', error); + } + } + + (function(looper) { + if (!self.manuallyStopped && mediaRecorder && mediaRecorder.state === 'inactive') { + delete config.timeslice; + + // 10 minutes, enough? + mediaRecorder.start(10 * 60 * 1000); + return; + } + + setTimeout(looper, 1000); + })(); + + if (mediaRecorder.state !== 'inactive' && mediaRecorder.state !== 'stopped') { + mediaRecorder.stop(); + } + }; + + if (typeof config.timeSlice === 'number') { + updateTimeStamp(); + mediaRecorder.start(config.timeSlice); + } else { + // default is 60 minutes; enough? + // use config => {timeSlice: 1000} otherwise + + mediaRecorder.start(3.6e+6); + } + + if (config.initCallback) { + config.initCallback(); // old code + } + }; + + /** + * @property {Array} timestamps - Array of time stamps + * @memberof MediaStreamRecorder + * @example + * console.log(recorder.timestamps); + */ + this.timestamps = []; + + function updateTimeStamp() { + self.timestamps.push(new Date().getTime()); + + if (typeof config.onTimeStamp === 'function') { + config.onTimeStamp(self.timestamps[self.timestamps.length - 1], self.timestamps); + } + } + + function getMimeType(secondObject) { + if (mediaRecorder && mediaRecorder.mimeType) { + return mediaRecorder.mimeType; + } + + return secondObject.mimeType || 'video/webm'; + } + + /** + * This method stops recording MediaStream. + * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee. + * @method + * @memberof MediaStreamRecorder + * @example + * recorder.stop(function(blob) { + * video.src = URL.createObjectURL(blob); + * }); + */ + this.stop = function(callback) { + callback = callback || function() {}; + + self.manuallyStopped = true; // used inside the mediaRecorder.onerror + + if (!mediaRecorder) { + return; + } + + this.recordingCallback = callback; + + if (mediaRecorder.state === 'recording') { + mediaRecorder.stop(); + } + + if (typeof config.timeSlice === 'number') { + setTimeout(function() { + self.blob = new Blob(arrayOfBlobs, { + type: getMimeType(config) + }); + + self.recordingCallback(self.blob); + }, 100); + } + }; + + /** + * This method pauses the recording process. + * @method + * @memberof MediaStreamRecorder + * @example + * recorder.pause(); + */ + this.pause = function() { + if (!mediaRecorder) { + return; + } + + if (mediaRecorder.state === 'recording') { + mediaRecorder.pause(); + } + }; + + /** + * This method resumes the recording process. + * @method + * @memberof MediaStreamRecorder + * @example + * recorder.resume(); + */ + this.resume = function() { + if (!mediaRecorder) { + return; + } + + if (mediaRecorder.state === 'paused') { + mediaRecorder.resume(); + } + }; + + /** + * This method resets currently recorded data. + * @method + * @memberof MediaStreamRecorder + * @example + * recorder.clearRecordedData(); + */ + this.clearRecordedData = function() { + if (mediaRecorder && mediaRecorder.state === 'recording') { + self.stop(clearRecordedDataCB); + } + + clearRecordedDataCB(); + }; + + function clearRecordedDataCB() { + arrayOfBlobs = []; + mediaRecorder = null; + self.timestamps = []; + } + + // Reference to "MediaRecorder" object + var mediaRecorder; + + /** + * Access to native MediaRecorder API + * @method + * @memberof MediaStreamRecorder + * @instance + * @example + * var internal = recorder.getInternalRecorder(); + * internal.ondataavailable = function() {}; // override + * internal.stream, internal.onpause, internal.onstop, etc. + * @returns {Object} Returns internal recording object. + */ + this.getInternalRecorder = function() { + return mediaRecorder; + }; + + function isMediaStreamActive() { + if ('active' in mediaStream) { + if (!mediaStream.active) { + return false; + } + } else if ('ended' in mediaStream) { // old hack + if (mediaStream.ended) { + return false; + } + } + return true; + } + + /** + * @property {Blob} blob - Recorded data as "Blob" object. + * @memberof MediaStreamRecorder + * @example + * recorder.stop(function() { + * var blob = recorder.blob; + * }); + */ + this.blob = null; + + + /** + * Get MediaRecorder readonly state. + * @method + * @memberof MediaStreamRecorder + * @example + * var state = recorder.getState(); + * @returns {String} Returns recording state. + */ + this.getState = function() { + if (!mediaRecorder) { + return 'inactive'; + } + + return mediaRecorder.state || 'inactive'; + }; + + // list of all recording states + var allStates = []; + + /** + * Get MediaRecorder all recording states. + * @method + * @memberof MediaStreamRecorder + * @example + * var state = recorder.getAllStates(); + * @returns {Array} Returns all recording states + */ + this.getAllStates = function() { + return allStates; + }; + + // if any Track within the MediaStream is muted or not enabled at any time, + // the browser will only record black frames + // or silence since that is the content produced by the Track + // so we need to stopRecording as soon as any single track ends. + if (typeof config.checkForInactiveTracks === 'undefined') { + config.checkForInactiveTracks = false; // disable to minimize CPU usage + } + + var self = this; + + // this method checks if media stream is stopped + // or if any track is ended. + (function looper() { + if (!mediaRecorder || config.checkForInactiveTracks === false) { + return; + } + + if (isMediaStreamActive() === false) { + if (!config.disableLogs) { + console.log('MediaStream seems stopped.'); + } + self.stop(); + return; + } + + setTimeout(looper, 1000); // check every second + })(); + + // for debugging + this.name = 'MediaStreamRecorder'; + this.toString = function() { + return this.name; + }; + } + + if (typeof RecordRTC !== 'undefined') { + RecordRTC.MediaStreamRecorder = MediaStreamRecorder; + } + + // source code from: http://typedarray.org/wp-content/projects/WebAudioRecorder/script.js + // https://github.com/mattdiamond/Recorderjs#license-mit + // ______________________ + // StereoAudioRecorder.js + + /** + * StereoAudioRecorder is a standalone class used by {@link RecordRTC} to bring "stereo" audio-recording in chrome. + * @summary JavaScript standalone object for stereo audio recording. + * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT} + * @author {@link https://MuazKhan.com|Muaz Khan} + * @typedef StereoAudioRecorder + * @class + * @example + * var recorder = new StereoAudioRecorder(MediaStream, { + * sampleRate: 44100, + * bufferSize: 4096 + * }); + * recorder.record(); + * recorder.stop(function(blob) { + * video.src = URL.createObjectURL(blob); + * }); + * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code} + * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API. + * @param {object} config - {sampleRate: 44100, bufferSize: 4096, numberOfAudioChannels: 1, etc.} + */ + + function StereoAudioRecorder(mediaStream, config) { + if (!getTracks(mediaStream, 'audio').length) { + throw 'Your stream has no audio tracks.'; + } + + config = config || {}; + + var self = this; + + // variables + var leftchannel = []; + var rightchannel = []; + var recording = false; + var recordingLength = 0; + var jsAudioNode; + + var numberOfAudioChannels = 2; + + /** + * Set sample rates such as 8K or 16K. Reference: http://stackoverflow.com/a/28977136/552182 + * @property {number} desiredSampRate - Desired Bits per sample * 1000 + * @memberof StereoAudioRecorder + * @instance + * @example + * var recorder = StereoAudioRecorder(mediaStream, { + * desiredSampRate: 16 * 1000 // bits-per-sample * 1000 + * }); + */ + var desiredSampRate = config.desiredSampRate; + + // backward compatibility + if (config.leftChannel === true) { + numberOfAudioChannels = 1; + } + + if (config.numberOfAudioChannels === 1) { + numberOfAudioChannels = 1; + } + + if (!numberOfAudioChannels || numberOfAudioChannels < 1) { + numberOfAudioChannels = 2; + } + + if (!config.disableLogs) { + console.log('StereoAudioRecorder is set to record number of channels: ' + numberOfAudioChannels); + } + + // if any Track within the MediaStream is muted or not enabled at any time, + // the browser will only record black frames + // or silence since that is the content produced by the Track + // so we need to stopRecording as soon as any single track ends. + if (typeof config.checkForInactiveTracks === 'undefined') { + config.checkForInactiveTracks = true; + } + + function isMediaStreamActive() { + if (config.checkForInactiveTracks === false) { + // always return "true" + return true; + } + + if ('active' in mediaStream) { + if (!mediaStream.active) { + return false; + } + } else if ('ended' in mediaStream) { // old hack + if (mediaStream.ended) { + return false; + } + } + return true; + } + + /** + * This method records MediaStream. + * @method + * @memberof StereoAudioRecorder + * @example + * recorder.record(); + */ + this.record = function() { + if (isMediaStreamActive() === false) { + throw 'Please make sure MediaStream is active.'; + } + + resetVariables(); + + isAudioProcessStarted = isPaused = false; + recording = true; + + if (typeof config.timeSlice !== 'undefined') { + looper(); + } + }; + + function mergeLeftRightBuffers(config, callback) { + function mergeAudioBuffers(config, cb) { + var numberOfAudioChannels = config.numberOfAudioChannels; + + // todo: "slice(0)" --- is it causes loop? Should be removed? + var leftBuffers = config.leftBuffers.slice(0); + var rightBuffers = config.rightBuffers.slice(0); + var sampleRate = config.sampleRate; + var internalInterleavedLength = config.internalInterleavedLength; + var desiredSampRate = config.desiredSampRate; + + if (numberOfAudioChannels === 2) { + leftBuffers = mergeBuffers(leftBuffers, internalInterleavedLength); + rightBuffers = mergeBuffers(rightBuffers, internalInterleavedLength); + + if (desiredSampRate) { + leftBuffers = interpolateArray(leftBuffers, desiredSampRate, sampleRate); + rightBuffers = interpolateArray(rightBuffers, desiredSampRate, sampleRate); + } + } + + if (numberOfAudioChannels === 1) { + leftBuffers = mergeBuffers(leftBuffers, internalInterleavedLength); + + if (desiredSampRate) { + leftBuffers = interpolateArray(leftBuffers, desiredSampRate, sampleRate); + } + } + + // set sample rate as desired sample rate + if (desiredSampRate) { + sampleRate = desiredSampRate; + } + + // for changing the sampling rate, reference: + // http://stackoverflow.com/a/28977136/552182 + function interpolateArray(data, newSampleRate, oldSampleRate) { + var fitCount = Math.round(data.length * (newSampleRate / oldSampleRate)); + var newData = []; + var springFactor = Number((data.length - 1) / (fitCount - 1)); + newData[0] = data[0]; + for (var i = 1; i < fitCount - 1; i++) { + var tmp = i * springFactor; + var before = Number(Math.floor(tmp)).toFixed(); + var after = Number(Math.ceil(tmp)).toFixed(); + var atPoint = tmp - before; + newData[i] = linearInterpolate(data[before], data[after], atPoint); + } + newData[fitCount - 1] = data[data.length - 1]; + return newData; + } + + function linearInterpolate(before, after, atPoint) { + return before + (after - before) * atPoint; + } + + function mergeBuffers(channelBuffer, rLength) { + var result = new Float64Array(rLength); + var offset = 0; + var lng = channelBuffer.length; + + for (var i = 0; i < lng; i++) { + var buffer = channelBuffer[i]; + result.set(buffer, offset); + offset += buffer.length; + } + + return result; + } + + function interleave(leftChannel, rightChannel) { + var length = leftChannel.length + rightChannel.length; + + var result = new Float64Array(length); + + var inputIndex = 0; + + for (var index = 0; index < length;) { + result[index++] = leftChannel[inputIndex]; + result[index++] = rightChannel[inputIndex]; + inputIndex++; + } + return result; + } + + function writeUTFBytes(view, offset, string) { + var lng = string.length; + for (var i = 0; i < lng; i++) { + view.setUint8(offset + i, string.charCodeAt(i)); + } + } + + // interleave both channels together + var interleaved; + + if (numberOfAudioChannels === 2) { + interleaved = interleave(leftBuffers, rightBuffers); + } + + if (numberOfAudioChannels === 1) { + interleaved = leftBuffers; + } + + var interleavedLength = interleaved.length; + + // create wav file + var resultingBufferLength = 44 + interleavedLength * 2; + + var buffer = new ArrayBuffer(resultingBufferLength); + + var view = new DataView(buffer); + + // RIFF chunk descriptor/identifier + writeUTFBytes(view, 0, 'RIFF'); + + // RIFF chunk length + // changed "44" to "36" via #401 + view.setUint32(4, 36 + interleavedLength * 2, true); + + // RIFF type + writeUTFBytes(view, 8, 'WAVE'); + + // format chunk identifier + // FMT sub-chunk + writeUTFBytes(view, 12, 'fmt '); + + // format chunk length + view.setUint32(16, 16, true); + + // sample format (raw) + view.setUint16(20, 1, true); + + // stereo (2 channels) + view.setUint16(22, numberOfAudioChannels, true); + + // sample rate + view.setUint32(24, sampleRate, true); + + // byte rate (sample rate * block align) + view.setUint32(28, sampleRate * numberOfAudioChannels * 2, true); + + // block align (channel count * bytes per sample) + view.setUint16(32, numberOfAudioChannels * 2, true); + + // bits per sample + view.setUint16(34, 16, true); + + // data sub-chunk + // data chunk identifier + writeUTFBytes(view, 36, 'data'); + + // data chunk length + view.setUint32(40, interleavedLength * 2, true); + + // write the PCM samples + var lng = interleavedLength; + var index = 44; + var volume = 1; + for (var i = 0; i < lng; i++) { + view.setInt16(index, interleaved[i] * (0x7FFF * volume), true); + index += 2; + } + + if (cb) { + return cb({ + buffer: buffer, + view: view + }); + } + + postMessage({ + buffer: buffer, + view: view + }); + } + + if (config.noWorker) { + mergeAudioBuffers(config, function(data) { + callback(data.buffer, data.view); + }); + return; + } + + + var webWorker = processInWebWorker(mergeAudioBuffers); + + webWorker.onmessage = function(event) { + callback(event.data.buffer, event.data.view); + + // release memory + URL.revokeObjectURL(webWorker.workerURL); + + // kill webworker (or Chrome will kill your page after ~25 calls) + webWorker.terminate(); + }; + + webWorker.postMessage(config); + } + + function processInWebWorker(_function) { + var workerURL = URL.createObjectURL(new Blob([_function.toString(), + ';this.onmessage = function (eee) {' + _function.name + '(eee.data);}' + ], { + type: 'application/javascript' + })); + + var worker = new Worker(workerURL); + worker.workerURL = workerURL; + return worker; + } + + /** + * This method stops recording MediaStream. + * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee. + * @method + * @memberof StereoAudioRecorder + * @example + * recorder.stop(function(blob) { + * video.src = URL.createObjectURL(blob); + * }); + */ + this.stop = function(callback) { + callback = callback || function() {}; + + // stop recording + recording = false; + + mergeLeftRightBuffers({ + desiredSampRate: desiredSampRate, + sampleRate: sampleRate, + numberOfAudioChannels: numberOfAudioChannels, + internalInterleavedLength: recordingLength, + leftBuffers: leftchannel, + rightBuffers: numberOfAudioChannels === 1 ? [] : rightchannel, + noWorker: config.noWorker + }, function(buffer, view) { + /** + * @property {Blob} blob - The recorded blob object. + * @memberof StereoAudioRecorder + * @example + * recorder.stop(function(){ + * var blob = recorder.blob; + * }); + */ + self.blob = new Blob([view], { + type: 'audio/wav' + }); + + /** + * @property {ArrayBuffer} buffer - The recorded buffer object. + * @memberof StereoAudioRecorder + * @example + * recorder.stop(function(){ + * var buffer = recorder.buffer; + * }); + */ + self.buffer = new ArrayBuffer(view.buffer.byteLength); + + /** + * @property {DataView} view - The recorded data-view object. + * @memberof StereoAudioRecorder + * @example + * recorder.stop(function(){ + * var view = recorder.view; + * }); + */ + self.view = view; + + self.sampleRate = desiredSampRate || sampleRate; + self.bufferSize = bufferSize; + + // recorded audio length + self.length = recordingLength; + + isAudioProcessStarted = false; + + if (callback) { + callback(self.blob); + } + }); + }; + + if (typeof RecordRTC.Storage === 'undefined') { + RecordRTC.Storage = { + AudioContextConstructor: null, + AudioContext: window.AudioContext || window.webkitAudioContext + }; + } + + if (!RecordRTC.Storage.AudioContextConstructor || RecordRTC.Storage.AudioContextConstructor.state === 'closed') { + RecordRTC.Storage.AudioContextConstructor = new RecordRTC.Storage.AudioContext(); + } + + var context = RecordRTC.Storage.AudioContextConstructor; + + // creates an audio node from the microphone incoming stream + var audioInput = context.createMediaStreamSource(mediaStream); + + var legalBufferValues = [0, 256, 512, 1024, 2048, 4096, 8192, 16384]; + + /** + * From the spec: This value controls how frequently the audioprocess event is + * dispatched and how many sample-frames need to be processed each call. + * Lower values for buffer size will result in a lower (better) latency. + * Higher values will be necessary to avoid audio breakup and glitches + * The size of the buffer (in sample-frames) which needs to + * be processed each time onprocessaudio is called. + * Legal values are (256, 512, 1024, 2048, 4096, 8192, 16384). + * @property {number} bufferSize - Buffer-size for how frequently the audioprocess event is dispatched. + * @memberof StereoAudioRecorder + * @example + * recorder = new StereoAudioRecorder(mediaStream, { + * bufferSize: 4096 + * }); + */ + + // "0" means, let chrome decide the most accurate buffer-size for current platform. + var bufferSize = typeof config.bufferSize === 'undefined' ? 4096 : config.bufferSize; + + if (legalBufferValues.indexOf(bufferSize) === -1) { + if (!config.disableLogs) { + console.log('Legal values for buffer-size are ' + JSON.stringify(legalBufferValues, null, '\t')); + } + } + + if (context.createJavaScriptNode) { + jsAudioNode = context.createJavaScriptNode(bufferSize, numberOfAudioChannels, numberOfAudioChannels); + } else if (context.createScriptProcessor) { + jsAudioNode = context.createScriptProcessor(bufferSize, numberOfAudioChannels, numberOfAudioChannels); + } else { + throw 'WebAudio API has no support on this browser.'; + } + + // connect the stream to the script processor + audioInput.connect(jsAudioNode); + + if (!config.bufferSize) { + bufferSize = jsAudioNode.bufferSize; // device buffer-size + } + + /** + * The sample rate (in sample-frames per second) at which the + * AudioContext handles audio. It is assumed that all AudioNodes + * in the context run at this rate. In making this assumption, + * sample-rate converters or "varispeed" processors are not supported + * in real-time processing. + * The sampleRate parameter describes the sample-rate of the + * linear PCM audio data in the buffer in sample-frames per second. + * An implementation must support sample-rates in at least + * the range 22050 to 96000. + * @property {number} sampleRate - Buffer-size for how frequently the audioprocess event is dispatched. + * @memberof StereoAudioRecorder + * @example + * recorder = new StereoAudioRecorder(mediaStream, { + * sampleRate: 44100 + * }); + */ + var sampleRate = typeof config.sampleRate !== 'undefined' ? config.sampleRate : context.sampleRate || 44100; + + if (sampleRate < 22050 || sampleRate > 96000) { + // Ref: http://stackoverflow.com/a/26303918/552182 + if (!config.disableLogs) { + console.log('sample-rate must be under range 22050 and 96000.'); + } + } + + if (!config.disableLogs) { + if (config.desiredSampRate) { + console.log('Desired sample-rate: ' + config.desiredSampRate); + } + } + + var isPaused = false; + /** + * This method pauses the recording process. + * @method + * @memberof StereoAudioRecorder + * @example + * recorder.pause(); + */ + this.pause = function() { + isPaused = true; + }; + + /** + * This method resumes the recording process. + * @method + * @memberof StereoAudioRecorder + * @example + * recorder.resume(); + */ + this.resume = function() { + if (isMediaStreamActive() === false) { + throw 'Please make sure MediaStream is active.'; + } + + if (!recording) { + if (!config.disableLogs) { + console.log('Seems recording has been restarted.'); + } + this.record(); + return; + } + + isPaused = false; + }; + + /** + * This method resets currently recorded data. + * @method + * @memberof StereoAudioRecorder + * @example + * recorder.clearRecordedData(); + */ + this.clearRecordedData = function() { + config.checkForInactiveTracks = false; + + if (recording) { + this.stop(clearRecordedDataCB); + } + + clearRecordedDataCB(); + }; + + function resetVariables() { + leftchannel = []; + rightchannel = []; + recordingLength = 0; + isAudioProcessStarted = false; + recording = false; + isPaused = false; + context = null; + + self.leftchannel = leftchannel; + self.rightchannel = rightchannel; + self.numberOfAudioChannels = numberOfAudioChannels; + self.desiredSampRate = desiredSampRate; + self.sampleRate = sampleRate; + self.recordingLength = recordingLength; + + intervalsBasedBuffers = { + left: [], + right: [], + recordingLength: 0 + }; + } + + function clearRecordedDataCB() { + if (jsAudioNode) { + jsAudioNode.onaudioprocess = null; + jsAudioNode.disconnect(); + jsAudioNode = null; + } + + if (audioInput) { + audioInput.disconnect(); + audioInput = null; + } + + resetVariables(); + } + + // for debugging + this.name = 'StereoAudioRecorder'; + this.toString = function() { + return this.name; + }; + + var isAudioProcessStarted = false; + + function onAudioProcessDataAvailable(e) { + if (isPaused) { + return; + } + + if (isMediaStreamActive() === false) { + if (!config.disableLogs) { + console.log('MediaStream seems stopped.'); + } + jsAudioNode.disconnect(); + recording = false; + } + + if (!recording) { + if (audioInput) { + audioInput.disconnect(); + audioInput = null; + } + return; + } + + /** + * This method is called on "onaudioprocess" event's first invocation. + * @method {function} onAudioProcessStarted + * @memberof StereoAudioRecorder + * @example + * recorder.onAudioProcessStarted: function() { }; + */ + if (!isAudioProcessStarted) { + isAudioProcessStarted = true; + if (config.onAudioProcessStarted) { + config.onAudioProcessStarted(); + } + + if (config.initCallback) { + config.initCallback(); + } + } + + var left = e.inputBuffer.getChannelData(0); + + // we clone the samples + var chLeft = new Float32Array(left); + leftchannel.push(chLeft); + + if (numberOfAudioChannels === 2) { + var right = e.inputBuffer.getChannelData(1); + var chRight = new Float32Array(right); + rightchannel.push(chRight); + } + + recordingLength += bufferSize; + + // export raw PCM + self.recordingLength = recordingLength; + + if (typeof config.timeSlice !== 'undefined') { + intervalsBasedBuffers.recordingLength += bufferSize; + intervalsBasedBuffers.left.push(chLeft); + + if (numberOfAudioChannels === 2) { + intervalsBasedBuffers.right.push(chRight); + } + } + } + + jsAudioNode.onaudioprocess = onAudioProcessDataAvailable; + + // to prevent self audio to be connected with speakers + if (context.createMediaStreamDestination) { + jsAudioNode.connect(context.createMediaStreamDestination()); + } else { + jsAudioNode.connect(context.destination); + } + + // export raw PCM + this.leftchannel = leftchannel; + this.rightchannel = rightchannel; + this.numberOfAudioChannels = numberOfAudioChannels; + this.desiredSampRate = desiredSampRate; + this.sampleRate = sampleRate; + self.recordingLength = recordingLength; + + // helper for intervals based blobs + var intervalsBasedBuffers = { + left: [], + right: [], + recordingLength: 0 + }; + + // this looper is used to support intervals based blobs (via timeSlice+ondataavailable) + function looper() { + if (!recording || typeof config.ondataavailable !== 'function' || typeof config.timeSlice === 'undefined') { + return; + } + + if (intervalsBasedBuffers.left.length) { + mergeLeftRightBuffers({ + desiredSampRate: desiredSampRate, + sampleRate: sampleRate, + numberOfAudioChannels: numberOfAudioChannels, + internalInterleavedLength: intervalsBasedBuffers.recordingLength, + leftBuffers: intervalsBasedBuffers.left, + rightBuffers: numberOfAudioChannels === 1 ? [] : intervalsBasedBuffers.right + }, function(buffer, view) { + var blob = new Blob([view], { + type: 'audio/wav' + }); + config.ondataavailable(blob); + + setTimeout(looper, config.timeSlice); + }); + + intervalsBasedBuffers = { + left: [], + right: [], + recordingLength: 0 + }; + } else { + setTimeout(looper, config.timeSlice); + } + } + } + + if (typeof RecordRTC !== 'undefined') { + RecordRTC.StereoAudioRecorder = StereoAudioRecorder; + } + + // _________________ + // CanvasRecorder.js + + /** + * CanvasRecorder is a standalone class used by {@link RecordRTC} to bring HTML5-Canvas recording into video WebM. It uses HTML2Canvas library and runs top over {@link Whammy}. + * @summary HTML2Canvas recording into video WebM. + * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT} + * @author {@link https://MuazKhan.com|Muaz Khan} + * @typedef CanvasRecorder + * @class + * @example + * var recorder = new CanvasRecorder(htmlElement, { disableLogs: true, useWhammyRecorder: true }); + * recorder.record(); + * recorder.stop(function(blob) { + * video.src = URL.createObjectURL(blob); + * }); + * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code} + * @param {HTMLElement} htmlElement - querySelector/getElementById/getElementsByTagName[0]/etc. + * @param {object} config - {disableLogs:true, initCallback: function} + */ + + function CanvasRecorder(htmlElement, config) { + if (typeof html2canvas === 'undefined') { + throw 'Please link: https://www.webrtc-experiment.com/screenshot.js'; + } + + config = config || {}; + if (!config.frameInterval) { + config.frameInterval = 10; + } + + // via DetectRTC.js + var isCanvasSupportsStreamCapturing = false; + ['captureStream', 'mozCaptureStream', 'webkitCaptureStream'].forEach(function(item) { + if (item in document.createElement('canvas')) { + isCanvasSupportsStreamCapturing = true; + } + }); + + var _isChrome = (!!window.webkitRTCPeerConnection || !!window.webkitGetUserMedia) && !!window.chrome; + + var chromeVersion = 50; + var matchArray = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./); + if (_isChrome && matchArray && matchArray[2]) { + chromeVersion = parseInt(matchArray[2], 10); + } + + if (_isChrome && chromeVersion < 52) { + isCanvasSupportsStreamCapturing = false; + } + + if (config.useWhammyRecorder) { + isCanvasSupportsStreamCapturing = false; + } + + var globalCanvas, mediaStreamRecorder; + + if (isCanvasSupportsStreamCapturing) { + if (!config.disableLogs) { + console.log('Your browser supports both MediRecorder API and canvas.captureStream!'); + } + + if (htmlElement instanceof HTMLCanvasElement) { + globalCanvas = htmlElement; + } else if (htmlElement instanceof CanvasRenderingContext2D) { + globalCanvas = htmlElement.canvas; + } else { + throw 'Please pass either HTMLCanvasElement or CanvasRenderingContext2D.'; + } + } else if (!!navigator.mozGetUserMedia) { + if (!config.disableLogs) { + console.error('Canvas recording is NOT supported in Firefox.'); + } + } + + var isRecording; + + /** + * This method records Canvas. + * @method + * @memberof CanvasRecorder + * @example + * recorder.record(); + */ + this.record = function() { + isRecording = true; + + if (isCanvasSupportsStreamCapturing && !config.useWhammyRecorder) { + // CanvasCaptureMediaStream + var canvasMediaStream; + if ('captureStream' in globalCanvas) { + canvasMediaStream = globalCanvas.captureStream(25); // 25 FPS + } else if ('mozCaptureStream' in globalCanvas) { + canvasMediaStream = globalCanvas.mozCaptureStream(25); + } else if ('webkitCaptureStream' in globalCanvas) { + canvasMediaStream = globalCanvas.webkitCaptureStream(25); + } + + try { + var mdStream = new MediaStream(); + mdStream.addTrack(getTracks(canvasMediaStream, 'video')[0]); + canvasMediaStream = mdStream; + } catch (e) {} + + if (!canvasMediaStream) { + throw 'captureStream API are NOT available.'; + } + + // Note: Jan 18, 2016 status is that, + // Firefox MediaRecorder API can't record CanvasCaptureMediaStream object. + mediaStreamRecorder = new MediaStreamRecorder(canvasMediaStream, { + mimeType: config.mimeType || 'video/webm' + }); + mediaStreamRecorder.record(); + } else { + whammy.frames = []; + lastTime = new Date().getTime(); + drawCanvasFrame(); + } + + if (config.initCallback) { + config.initCallback(); + } + }; + + this.getWebPImages = function(callback) { + if (htmlElement.nodeName.toLowerCase() !== 'canvas') { + callback(); + return; + } + + var framesLength = whammy.frames.length; + whammy.frames.forEach(function(frame, idx) { + var framesRemaining = framesLength - idx; + if (!config.disableLogs) { + console.log(framesRemaining + '/' + framesLength + ' frames remaining'); + } + + if (config.onEncodingCallback) { + config.onEncodingCallback(framesRemaining, framesLength); + } + + var webp = frame.image.toDataURL('image/webp', 1); + whammy.frames[idx].image = webp; + }); + + if (!config.disableLogs) { + console.log('Generating WebM'); + } + + callback(); + }; + + /** + * This method stops recording Canvas. + * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee. + * @method + * @memberof CanvasRecorder + * @example + * recorder.stop(function(blob) { + * video.src = URL.createObjectURL(blob); + * }); + */ + this.stop = function(callback) { + isRecording = false; + + var that = this; + + if (isCanvasSupportsStreamCapturing && mediaStreamRecorder) { + mediaStreamRecorder.stop(callback); + return; + } + + this.getWebPImages(function() { + /** + * @property {Blob} blob - Recorded frames in video/webm blob. + * @memberof CanvasRecorder + * @example + * recorder.stop(function() { + * var blob = recorder.blob; + * }); + */ + whammy.compile(function(blob) { + if (!config.disableLogs) { + console.log('Recording finished!'); + } + + that.blob = blob; + + if (that.blob.forEach) { + that.blob = new Blob([], { + type: 'video/webm' + }); + } + + if (callback) { + callback(that.blob); + } + + whammy.frames = []; + }); + }); + }; + + var isPausedRecording = false; + + /** + * This method pauses the recording process. + * @method + * @memberof CanvasRecorder + * @example + * recorder.pause(); + */ + this.pause = function() { + isPausedRecording = true; + + if (mediaStreamRecorder instanceof MediaStreamRecorder) { + mediaStreamRecorder.pause(); + return; + } + }; + + /** + * This method resumes the recording process. + * @method + * @memberof CanvasRecorder + * @example + * recorder.resume(); + */ + this.resume = function() { + isPausedRecording = false; + + if (mediaStreamRecorder instanceof MediaStreamRecorder) { + mediaStreamRecorder.resume(); + return; + } + + if (!isRecording) { + this.record(); + } + }; + + /** + * This method resets currently recorded data. + * @method + * @memberof CanvasRecorder + * @example + * recorder.clearRecordedData(); + */ + this.clearRecordedData = function() { + if (isRecording) { + this.stop(clearRecordedDataCB); + } + clearRecordedDataCB(); + }; + + function clearRecordedDataCB() { + whammy.frames = []; + isRecording = false; + isPausedRecording = false; + } + + // for debugging + this.name = 'CanvasRecorder'; + this.toString = function() { + return this.name; + }; + + function cloneCanvas() { + //create a new canvas + var newCanvas = document.createElement('canvas'); + var context = newCanvas.getContext('2d'); + + //set dimensions + newCanvas.width = htmlElement.width; + newCanvas.height = htmlElement.height; + + //apply the old canvas to the new one + context.drawImage(htmlElement, 0, 0); + + //return the new canvas + return newCanvas; + } + + function drawCanvasFrame() { + if (isPausedRecording) { + lastTime = new Date().getTime(); + return setTimeout(drawCanvasFrame, 500); + } + + if (htmlElement.nodeName.toLowerCase() === 'canvas') { + var duration = new Date().getTime() - lastTime; + // via #206, by Jack i.e. @Seymourr + lastTime = new Date().getTime(); + + whammy.frames.push({ + image: cloneCanvas(), + duration: duration + }); + + if (isRecording) { + setTimeout(drawCanvasFrame, config.frameInterval); + } + return; + } + + html2canvas(htmlElement, { + grabMouse: typeof config.showMousePointer === 'undefined' || config.showMousePointer, + onrendered: function(canvas) { + var duration = new Date().getTime() - lastTime; + if (!duration) { + return setTimeout(drawCanvasFrame, config.frameInterval); + } + + // via #206, by Jack i.e. @Seymourr + lastTime = new Date().getTime(); + + whammy.frames.push({ + image: canvas.toDataURL('image/webp', 1), + duration: duration + }); + + if (isRecording) { + setTimeout(drawCanvasFrame, config.frameInterval); + } + } + }); + } + + var lastTime = new Date().getTime(); + + var whammy = new Whammy.Video(100); + } + + if (typeof RecordRTC !== 'undefined') { + RecordRTC.CanvasRecorder = CanvasRecorder; + } + + // _________________ + // WhammyRecorder.js + + /** + * WhammyRecorder is a standalone class used by {@link RecordRTC} to bring video recording in Chrome. It runs top over {@link Whammy}. + * @summary Video recording feature in Chrome. + * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT} + * @author {@link https://MuazKhan.com|Muaz Khan} + * @typedef WhammyRecorder + * @class + * @example + * var recorder = new WhammyRecorder(mediaStream); + * recorder.record(); + * recorder.stop(function(blob) { + * video.src = URL.createObjectURL(blob); + * }); + * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code} + * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API. + * @param {object} config - {disableLogs: true, initCallback: function, video: HTMLVideoElement, etc.} + */ + + function WhammyRecorder(mediaStream, config) { + + config = config || {}; + + if (!config.frameInterval) { + config.frameInterval = 10; + } + + if (!config.disableLogs) { + console.log('Using frames-interval:', config.frameInterval); + } + + /** + * This method records video. + * @method + * @memberof WhammyRecorder + * @example + * recorder.record(); + */ + this.record = function() { + if (!config.width) { + config.width = 320; + } + + if (!config.height) { + config.height = 240; + } + + if (!config.video) { + config.video = { + width: config.width, + height: config.height + }; + } + + if (!config.canvas) { + config.canvas = { + width: config.width, + height: config.height + }; + } + + canvas.width = config.canvas.width || 320; + canvas.height = config.canvas.height || 240; + + context = canvas.getContext('2d'); + + // setting defaults + if (config.video && config.video instanceof HTMLVideoElement) { + video = config.video.cloneNode(); + + if (config.initCallback) { + config.initCallback(); + } + } else { + video = document.createElement('video'); + + setSrcObject(mediaStream, video); + + video.onloadedmetadata = function() { // "onloadedmetadata" may NOT work in FF? + if (config.initCallback) { + config.initCallback(); + } + }; + + video.width = config.video.width; + video.height = config.video.height; + } + + video.muted = true; + video.play(); + + lastTime = new Date().getTime(); + whammy = new Whammy.Video(); + + if (!config.disableLogs) { + console.log('canvas resolutions', canvas.width, '*', canvas.height); + console.log('video width/height', video.width || canvas.width, '*', video.height || canvas.height); + } + + drawFrames(config.frameInterval); + }; + + /** + * Draw and push frames to Whammy + * @param {integer} frameInterval - set minimum interval (in milliseconds) between each time we push a frame to Whammy + */ + function drawFrames(frameInterval) { + frameInterval = typeof frameInterval !== 'undefined' ? frameInterval : 10; + + var duration = new Date().getTime() - lastTime; + if (!duration) { + return setTimeout(drawFrames, frameInterval, frameInterval); + } + + if (isPausedRecording) { + lastTime = new Date().getTime(); + return setTimeout(drawFrames, 100); + } + + // via #206, by Jack i.e. @Seymourr + lastTime = new Date().getTime(); + + if (video.paused) { + // via: https://github.com/muaz-khan/WebRTC-Experiment/pull/316 + // Tweak for Android Chrome + video.play(); + } + + context.drawImage(video, 0, 0, canvas.width, canvas.height); + whammy.frames.push({ + duration: duration, + image: canvas.toDataURL('image/webp') + }); + + if (!isStopDrawing) { + setTimeout(drawFrames, frameInterval, frameInterval); + } + } + + function asyncLoop(o) { + var i = -1, + length = o.length; + + (function loop() { + i++; + if (i === length) { + o.callback(); + return; + } + + // "setTimeout" added by Jim McLeod + setTimeout(function() { + o.functionToLoop(loop, i); + }, 1); + })(); + } + + + /** + * remove black frames from the beginning to the specified frame + * @param {Array} _frames - array of frames to be checked + * @param {number} _framesToCheck - number of frame until check will be executed (-1 - will drop all frames until frame not matched will be found) + * @param {number} _pixTolerance - 0 - very strict (only black pixel color) ; 1 - all + * @param {number} _frameTolerance - 0 - very strict (only black frame color) ; 1 - all + * @returns {Array} - array of frames + */ + // pull#293 by @volodalexey + function dropBlackFrames(_frames, _framesToCheck, _pixTolerance, _frameTolerance, callback) { + var localCanvas = document.createElement('canvas'); + localCanvas.width = canvas.width; + localCanvas.height = canvas.height; + var context2d = localCanvas.getContext('2d'); + var resultFrames = []; + + var checkUntilNotBlack = _framesToCheck === -1; + var endCheckFrame = (_framesToCheck && _framesToCheck > 0 && _framesToCheck <= _frames.length) ? + _framesToCheck : _frames.length; + var sampleColor = { + r: 0, + g: 0, + b: 0 + }; + var maxColorDifference = Math.sqrt( + Math.pow(255, 2) + + Math.pow(255, 2) + + Math.pow(255, 2) + ); + var pixTolerance = _pixTolerance && _pixTolerance >= 0 && _pixTolerance <= 1 ? _pixTolerance : 0; + var frameTolerance = _frameTolerance && _frameTolerance >= 0 && _frameTolerance <= 1 ? _frameTolerance : 0; + var doNotCheckNext = false; + + asyncLoop({ + length: endCheckFrame, + functionToLoop: function(loop, f) { + var matchPixCount, endPixCheck, maxPixCount; + + var finishImage = function() { + if (!doNotCheckNext && maxPixCount - matchPixCount <= maxPixCount * frameTolerance) ; else { + // console.log('frame is passed : ' + f); + if (checkUntilNotBlack) { + doNotCheckNext = true; + } + resultFrames.push(_frames[f]); + } + loop(); + }; + + if (!doNotCheckNext) { + var image = new Image(); + image.onload = function() { + context2d.drawImage(image, 0, 0, canvas.width, canvas.height); + var imageData = context2d.getImageData(0, 0, canvas.width, canvas.height); + matchPixCount = 0; + endPixCheck = imageData.data.length; + maxPixCount = imageData.data.length / 4; + + for (var pix = 0; pix < endPixCheck; pix += 4) { + var currentColor = { + r: imageData.data[pix], + g: imageData.data[pix + 1], + b: imageData.data[pix + 2] + }; + var colorDifference = Math.sqrt( + Math.pow(currentColor.r - sampleColor.r, 2) + + Math.pow(currentColor.g - sampleColor.g, 2) + + Math.pow(currentColor.b - sampleColor.b, 2) + ); + // difference in color it is difference in color vectors (r1,g1,b1) <=> (r2,g2,b2) + if (colorDifference <= maxColorDifference * pixTolerance) { + matchPixCount++; + } + } + finishImage(); + }; + image.src = _frames[f].image; + } else { + finishImage(); + } + }, + callback: function() { + resultFrames = resultFrames.concat(_frames.slice(endCheckFrame)); + + if (resultFrames.length <= 0) { + // at least one last frame should be available for next manipulation + // if total duration of all frames will be < 1000 than ffmpeg doesn't work well... + resultFrames.push(_frames[_frames.length - 1]); + } + callback(resultFrames); + } + }); + } + + var isStopDrawing = false; + + /** + * This method stops recording video. + * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee. + * @method + * @memberof WhammyRecorder + * @example + * recorder.stop(function(blob) { + * video.src = URL.createObjectURL(blob); + * }); + */ + this.stop = function(callback) { + callback = callback || function() {}; + + isStopDrawing = true; + + var _this = this; + // analyse of all frames takes some time! + setTimeout(function() { + // e.g. dropBlackFrames(frames, 10, 1, 1) - will cut all 10 frames + // e.g. dropBlackFrames(frames, 10, 0.5, 0.5) - will analyse 10 frames + // e.g. dropBlackFrames(frames, 10) === dropBlackFrames(frames, 10, 0, 0) - will analyse 10 frames with strict black color + dropBlackFrames(whammy.frames, -1, null, null, function(frames) { + whammy.frames = frames; + + // to display advertisement images! + if (config.advertisement && config.advertisement.length) { + whammy.frames = config.advertisement.concat(whammy.frames); + } + + /** + * @property {Blob} blob - Recorded frames in video/webm blob. + * @memberof WhammyRecorder + * @example + * recorder.stop(function() { + * var blob = recorder.blob; + * }); + */ + whammy.compile(function(blob) { + _this.blob = blob; + + if (_this.blob.forEach) { + _this.blob = new Blob([], { + type: 'video/webm' + }); + } + + if (callback) { + callback(_this.blob); + } + }); + }); + }, 10); + }; + + var isPausedRecording = false; + + /** + * This method pauses the recording process. + * @method + * @memberof WhammyRecorder + * @example + * recorder.pause(); + */ + this.pause = function() { + isPausedRecording = true; + }; + + /** + * This method resumes the recording process. + * @method + * @memberof WhammyRecorder + * @example + * recorder.resume(); + */ + this.resume = function() { + isPausedRecording = false; + + if (isStopDrawing) { + this.record(); + } + }; + + /** + * This method resets currently recorded data. + * @method + * @memberof WhammyRecorder + * @example + * recorder.clearRecordedData(); + */ + this.clearRecordedData = function() { + if (!isStopDrawing) { + this.stop(clearRecordedDataCB); + } + clearRecordedDataCB(); + }; + + function clearRecordedDataCB() { + whammy.frames = []; + isStopDrawing = true; + isPausedRecording = false; + } + + // for debugging + this.name = 'WhammyRecorder'; + this.toString = function() { + return this.name; + }; + + var canvas = document.createElement('canvas'); + var context = canvas.getContext('2d'); + + var video; + var lastTime; + var whammy; + } + + if (typeof RecordRTC !== 'undefined') { + RecordRTC.WhammyRecorder = WhammyRecorder; + } + + // https://github.com/antimatter15/whammy/blob/master/LICENSE + // _________ + // Whammy.js + + // todo: Firefox now supports webp for webm containers! + // their MediaRecorder implementation works well! + // should we provide an option to record via Whammy.js or MediaRecorder API is a better solution? + + /** + * Whammy is a standalone class used by {@link RecordRTC} to bring video recording in Chrome. It is written by {@link https://github.com/antimatter15|antimatter15} + * @summary A real time javascript webm encoder based on a canvas hack. + * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT} + * @author {@link https://MuazKhan.com|Muaz Khan} + * @typedef Whammy + * @class + * @example + * var recorder = new Whammy().Video(15); + * recorder.add(context || canvas || dataURL); + * var output = recorder.compile(); + * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code} + */ + + var Whammy = (function() { + // a more abstract-ish API + + function WhammyVideo(duration) { + this.frames = []; + this.duration = duration || 1; + this.quality = 0.8; + } + + /** + * Pass Canvas or Context or image/webp(string) to {@link Whammy} encoder. + * @method + * @memberof Whammy + * @example + * recorder = new Whammy().Video(0.8, 100); + * recorder.add(canvas || context || 'image/webp'); + * @param {string} frame - Canvas || Context || image/webp + * @param {number} duration - Stick a duration (in milliseconds) + */ + WhammyVideo.prototype.add = function(frame, duration) { + if ('canvas' in frame) { //CanvasRenderingContext2D + frame = frame.canvas; + } + + if ('toDataURL' in frame) { + frame = frame.toDataURL('image/webp', this.quality); + } + + if (!(/^data:image\/webp;base64,/ig).test(frame)) { + throw 'Input must be formatted properly as a base64 encoded DataURI of type image/webp'; + } + this.frames.push({ + image: frame, + duration: duration || this.duration + }); + }; + + function processInWebWorker(_function) { + var blob = URL.createObjectURL(new Blob([_function.toString(), + 'this.onmessage = function (eee) {' + _function.name + '(eee.data);}' + ], { + type: 'application/javascript' + })); + + var worker = new Worker(blob); + URL.revokeObjectURL(blob); + return worker; + } + + function whammyInWebWorker(frames) { + function ArrayToWebM(frames) { + var info = checkFrames(frames); + if (!info) { + return []; + } + + var clusterMaxDuration = 30000; + + var EBML = [{ + 'id': 0x1a45dfa3, // EBML + 'data': [{ + 'data': 1, + 'id': 0x4286 // EBMLVersion + }, { + 'data': 1, + 'id': 0x42f7 // EBMLReadVersion + }, { + 'data': 4, + 'id': 0x42f2 // EBMLMaxIDLength + }, { + 'data': 8, + 'id': 0x42f3 // EBMLMaxSizeLength + }, { + 'data': 'webm', + 'id': 0x4282 // DocType + }, { + 'data': 2, + 'id': 0x4287 // DocTypeVersion + }, { + 'data': 2, + 'id': 0x4285 // DocTypeReadVersion + }] + }, { + 'id': 0x18538067, // Segment + 'data': [{ + 'id': 0x1549a966, // Info + 'data': [{ + 'data': 1e6, //do things in millisecs (num of nanosecs for duration scale) + 'id': 0x2ad7b1 // TimecodeScale + }, { + 'data': 'whammy', + 'id': 0x4d80 // MuxingApp + }, { + 'data': 'whammy', + 'id': 0x5741 // WritingApp + }, { + 'data': doubleToString(info.duration), + 'id': 0x4489 // Duration + }] + }, { + 'id': 0x1654ae6b, // Tracks + 'data': [{ + 'id': 0xae, // TrackEntry + 'data': [{ + 'data': 1, + 'id': 0xd7 // TrackNumber + }, { + 'data': 1, + 'id': 0x73c5 // TrackUID + }, { + 'data': 0, + 'id': 0x9c // FlagLacing + }, { + 'data': 'und', + 'id': 0x22b59c // Language + }, { + 'data': 'V_VP8', + 'id': 0x86 // CodecID + }, { + 'data': 'VP8', + 'id': 0x258688 // CodecName + }, { + 'data': 1, + 'id': 0x83 // TrackType + }, { + 'id': 0xe0, // Video + 'data': [{ + 'data': info.width, + 'id': 0xb0 // PixelWidth + }, { + 'data': info.height, + 'id': 0xba // PixelHeight + }] + }] + }] + }] + }]; + + //Generate clusters (max duration) + var frameNumber = 0; + var clusterTimecode = 0; + while (frameNumber < frames.length) { + + var clusterFrames = []; + var clusterDuration = 0; + do { + clusterFrames.push(frames[frameNumber]); + clusterDuration += frames[frameNumber].duration; + frameNumber++; + } while (frameNumber < frames.length && clusterDuration < clusterMaxDuration); + + var clusterCounter = 0; + var cluster = { + 'id': 0x1f43b675, // Cluster + 'data': getClusterData(clusterTimecode, clusterCounter, clusterFrames) + }; //Add cluster to segment + EBML[1].data.push(cluster); + clusterTimecode += clusterDuration; + } + + return generateEBML(EBML); + } + + function getClusterData(clusterTimecode, clusterCounter, clusterFrames) { + return [{ + 'data': clusterTimecode, + 'id': 0xe7 // Timecode + }].concat(clusterFrames.map(function(webp) { + var block = makeSimpleBlock({ + discardable: 0, + frame: webp.data.slice(4), + invisible: 0, + keyframe: 1, + lacing: 0, + trackNum: 1, + timecode: Math.round(clusterCounter) + }); + clusterCounter += webp.duration; + return { + data: block, + id: 0xa3 + }; + })); + } + + // sums the lengths of all the frames and gets the duration + + function checkFrames(frames) { + if (!frames[0]) { + postMessage({ + error: 'Something went wrong. Maybe WebP format is not supported in the current browser.' + }); + return; + } + + var width = frames[0].width, + height = frames[0].height, + duration = frames[0].duration; + + for (var i = 1; i < frames.length; i++) { + duration += frames[i].duration; + } + return { + duration: duration, + width: width, + height: height + }; + } + + function numToBuffer(num) { + var parts = []; + while (num > 0) { + parts.push(num & 0xff); + num = num >> 8; + } + return new Uint8Array(parts.reverse()); + } + + function strToBuffer(str) { + return new Uint8Array(str.split('').map(function(e) { + return e.charCodeAt(0); + })); + } + + function bitsToBuffer(bits) { + var data = []; + var pad = (bits.length % 8) ? (new Array(1 + 8 - (bits.length % 8))).join('0') : ''; + bits = pad + bits; + for (var i = 0; i < bits.length; i += 8) { + data.push(parseInt(bits.substr(i, 8), 2)); + } + return new Uint8Array(data); + } + + function generateEBML(json) { + var ebml = []; + for (var i = 0; i < json.length; i++) { + var data = json[i].data; + + if (typeof data === 'object') { + data = generateEBML(data); + } + + if (typeof data === 'number') { + data = bitsToBuffer(data.toString(2)); + } + + if (typeof data === 'string') { + data = strToBuffer(data); + } + + var len = data.size || data.byteLength || data.length; + var zeroes = Math.ceil(Math.ceil(Math.log(len) / Math.log(2)) / 8); + var sizeToString = len.toString(2); + var padded = (new Array((zeroes * 7 + 7 + 1) - sizeToString.length)).join('0') + sizeToString; + var size = (new Array(zeroes)).join('0') + '1' + padded; + + ebml.push(numToBuffer(json[i].id)); + ebml.push(bitsToBuffer(size)); + ebml.push(data); + } + + return new Blob(ebml, { + type: 'video/webm' + }); + } + + function makeSimpleBlock(data) { + var flags = 0; + + if (data.keyframe) { + flags |= 128; + } + + if (data.invisible) { + flags |= 8; + } + + if (data.lacing) { + flags |= (data.lacing << 1); + } + + if (data.discardable) { + flags |= 1; + } + + if (data.trackNum > 127) { + throw 'TrackNumber > 127 not supported'; + } + + var out = [data.trackNum | 0x80, data.timecode >> 8, data.timecode & 0xff, flags].map(function(e) { + return String.fromCharCode(e); + }).join('') + data.frame; + + return out; + } + + function parseWebP(riff) { + var VP8 = riff.RIFF[0].WEBP[0]; + + var frameStart = VP8.indexOf('\x9d\x01\x2a'); // A VP8 keyframe starts with the 0x9d012a header + for (var i = 0, c = []; i < 4; i++) { + c[i] = VP8.charCodeAt(frameStart + 3 + i); + } + + var width, height, tmp; + + //the code below is literally copied verbatim from the bitstream spec + tmp = (c[1] << 8) | c[0]; + width = tmp & 0x3FFF; + tmp = (c[3] << 8) | c[2]; + height = tmp & 0x3FFF; + return { + width: width, + height: height, + data: VP8, + riff: riff + }; + } + + function getStrLength(string, offset) { + return parseInt(string.substr(offset + 4, 4).split('').map(function(i) { + var unpadded = i.charCodeAt(0).toString(2); + return (new Array(8 - unpadded.length + 1)).join('0') + unpadded; + }).join(''), 2); + } + + function parseRIFF(string) { + var offset = 0; + var chunks = {}; + + while (offset < string.length) { + var id = string.substr(offset, 4); + var len = getStrLength(string, offset); + var data = string.substr(offset + 4 + 4, len); + offset += 4 + 4 + len; + chunks[id] = chunks[id] || []; + + if (id === 'RIFF' || id === 'LIST') { + chunks[id].push(parseRIFF(data)); + } else { + chunks[id].push(data); + } + } + return chunks; + } + + function doubleToString(num) { + return [].slice.call( + new Uint8Array((new Float64Array([num])).buffer), 0).map(function(e) { + return String.fromCharCode(e); + }).reverse().join(''); + } + + var webm = new ArrayToWebM(frames.map(function(frame) { + var webp = parseWebP(parseRIFF(atob(frame.image.slice(23)))); + webp.duration = frame.duration; + return webp; + })); + + postMessage(webm); + } + + /** + * Encodes frames in WebM container. It uses WebWorkinvoke to invoke 'ArrayToWebM' method. + * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee. + * @method + * @memberof Whammy + * @example + * recorder = new Whammy().Video(0.8, 100); + * recorder.compile(function(blob) { + * // blob.size - blob.type + * }); + */ + WhammyVideo.prototype.compile = function(callback) { + var webWorker = processInWebWorker(whammyInWebWorker); + + webWorker.onmessage = function(event) { + if (event.data.error) { + console.error(event.data.error); + return; + } + callback(event.data); + }; + + webWorker.postMessage(this.frames); + }; + + return { + /** + * A more abstract-ish API. + * @method + * @memberof Whammy + * @example + * recorder = new Whammy().Video(0.8, 100); + * @param {?number} speed - 0.8 + * @param {?number} quality - 100 + */ + Video: WhammyVideo + }; + })(); + + if (typeof RecordRTC !== 'undefined') { + RecordRTC.Whammy = Whammy; + } + + // ______________ (indexed-db) + // DiskStorage.js + + /** + * DiskStorage is a standalone object used by {@link RecordRTC} to store recorded blobs in IndexedDB storage. + * @summary Writing blobs into IndexedDB. + * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT} + * @author {@link https://MuazKhan.com|Muaz Khan} + * @example + * DiskStorage.Store({ + * audioBlob: yourAudioBlob, + * videoBlob: yourVideoBlob, + * gifBlob : yourGifBlob + * }); + * DiskStorage.Fetch(function(dataURL, type) { + * if(type === 'audioBlob') { } + * if(type === 'videoBlob') { } + * if(type === 'gifBlob') { } + * }); + * // DiskStorage.dataStoreName = 'recordRTC'; + * // DiskStorage.onError = function(error) { }; + * @property {function} init - This method must be called once to initialize IndexedDB ObjectStore. Though, it is auto-used internally. + * @property {function} Fetch - This method fetches stored blobs from IndexedDB. + * @property {function} Store - This method stores blobs in IndexedDB. + * @property {function} onError - This function is invoked for any known/unknown error. + * @property {string} dataStoreName - Name of the ObjectStore created in IndexedDB storage. + * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code} + */ + + + var DiskStorage = { + /** + * This method must be called once to initialize IndexedDB ObjectStore. Though, it is auto-used internally. + * @method + * @memberof DiskStorage + * @internal + * @example + * DiskStorage.init(); + */ + init: function() { + var self = this; + + if (typeof indexedDB === 'undefined' || typeof indexedDB.open === 'undefined') { + console.error('IndexedDB API are not available in this browser.'); + return; + } + + var dbVersion = 1; + var dbName = this.dbName || location.href.replace(/\/|:|#|%|\.|\[|\]/g, ''), + db; + var request = indexedDB.open(dbName, dbVersion); + + function createObjectStore(dataBase) { + dataBase.createObjectStore(self.dataStoreName); + } + + function putInDB() { + var transaction = db.transaction([self.dataStoreName], 'readwrite'); + + if (self.videoBlob) { + transaction.objectStore(self.dataStoreName).put(self.videoBlob, 'videoBlob'); + } + + if (self.gifBlob) { + transaction.objectStore(self.dataStoreName).put(self.gifBlob, 'gifBlob'); + } + + if (self.audioBlob) { + transaction.objectStore(self.dataStoreName).put(self.audioBlob, 'audioBlob'); + } + + function getFromStore(portionName) { + transaction.objectStore(self.dataStoreName).get(portionName).onsuccess = function(event) { + if (self.callback) { + self.callback(event.target.result, portionName); + } + }; + } + + getFromStore('audioBlob'); + getFromStore('videoBlob'); + getFromStore('gifBlob'); + } + + request.onerror = self.onError; + + request.onsuccess = function() { + db = request.result; + db.onerror = self.onError; + + if (db.setVersion) { + if (db.version !== dbVersion) { + var setVersion = db.setVersion(dbVersion); + setVersion.onsuccess = function() { + createObjectStore(db); + putInDB(); + }; + } else { + putInDB(); + } + } else { + putInDB(); + } + }; + request.onupgradeneeded = function(event) { + createObjectStore(event.target.result); + }; + }, + /** + * This method fetches stored blobs from IndexedDB. + * @method + * @memberof DiskStorage + * @internal + * @example + * DiskStorage.Fetch(function(dataURL, type) { + * if(type === 'audioBlob') { } + * if(type === 'videoBlob') { } + * if(type === 'gifBlob') { } + * }); + */ + Fetch: function(callback) { + this.callback = callback; + this.init(); + + return this; + }, + /** + * This method stores blobs in IndexedDB. + * @method + * @memberof DiskStorage + * @internal + * @example + * DiskStorage.Store({ + * audioBlob: yourAudioBlob, + * videoBlob: yourVideoBlob, + * gifBlob : yourGifBlob + * }); + */ + Store: function(config) { + this.audioBlob = config.audioBlob; + this.videoBlob = config.videoBlob; + this.gifBlob = config.gifBlob; + + this.init(); + + return this; + }, + /** + * This function is invoked for any known/unknown error. + * @method + * @memberof DiskStorage + * @internal + * @example + * DiskStorage.onError = function(error){ + * alerot( JSON.stringify(error) ); + * }; + */ + onError: function(error) { + console.error(JSON.stringify(error, null, '\t')); + }, + + /** + * @property {string} dataStoreName - Name of the ObjectStore created in IndexedDB storage. + * @memberof DiskStorage + * @internal + * @example + * DiskStorage.dataStoreName = 'recordRTC'; + */ + dataStoreName: 'recordRTC', + dbName: null + }; + + if (typeof RecordRTC !== 'undefined') { + RecordRTC.DiskStorage = DiskStorage; + } + + // ______________ + // GifRecorder.js + + /** + * GifRecorder is standalone calss used by {@link RecordRTC} to record video or canvas into animated gif. + * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT} + * @author {@link https://MuazKhan.com|Muaz Khan} + * @typedef GifRecorder + * @class + * @example + * var recorder = new GifRecorder(mediaStream || canvas || context, { onGifPreview: function, onGifRecordingStarted: function, width: 1280, height: 720, frameRate: 200, quality: 10 }); + * recorder.record(); + * recorder.stop(function(blob) { + * img.src = URL.createObjectURL(blob); + * }); + * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code} + * @param {MediaStream} mediaStream - MediaStream object or HTMLCanvasElement or CanvasRenderingContext2D. + * @param {object} config - {disableLogs:true, initCallback: function, width: 320, height: 240, frameRate: 200, quality: 10} + */ + + function GifRecorder(mediaStream, config) { + if (typeof GIFEncoder === 'undefined') { + var script = document.createElement('script'); + script.src = 'https://www.webrtc-experiment.com/gif-recorder.js'; + (document.body || document.documentElement).appendChild(script); + } + + config = config || {}; + + var isHTMLObject = mediaStream instanceof CanvasRenderingContext2D || mediaStream instanceof HTMLCanvasElement; + + /** + * This method records MediaStream. + * @method + * @memberof GifRecorder + * @example + * recorder.record(); + */ + this.record = function() { + if (typeof GIFEncoder === 'undefined') { + setTimeout(self.record, 1000); + return; + } + + if (!isLoadedMetaData) { + setTimeout(self.record, 1000); + return; + } + + if (!isHTMLObject) { + if (!config.width) { + config.width = video.offsetWidth || 320; + } + + if (!config.height) { + config.height = video.offsetHeight || 240; + } + + if (!config.video) { + config.video = { + width: config.width, + height: config.height + }; + } + + if (!config.canvas) { + config.canvas = { + width: config.width, + height: config.height + }; + } + + canvas.width = config.canvas.width || 320; + canvas.height = config.canvas.height || 240; + + video.width = config.video.width || 320; + video.height = config.video.height || 240; + } + + // external library to record as GIF images + gifEncoder = new GIFEncoder(); + + // void setRepeat(int iter) + // Sets the number of times the set of GIF frames should be played. + // Default is 1; 0 means play indefinitely. + gifEncoder.setRepeat(0); + + // void setFrameRate(Number fps) + // Sets frame rate in frames per second. + // Equivalent to setDelay(1000/fps). + // Using "setDelay" instead of "setFrameRate" + gifEncoder.setDelay(config.frameRate || 200); + + // void setQuality(int quality) + // Sets quality of color quantization (conversion of images to the + // maximum 256 colors allowed by the GIF specification). + // Lower values (minimum = 1) produce better colors, + // but slow processing significantly. 10 is the default, + // and produces good color mapping at reasonable speeds. + // Values greater than 20 do not yield significant improvements in speed. + gifEncoder.setQuality(config.quality || 10); + + // Boolean start() + // This writes the GIF Header and returns false if it fails. + gifEncoder.start(); + + if (typeof config.onGifRecordingStarted === 'function') { + config.onGifRecordingStarted(); + } + + function drawVideoFrame(time) { + if (self.clearedRecordedData === true) { + return; + } + + if (isPausedRecording) { + return setTimeout(function() { + drawVideoFrame(time); + }, 100); + } + + lastAnimationFrame = requestAnimationFrame(drawVideoFrame); + + if (typeof lastFrameTime === undefined) { + lastFrameTime = time; + } + + // ~10 fps + if (time - lastFrameTime < 90) { + return; + } + + if (!isHTMLObject && video.paused) { + // via: https://github.com/muaz-khan/WebRTC-Experiment/pull/316 + // Tweak for Android Chrome + video.play(); + } + + if (!isHTMLObject) { + context.drawImage(video, 0, 0, canvas.width, canvas.height); + } + + if (config.onGifPreview) { + config.onGifPreview(canvas.toDataURL('image/png')); + } + + gifEncoder.addFrame(context); + lastFrameTime = time; + } + + lastAnimationFrame = requestAnimationFrame(drawVideoFrame); + + if (config.initCallback) { + config.initCallback(); + } + }; + + /** + * This method stops recording MediaStream. + * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee. + * @method + * @memberof GifRecorder + * @example + * recorder.stop(function(blob) { + * img.src = URL.createObjectURL(blob); + * }); + */ + this.stop = function(callback) { + callback = callback || function() {}; + + if (lastAnimationFrame) { + cancelAnimationFrame(lastAnimationFrame); + } + + /** + * @property {Blob} blob - The recorded blob object. + * @memberof GifRecorder + * @example + * recorder.stop(function(){ + * var blob = recorder.blob; + * }); + */ + this.blob = new Blob([new Uint8Array(gifEncoder.stream().bin)], { + type: 'image/gif' + }); + + callback(this.blob); + + // bug: find a way to clear old recorded blobs + gifEncoder.stream().bin = []; + }; + + var isPausedRecording = false; + + /** + * This method pauses the recording process. + * @method + * @memberof GifRecorder + * @example + * recorder.pause(); + */ + this.pause = function() { + isPausedRecording = true; + }; + + /** + * This method resumes the recording process. + * @method + * @memberof GifRecorder + * @example + * recorder.resume(); + */ + this.resume = function() { + isPausedRecording = false; + }; + + /** + * This method resets currently recorded data. + * @method + * @memberof GifRecorder + * @example + * recorder.clearRecordedData(); + */ + this.clearRecordedData = function() { + self.clearedRecordedData = true; + clearRecordedDataCB(); + }; + + function clearRecordedDataCB() { + if (gifEncoder) { + gifEncoder.stream().bin = []; + } + } + + // for debugging + this.name = 'GifRecorder'; + this.toString = function() { + return this.name; + }; + + var canvas = document.createElement('canvas'); + var context = canvas.getContext('2d'); + + if (isHTMLObject) { + if (mediaStream instanceof CanvasRenderingContext2D) { + context = mediaStream; + canvas = context.canvas; + } else if (mediaStream instanceof HTMLCanvasElement) { + context = mediaStream.getContext('2d'); + canvas = mediaStream; + } + } + + var isLoadedMetaData = true; + + if (!isHTMLObject) { + var video = document.createElement('video'); + video.muted = true; + video.autoplay = true; + video.playsInline = true; + + isLoadedMetaData = false; + video.onloadedmetadata = function() { + isLoadedMetaData = true; + }; + + setSrcObject(mediaStream, video); + + video.play(); + } + + var lastAnimationFrame = null; + var lastFrameTime; + + var gifEncoder; + + var self = this; + } + + if (typeof RecordRTC !== 'undefined') { + RecordRTC.GifRecorder = GifRecorder; + } + + // Last time updated: 2019-06-21 4:09:42 AM UTC + + // ________________________ + // MultiStreamsMixer v1.2.2 + + // Open-Sourced: https://github.com/muaz-khan/MultiStreamsMixer + + // -------------------------------------------------- + // Muaz Khan - www.MuazKhan.com + // MIT License - www.WebRTC-Experiment.com/licence + // -------------------------------------------------- + + function MultiStreamsMixer(arrayOfMediaStreams, elementClass) { + + var browserFakeUserAgent = 'Fake/5.0 (FakeOS) AppleWebKit/123 (KHTML, like Gecko) Fake/12.3.4567.89 Fake/123.45'; + + (function(that) { + if (typeof RecordRTC !== 'undefined') { + return; + } + + if (!that) { + return; + } + + if (typeof window !== 'undefined') { + return; + } + + if (typeof commonjsGlobal === 'undefined') { + return; + } + + commonjsGlobal.navigator = { + userAgent: browserFakeUserAgent, + getUserMedia: function() {} + }; + + if (!commonjsGlobal.console) { + commonjsGlobal.console = {}; + } + + if (typeof commonjsGlobal.console.log === 'undefined' || typeof commonjsGlobal.console.error === 'undefined') { + commonjsGlobal.console.error = commonjsGlobal.console.log = commonjsGlobal.console.log || function() { + console.log(arguments); + }; + } + + if (typeof document === 'undefined') { + /*global document:true */ + that.document = { + documentElement: { + appendChild: function() { + return ''; + } + } + }; + + document.createElement = document.captureStream = document.mozCaptureStream = function() { + var obj = { + getContext: function() { + return obj; + }, + play: function() {}, + pause: function() {}, + drawImage: function() {}, + toDataURL: function() { + return ''; + }, + style: {} + }; + return obj; + }; + + that.HTMLVideoElement = function() {}; + } + + if (typeof location === 'undefined') { + /*global location:true */ + that.location = { + protocol: 'file:', + href: '', + hash: '' + }; + } + + if (typeof screen === 'undefined') { + /*global screen:true */ + that.screen = { + width: 0, + height: 0 + }; + } + + if (typeof URL === 'undefined') { + /*global screen:true */ + that.URL = { + createObjectURL: function() { + return ''; + }, + revokeObjectURL: function() { + return ''; + } + }; + } + + /*global window:true */ + that.window = commonjsGlobal; + })(typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : null); + + // requires: chrome://flags/#enable-experimental-web-platform-features + + elementClass = elementClass || 'multi-streams-mixer'; + + var videos = []; + var isStopDrawingFrames = false; + + var canvas = document.createElement('canvas'); + var context = canvas.getContext('2d'); + canvas.style.opacity = 0; + canvas.style.position = 'absolute'; + canvas.style.zIndex = -1; + canvas.style.top = '-1000em'; + canvas.style.left = '-1000em'; + canvas.className = elementClass; + (document.body || document.documentElement).appendChild(canvas); + + this.disableLogs = false; + this.frameInterval = 10; + + this.width = 360; + this.height = 240; + + // use gain node to prevent echo + this.useGainNode = true; + + var self = this; + + // _____________________________ + // Cross-Browser-Declarations.js + + // WebAudio API representer + var AudioContext = window.AudioContext; + + if (typeof AudioContext === 'undefined') { + if (typeof webkitAudioContext !== 'undefined') { + /*global AudioContext:true */ + AudioContext = webkitAudioContext; + } + + if (typeof mozAudioContext !== 'undefined') { + /*global AudioContext:true */ + AudioContext = mozAudioContext; + } + } + + /*jshint -W079 */ + var URL = window.URL; + + if (typeof URL === 'undefined' && typeof webkitURL !== 'undefined') { + /*global URL:true */ + URL = webkitURL; + } + + if (typeof navigator !== 'undefined' && typeof navigator.getUserMedia === 'undefined') { // maybe window.navigator? + if (typeof navigator.webkitGetUserMedia !== 'undefined') { + navigator.getUserMedia = navigator.webkitGetUserMedia; + } + + if (typeof navigator.mozGetUserMedia !== 'undefined') { + navigator.getUserMedia = navigator.mozGetUserMedia; + } + } + + var MediaStream = window.MediaStream; + + if (typeof MediaStream === 'undefined' && typeof webkitMediaStream !== 'undefined') { + MediaStream = webkitMediaStream; + } + + /*global MediaStream:true */ + if (typeof MediaStream !== 'undefined') { + // override "stop" method for all browsers + if (typeof MediaStream.prototype.stop === 'undefined') { + MediaStream.prototype.stop = function() { + this.getTracks().forEach(function(track) { + track.stop(); + }); + }; + } + } + + var Storage = {}; + + if (typeof AudioContext !== 'undefined') { + Storage.AudioContext = AudioContext; + } else if (typeof webkitAudioContext !== 'undefined') { + Storage.AudioContext = webkitAudioContext; + } + + function setSrcObject(stream, element) { + if ('srcObject' in element) { + element.srcObject = stream; + } else if ('mozSrcObject' in element) { + element.mozSrcObject = stream; + } else { + element.srcObject = stream; + } + } + + this.startDrawingFrames = function() { + drawVideosToCanvas(); + }; + + function drawVideosToCanvas() { + if (isStopDrawingFrames) { + return; + } + + var videosLength = videos.length; + + var fullcanvas = false; + var remaining = []; + videos.forEach(function(video) { + if (!video.stream) { + video.stream = {}; + } + + if (video.stream.fullcanvas) { + fullcanvas = video; + } else { + // todo: video.stream.active or video.stream.live to fix blank frames issues? + remaining.push(video); + } + }); + + if (fullcanvas) { + canvas.width = fullcanvas.stream.width; + canvas.height = fullcanvas.stream.height; + } else if (remaining.length) { + canvas.width = videosLength > 1 ? remaining[0].width * 2 : remaining[0].width; + + var height = 1; + if (videosLength === 3 || videosLength === 4) { + height = 2; + } + if (videosLength === 5 || videosLength === 6) { + height = 3; + } + if (videosLength === 7 || videosLength === 8) { + height = 4; + } + if (videosLength === 9 || videosLength === 10) { + height = 5; + } + canvas.height = remaining[0].height * height; + } else { + canvas.width = self.width || 360; + canvas.height = self.height || 240; + } + + if (fullcanvas && fullcanvas instanceof HTMLVideoElement) { + drawImage(fullcanvas); + } + + remaining.forEach(function(video, idx) { + drawImage(video, idx); + }); + + setTimeout(drawVideosToCanvas, self.frameInterval); + } + + function drawImage(video, idx) { + if (isStopDrawingFrames) { + return; + } + + var x = 0; + var y = 0; + var width = video.width; + var height = video.height; + + if (idx === 1) { + x = video.width; + } + + if (idx === 2) { + y = video.height; + } + + if (idx === 3) { + x = video.width; + y = video.height; + } + + if (idx === 4) { + y = video.height * 2; + } + + if (idx === 5) { + x = video.width; + y = video.height * 2; + } + + if (idx === 6) { + y = video.height * 3; + } + + if (idx === 7) { + x = video.width; + y = video.height * 3; + } + + if (typeof video.stream.left !== 'undefined') { + x = video.stream.left; + } + + if (typeof video.stream.top !== 'undefined') { + y = video.stream.top; + } + + if (typeof video.stream.width !== 'undefined') { + width = video.stream.width; + } + + if (typeof video.stream.height !== 'undefined') { + height = video.stream.height; + } + + context.drawImage(video, x, y, width, height); + + if (typeof video.stream.onRender === 'function') { + video.stream.onRender(context, x, y, width, height, idx); + } + } + + function getMixedStream() { + isStopDrawingFrames = false; + var mixedVideoStream = getMixedVideoStream(); + + var mixedAudioStream = getMixedAudioStream(); + if (mixedAudioStream) { + mixedAudioStream.getTracks().filter(function(t) { + return t.kind === 'audio'; + }).forEach(function(track) { + mixedVideoStream.addTrack(track); + }); + } + arrayOfMediaStreams.forEach(function(stream) { + if (stream.fullcanvas) ; + }); + + // mixedVideoStream.prototype.appendStreams = appendStreams; + // mixedVideoStream.prototype.resetVideoStreams = resetVideoStreams; + // mixedVideoStream.prototype.clearRecordedData = clearRecordedData; + + return mixedVideoStream; + } + + function getMixedVideoStream() { + resetVideoStreams(); + + var capturedStream; + + if ('captureStream' in canvas) { + capturedStream = canvas.captureStream(); + } else if ('mozCaptureStream' in canvas) { + capturedStream = canvas.mozCaptureStream(); + } else if (!self.disableLogs) { + console.error('Upgrade to latest Chrome or otherwise enable this flag: chrome://flags/#enable-experimental-web-platform-features'); + } + + var videoStream = new MediaStream(); + + capturedStream.getTracks().filter(function(t) { + return t.kind === 'video'; + }).forEach(function(track) { + videoStream.addTrack(track); + }); + + canvas.stream = videoStream; + + return videoStream; + } + + function getMixedAudioStream() { + // via: @pehrsons + if (!Storage.AudioContextConstructor) { + Storage.AudioContextConstructor = new Storage.AudioContext(); + } + + self.audioContext = Storage.AudioContextConstructor; + + self.audioSources = []; + + if (self.useGainNode === true) { + self.gainNode = self.audioContext.createGain(); + self.gainNode.connect(self.audioContext.destination); + self.gainNode.gain.value = 0; // don't hear self + } + + var audioTracksLength = 0; + arrayOfMediaStreams.forEach(function(stream) { + if (!stream.getTracks().filter(function(t) { + return t.kind === 'audio'; + }).length) { + return; + } + + audioTracksLength++; + + var audioSource = self.audioContext.createMediaStreamSource(stream); + + if (self.useGainNode === true) { + audioSource.connect(self.gainNode); + } + + self.audioSources.push(audioSource); + }); + + if (!audioTracksLength) { + // because "self.audioContext" is not initialized + // that's why we've to ignore rest of the code + return; + } + + self.audioDestination = self.audioContext.createMediaStreamDestination(); + self.audioSources.forEach(function(audioSource) { + audioSource.connect(self.audioDestination); + }); + return self.audioDestination.stream; + } + + function getVideo(stream) { + var video = document.createElement('video'); + + setSrcObject(stream, video); + + video.className = elementClass; + + video.muted = true; + video.volume = 0; + + video.width = stream.width || self.width || 360; + video.height = stream.height || self.height || 240; + + video.play(); + + return video; + } + + this.appendStreams = function(streams) { + if (!streams) { + throw 'First parameter is required.'; + } + + if (!(streams instanceof Array)) { + streams = [streams]; + } + + streams.forEach(function(stream) { + var newStream = new MediaStream(); + + if (stream.getTracks().filter(function(t) { + return t.kind === 'video'; + }).length) { + var video = getVideo(stream); + video.stream = stream; + videos.push(video); + + newStream.addTrack(stream.getTracks().filter(function(t) { + return t.kind === 'video'; + })[0]); + } + + if (stream.getTracks().filter(function(t) { + return t.kind === 'audio'; + }).length) { + var audioSource = self.audioContext.createMediaStreamSource(stream); + self.audioDestination = self.audioContext.createMediaStreamDestination(); + audioSource.connect(self.audioDestination); + + newStream.addTrack(self.audioDestination.stream.getTracks().filter(function(t) { + return t.kind === 'audio'; + })[0]); + } + + arrayOfMediaStreams.push(newStream); + }); + }; + + this.releaseStreams = function() { + videos = []; + isStopDrawingFrames = true; + + if (self.gainNode) { + self.gainNode.disconnect(); + self.gainNode = null; + } + + if (self.audioSources.length) { + self.audioSources.forEach(function(source) { + source.disconnect(); + }); + self.audioSources = []; + } + + if (self.audioDestination) { + self.audioDestination.disconnect(); + self.audioDestination = null; + } + + if (self.audioContext) { + self.audioContext.close(); + } + + self.audioContext = null; + + context.clearRect(0, 0, canvas.width, canvas.height); + + if (canvas.stream) { + canvas.stream.stop(); + canvas.stream = null; + } + }; + + this.resetVideoStreams = function(streams) { + if (streams && !(streams instanceof Array)) { + streams = [streams]; + } + + resetVideoStreams(streams); + }; + + function resetVideoStreams(streams) { + videos = []; + streams = streams || arrayOfMediaStreams; + + // via: @adrian-ber + streams.forEach(function(stream) { + if (!stream.getTracks().filter(function(t) { + return t.kind === 'video'; + }).length) { + return; + } + + var video = getVideo(stream); + video.stream = stream; + videos.push(video); + }); + } + + // for debugging + this.name = 'MultiStreamsMixer'; + this.toString = function() { + return this.name; + }; + + this.getMixedStream = getMixedStream; + + } + + if (typeof RecordRTC === 'undefined') { + { + module.exports = MultiStreamsMixer; + } + } + + // ______________________ + // MultiStreamRecorder.js + + /* + * Video conference recording, using captureStream API along with WebAudio and Canvas2D API. + */ + + /** + * MultiStreamRecorder can record multiple videos in single container. + * @summary Multi-videos recorder. + * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT} + * @author {@link https://MuazKhan.com|Muaz Khan} + * @typedef MultiStreamRecorder + * @class + * @example + * var options = { + * mimeType: 'video/webm' + * } + * var recorder = new MultiStreamRecorder(ArrayOfMediaStreams, options); + * recorder.record(); + * recorder.stop(function(blob) { + * video.src = URL.createObjectURL(blob); + * + * // or + * var blob = recorder.blob; + * }); + * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code} + * @param {MediaStreams} mediaStreams - Array of MediaStreams. + * @param {object} config - {disableLogs:true, frameInterval: 1, mimeType: "video/webm"} + */ + + function MultiStreamRecorder(arrayOfMediaStreams, options) { + arrayOfMediaStreams = arrayOfMediaStreams || []; + var self = this; + + var mixer; + var mediaRecorder; + + options = options || { + elementClass: 'multi-streams-mixer', + mimeType: 'video/webm', + video: { + width: 360, + height: 240 + } + }; + + if (!options.frameInterval) { + options.frameInterval = 10; + } + + if (!options.video) { + options.video = {}; + } + + if (!options.video.width) { + options.video.width = 360; + } + + if (!options.video.height) { + options.video.height = 240; + } + + /** + * This method records all MediaStreams. + * @method + * @memberof MultiStreamRecorder + * @example + * recorder.record(); + */ + this.record = function() { + // github/muaz-khan/MultiStreamsMixer + mixer = new MultiStreamsMixer(arrayOfMediaStreams, options.elementClass || 'multi-streams-mixer'); + + if (getAllVideoTracks().length) { + mixer.frameInterval = options.frameInterval || 10; + mixer.width = options.video.width || 360; + mixer.height = options.video.height || 240; + mixer.startDrawingFrames(); + } + + if (options.previewStream && typeof options.previewStream === 'function') { + options.previewStream(mixer.getMixedStream()); + } + + // record using MediaRecorder API + mediaRecorder = new MediaStreamRecorder(mixer.getMixedStream(), options); + mediaRecorder.record(); + }; + + function getAllVideoTracks() { + var tracks = []; + arrayOfMediaStreams.forEach(function(stream) { + getTracks(stream, 'video').forEach(function(track) { + tracks.push(track); + }); + }); + return tracks; + } + + /** + * This method stops recording MediaStream. + * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee. + * @method + * @memberof MultiStreamRecorder + * @example + * recorder.stop(function(blob) { + * video.src = URL.createObjectURL(blob); + * }); + */ + this.stop = function(callback) { + if (!mediaRecorder) { + return; + } + + mediaRecorder.stop(function(blob) { + self.blob = blob; + + callback(blob); + + self.clearRecordedData(); + }); + }; + + /** + * This method pauses the recording process. + * @method + * @memberof MultiStreamRecorder + * @example + * recorder.pause(); + */ + this.pause = function() { + if (mediaRecorder) { + mediaRecorder.pause(); + } + }; + + /** + * This method resumes the recording process. + * @method + * @memberof MultiStreamRecorder + * @example + * recorder.resume(); + */ + this.resume = function() { + if (mediaRecorder) { + mediaRecorder.resume(); + } + }; + + /** + * This method resets currently recorded data. + * @method + * @memberof MultiStreamRecorder + * @example + * recorder.clearRecordedData(); + */ + this.clearRecordedData = function() { + if (mediaRecorder) { + mediaRecorder.clearRecordedData(); + mediaRecorder = null; + } + + if (mixer) { + mixer.releaseStreams(); + mixer = null; + } + }; + + /** + * Add extra media-streams to existing recordings. + * @method + * @memberof MultiStreamRecorder + * @param {MediaStreams} mediaStreams - Array of MediaStreams + * @example + * recorder.addStreams([newAudioStream, newVideoStream]); + */ + this.addStreams = function(streams) { + if (!streams) { + throw 'First parameter is required.'; + } + + if (!(streams instanceof Array)) { + streams = [streams]; + } + + arrayOfMediaStreams.concat(streams); + + if (!mediaRecorder || !mixer) { + return; + } + + mixer.appendStreams(streams); + + if (options.previewStream && typeof options.previewStream === 'function') { + options.previewStream(mixer.getMixedStream()); + } + }; + + /** + * Reset videos during live recording. Replace old videos e.g. replace cameras with full-screen. + * @method + * @memberof MultiStreamRecorder + * @param {MediaStreams} mediaStreams - Array of MediaStreams + * @example + * recorder.resetVideoStreams([newVideo1, newVideo2]); + */ + this.resetVideoStreams = function(streams) { + if (!mixer) { + return; + } + + if (streams && !(streams instanceof Array)) { + streams = [streams]; + } + + mixer.resetVideoStreams(streams); + }; + + /** + * Returns MultiStreamsMixer + * @method + * @memberof MultiStreamRecorder + * @example + * let mixer = recorder.getMixer(); + * mixer.appendStreams([newStream]); + */ + this.getMixer = function() { + return mixer; + }; + + // for debugging + this.name = 'MultiStreamRecorder'; + this.toString = function() { + return this.name; + }; + } + + if (typeof RecordRTC !== 'undefined') { + RecordRTC.MultiStreamRecorder = MultiStreamRecorder; + } + + // _____________________ + // RecordRTC.promises.js + + /** + * RecordRTCPromisesHandler adds promises support in {@link RecordRTC}. Try a {@link https://github.com/muaz-khan/RecordRTC/blob/master/simple-demos/RecordRTCPromisesHandler.html|demo here} + * @summary Promises for {@link RecordRTC} + * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT} + * @author {@link https://MuazKhan.com|Muaz Khan} + * @typedef RecordRTCPromisesHandler + * @class + * @example + * var recorder = new RecordRTCPromisesHandler(mediaStream, options); + * recorder.startRecording() + * .then(successCB) + * .catch(errorCB); + * // Note: You can access all RecordRTC API using "recorder.recordRTC" e.g. + * recorder.recordRTC.onStateChanged = function(state) {}; + * recorder.recordRTC.setRecordingDuration(5000); + * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code} + * @param {MediaStream} mediaStream - Single media-stream object, array of media-streams, html-canvas-element, etc. + * @param {object} config - {type:"video", recorderType: MediaStreamRecorder, disableLogs: true, numberOfAudioChannels: 1, bufferSize: 0, sampleRate: 0, video: HTMLVideoElement, etc.} + * @throws Will throw an error if "new" keyword is not used to initiate "RecordRTCPromisesHandler". Also throws error if first argument "MediaStream" is missing. + * @requires {@link RecordRTC} + */ + + function RecordRTCPromisesHandler(mediaStream, options) { + if (!this) { + throw 'Use "new RecordRTCPromisesHandler()"'; + } + + if (typeof mediaStream === 'undefined') { + throw 'First argument "MediaStream" is required.'; + } + + var self = this; + + /** + * @property {Blob} blob - Access/reach the native {@link RecordRTC} object. + * @memberof RecordRTCPromisesHandler + * @example + * let internal = recorder.recordRTC.getInternalRecorder(); + * alert(internal instanceof MediaStreamRecorder); + * recorder.recordRTC.onStateChanged = function(state) {}; + */ + self.recordRTC = new RecordRTC(mediaStream, options); + + /** + * This method records MediaStream. + * @method + * @memberof RecordRTCPromisesHandler + * @example + * recorder.startRecording() + * .then(successCB) + * .catch(errorCB); + */ + this.startRecording = function() { + return new Promise(function(resolve, reject) { + try { + self.recordRTC.startRecording(); + resolve(); + } catch (e) { + reject(e); + } + }); + }; + + /** + * This method stops the recording. + * @method + * @memberof RecordRTCPromisesHandler + * @example + * recorder.stopRecording().then(function() { + * var blob = recorder.getBlob(); + * }).catch(errorCB); + */ + this.stopRecording = function() { + return new Promise(function(resolve, reject) { + try { + self.recordRTC.stopRecording(function(url) { + self.blob = self.recordRTC.getBlob(); + + if (!self.blob || !self.blob.size) { + reject('Empty blob.', self.blob); + return; + } + + resolve(url); + }); + } catch (e) { + reject(e); + } + }); + }; + + /** + * This method pauses the recording. You can resume recording using "resumeRecording" method. + * @method + * @memberof RecordRTCPromisesHandler + * @example + * recorder.pauseRecording() + * .then(successCB) + * .catch(errorCB); + */ + this.pauseRecording = function() { + return new Promise(function(resolve, reject) { + try { + self.recordRTC.pauseRecording(); + resolve(); + } catch (e) { + reject(e); + } + }); + }; + + /** + * This method resumes the recording. + * @method + * @memberof RecordRTCPromisesHandler + * @example + * recorder.resumeRecording() + * .then(successCB) + * .catch(errorCB); + */ + this.resumeRecording = function() { + return new Promise(function(resolve, reject) { + try { + self.recordRTC.resumeRecording(); + resolve(); + } catch (e) { + reject(e); + } + }); + }; + + /** + * This method returns data-url for the recorded blob. + * @method + * @memberof RecordRTCPromisesHandler + * @example + * recorder.stopRecording().then(function() { + * recorder.getDataURL().then(function(dataURL) { + * window.open(dataURL); + * }).catch(errorCB);; + * }).catch(errorCB); + */ + this.getDataURL = function(callback) { + return new Promise(function(resolve, reject) { + try { + self.recordRTC.getDataURL(function(dataURL) { + resolve(dataURL); + }); + } catch (e) { + reject(e); + } + }); + }; + + /** + * This method returns the recorded blob. + * @method + * @memberof RecordRTCPromisesHandler + * @example + * recorder.stopRecording().then(function() { + * recorder.getBlob().then(function(blob) {}) + * }).catch(errorCB); + */ + this.getBlob = function() { + return new Promise(function(resolve, reject) { + try { + resolve(self.recordRTC.getBlob()); + } catch (e) { + reject(e); + } + }); + }; + + /** + * This method returns the internal recording object. + * @method + * @memberof RecordRTCPromisesHandler + * @example + * let internalRecorder = await recorder.getInternalRecorder(); + * if(internalRecorder instanceof MultiStreamRecorder) { + * internalRecorder.addStreams([newAudioStream]); + * internalRecorder.resetVideoStreams([screenStream]); + * } + * @returns {Object} + */ + this.getInternalRecorder = function() { + return new Promise(function(resolve, reject) { + try { + resolve(self.recordRTC.getInternalRecorder()); + } catch (e) { + reject(e); + } + }); + }; + + /** + * This method resets the recorder. So that you can reuse single recorder instance many times. + * @method + * @memberof RecordRTCPromisesHandler + * @example + * await recorder.reset(); + * recorder.startRecording(); // record again + */ + this.reset = function() { + return new Promise(function(resolve, reject) { + try { + resolve(self.recordRTC.reset()); + } catch (e) { + reject(e); + } + }); + }; + + /** + * Destroy RecordRTC instance. Clear all recorders and objects. + * @method + * @memberof RecordRTCPromisesHandler + * @example + * recorder.destroy().then(successCB).catch(errorCB); + */ + this.destroy = function() { + return new Promise(function(resolve, reject) { + try { + resolve(self.recordRTC.destroy()); + } catch (e) { + reject(e); + } + }); + }; + + /** + * Get recorder's readonly state. + * @method + * @memberof RecordRTCPromisesHandler + * @example + * let state = await recorder.getState(); + * // or + * recorder.getState().then(state => { console.log(state); }) + * @returns {String} Returns recording state. + */ + this.getState = function() { + return new Promise(function(resolve, reject) { + try { + resolve(self.recordRTC.getState()); + } catch (e) { + reject(e); + } + }); + }; + + /** + * @property {Blob} blob - Recorded data as "Blob" object. + * @memberof RecordRTCPromisesHandler + * @example + * await recorder.stopRecording(); + * let blob = recorder.getBlob(); // or "recorder.recordRTC.blob" + * invokeSaveAsDialog(blob); + */ + this.blob = null; + + /** + * RecordRTC version number + * @property {String} version - Release version number. + * @memberof RecordRTCPromisesHandler + * @static + * @readonly + * @example + * alert(recorder.version); + */ + this.version = '5.6.2'; + } + + if (typeof RecordRTC !== 'undefined') { + RecordRTC.RecordRTCPromisesHandler = RecordRTCPromisesHandler; + } + + // ______________________ + // WebAssemblyRecorder.js + + /** + * WebAssemblyRecorder lets you create webm videos in JavaScript via WebAssembly. The library consumes raw RGBA32 buffers (4 bytes per pixel) and turns them into a webm video with the given framerate and quality. This makes it compatible out-of-the-box with ImageData from a CANVAS. With realtime mode you can also use webm-wasm for streaming webm videos. + * @summary Video recording feature in Chrome, Firefox and maybe Edge. + * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT} + * @author {@link https://MuazKhan.com|Muaz Khan} + * @typedef WebAssemblyRecorder + * @class + * @example + * var recorder = new WebAssemblyRecorder(mediaStream); + * recorder.record(); + * recorder.stop(function(blob) { + * video.src = URL.createObjectURL(blob); + * }); + * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code} + * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API. + * @param {object} config - {webAssemblyPath:'webm-wasm.wasm',workerPath: 'webm-worker.js', frameRate: 30, width: 1920, height: 1080, bitrate: 1024, realtime: true} + */ + function WebAssemblyRecorder(stream, config) { + // based on: github.com/GoogleChromeLabs/webm-wasm + + if (typeof ReadableStream === 'undefined' || typeof WritableStream === 'undefined') { + // because it fixes readable/writable streams issues + console.error('Following polyfill is strongly recommended: https://unpkg.com/@mattiasbuelens/web-streams-polyfill/dist/polyfill.min.js'); + } + + config = config || {}; + + config.width = config.width || 640; + config.height = config.height || 480; + config.frameRate = config.frameRate || 30; + config.bitrate = config.bitrate || 1200; + config.realtime = config.realtime || true; + + var finished; + + function cameraStream() { + return new ReadableStream({ + start: function(controller) { + var cvs = document.createElement('canvas'); + var video = document.createElement('video'); + var first = true; + video.srcObject = stream; + video.muted = true; + video.height = config.height; + video.width = config.width; + video.volume = 0; + video.onplaying = function() { + cvs.width = config.width; + cvs.height = config.height; + var ctx = cvs.getContext('2d'); + var frameTimeout = 1000 / config.frameRate; + var cameraTimer = setInterval(function f() { + if (finished) { + clearInterval(cameraTimer); + controller.close(); + } + + if (first) { + first = false; + if (config.onVideoProcessStarted) { + config.onVideoProcessStarted(); + } + } + + ctx.drawImage(video, 0, 0); + if (controller._controlledReadableStream.state !== 'closed') { + try { + controller.enqueue( + ctx.getImageData(0, 0, config.width, config.height) + ); + } catch (e) {} + } + }, frameTimeout); + }; + video.play(); + } + }); + } + + var worker; + + function startRecording(stream, buffer) { + if (!config.workerPath && !buffer) { + finished = false; + + // is it safe to use @latest ? + + fetch( + 'https://unpkg.com/webm-wasm@latest/dist/webm-worker.js' + ).then(function(r) { + r.arrayBuffer().then(function(buffer) { + startRecording(stream, buffer); + }); + }); + return; + } + + if (!config.workerPath && buffer instanceof ArrayBuffer) { + var blob = new Blob([buffer], { + type: 'text/javascript' + }); + config.workerPath = URL.createObjectURL(blob); + } + + if (!config.workerPath) { + console.error('workerPath parameter is missing.'); + } + + worker = new Worker(config.workerPath); + + worker.postMessage(config.webAssemblyPath || 'https://unpkg.com/webm-wasm@latest/dist/webm-wasm.wasm'); + worker.addEventListener('message', function(event) { + if (event.data === 'READY') { + worker.postMessage({ + width: config.width, + height: config.height, + bitrate: config.bitrate || 1200, + timebaseDen: config.frameRate || 30, + realtime: config.realtime + }); + + cameraStream().pipeTo(new WritableStream({ + write: function(image) { + if (finished) { + console.error('Got image, but recorder is finished!'); + return; + } + + worker.postMessage(image.data.buffer, [image.data.buffer]); + } + })); + } else if (!!event.data) { + if (!isPaused) { + arrayOfBuffers.push(event.data); + } + } + }); + } + + /** + * This method records video. + * @method + * @memberof WebAssemblyRecorder + * @example + * recorder.record(); + */ + this.record = function() { + arrayOfBuffers = []; + isPaused = false; + this.blob = null; + startRecording(stream); + + if (typeof config.initCallback === 'function') { + config.initCallback(); + } + }; + + var isPaused; + + /** + * This method pauses the recording process. + * @method + * @memberof WebAssemblyRecorder + * @example + * recorder.pause(); + */ + this.pause = function() { + isPaused = true; + }; + + /** + * This method resumes the recording process. + * @method + * @memberof WebAssemblyRecorder + * @example + * recorder.resume(); + */ + this.resume = function() { + isPaused = false; + }; + + function terminate(callback) { + if (!worker) { + if (callback) { + callback(); + } + + return; + } + + // Wait for null event data to indicate that the encoding is complete + worker.addEventListener('message', function(event) { + if (event.data === null) { + worker.terminate(); + worker = null; + + if (callback) { + callback(); + } + } + }); + + worker.postMessage(null); + } + + var arrayOfBuffers = []; + + /** + * This method stops recording video. + * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee. + * @method + * @memberof WebAssemblyRecorder + * @example + * recorder.stop(function(blob) { + * video.src = URL.createObjectURL(blob); + * }); + */ + this.stop = function(callback) { + finished = true; + + var recorder = this; + + terminate(function() { + recorder.blob = new Blob(arrayOfBuffers, { + type: 'video/webm' + }); + + callback(recorder.blob); + }); + }; + + // for debugging + this.name = 'WebAssemblyRecorder'; + this.toString = function() { + return this.name; + }; + + /** + * This method resets currently recorded data. + * @method + * @memberof WebAssemblyRecorder + * @example + * recorder.clearRecordedData(); + */ + this.clearRecordedData = function() { + arrayOfBuffers = []; + isPaused = false; + this.blob = null; + + // todo: if recording-ON then STOP it first + }; + + /** + * @property {Blob} blob - The recorded blob object. + * @memberof WebAssemblyRecorder + * @example + * recorder.stop(function(){ + * var blob = recorder.blob; + * }); + */ + this.blob = null; + } + + if (typeof RecordRTC !== 'undefined') { + RecordRTC.WebAssemblyRecorder = WebAssemblyRecorder; + } + }); + + class RecordRTCLoader extends Emitter { + constructor(player) { + super(); + this.player = player; + this.fileName = ''; + this.fileType = player._opt.recordType || FILE_SUFFIX.webm; + this.isRecording = false; + this.recordingTimestamp = 0; + this.recordingInterval = null; + player.debug.log('Recorder', 'init'); + } + + destroy() { + this._reset(); + + this.player.debug.log('Recorder', 'destroy'); + } + + setFileName(fileName, fileType) { + this.fileName = fileName; + + if (FILE_SUFFIX.mp4 === fileType || FILE_SUFFIX.webm === fileType) { + this.fileType = fileType; + } + } + + get recording() { + return this.isRecording; + } + + get recordTime() { + return this.recordingTimestamp; + } + + startRecord() { + const debug = this.player.debug; + const options = { + type: 'video', + mimeType: 'video/webm;codecs=h264', + onTimeStamp: timestamp => { + debug.log('Recorder', 'record timestamp :' + timestamp); + }, + disableLogs: !this.player._opt.debug + }; + + try { + const stream = this.player.video.$videoElement.captureStream(25); + + if (this.player.audio && this.player.audio.mediaStreamAudioDestinationNode && this.player.audio.mediaStreamAudioDestinationNode.stream && !this.player.audio.isStateSuspended() && this.player.audio.hasAudio && this.player._opt.hasAudio) { + const audioStream = this.player.audio.mediaStreamAudioDestinationNode.stream; + + if (audioStream.getAudioTracks().length > 0) { + const audioTrack = audioStream.getAudioTracks()[0]; + + if (audioTrack && audioTrack.enabled) { + stream.addTrack(audioTrack); + } + } + } + + this.recorder = RecordRTC_1(stream, options); + } catch (e) { + debug.error('Recorder', 'startRecord error', e); + this.emit(EVENTS.recordCreateError); + } + + if (this.recorder) { + this.isRecording = true; + this.player.emit(EVENTS.recording, true); + this.recorder.startRecording(); + debug.log('Recorder', 'start recording'); + this.player.emit(EVENTS.recordStart); + this.recordingInterval = window.setInterval(() => { + this.recordingTimestamp += 1; + this.player.emit(EVENTS.recordingTimestamp, this.recordingTimestamp); + }, 1000); + } + } + + stopRecordAndSave() { + if (!this.recorder || !this.isRecording) { + return; + } + + this.recorder.stopRecording(() => { + this.player.debug.log('Recorder', 'stop recording'); + this.player.emit(EVENTS.recordEnd); + const fileName = (this.fileName || now()) + '.' + (this.fileType || FILE_SUFFIX.webm); + saveAs(this.recorder.getBlob(), fileName); + + this._reset(); + + this.player.emit(EVENTS.recording, false); + }); + } + + _reset() { + this.isRecording = false; + this.recordingTimestamp = 0; + + if (this.recorder) { + this.recorder.destroy(); + this.recorder = null; + } + + this.fileName = null; + + if (this.recordingInterval) { + clearInterval(this.recordingInterval); + } + + this.recordingInterval = null; + } + + } + + class Recorder { + constructor(player) { + const Loader = Recorder.getLoaderFactory(); + return new Loader(player); + } + + static getLoaderFactory() { + return RecordRTCLoader; + } + + } + + class DecoderWorker { + constructor(player) { + this.player = player; + this.decoderWorker = new Worker(player._opt.decoder); + + this._initDecoderWorker(); + + player.debug.log('decoderWorker', 'init'); + } + + destroy() { + this.decoderWorker.postMessage({ + cmd: WORKER_SEND_TYPE.close + }); + this.decoderWorker.terminate(); + this.decoderWorker = null; + this.player.debug.log(`decoderWorker`, 'destroy'); + } + + _initDecoderWorker() { + const { + debug, + events: { + proxy + } + } = this.player; + + this.decoderWorker.onmessage = event => { + const msg = event.data; + + switch (msg.cmd) { + case WORKER_CMD_TYPE.init: + debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.init); + + if (!this.player.loaded) { + this.player.emit(EVENTS.load); + } + + this.player.emit(EVENTS.decoderWorkerInit); + + this._initWork(); + + break; + + case WORKER_CMD_TYPE.videoCode: + debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.videoCode, msg.code); + + if (!this.player._times.decodeStart) { + this.player._times.decodeStart = now(); + } + + this.player.video.updateVideoInfo({ + encTypeCode: msg.code + }); + break; + + case WORKER_CMD_TYPE.audioCode: + debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.audioCode, msg.code); + this.player.audio && this.player.audio.updateAudioInfo({ + encTypeCode: msg.code + }); + break; + + case WORKER_CMD_TYPE.initVideo: + debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.initVideo, `width:${msg.w},height:${msg.h}`); + this.player.video.updateVideoInfo({ + width: msg.w, + height: msg.h + }); + + if (!this.player._opt.openWebglAlignment && !isWebglRenderSupport(msg.w)) { + this.player.emit(EVENTS_ERROR.webglAlignmentError); + return; + } + + this.player.video.initCanvasViewSize(); + break; + + case WORKER_CMD_TYPE.initAudio: + debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.initAudio, `channels:${msg.channels},sampleRate:${msg.sampleRate}`); + + if (this.player.audio) { + this.player.audio.updateAudioInfo(msg); + this.player.audio.initScriptNode(msg); + } + + break; + + case WORKER_CMD_TYPE.render: + // debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.render, `msg ts:${msg.ts}`); + this.player.handleRender(); + this.player.video.render(msg); + this.player.emit(EVENTS.timeUpdate, msg.ts); + this.player.updateStats({ + fps: true, + ts: msg.ts, + buf: msg.delay + }); + + if (!this.player._times.videoStart) { + this.player._times.videoStart = now(); + this.player.handlePlayToRenderTimes(); + } + + break; + + case WORKER_CMD_TYPE.playAudio: + // debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.playAudio, `msg ts:${msg.ts}`); + // 只有在 playing 的时候。 + if (this.player.playing && this.player.audio) { + this.player.audio.play(msg.buffer, msg.ts); + } + + break; + + case WORKER_CMD_TYPE.wasmError: + if (msg.message) { + if (msg.message.indexOf(WASM_ERROR.invalidNalUnitSize) !== -1) { + this.player.emitError(EVENTS_ERROR.wasmDecodeError); + } + } + + break; + + default: + this.player[msg.cmd] && this.player[msg.cmd](msg); + } + }; + } + + _initWork() { + const opt = { + debug: this.player._opt.debug, + useOffscreen: this.player._opt.useOffscreen, + useWCS: this.player._opt.useWCS, + videoBuffer: this.player._opt.videoBuffer, + videoBufferDelay: this.player._opt.videoBufferDelay, + openWebglAlignment: this.player._opt.openWebglAlignment + }; + this.decoderWorker.postMessage({ + cmd: WORKER_SEND_TYPE.init, + opt: JSON.stringify(opt), + sampleRate: this.player.audio && this.player.audio.audioContext.sampleRate || 0 + }); + } + + decodeVideo(arrayBuffer, ts, isIFrame) { + const options = { + type: MEDIA_TYPE.video, + ts: Math.max(ts, 0), + isIFrame + }; // this.player.debug.log('decoderWorker', 'decodeVideo', options); + + this.decoderWorker.postMessage({ + cmd: WORKER_SEND_TYPE.decode, + buffer: arrayBuffer, + options + }, [arrayBuffer.buffer]); + } + + decodeAudio(arrayBuffer, ts) { + if (this.player._opt.useWCS) { + this._decodeAudioNoDelay(arrayBuffer, ts); + } else if (this.player._opt.useMSE) { + this._decodeAudioNoDelay(arrayBuffer, ts); + } else { + this._decodeAudio(arrayBuffer, ts); + } + } // + + + _decodeAudio(arrayBuffer, ts) { + const options = { + type: MEDIA_TYPE.audio, + ts: Math.max(ts, 0) + }; // this.player.debug.log('decoderWorker', 'decodeAudio',options); + + this.decoderWorker.postMessage({ + cmd: WORKER_SEND_TYPE.decode, + buffer: arrayBuffer, + options + }, [arrayBuffer.buffer]); + } + + _decodeAudioNoDelay(arrayBuffer, ts) { + // console.log('_decodeAudioNoDelay', arrayBuffer); + this.decoderWorker.postMessage({ + cmd: WORKER_SEND_TYPE.audioDecode, + buffer: arrayBuffer, + ts: Math.max(ts, 0) + }, [arrayBuffer.buffer]); + } + + updateWorkConfig(config) { + this.decoderWorker.postMessage({ + cmd: WORKER_SEND_TYPE.updateConfig, + key: config.key, + value: config.value + }); + } + + } + + class CommonLoader extends Emitter { + constructor(player) { + super(); + this.player = player; + this.stopId = null; + this.firstTimestamp = null; + this.startTimestamp = null; + this.delay = -1; + this.bufferList = []; + this.dropping = false; + this.initInterval(); + } + + destroy() { + if (this.stopId) { + clearInterval(this.stopId); + this.stopId = null; + } + + this.firstTimestamp = null; + this.startTimestamp = null; + this.delay = -1; + this.bufferList = []; + this.dropping = false; + this.off(); + this.player.debug.log('CommonDemux', 'destroy'); + } + + getDelay(timestamp) { + if (!timestamp) { + return -1; + } + + if (!this.firstTimestamp) { + this.firstTimestamp = timestamp; + this.startTimestamp = Date.now(); + this.delay = -1; + } else { + if (timestamp) { + const localTimestamp = Date.now() - this.startTimestamp; + const timeTimestamp = timestamp - this.firstTimestamp; + + if (localTimestamp >= timeTimestamp) { + this.delay = localTimestamp - timeTimestamp; + } else { + this.delay = timeTimestamp - localTimestamp; + } + } + } + + return this.delay; + } + + resetDelay() { + this.firstTimestamp = null; + this.startTimestamp = null; + this.delay = -1; + this.dropping = false; + } // + + + initInterval() { + this.player.debug.log('common dumex', `init Interval`); + + let _loop = () => { + let data; + const videoBuffer = this.player._opt.videoBuffer; + const videoBufferDelay = this.player._opt.videoBufferDelay; + + if (this.bufferList.length) { + if (this.dropping) { + // this.player.debug.log('common dumex', `is dropping`); + data = this.bufferList.shift(); + + if (data.type === MEDIA_TYPE.audio && data.payload[1] === 0) { + this._doDecoderDecode(data); + } + + while (!data.isIFrame && this.bufferList.length) { + data = this.bufferList.shift(); + + if (data.type === MEDIA_TYPE.audio && data.payload[1] === 0) { + this._doDecoderDecode(data); + } + } // i frame + + + if (data.isIFrame && this.getDelay(data.ts) <= Math.min(videoBuffer, 200)) { + this.dropping = false; + + this._doDecoderDecode(data); + } + } else { + data = this.bufferList[0]; + + if (this.getDelay(data.ts) === -1) { + // this.player.debug.log('common dumex', `delay is -1`); + this.bufferList.shift(); + + this._doDecoderDecode(data); + } else if (this.delay > videoBuffer + videoBufferDelay) { + // this.player.debug.log('common dumex', `delay is ${this.delay}, set dropping is true`); + this.resetDelay(); + this.dropping = true; + } else { + data = this.bufferList[0]; + + if (this.getDelay(data.ts) > videoBuffer) { + // drop frame + this.bufferList.shift(); + + this._doDecoderDecode(data); + } + } + } + } + }; + + _loop(); + + this.stopId = setInterval(_loop, 10); + } + + _doDecode(payload, type, ts, isIFrame, cts) { + const player = this.player; + let options = { + ts: ts, + cts: cts, + type: type, + isIFrame: false + }; // use offscreen + + if (player._opt.useWCS && !player._opt.useOffscreen) { + if (type === MEDIA_TYPE.video) { + options.isIFrame = isIFrame; + } + + this.pushBuffer(payload, options); + } else if (player._opt.useMSE) { + // use mse + if (type === MEDIA_TYPE.video) { + options.isIFrame = isIFrame; + } + + this.pushBuffer(payload, options); + } else { + // + if (type === MEDIA_TYPE.video) { + player.decoderWorker && player.decoderWorker.decodeVideo(payload, ts, isIFrame); + } else if (type === MEDIA_TYPE.audio) { + if (player._opt.hasAudio) { + player.decoderWorker && player.decoderWorker.decodeAudio(payload, ts); + } + } + } + } + + _doDecoderDecode(data) { + const player = this.player; + const { + webcodecsDecoder, + mseDecoder + } = player; + + if (data.type === MEDIA_TYPE.audio) { + if (player._opt.hasAudio) { + player.decoderWorker && player.decoderWorker.decodeAudio(data.payload, data.ts); + } + } else if (data.type === MEDIA_TYPE.video) { + if (player._opt.useWCS && !player._opt.useOffscreen) { + webcodecsDecoder.decodeVideo(data.payload, data.ts, data.isIFrame); + } else if (player._opt.useMSE) { + mseDecoder.decodeVideo(data.payload, data.ts, data.isIFrame, data.cts); + } + } + } + + pushBuffer(payload, options) { + // 音频 + if (options.type === MEDIA_TYPE.audio) { + this.bufferList.push({ + ts: options.ts, + payload: payload, + type: MEDIA_TYPE.audio + }); + } else if (options.type === MEDIA_TYPE.video) { + this.bufferList.push({ + ts: options.ts, + cts: options.cts, + payload: payload, + type: MEDIA_TYPE.video, + isIFrame: options.isIFrame + }); + } + } + + close() {} + + } + + class FlvLoader extends CommonLoader { + constructor(player) { + super(player); + this.input = this._inputFlv(); + this.flvDemux = this.dispatchFlvData(this.input); + player.debug.log('FlvDemux', 'init'); + } + + destroy() { + super.destroy(); + this.input = null; + this.flvDemux = null; + this.player.debug.log('FlvDemux', 'destroy'); + } + + dispatch(data) { + this.flvDemux(data); + } + + *_inputFlv() { + yield 9; + const tmp = new ArrayBuffer(4); + const tmp8 = new Uint8Array(tmp); + const tmp32 = new Uint32Array(tmp); + const player = this.player; + + while (true) { + tmp8[3] = 0; + const t = yield 15; + const type = t[4]; + tmp8[0] = t[7]; + tmp8[1] = t[6]; + tmp8[2] = t[5]; + const length = tmp32[0]; + tmp8[0] = t[10]; + tmp8[1] = t[9]; + tmp8[2] = t[8]; + let ts = tmp32[0]; + + if (ts === 0xFFFFFF) { + tmp8[3] = t[11]; + ts = tmp32[0]; + } + + const payload = yield length; + + switch (type) { + case FLV_MEDIA_TYPE.audio: + if (player._opt.hasAudio) { + player.updateStats({ + abps: payload.byteLength + }); + + if (payload.byteLength > 0) { + this._doDecode(payload, MEDIA_TYPE.audio, ts); + } + } + + break; + + case FLV_MEDIA_TYPE.video: + if (!player._times.demuxStart) { + player._times.demuxStart = now(); + } + + if (player._opt.hasVideo) { + player.updateStats({ + vbps: payload.byteLength + }); + const isIFrame = payload[0] >> 4 === 1; + + if (payload.byteLength > 0) { + tmp32[0] = payload[4]; + tmp32[1] = payload[3]; + tmp32[2] = payload[2]; + tmp32[3] = 0; + let cts = tmp32[0]; + + this._doDecode(payload, MEDIA_TYPE.video, ts, isIFrame, cts); + } + } + + break; + } + } + } + + dispatchFlvData(input) { + let need = input.next(); + let buffer = null; + return value => { + let data = new Uint8Array(value); + + if (buffer) { + let combine = new Uint8Array(buffer.length + data.length); + combine.set(buffer); + combine.set(data, buffer.length); + data = combine; + buffer = null; + } + + while (data.length >= need.value) { + let remain = data.slice(need.value); + need = input.next(data.slice(0, need.value)); + data = remain; + } + + if (data.length > 0) { + buffer = data; + } + }; + } + + close() { + this.input && this.input.return(null); + } + + } + + class M7sLoader extends CommonLoader { + constructor(player) { + super(player); + player.debug.log('M7sDemux', 'init'); + } + + destroy() { + super.destroy(); + this.player.debug.log('M7sDemux', 'destroy'); + this.player = null; + } + + dispatch(data) { + const player = this.player; + const dv = new DataView(data); + const type = dv.getUint8(0); + const ts = dv.getUint32(1, false); + + switch (type) { + case MEDIA_TYPE.audio: + if (player._opt.hasAudio) { + const payload = new Uint8Array(data, 5); + player.updateStats({ + abps: payload.byteLength + }); + + if (payload.byteLength > 0) { + this._doDecode(payload, type, ts); + } + } + + break; + + case MEDIA_TYPE.video: + if (player._opt.hasVideo) { + if (!player._times.demuxStart) { + player._times.demuxStart = now(); + } + + if (dv.byteLength > 5) { + const payload = new Uint8Array(data, 5); + const isIframe = dv.getUint8(5) >> 4 === 1; + player.updateStats({ + vbps: payload.byteLength + }); + + if (payload.byteLength > 0) { + this._doDecode(payload, type, ts, isIframe); + } + } else { + this.player.debug.warn('M7sDemux', 'dispatch', 'dv byteLength is', dv.byteLength); + } + } + + break; + } + } + + } + + class Demux { + constructor(player) { + const Loader = Demux.getLoaderFactory(player._opt.demuxType); + return new Loader(player); + } + + static getLoaderFactory(type) { + if (type === DEMUX_TYPE.m7s) { + return M7sLoader; + } else if (type === DEMUX_TYPE.flv) { + return FlvLoader; + } + } + + } + + /* + * Copyright (C) 2016 Bilibili. All Rights Reserved. + * + * @author zheng qian + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + // Exponential-Golomb buffer decoder + class ExpGolomb { + constructor(uint8array) { + this.TAG = 'ExpGolomb'; + this._buffer = uint8array; + this._buffer_index = 0; + this._total_bytes = uint8array.byteLength; + this._total_bits = uint8array.byteLength * 8; + this._current_word = 0; + this._current_word_bits_left = 0; + } + + destroy() { + this._buffer = null; + } + + _fillCurrentWord() { + let buffer_bytes_left = this._total_bytes - this._buffer_index; + + let bytes_read = Math.min(4, buffer_bytes_left); + let word = new Uint8Array(4); + word.set(this._buffer.subarray(this._buffer_index, this._buffer_index + bytes_read)); + this._current_word = new DataView(word.buffer).getUint32(0, false); + this._buffer_index += bytes_read; + this._current_word_bits_left = bytes_read * 8; + } + + readBits(bits) { + + if (bits <= this._current_word_bits_left) { + let result = this._current_word >>> 32 - bits; + this._current_word <<= bits; + this._current_word_bits_left -= bits; + return result; + } + + let result = this._current_word_bits_left ? this._current_word : 0; + result = result >>> 32 - this._current_word_bits_left; + let bits_need_left = bits - this._current_word_bits_left; + + this._fillCurrentWord(); + + let bits_read_next = Math.min(bits_need_left, this._current_word_bits_left); + let result2 = this._current_word >>> 32 - bits_read_next; + this._current_word <<= bits_read_next; + this._current_word_bits_left -= bits_read_next; + result = result << bits_read_next | result2; + return result; + } + + readBool() { + return this.readBits(1) === 1; + } + + readByte() { + return this.readBits(8); + } + + _skipLeadingZero() { + let zero_count; + + for (zero_count = 0; zero_count < this._current_word_bits_left; zero_count++) { + if (0 !== (this._current_word & 0x80000000 >>> zero_count)) { + this._current_word <<= zero_count; + this._current_word_bits_left -= zero_count; + return zero_count; + } + } + + this._fillCurrentWord(); + + return zero_count + this._skipLeadingZero(); + } + + readUEG() { + // unsigned exponential golomb + let leading_zeros = this._skipLeadingZero(); + + return this.readBits(leading_zeros + 1) - 1; + } + + readSEG() { + // signed exponential golomb + let value = this.readUEG(); + + if (value & 0x01) { + return value + 1 >>> 1; + } else { + return -1 * (value >>> 1); + } + } + + } + + /* + * Copyright (C) 2016 Bilibili. All Rights Reserved. + * + * @author zheng qian + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + class SPSParser { + static _ebsp2rbsp(uint8array) { + let src = uint8array; + let src_length = src.byteLength; + let dst = new Uint8Array(src_length); + let dst_idx = 0; + + for (let i = 0; i < src_length; i++) { + if (i >= 2) { + // Unescape: Skip 0x03 after 00 00 + if (src[i] === 0x03 && src[i - 1] === 0x00 && src[i - 2] === 0x00) { + continue; + } + } + + dst[dst_idx] = src[i]; + dst_idx++; + } + + return new Uint8Array(dst.buffer, 0, dst_idx); + } // 解析 SPS + // https://zhuanlan.zhihu.com/p/27896239 + + + static parseSPS(uint8array) { + let rbsp = SPSParser._ebsp2rbsp(uint8array); + + let gb = new ExpGolomb(rbsp); + gb.readByte(); // 标识当前H.264码流的profile。 + // 我们知道,H.264中定义了三种常用的档次profile: 基准档次:baseline profile;主要档次:main profile; 扩展档次:extended profile; + + let profile_idc = gb.readByte(); // profile_idc + + gb.readByte(); // constraint_set_flags[5] + reserved_zero[3] + // 标识当前码流的Level。编码的Level定义了某种条件下的最大视频分辨率、最大视频帧率等参数,码流所遵从的level由level_idc指定。 + + let level_idc = gb.readByte(); // level_idc + // 表示当前的序列参数集的id。通过该id值,图像参数集pps可以引用其代表的sps中的参数。 + + gb.readUEG(); // seq_parameter_set_id + + let profile_string = SPSParser.getProfileString(profile_idc); + let level_string = SPSParser.getLevelString(level_idc); + let chroma_format_idc = 1; + let chroma_format = 420; + let chroma_format_table = [0, 420, 422, 444]; + let bit_depth = 8; // + + if (profile_idc === 100 || profile_idc === 110 || profile_idc === 122 || profile_idc === 244 || profile_idc === 44 || profile_idc === 83 || profile_idc === 86 || profile_idc === 118 || profile_idc === 128 || profile_idc === 138 || profile_idc === 144) { + // + chroma_format_idc = gb.readUEG(); + + if (chroma_format_idc === 3) { + gb.readBits(1); // separate_colour_plane_flag + } + + if (chroma_format_idc <= 3) { + chroma_format = chroma_format_table[chroma_format_idc]; + } + + bit_depth = gb.readUEG() + 8; // bit_depth_luma_minus8 + + gb.readUEG(); // bit_depth_chroma_minus8 + + gb.readBits(1); // qpprime_y_zero_transform_bypass_flag + + if (gb.readBool()) { + // seq_scaling_matrix_present_flag + let scaling_list_count = chroma_format_idc !== 3 ? 8 : 12; + + for (let i = 0; i < scaling_list_count; i++) { + if (gb.readBool()) { + // seq_scaling_list_present_flag + if (i < 6) { + SPSParser._skipScalingList(gb, 16); + } else { + SPSParser._skipScalingList(gb, 64); + } + } + } + } + } // 用于计算MaxFrameNum的值。计算公式为MaxFrameNum = 2^(log2_max_frame_num_minus4 + + + + gb.readUEG(); // log2_max_frame_num_minus4 + // 表示解码picture order count(POC)的方法。POC是另一种计量图像序号的方式,与frame_num有着不同的计算方法。该语法元素的取值为0、1或2。 + + let pic_order_cnt_type = gb.readUEG(); + + if (pic_order_cnt_type === 0) { + gb.readUEG(); // log2_max_pic_order_cnt_lsb_minus_4 + } else if (pic_order_cnt_type === 1) { + gb.readBits(1); // delta_pic_order_always_zero_flag + + gb.readSEG(); // offset_for_non_ref_pic + + gb.readSEG(); // offset_for_top_to_bottom_field + + let num_ref_frames_in_pic_order_cnt_cycle = gb.readUEG(); + + for (let i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++) { + gb.readSEG(); // offset_for_ref_frame + } + } // 用于表示参考帧的最大数目。 + + + let ref_frames = gb.readUEG(); // max_num_ref_frames + // 标识位,说明frame_num中是否允许不连续的值。 + + gb.readBits(1); // gaps_in_frame_num_value_allowed_flag + // 用于计算图像的宽度。单位为宏块个数,因此图像的实际宽度为: + + let pic_width_in_mbs_minus1 = gb.readUEG(); // 使用PicHeightInMapUnits来度量视频中一帧图像的高度。 + // PicHeightInMapUnits并非图像明确的以像素或宏块为单位的高度,而需要考虑该宏块是帧编码或场编码。PicHeightInMapUnits的计算方式为: + + let pic_height_in_map_units_minus1 = gb.readUEG(); // 标识位,说明宏块的编码方式。当该标识位为0时,宏块可能为帧编码或场编码; + // 该标识位为1时,所有宏块都采用帧编码。根据该标识位取值不同,PicHeightInMapUnits的含义也不同, + // 为0时表示一场数据按宏块计算的高度,为1时表示一帧数据按宏块计算的高度。 + + let frame_mbs_only_flag = gb.readBits(1); + + if (frame_mbs_only_flag === 0) { + // 标识位,说明是否采用了宏块级的帧场自适应编码。当该标识位为0时,不存在帧编码和场编码之间的切换;当标识位为1时,宏块可能在帧编码和场编码模式之间进行选择。 + gb.readBits(1); // mb_adaptive_frame_field_flag + } // 标识位,用于B_Skip、B_Direct模式运动矢量的推导计算。 + + + gb.readBits(1); // direct_8x8_inference_flag + + let frame_crop_left_offset = 0; + let frame_crop_right_offset = 0; + let frame_crop_top_offset = 0; + let frame_crop_bottom_offset = 0; + let frame_cropping_flag = gb.readBool(); + + if (frame_cropping_flag) { + frame_crop_left_offset = gb.readUEG(); + frame_crop_right_offset = gb.readUEG(); + frame_crop_top_offset = gb.readUEG(); + frame_crop_bottom_offset = gb.readUEG(); + } + + let sar_width = 1, + sar_height = 1; + let fps = 0, + fps_fixed = true, + fps_num = 0, + fps_den = 0; // 标识位,说明SPS中是否存在VUI信息。 + + let vui_parameters_present_flag = gb.readBool(); + + if (vui_parameters_present_flag) { + if (gb.readBool()) { + // aspect_ratio_info_present_flag + let aspect_ratio_idc = gb.readByte(); + let sar_w_table = [1, 12, 10, 16, 40, 24, 20, 32, 80, 18, 15, 64, 160, 4, 3, 2]; + let sar_h_table = [1, 11, 11, 11, 33, 11, 11, 11, 33, 11, 11, 33, 99, 3, 2, 1]; + + if (aspect_ratio_idc > 0 && aspect_ratio_idc < 16) { + sar_width = sar_w_table[aspect_ratio_idc - 1]; + sar_height = sar_h_table[aspect_ratio_idc - 1]; + } else if (aspect_ratio_idc === 255) { + sar_width = gb.readByte() << 8 | gb.readByte(); + sar_height = gb.readByte() << 8 | gb.readByte(); + } + } + + if (gb.readBool()) { + // overscan_info_present_flag + gb.readBool(); // overscan_appropriate_flag + } + + if (gb.readBool()) { + // video_signal_type_present_flag + gb.readBits(4); // video_format & video_full_range_flag + + if (gb.readBool()) { + // colour_description_present_flag + gb.readBits(24); // colour_primaries & transfer_characteristics & matrix_coefficients + } + } + + if (gb.readBool()) { + // chroma_loc_info_present_flag + gb.readUEG(); // chroma_sample_loc_type_top_field + + gb.readUEG(); // chroma_sample_loc_type_bottom_field + } + + if (gb.readBool()) { + // timing_info_present_flag + let num_units_in_tick = gb.readBits(32); + let time_scale = gb.readBits(32); + fps_fixed = gb.readBool(); // fixed_frame_rate_flag + + fps_num = time_scale; + fps_den = num_units_in_tick * 2; + fps = fps_num / fps_den; + } + } + + let sarScale = 1; + + if (sar_width !== 1 || sar_height !== 1) { + sarScale = sar_width / sar_height; + } + + let crop_unit_x = 0, + crop_unit_y = 0; + + if (chroma_format_idc === 0) { + crop_unit_x = 1; + crop_unit_y = 2 - frame_mbs_only_flag; + } else { + let sub_wc = chroma_format_idc === 3 ? 1 : 2; + let sub_hc = chroma_format_idc === 1 ? 2 : 1; + crop_unit_x = sub_wc; + crop_unit_y = sub_hc * (2 - frame_mbs_only_flag); + } + + let codec_width = (pic_width_in_mbs_minus1 + 1) * 16; + let codec_height = (2 - frame_mbs_only_flag) * ((pic_height_in_map_units_minus1 + 1) * 16); + codec_width -= (frame_crop_left_offset + frame_crop_right_offset) * crop_unit_x; + codec_height -= (frame_crop_top_offset + frame_crop_bottom_offset) * crop_unit_y; + let present_width = Math.ceil(codec_width * sarScale); + gb.destroy(); + gb = null; // 解析出来的SPS 内容。 + + return { + profile_string: profile_string, + // baseline, high, high10, ... + level_string: level_string, + // 3, 3.1, 4, 4.1, 5, 5.1, ... + bit_depth: bit_depth, + // 8bit, 10bit, ... + ref_frames: ref_frames, + chroma_format: chroma_format, + // 4:2:0, 4:2:2, ... + chroma_format_string: SPSParser.getChromaFormatString(chroma_format), + frame_rate: { + fixed: fps_fixed, + fps: fps, + fps_den: fps_den, + fps_num: fps_num + }, + sar_ratio: { + width: sar_width, + height: sar_height + }, + codec_size: { + width: codec_width, + height: codec_height + }, + present_size: { + width: present_width, + height: codec_height + } + }; + } + + static _skipScalingList(gb, count) { + let last_scale = 8, + next_scale = 8; + let delta_scale = 0; + + for (let i = 0; i < count; i++) { + if (next_scale !== 0) { + delta_scale = gb.readSEG(); + next_scale = (last_scale + delta_scale + 256) % 256; + } + + last_scale = next_scale === 0 ? last_scale : next_scale; + } + } // profile_idc = 66 → baseline profile; + // profile_idc = 77 → main profile; + // profile_idc = 88 → extended profile; + // 在新版的标准中,还包括了High、High 10、High 4:2:2、High 4:4:4、High 10 Intra、High + // 4:2:2 Intra、High 4:4:4 Intra、CAVLC 4:4:4 Intra + + + static getProfileString(profile_idc) { + switch (profile_idc) { + case 66: + return 'Baseline'; + + case 77: + return 'Main'; + + case 88: + return 'Extended'; + + case 100: + return 'High'; + + case 110: + return 'High10'; + + case 122: + return 'High422'; + + case 244: + return 'High444'; + + default: + return 'Unknown'; + } + } + + static getLevelString(level_idc) { + return (level_idc / 10).toFixed(1); + } + + static getChromaFormatString(chroma) { + switch (chroma) { + case 420: + return '4:2:0'; + + case 422: + return '4:2:2'; + + case 444: + return '4:4:4'; + + default: + return 'Unknown'; + } + } + + } + + function parseAVCDecoderConfigurationRecord(arrayBuffer) { + const meta = {}; + const v = new DataView(arrayBuffer.buffer); + let version = v.getUint8(0); // configurationVersion + + let avcProfile = v.getUint8(1); // avcProfileIndication + + v.getUint8(2); // profile_compatibil + + v.getUint8(3); // AVCLevelIndication + + if (version !== 1 || avcProfile === 0) { + // this._onError(DemuxErrors.FORMAT_ERROR, 'Flv: Invalid AVCDecoderConfigurationRecord'); + return meta; + } + + const _naluLengthSize = (v.getUint8(4) & 3) + 1; // lengthSizeMinusOne + + + if (_naluLengthSize !== 3 && _naluLengthSize !== 4) { + // holy shit!!! + // this._onError(DemuxErrors.FORMAT_ERROR, `Flv: Strange NaluLengthSizeMinusOne: ${_naluLengthSize - 1}`); + return meta; + } + + let spsCount = v.getUint8(5) & 31; // numOfSequenceParameterSets + + if (spsCount === 0) { + // this._onError(DemuxErrors.FORMAT_ERROR, 'Flv: Invalid AVCDecoderConfigurationRecord: No SPS'); + return; + } + + let offset = 6; + + for (let i = 0; i < spsCount; i++) { + let len = v.getUint16(offset, false); // sequenceParameterSetLength + + offset += 2; + + if (len === 0) { + continue; + } // Notice: Nalu without startcode header (00 00 00 01) + + + let sps = new Uint8Array(arrayBuffer.buffer, offset, len); + offset += len; // flv.js作者选择了自己来解析这个数据结构,也是迫不得已,因为JS环境下没有ffmpeg,解析这个结构主要是为了提取 sps和pps。虽然理论上sps允许有多个,但其实一般就一个。 + // packetTtype 为 1 表示 NALU,NALU= network abstract layer unit,这是H.264的概念,网络抽象层数据单元,其实简单理解就是一帧视频数据。 + // pps的信息没什么用,所以作者只实现了sps的分析器,说明作者下了很大功夫去学习264的标准,其中的Golomb解码还是挺复杂的,能解对不容易,我在PC和手机平台都是用ffmpeg去解析的。 + // SPS里面包括了视频分辨率,帧率,profile level等视频重要信息。 + + let config = SPSParser.parseSPS(sps); + + if (i !== 0) { + // ignore other sps's config + continue; + } + + meta.codecWidth = config.codec_size.width; + meta.codecHeight = config.codec_size.height; + meta.presentWidth = config.present_size.width; + meta.presentHeight = config.present_size.height; + meta.profile = config.profile_string; + meta.level = config.level_string; + meta.bitDepth = config.bit_depth; + meta.chromaFormat = config.chroma_format; + meta.sarRatio = config.sar_ratio; + meta.frameRate = config.frame_rate; + + if (config.frame_rate.fixed === false || config.frame_rate.fps_num === 0 || config.frame_rate.fps_den === 0) { + meta.frameRate = {}; + } + + let fps_den = meta.frameRate.fps_den; + let fps_num = meta.frameRate.fps_num; + meta.refSampleDuration = meta.timescale * (fps_den / fps_num); + let codecArray = sps.subarray(1, 4); + let codecString = 'avc1.'; + + for (let j = 0; j < 3; j++) { + let h = codecArray[j].toString(16); + + if (h.length < 2) { + h = '0' + h; + } + + codecString += h; + } // codec + + + meta.codec = codecString; + } + + let ppsCount = v.getUint8(offset); // numOfPictureParameterSets + + if (ppsCount === 0) { + // this._onError(DemuxErrors.FORMAT_ERROR, 'Flv: Invalid AVCDecoderConfigurationRecord: No PPS'); + return meta; + } + + offset++; + + for (let i = 0; i < ppsCount; i++) { + let len = v.getUint16(offset, false); // pictureParameterSetLength + + offset += 2; + + if (len === 0) { + continue; + } + + new Uint8Array(arrayBuffer.buffer, offset, len); // pps is useless for extracting video information + + offset += len; + } + + meta.videoType = 'avc'; // meta.avcc = arrayBuffer; + + return meta; + } + + class WebcodecsDecoder extends Emitter { + constructor(player) { + super(); + this.player = player; + this.hasInit = false; + this.isDecodeFirstIIframe = false; + this.isInitInfo = false; + this.decoder = null; + this.initDecoder(); + player.debug.log('Webcodecs', 'init'); + } + + destroy() { + if (this.decoder) { + if (this.decoder.state !== 'closed') { + this.decoder.close(); + } + + this.decoder = null; + } + + this.hasInit = false; + this.isInitInfo = false; + this.isDecodeFirstIIframe = false; + this.off(); + this.player.debug.log('Webcodecs', 'destroy'); + } + + initDecoder() { + const _this = this; + + this.decoder = new VideoDecoder({ + output(videoFrame) { + _this.handleDecode(videoFrame); + }, + + error(error) { + _this.handleError(error); + } + + }); + } + + handleDecode(videoFrame) { + if (!this.isInitInfo) { + this.player.video.updateVideoInfo({ + width: videoFrame.codedWidth, + height: videoFrame.codedHeight + }); + this.player.video.initCanvasViewSize(); + this.isInitInfo = true; + } + + if (!this.player._times.videoStart) { + this.player._times.videoStart = now(); + this.player.handlePlayToRenderTimes(); + } + + this.player.handleRender(); + this.player.video.render({ + videoFrame + }); + this.player.updateStats({ + fps: true, + ts: 0, + buf: this.player.demux.delay + }); + } + + handleError(error) { + this.player.debug.error('Webcodecs', 'VideoDecoder handleError', error); + } + + decodeVideo(payload, ts, isIframe) { + // this.player.debug.log('Webcodecs decoder', 'decodeVideo', ts, isIframe); + if (!this.hasInit) { + if (isIframe && payload[1] === 0) { + const videoCodec = payload[0] & 0x0F; + this.player.video.updateVideoInfo({ + encTypeCode: videoCodec + }); // 如果解码出来的是 + + if (videoCodec === VIDEO_ENC_CODE.h265) { + this.emit(EVENTS_ERROR.webcodecsH265NotSupport); + return; + } + + if (!this.player._times.decodeStart) { + this.player._times.decodeStart = now(); + } + + const config = formatVideoDecoderConfigure(payload.slice(5)); + this.decoder.configure(config); + this.hasInit = true; + } + } else { + // check width or height change + if (isIframe && payload[1] === 0) { + let data = payload.slice(5); + const config = parseAVCDecoderConfigurationRecord(data); + const videoInfo = this.player.video.videoInfo; + + if (config.codecWidth !== videoInfo.width || config.codecHeight !== videoInfo.height) { + this.player.debug.log('Webcodecs', `width or height is update, width ${videoInfo.width}-> ${config.codecWidth}, height ${videoInfo.height}-> ${config.codecHeight}`); + this.player.emit(EVENTS_ERROR.webcodecsWidthOrHeightChange); + return; + } + } // fix : Uncaught DOMException: Failed to execute 'decode' on 'VideoDecoder': A key frame is required after configure() or flush(). + + + if (!this.isDecodeFirstIIframe && isIframe) { + this.isDecodeFirstIIframe = true; + } + + if (this.isDecodeFirstIIframe) { + const chunk = new EncodedVideoChunk({ + data: payload.slice(5), + timestamp: ts, + type: isIframe ? ENCODED_VIDEO_TYPE.key : ENCODED_VIDEO_TYPE.delta + }); + this.player.emit(EVENTS.timeUpdate, ts); + + try { + if (this.isDecodeStateClosed()) { + this.player.debug.warn('Webcodecs', 'VideoDecoder isDecodeStateClosed true'); + return; + } + + this.decoder.decode(chunk); + } catch (e) { + this.player.debug.error('Webcodecs', 'VideoDecoder', e); + + if (e.toString().indexOf(WCS_ERROR.keyframeIsRequiredError) !== -1) { + this.player.emitError(EVENTS_ERROR.webcodecsDecodeError); + } else if (e.toString().indexOf(WCS_ERROR.canNotDecodeClosedCodec) !== -1) { + this.player.emitError(EVENTS_ERROR.webcodecsDecodeError); + } + } + } else { + this.player.debug.warn('Webcodecs', 'VideoDecoder isDecodeFirstIIframe false'); + } + } + } + + isDecodeStateClosed() { + return this.decoder.state === 'closed'; + } + + } + + const iconsMap = { + play: '播放', + pause: '暂停', + audio: '', + mute: '', + screenshot: '截图', + loading: '加载', + fullscreen: '全屏', + fullscreenExit: '退出全屏', + record: '录制', + recordStop: '停止录制' + }; + var icons = Object.keys(iconsMap).reduce((icons, key) => { + icons[key] = ` + + ${iconsMap[key] ? `${iconsMap[key]}` : ''} +`; + return icons; + }, {}); + + var template = ((player, control) => { + if (player._opt.hasControl && player._opt.controlAutoHide) { + player.$container.classList.add('jessibuca-controls-show-auto-hide'); + } else { + player.$container.classList.add('jessibuca-controls-show'); + } + + const options = player._opt; + const operateBtns = options.operateBtns; + player.$container.insertAdjacentHTML('beforeend', ` + ${options.background ? `
` : ''} +
+ ${icons.loading} + ${options.loadingText ? `
${options.loadingText}
` : ''} +
+ ${options.hasControl && operateBtns.play ? `
` : ''} + ${options.hasControl ? ` +
+
+
00:00:01
+
${icons.recordStop}
+
+ ` : ''} + ${options.hasControl ? ` +
+
+
+ ${options.showBandwidth ? `
` : ''} +
+
+ ${operateBtns.audio ? ` +
+ ${icons.audio} + ${icons.mute} +
+
+
+
+
+
+
+ ` : ''} + ${operateBtns.play ? `
${icons.play}
${icons.pause}
` : ''} + ${operateBtns.screenshot ? `
${icons.screenshot}
` : ''} + ${operateBtns.record ? `
${icons.record}
${icons.recordStop}
` : ''} + ${operateBtns.fullscreen ? `
${icons.fullscreen}
${icons.fullscreenExit}
` : ''} +
+
+
+ ` : ''} + + `); + Object.defineProperty(control, '$poster', { + value: player.$container.querySelector('.jessibuca-poster') + }); + Object.defineProperty(control, '$loading', { + value: player.$container.querySelector('.jessibuca-loading') + }); + Object.defineProperty(control, '$play', { + value: player.$container.querySelector('.jessibuca-play') + }); + Object.defineProperty(control, '$playBig', { + value: player.$container.querySelector('.jessibuca-play-big') + }); + Object.defineProperty(control, '$recording', { + value: player.$container.querySelector('.jessibuca-recording') + }); + Object.defineProperty(control, '$recordingTime', { + value: player.$container.querySelector('.jessibuca-recording-time') + }); + Object.defineProperty(control, '$recordingStop', { + value: player.$container.querySelector('.jessibuca-recording-stop') + }); + Object.defineProperty(control, '$pause', { + value: player.$container.querySelector('.jessibuca-pause') + }); + Object.defineProperty(control, '$controls', { + value: player.$container.querySelector('.jessibuca-controls') + }); + Object.defineProperty(control, '$fullscreen', { + value: player.$container.querySelector('.jessibuca-fullscreen') + }); + Object.defineProperty(control, '$fullscreen', { + value: player.$container.querySelector('.jessibuca-fullscreen') + }); + Object.defineProperty(control, '$volume', { + value: player.$container.querySelector('.jessibuca-volume') + }); + Object.defineProperty(control, '$volumePanelWrap', { + value: player.$container.querySelector('.jessibuca-volume-panel-wrap') + }); + Object.defineProperty(control, '$volumePanelText', { + value: player.$container.querySelector('.jessibuca-volume-panel-text') + }); + Object.defineProperty(control, '$volumePanel', { + value: player.$container.querySelector('.jessibuca-volume-panel') + }); + Object.defineProperty(control, '$volumeHandle', { + value: player.$container.querySelector('.jessibuca-volume-panel-handle') + }); + Object.defineProperty(control, '$volumeOn', { + value: player.$container.querySelector('.jessibuca-icon-audio') + }); + Object.defineProperty(control, '$volumeOff', { + value: player.$container.querySelector('.jessibuca-icon-mute') + }); + Object.defineProperty(control, '$fullscreen', { + value: player.$container.querySelector('.jessibuca-fullscreen') + }); + Object.defineProperty(control, '$fullscreenExit', { + value: player.$container.querySelector('.jessibuca-fullscreen-exit') + }); + Object.defineProperty(control, '$record', { + value: player.$container.querySelector('.jessibuca-record') + }); + Object.defineProperty(control, '$recordStop', { + value: player.$container.querySelector('.jessibuca-record-stop') + }); + Object.defineProperty(control, '$screenshot', { + value: player.$container.querySelector('.jessibuca-screenshot') + }); + Object.defineProperty(control, '$speed', { + value: player.$container.querySelector('.jessibuca-speed') + }); + }); + + var observer$1 = ((player, control) => { + const { + events: { + proxy + } + } = player; + const object = document.createElement('object'); + object.setAttribute('aria-hidden', 'true'); + object.setAttribute('tabindex', -1); + object.type = 'text/html'; + object.data = 'about:blank'; + setStyle(object, { + display: 'block', + position: 'absolute', + top: '0', + left: '0', + height: '100%', + width: '100%', + overflow: 'hidden', + pointerEvents: 'none', + zIndex: '-1' + }); + let playerWidth = player.width; + let playerHeight = player.height; + proxy(object, 'load', () => { + proxy(object.contentDocument.defaultView, 'resize', () => { + if (player.width !== playerWidth || player.height !== playerHeight) { + playerWidth = player.width; + playerHeight = player.height; + player.emit(EVENTS.resize); + screenfullH5Control(); + } + }); + }); + player.$container.appendChild(object); + player.on(EVENTS.destroy, () => { + player.$container.removeChild(object); + }); + + function setVolumeHandle(percentage) { + if (percentage === 0) { + setStyle(control.$volumeOn, 'display', 'none'); + setStyle(control.$volumeOff, 'display', 'flex'); + setStyle(control.$volumeHandle, 'top', `${48}px`); + } else { + if (control.$volumeHandle && control.$volumePanel) { + const panelHeight = getStyle(control.$volumePanel, 'height') || 60; + const handleHeight = getStyle(control.$volumeHandle, 'height'); + const top = panelHeight - (panelHeight - handleHeight) * percentage - handleHeight; + setStyle(control.$volumeHandle, 'top', `${top}px`); + setStyle(control.$volumeOn, 'display', 'flex'); + setStyle(control.$volumeOff, 'display', 'none'); + } + } + + control.$volumePanelText && (control.$volumePanelText.innerHTML = parseInt(percentage * 100)); + } + + player.on(EVENTS.volumechange, () => { + setVolumeHandle(player.volume); + }); + player.on(EVENTS.loading, flag => { + setStyle(control.$loading, 'display', flag ? 'flex' : 'none'); + setStyle(control.$poster, 'display', 'none'); + + if (flag) { + setStyle(control.$playBig, 'display', 'none'); + } + }); + + const screenfullChange = fullscreen => { + let isFullScreen = isBoolean(fullscreen) ? fullscreen : player.fullscreen; + setStyle(control.$fullscreenExit, 'display', isFullScreen ? 'flex' : 'none'); + setStyle(control.$fullscreen, 'display', isFullScreen ? 'none' : 'flex'); // control.autoSize(); + }; + + const screenfullH5Control = () => { + if (isMobile() && control.$controls && player._opt.useWebFullScreen) { + setTimeout(() => { + if (player.fullscreen) { + // console.log(player.width, player.height); + let translateX = player.height / 2 - player.width + CONTROL_HEIGHT / 2; + let translateY = player.height / 2 - CONTROL_HEIGHT / 2; + control.$controls.style.transform = `translateX(${-translateX}px) translateY(-${translateY}px) rotate(-90deg)`; + } else { + control.$controls.style.transform = `translateX(0) translateY(0) rotate(0)`; + } + }, 10); + } + }; + + try { + screenfull.on('change', screenfullChange); + player.events.destroys.push(() => { + screenfull.off('change', screenfullChange); + }); + } catch (error) {// + } // + + + player.on(EVENTS.webFullscreen, value => { + screenfullChange(value); + screenfullH5Control(); + }); + player.on(EVENTS.recording, () => { + setStyle(control.$record, 'display', player.recording ? 'none' : 'flex'); + setStyle(control.$recordStop, 'display', player.recording ? 'flex' : 'none'); + setStyle(control.$recording, 'display', player.recording ? 'flex' : 'none'); + }); // + + player.on(EVENTS.recordingTimestamp, timestamp => { + // console.log(timestamp); + control.$recordingTime && (control.$recordingTime.innerHTML = formatTimeTips(timestamp)); + }); + player.on(EVENTS.playing, flag => { + setStyle(control.$play, 'display', flag ? 'none' : 'flex'); + setStyle(control.$playBig, 'display', flag ? 'none' : 'block'); + setStyle(control.$pause, 'display', flag ? 'flex' : 'none'); + setStyle(control.$screenshot, 'display', flag ? 'flex' : 'none'); + setStyle(control.$record, 'display', flag ? 'flex' : 'none'); + setStyle(control.$qualityMenu, 'display', flag ? 'flex' : 'none'); + setStyle(control.$volume, 'display', flag ? 'flex' : 'none'); // setStyle(control.$fullscreen, 'display', flag ? 'flex' : 'none'); + + screenfullChange(); // 不在播放 + + if (!flag) { + control.$speed && (control.$speed.innerHTML = bpsSize('')); + } + }); + player.on(EVENTS.kBps, rate => { + const bps = bpsSize(rate); + control.$speed && (control.$speed.innerHTML = bps); + }); + }); + + var property = ((player, control) => { + Object.defineProperty(control, 'controlsRect', { + get: () => { + return control.$controls.getBoundingClientRect(); + } + }); + }); + + var events = ((player, control) => { + const { + events: { + proxy + }, + debug + } = player; + + function volumeChangeFromEvent(event) { + const { + bottom: panelBottom, + height: panelHeight + } = control.$volumePanel.getBoundingClientRect(); + const { + height: handleHeight + } = control.$volumeHandle.getBoundingClientRect(); + let moveLen = event.y; // if (isMobile() && player.fullscreen) { + // moveLen = event.x; + // } + + const percentage = clamp(panelBottom - moveLen - handleHeight / 2, 0, panelHeight - handleHeight / 2) / (panelHeight - handleHeight); + return percentage; + } // + + + proxy(window, ['click', 'contextmenu'], event => { + if (event.composedPath().indexOf(player.$container) > -1) { + control.isFocus = true; + } else { + control.isFocus = false; + } + }); // + + proxy(window, 'orientationchange', () => { + setTimeout(() => { + player.resize(); + }, 300); + }); + proxy(control.$controls, 'click', e => { + e.stopPropagation(); + }); + proxy(control.$pause, 'click', e => { + player.pause(); + }); // 监听 play 方法 + + proxy(control.$play, 'click', e => { + player.play(); + player.resumeAudioAfterPause(); + }); // 监听 play 方法 + + proxy(control.$playBig, 'click', e => { + player.play(); + player.resumeAudioAfterPause(); + }); + proxy(control.$volume, 'mouseover', () => { + control.$volumePanelWrap.classList.add('jessibuca-volume-panel-wrap-show'); + }); + proxy(control.$volume, 'mouseout', () => { + control.$volumePanelWrap.classList.remove('jessibuca-volume-panel-wrap-show'); + }); + proxy(control.$volumeOn, 'click', e => { + e.stopPropagation(); + setStyle(control.$volumeOn, 'display', 'none'); + setStyle(control.$volumeOff, 'display', 'block'); + const lastVolume = player.volume; + player.volume = 0; + player._lastVolume = lastVolume; + }); + proxy(control.$volumeOff, 'click', e => { + e.stopPropagation(); + setStyle(control.$volumeOn, 'display', 'block'); + setStyle(control.$volumeOff, 'display', 'none'); + player.volume = player.lastVolume || 0.5; + }); + proxy(control.$screenshot, 'click', e => { + e.stopPropagation(); + player.video.screenshot(); + }); + proxy(control.$volumePanel, 'click', event => { + event.stopPropagation(); + player.volume = volumeChangeFromEvent(event); + }); + proxy(control.$volumeHandle, 'mousedown', () => { + control.isVolumeDroging = true; + }); + proxy(control.$volumeHandle, 'mousemove', event => { + if (control.isVolumeDroging) { + player.volume = volumeChangeFromEvent(event); + } + }); + proxy(document, 'mouseup', () => { + if (control.isVolumeDroging) { + control.isVolumeDroging = false; + } + }); + proxy(control.$record, 'click', e => { + e.stopPropagation(); + player.recording = true; + }); + proxy(control.$recordStop, 'click', e => { + e.stopPropagation(); + player.recording = false; + }); + proxy(control.$recordingStop, 'click', e => { + e.stopPropagation(); + player.recording = false; + }); + proxy(control.$fullscreen, 'click', e => { + e.stopPropagation(); + player.fullscreen = true; + }); + proxy(control.$fullscreenExit, 'click', e => { + e.stopPropagation(); + player.fullscreen = false; + }); + + if (player._opt.hasControl && player._opt.controlAutoHide) { + // + proxy(player.$container, 'mouseover', () => { + if (!player.fullscreen) { + setStyle(control.$controls, 'display', 'block'); + startDelayControlHidden(); + } + }); + proxy(player.$container, 'mousemove', () => { + if (player.$container && control.$controls) { + if (!player.fullscreen) { + if (control.$controls.style.display === 'none') { + setStyle(control.$controls, 'display', 'block'); + startDelayControlHidden(); + } + } else { + if (control.$controls.style.display === 'none') { + setStyle(control.$controls, 'display', 'block'); + startDelayControlHidden(); + } + } + } + }); + proxy(player.$container, 'mouseout', () => { + stopDelayControlHidden(); + setStyle(control.$controls, 'display', 'none'); + }); + let delayHiddenTimeout = null; + + const startDelayControlHidden = () => { + stopDelayControlHidden(); + delayHiddenTimeout = setTimeout(() => { + setStyle(control.$controls, 'display', 'none'); + }, 5 * 1000); + }; + + const stopDelayControlHidden = () => { + if (delayHiddenTimeout) { + clearTimeout(delayHiddenTimeout); + delayHiddenTimeout = null; + } + }; + } + }); + + function styleInject(css, ref) { + if ( ref === void 0 ) ref = {}; + var insertAt = ref.insertAt; + + if (!css || typeof document === 'undefined') { return; } + + var head = document.head || document.getElementsByTagName('head')[0]; + var style = document.createElement('style'); + style.type = 'text/css'; + + if (insertAt === 'top') { + if (head.firstChild) { + head.insertBefore(style, head.firstChild); + } else { + head.appendChild(style); + } + } else { + head.appendChild(style); + } + + if (style.styleSheet) { + style.styleSheet.cssText = css; + } else { + style.appendChild(document.createTextNode(css)); + } + } + + var css_248z$1 = "@keyframes rotation{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}@keyframes magentaPulse{0%{background-color:#630030;-webkit-box-shadow:0 0 9px #333}50%{background-color:#a9014b;-webkit-box-shadow:0 0 18px #a9014b}to{background-color:#630030;-webkit-box-shadow:0 0 9px #333}}.jessibuca-container .jessibuca-icon{cursor:pointer;width:16px;height:16px}.jessibuca-container .jessibuca-poster{position:absolute;z-index:10;left:0;top:0;right:0;bottom:0;height:100%;width:100%;background-position:50%;background-repeat:no-repeat;background-size:contain;pointer-events:none}.jessibuca-container .jessibuca-play-big{position:absolute;display:none;height:100%;width:100%;background:rgba(0,0,0,.4)}.jessibuca-container .jessibuca-play-big:after{cursor:pointer;content:\"\";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:block;width:48px;height:48px;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACgklEQVRoQ+3ZPYsTQRjA8eeZZCFlWttAwCIkZOaZJt8hlvkeHrlccuAFT6wEG0FQOeQQLCIWih6chQgKgkkKIyqKCVYip54IWmiQkTmyYhFvd3Zn3yDb7szu/7cv7GaDkPEFM94PK0DSZ9DzDAyHw7uI2HRDlVJX5/N5r9FoHCYdr/fvCRiNRmpJ6AEidoUQ15NG+AH8BgD2n9AHANAmohdJQfwAfgGA4xF4bjabnW21Whob62ILoKNfAsAGEd2PU2ATcNSNiDf0/cE5/xAHxDpgEf0NADaJ6HLUiKgAbvcjpdSGlPJZVJCoAUfdSqkLxWLxTLlc/mkbEgtgET1TSnWklLdtIuIEuN23crlcp16vv7cBSQKgu38AwBYRXQyLSArg3hsjRDxNRE+CQhIF/BN9qVAobFYqle+mkLQAdLd+8K0T0U0TRJoAbvc9fVkJId75gaQRoLv1C2STiPTb7rFLWgE6+g0RncwyYEJEtawCvjDGmpzzp5kD6NfxfD7frtVqB17xen2a7oG3ALBm+oMoFQBEPD+dTvtBfpImDXjIGFvjnD/3c7ksG5MU4HDxWeZa0HB3XhKAXcdxOn5vUi9gnIDXSqm2lHLPK8pkfVyAbSLqm4T5HRs1YB8RO0KIid8g03FRAT4rpbpSyh3TINPxUQB2GGM9zvkn05gg420CJovLZT9ISNA5tgB9ItoOGhFmnh/AcZ/X9xhj65zzV2Eiwsz1A1j2B8dHAOgS0W6YnduY6wkYj8d3lFKn/j66Ea84jtOrVqtfbQSE3YYnYDAY5Eql0hYAnNDv6kKIx2F3anO+J8DmzqLY1goQxVE12ebqDJgcrSjGrs5AFEfVZJt/AF0m+jHzUTtnAAAAAElFTkSuQmCC\");background-repeat:no-repeat;background-position:50%}.jessibuca-container .jessibuca-play-big:hover:after{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACEElEQVRoQ+2ZXStEQRjH/3/yIXwDdz7J+i7kvdisXCk3SiFJW27kglBcSFFKbqwQSa4krykuKB09Naf2Yndn5jgzc06d53Znd36/mWfeniVyHsw5PwqB0DOonYEoijYBlOpAFwCMkHwLDS/9mwhEDUCfAAyTXA4tYSLwC6CtCegegH6S56FETAR+AHRoACcBTJAUWa+RloBAXwAYIrnt0yBNgZi7qtbHgw8RFwLC/QFglOScawlXAjH3gUqrE1cirgVi7mkAYyS/0xbxJSDcdwAGSa6nKeFTIOZeUyL3aYiEEBDuLwDjJGf+KxFKIOY+BdBL8iipSGiBmHtWbbuftiJZERBuOfgGSK7aSGRJIObeUml1ayKSRQHhlgtkiaTcdltGVgUE+ppkV54FaiS78yrwqlLoOI8Cch2XV548W7WRpTVwA6DP9kGUFYEpAOUkT9LQAvtq1M+0udKkQSgBqSlJWWYxKXj8vRACK+o6bbRIdYI+Ba7U7rKjg7L53JdAhWTZBsy0rWuBXZUuNVMg23auBF7UIl2yBbJt70JAoKV6/WwLk6R9mgKSJlJ1kLTxFmkJyCla8UZd15GJQKvyumyJ8gy8DAEvfZoINPqD41EtUjmUgoaJwAaAnjrKebVI34OSq85NBNqlCAWgE0CV5GEWwI3vQlmCbcSinYFCwPEIFDPgeIC1P1/MgHaIHDf4Aydx2TF7wnKeAAAAAElFTkSuQmCC\")}.jessibuca-container .jessibuca-recording{display:none;position:absolute;left:50%;top:0;padding:0 3px;transform:translateX(-50%);justify-content:space-around;align-items:center;width:95px;height:20px;background:#000;opacity:1;border-radius:0 0 8px 8px;z-index:1}.jessibuca-container .jessibuca-recording .jessibuca-recording-red-point{width:8px;height:8px;background:#ff1f1f;border-radius:50%;animation:magentaPulse 1s linear infinite}.jessibuca-container .jessibuca-recording .jessibuca-recording-time{font-size:14px;font-weight:500;color:#ddd}.jessibuca-container .jessibuca-recording .jessibuca-icon-recordStop{width:16px;height:16px;cursor:pointer}.jessibuca-container .jessibuca-loading{display:none;flex-direction:column;justify-content:center;align-items:center;position:absolute;z-index:20;left:0;top:0;right:0;bottom:0;width:100%;height:100%;pointer-events:none}.jessibuca-container .jessibuca-loading-text{line-height:20px;font-size:13px;color:#fff;margin-top:10px}.jessibuca-container .jessibuca-controls{background-color:#161616;box-sizing:border-box;display:flex;flex-direction:column;justify-content:flex-end;position:absolute;z-index:40;left:0;right:0;bottom:0;height:38px;width:100%;padding-left:13px;padding-right:13px;font-size:14px;color:#fff;opacity:0;visibility:hidden;transition:all .2s ease-in-out;-webkit-user-select:none;user-select:none;transition:width .5s ease-in}.jessibuca-container .jessibuca-controls .jessibuca-controls-item{position:relative;display:flex;justify-content:center;padding:0 8px}.jessibuca-container .jessibuca-controls .jessibuca-controls-item:hover .icon-title-tips{visibility:visible;opacity:1}.jessibuca-container .jessibuca-controls .jessibuca-fullscreen,.jessibuca-container .jessibuca-controls .jessibuca-fullscreen-exit,.jessibuca-container .jessibuca-controls .jessibuca-icon-audio,.jessibuca-container .jessibuca-controls .jessibuca-microphone-close,.jessibuca-container .jessibuca-controls .jessibuca-pause,.jessibuca-container .jessibuca-controls .jessibuca-play,.jessibuca-container .jessibuca-controls .jessibuca-record,.jessibuca-container .jessibuca-controls .jessibuca-record-stop,.jessibuca-container .jessibuca-controls .jessibuca-screenshot{display:none}.jessibuca-container .jessibuca-controls .jessibuca-icon-audio,.jessibuca-container .jessibuca-controls .jessibuca-icon-mute{z-index:1}.jessibuca-container .jessibuca-controls .jessibuca-controls-bottom{display:flex;justify-content:space-between;height:100%}.jessibuca-container .jessibuca-controls .jessibuca-controls-bottom .jessibuca-controls-left,.jessibuca-container .jessibuca-controls .jessibuca-controls-bottom .jessibuca-controls-right{display:flex;align-items:center}.jessibuca-container.jessibuca-controls-show .jessibuca-controls{opacity:1;visibility:visible}.jessibuca-container.jessibuca-controls-show-auto-hide .jessibuca-controls{opacity:.8;visibility:visible;display:none}.jessibuca-container.jessibuca-hide-cursor *{cursor:none!important}.jessibuca-container .jessibuca-icon-loading{width:50px;height:50px;background:url(\"data:image/png;base64,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\") no-repeat 50%;background-size:100% 100%;animation:rotation 1s linear infinite}.jessibuca-container .jessibuca-icon-screenshot{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAE5UlEQVRoQ+1YW2sdVRT+1s7JxbsoVkEUrIIX0ouz15zYNA+N1RdtQfCltlUfvLbqL/BCwZ8grbHtizQqPojgBSr0JkiMmT2nxgapqBURtPVCq7HxJCeZJVPmxDlzZubMmXOSEsnAvOy917fXt9e39tp7E5b4R0vcfywTuNgRbBgBx3HuJqLVzPzmYjprjHkcwAlmLqXNm4XAISLaSESPaq2HF4OE67rbRGRYRA7btn1fbgLGmKsA/Azg0gBkGzO/vZAkHMd5hIiqc5wHcCMz/5k0Z2oExsfHV1QqldPAf8lORNu11m8tBAljzFYAYWxRSl1vWdZvuQj4RsYYF4AVBlgIOVVlE55HRIxt23ZuCfmGjuOsJ6LPoiAistW27XfaEYmIbOYhPc9bXywWR1oiEJDYQkR1zrYjEjGyqfqbKd8a7kJVtLgQ+30i8pht2wfyRKIdmJkJBPkQTbILfudJ7CTZNBvVpggEcgpvc/ML38zESbLJsxBNE/A9biX0rdjGyTQXgbxyapdsarb0PMlXtWnGoXbKpm0Essqp3bJpK4E0OXmed3+hUBDP8w5FI91M0rdcyLLILElOCbaZilSWeXMncRx4klTCY1spfG3dhZJWx3GcDUR0EEB3ZMw0ET2gtT6SZWWzjmlrBIJCl0hAKfWgZVmHszqXZVxbCSxpCS2JJA6umIhe8ZKKVLPbaBJ+S9toqVRa53nedgAbAKwIwH4FcAzAa0R0l4i8F7PPz189k6RFRA+LyNcAXojDV0oNW5b1eW4Cxpg9AHZkSaaa6hhzb065uDSCH2LmRB8Sk9gY4293g43Qo/1pV80m8yQMfZSZ781cB1zXHRKRZ2IMpgD8A+DamL4ZItqitX4/jbQx5iEA7wLoihn3V/ACckWMJN/QWj9b1x5tGBsbW6uUOh5pPy0iL3Z2dn6ilJqanp5ep5TaJSLhF4NppdRNaU8gPmapVLrO87yfIoXuWyJ6uVKp+HmFjo6OQSJ6FcBtYT+UUmstyxqvkWuUgDFmP4AnQu2/e563qlgs+u9DNZ8xZhRAX7VRRPbath0XuXk7Y8xeAE+FgL6fnJzsHRwcLIfBR0ZGLunq6poAsDLUvp+Zw7b1r9PGmJMAbg8Z7WDmoThZuK67WkS+DD18fcPMdzSQUBR/EzN/nIC/SUQ+DPXV4dclsTHmHAD/SfHCNzc3t7Kvr++HJKeMMacA3BL0nyuXyzcPDAxMxo0fHR29slAo/Ajg6qD/fE9Pzw29vb1/x42fmJi4vFwu+5G/LOg/y8zXNJLQ2dAES5JANMQ7mfn1jBI6ycx3NiMhItqstf4oAX+ziHwQ6qvDj5NQNIn/ALCKmX+JSeIvABRD7fuY+ekGBPYBeDI05tTMzExvf3+/vz2Hk91/ET8RSeI6/DoCpVJpjed5fmKGvzMAXpqdnT3oed5Ud3d3v4jsAqBr9Ei0Rmv9VRqBBPzvROQVETnq2xJRdRu9tRF+bCVOKWT+Kvl/TSIFk6SW/LAjKfjV5K8rZABi8dOOEv7FI7Z8x6zwEWbemLbyMfJr5qiSiJ96oclymBOR3bZtP9+M89WxxpjdAHY2sN3DzM8ljWl4I3Nd9x7/OE1ENcdpETnmH3e11n41zv0l4J8RkU+J6AAz+xtF4teQQG7PFslwmcAiLfSyhC72Qv9/I/Avns2OT7QJskoAAAAASUVORK5CYII=\") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-screenshot:hover{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAED0lEQVRoQ+2ZycsdRRTFf2ejqHFAMQqiYBTUoElUHLNx3GgCgpuYRF2o0UT9CxwQ/BMkMSbZSKLiQgQHUDCJgjiAxiEiESdEcJbEedgcKaj3UV+/6q7u/jovPPkK3qbr1ql76p5bt6qemPKmKfefeQKHOoLFCNg+H1gi6fFJOmv7VmCvpD1N87Yh8ApwNXCzpB2TIGF7DRDm2inpmt4EbB8LfAMcGUHWSHryYJKwfRMwmuMP4BRJv9TN2RgB2wuB72BWsq+V9MTBIGF7NZBiGzhJ0o+9CIRBtt8FLqgADC6nRDbpVO9Iuqi3hCKB5cDrGZDVkp4aIhIV2aSQyyW9MScCkcQqIOfsnCORkc3I31b5VtyFRmg1IQ7dt0ja3icSQ2C2JhAjUU2ykd+dE7tBNp2i2olAJJFuc+nCt564QTadF6IzgUhiVGiqyinKaQjZpJP2ItBXTkPJZhACXeU0pGwGI9BWTkPLZlACBTldG4o5EA6E1dY66edcyNrs8Q36zg1vVaTazNs7iXPgDVJJzYs7VRvHRzaDEohyugJ4CTi84sg/wHWSdnVxsGQ7aQLXS9pZcqpL/6AEplpCU5HE8YpJ9YrXUKQ6baN1+HPaRm1fBqwFQnKGK2ZoPwCvAo8Ai4FnMpPMHMwapHUj8DFwbw3+Dklv9iZgexOwvktSRduxU2VDlErwmyXV+lCbxLbDdndlCT3TX3vV7JgnKfRuSVflfMkSsL0ZuDMz4E/gL+CETN+/wCpJzzaRtn0D8DRwWMbu1/gCcnSm7zFJd1W/jxGwvQx4r2IYnlbuA14GAomQFw8B6YtBKFSnNj2BxEJ3IvB1pdB9CjwQ8yqYhcg/DJxZ8WOZpA/SbzkC24DbEqOfgPMkBRKzmu23gEuSj1sk5SI3Y2J7C3BHMuZz4FxJf6fgto8APgIWJd+3SUrHjr9O294HnJUMWi8pSGqs2V4CvJ88fH0i6eyChKr4KyS9WIO/Ang+6RvDz0XgABCeFEdtkaQv65yy/QVweuwPY0+T9FuNQ8cAXwHHxf7wdHiypN9r7BfEl8GjYv9+SceXJLQ/mSDYTh2Baog3SHq0pYT2STqno4RWSnqhBn8l8FzSN4bfJol/jkn8bXUS228DFyfft0paVyCwFbg9sQkSDEkctueZZju8iO+tJPEYfo7A0piYKd73wP3xnB+20cvjNnphxdmlkj4sEMjhfwY8COyOY0fb6Bkl/K6FLKxS+M1KpDhJY8mvrG5doRwlf66QZfGbjhLh4pEt35kV3iUp/IvTunU8qtTil/7gaHOY2yjpntaez9b5RmBDYewmSXfX2RRvZLYvbThOh+NuqMa9Ww1+yLnXgO2SwkZR24oEens2oYHzBCa00PMSOtQL/f+NwH+Hg8hAnbrYgQAAAABJRU5ErkJggg==\") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-play{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACgklEQVRoQ+3ZPYsTQRjA8eeZZCFlWttAwCIkZOaZJt8hlvkeHrlccuAFT6wEG0FQOeQQLCIWih6chQgKgkkKIyqKCVYip54IWmiQkTmyYhFvd3Zn3yDb7szu/7cv7GaDkPEFM94PK0DSZ9DzDAyHw7uI2HRDlVJX5/N5r9FoHCYdr/fvCRiNRmpJ6AEidoUQ15NG+AH8BgD2n9AHANAmohdJQfwAfgGA4xF4bjabnW21Whob62ILoKNfAsAGEd2PU2ATcNSNiDf0/cE5/xAHxDpgEf0NADaJ6HLUiKgAbvcjpdSGlPJZVJCoAUfdSqkLxWLxTLlc/mkbEgtgET1TSnWklLdtIuIEuN23crlcp16vv7cBSQKgu38AwBYRXQyLSArg3hsjRDxNRE+CQhIF/BN9qVAobFYqle+mkLQAdLd+8K0T0U0TRJoAbvc9fVkJId75gaQRoLv1C2STiPTb7rFLWgE6+g0RncwyYEJEtawCvjDGmpzzp5kD6NfxfD7frtVqB17xen2a7oG3ALBm+oMoFQBEPD+dTvtBfpImDXjIGFvjnD/3c7ksG5MU4HDxWeZa0HB3XhKAXcdxOn5vUi9gnIDXSqm2lHLPK8pkfVyAbSLqm4T5HRs1YB8RO0KIid8g03FRAT4rpbpSyh3TINPxUQB2GGM9zvkn05gg420CJovLZT9ISNA5tgB9ItoOGhFmnh/AcZ/X9xhj65zzV2Eiwsz1A1j2B8dHAOgS0W6YnduY6wkYj8d3lFKn/j66Ea84jtOrVqtfbQSE3YYnYDAY5Eql0hYAnNDv6kKIx2F3anO+J8DmzqLY1goQxVE12ebqDJgcrSjGrs5AFEfVZJt/AF0m+jHzUTtnAAAAAElFTkSuQmCC\") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-play:hover{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACEElEQVRoQ+2ZXStEQRjH/3/yIXwDdz7J+i7kvdisXCk3SiFJW27kglBcSFFKbqwQSa4krykuKB09Naf2Yndn5jgzc06d53Znd36/mWfeniVyHsw5PwqB0DOonYEoijYBlOpAFwCMkHwLDS/9mwhEDUCfAAyTXA4tYSLwC6CtCegegH6S56FETAR+AHRoACcBTJAUWa+RloBAXwAYIrnt0yBNgZi7qtbHgw8RFwLC/QFglOScawlXAjH3gUqrE1cirgVi7mkAYyS/0xbxJSDcdwAGSa6nKeFTIOZeUyL3aYiEEBDuLwDjJGf+KxFKIOY+BdBL8iipSGiBmHtWbbuftiJZERBuOfgGSK7aSGRJIObeUml1ayKSRQHhlgtkiaTcdltGVgUE+ppkV54FaiS78yrwqlLoOI8Cch2XV548W7WRpTVwA6DP9kGUFYEpAOUkT9LQAvtq1M+0udKkQSgBqSlJWWYxKXj8vRACK+o6bbRIdYI+Ba7U7rKjg7L53JdAhWTZBsy0rWuBXZUuNVMg23auBF7UIl2yBbJt70JAoKV6/WwLk6R9mgKSJlJ1kLTxFmkJyCla8UZd15GJQKvyumyJ8gy8DAEvfZoINPqD41EtUjmUgoaJwAaAnjrKebVI34OSq85NBNqlCAWgE0CV5GEWwI3vQlmCbcSinYFCwPEIFDPgeIC1P1/MgHaIHDf4Aydx2TF7wnKeAAAAAElFTkSuQmCC\") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-pause{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABA0lEQVRoQ+1YwQqCUBAcfWXXsLr2AXWTPXno8yVB8AP6Aa3oHI+kCDqYaawJljSe133uzO44bx0M/HEG/v1gAd9mkAyQgY4I/F8LJUlyrQFtD2AtIkcNoFEU+Z7n7QD4DfFHEVlocrVmgAUAIAOl3mILPcDgEFcUhyrUKMGUUcroc3NQRimj9XJBGaWMvvPydKN0o6/9QTdKN6rZANxj6EbpRulGuZnjYqs8BbyR8Ub2Izeys+u6yyAIDpo/ehzHM2NMDsA0xFsRmWhyfTIDWSXxCEBmrd2EYXjSHJqm6bQoii2AOYBL5Z0xgFxEVppcrQvQJO0zhgX0iXbdWWSADHRE4AZQ731AhEUeNwAAAABJRU5ErkJggg==\") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-pause:hover{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAA7klEQVRoQ+2YSwrCQBBEX6HiVvxsPYDewfN7By/gD9ciQkvERQwJdBSiYs0mEDo96aruombEjy/9+P/jAj7NoBkwA28i8H8tFBFRA9oeWEo6ZgCNiDGwAYpn3TpKmmVytWbABQBmoNRbbqEHGB7iiuJYhRol2DJqGX1uDsuoZdRmLuNZSzGWUcuoZdRHSp/IylNgK2ErYSthK3FHwLcSvpXIjoLt9Jfa6TMwl3TIMBkRE2AH9BriL5KGmVyvWIltJXEfKN6tJJ0ym0bECFgDU+Ba+WZQFCdpkcnVuoBM0i5jXECXaNftZQbMwJsI3AAPN3dAQflHegAAAABJRU5ErkJggg==\") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-record{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAC+UlEQVRoQ+1ZS2sTURT+zlDJYE3XSq219QHVuEjnJDT+Bff9Abqw2voAEfGxqygUqWhVFHGl/yMLu9BwByxk5SNI66ML6U7axjhHbmhgWiftncxoOiV3FcI53z3f/e65594zhIQPSnj86BBot4IdBToKRFyBnbeFlFIScVEiuYvIWC6Xe2YK8pcC7SYA4CMzH4mDQBXAqilQBDsLQLfPf9FxnF4i8kwwmypARI+Wl5dvmIBEsUmlUkNE9NaHsVCpVAZGR0d/m+A2JSAid3K53E0TkCg2pVKpz7KseR/GfKVSGYxMAMA0M1+JEpyJb6lUOm5ZVnkrAsVisaunp+esiByr1Wp3R0ZGvmifzZK4XQQWHMc52MgBpdQuAOcAXABwuB400ZTjONdaIjA7O5u2bVsnWU1EujzP+5nP5xdMVjvIJkCBD8x8VCm1G8AYgAkAAxt8Z5j5YmgCSqlTAJ4D2OcD/AXgATNfbYVEAIFPIvKKiE4D6GuCea8xX6gtpJT6DmBvECgRFRzHeROWRAABE4iWCbwHEFhkPM/L5vP5dyaz+23+KwHXdR3P854S0YG1ILSCuthNMfNM2OC1/RYENLY+ygcBnPfht6ZAA6BYLNr6dyqVokKhsGpaNQ2TWJstreXaE2aed133sojcj41AKyvdzCdAgSXLsk4MDw9/a/i4rntbRPxFNZoC/5jAV2be759DKTUJ4FZSFFi0bbs/k8noy2R9dAjEuWU2YgXkQOK3kD6BMsysi2Z9JC2Jdcw/ALzwPO+xvmcl7Rj177JVEbkO4BARjSflFDJJuW1dBxJPoCIiL4noDIB1BS0pW6j+oJmbm+uuVqvjRKQfLr0bZHnIzJf0f6HeAybahrUJqAPruhLlcnnPysqKfpXp11n/Gv62zoHAroS+AafT6QkiGrIsazKbzX7eVIHEt1US39gCkOzWYthkjNE+tuZujDGZQ8XRXn8N4KT5lLFZ6uaYPt+nwyDuvC80YdhvB9uOAu1WoaNAR4GIK/AHvdr+QAexB7EAAAAASUVORK5CYII=\") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-record:hover{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACfUlEQVRoQ+2ZSYsUQRCFvycK4nJXXEbHBdwO4kn/gv9CD467ICIutxEFkREdFUU86T/xojcPntyQcT2INw+uISFVkD1Wd2dWlU7nUHlqisiX+fJFZGREi8yHMt8/HYG5VrBToFOg4QnMPxcyM2t4KE2nT0i6EwvylwIjQOCFpE1tEPgGfI0FamC3AFgazP8IrJL0KwZzkAI3gLMxIA1ttgCPA4w3wHpJP2NwBxG4KOlcDEgTGzNbA8wEGP57vA0CU5JONtlczFwz2wY8HUbAzBYCB4CtwCVJb33OIAXmioC70LoyBsxsEXAQOApsLIhelnS6FgEzW+5BBvwA/FS+SPJFa40KBZ5L2mxmS4AJ4IjHxCzwaUnHkgmY2V7gLrAyAPwOXJN0qg6DCgIvgQfAPsDjo2pcKddLciEz+wCs6AO6W9KjVBIVBGIgahN4BvRLMjslPYlZPbT53wR2AbeBtcUmXEFPdh5U06mbd/shBBzbr/Jx4FCAX0+BEsDMFocEYrNmFcE+BD4XsXZL0oyZnQCutkagzkn3m1NBwDe/Q9L74MAuFEqUn5op8I8JvJO0elacTALnc1HAH3Njkvwx+WeYWUegTa/pwaqIgexdyIN4uyRPmqULZRXEvulPwD3gpr+zcrtGQxfzRHYG2AAczuUWiom3kc4D2RN4BdwH9gM9CS0XFyoLGu9UuN974eIFVDiuSzruH5LqgRhtU20q8kBPV8LMlhVVmVdnYwX+SMdAZVeieAF7eeltmElJr4cpkH1bJfvGVvatxdR4bMu+teZuWxtKxWncXn8I7EldtQV7vz79fp9KwZp//9CksB8F206BuVahU6BToOEJ/Ab7+KdABdTt8AAAAABJRU5ErkJggg==\") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-recordStop{background:url(\"data:image/png;base64,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\") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-recordStop:hover{background:url(\"data:image/png;base64,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\") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-fullscreen{background:url(\"data:image/png;base64,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\") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-fullscreen:hover{background:url(\"data:image/png;base64,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\") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-fullscreenExit{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAADd0lEQVRoQ+2Zz2sdVRTHv+fJBDW6anDVXen6wZszYxYBiYgtFGst3VSDunKjpS0GpUlqfjVpsVVs6aaL0or4YxMVFCJZ2ZLdPUP+gq5bQnTxtNAkfTnlhnnlkmQy9yV9780rudt77tzv5/y4v4bQ4Y06XD/2ANodwec/AiJygJnvtdvTWfPnRkBEJAiCN8rl8kMfiPn5+Ve7u7v3rays0Orq6lJfX99/PuN2auMDoAD+BvA2M6/mTWSMOUtE48D6AjHGzN/kjdlNvy+AnWOOmQ/lTSYiEwDOWzsimgrDcCRvzG76GwGw8/zJzO9sN6GInAMwbW1UdSSKoqndCMwb6wNwGsB39Q+p6h/M/C4R2dTa1AoHYBWKyCkA1+pqiWi2Wq0e7e/vf7yRoJAAKcQggMtuJKIoOtoxACnE0/xOi/SXMAxPuhCFjUBdpIjYVWXSEf0TM3/g9BeriDMKdSPEz8z8vrU1xgwT0YXCrEJZy1iSJKOqOub0/8jMA0mSfKKqNwoPkHp7ioiGHIhRIvpHVa93BEBa2JcAfOlALAHo6RgAKzRJkk9V1S6xL7kpV4idOM31taxaIKJHqmpPnMMA9hcOQES2PDJkAT1XAAC+ZebPfWB3auNzmLObVsNRUNUXVHUujuM7OxXnMy4XwOcj29mIyOuq+lapVGrYCelKpkEQ3CyXy4tbzdN0AGPMxr2iYZ+sra3FcRybtgCIiK2BKw2rdgaUSqWoUqlIkQAepFDdAF7cBq5ERI9rtdr1OI7tmE2t6SmUEYFHAEaexYW/1QC2EF+ru5GIvg7D0D2GNJxprQY4o6qv1I/b6SpzOYqiLxpWng5oOQAzXxWRWwA+dkRfYOb1p5hGW6sBJpn5KytSRG4D+KguWFXHoyhy7xdeLC0F2ChSRL4H8OFuINoKYIUbY34gogHH3eeZef1K6tPaDpCm068A3nMEDzHzxY4BUNWSiPxORO6z5aDPPlGICNQ9bYyZIaLjjudzIQoFkKbTbwCO+UI0HcB9J/LdeY0xs0R02IGYYObRrWqiFQCfEZEtSHsfmGZm+4qxbbM/hQD8BeBNa0hEM2EYnmgLgP3lFARBT1dXly4vL//b29tbzQNIU+llAHeJaLFSqRzJes5vegR8xGbZLCwsHKzVav8z8/0sm0ID+MDvAfh4qZk2exFopnd9vv0ELrXBQO7fD10AAAAASUVORK5CYII=\") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-fullscreenExit:hover{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAC/ElEQVRoQ+2Zy49NQRCHvx+ReK6IlZ34E7CUiCAR4xEbTLCyQRATYswwb2IQZDYWgojHZpCQECts+ResiQwLj0RClNSkb9Lu3HtPz7mZc8+V6eXt6tP1VVV3VdcVbT7U5vozC9BqD/7/HjCzlZLet9rS9fbP9ICZvQPWSfqRAmFmS4ClMHm+JiR9S1mXVyYFwIBXwEZJv7I2MrPjQH8A6JN0OWtNM/OpAL7HS0mbsjYzswGgN8gNS+rJWtPM/HQAfJ9nkrY22tDMTgMjQaZH0nAzCmatTQE4ClyNPvQU2CbJQ2vKKB2Aa2hmR4DrkbbPgQ5Jv6sJSgkQILqA0dgTkjraBiBAxPHtPz2UtDuGKK0HKkqamd8qg5HS9yXtjebLdYjrHNRqiAeS9gQvnQGGSnML1bvGzOwc0BfN35PUaWYHgRulBwjW9ju+O4JwqM/AWFsABIgLwKkIYgJY1jYAAeJQuGIXVIVcKTKxh8WfBin9J+AVpx/eFWUEqFkyNACKp0rhgWYArkg6kQibSyylmPOklQdibijBX+fSLHFRJkDid+qKmdlaYENOI0zeEcBNSZ9qbVIEQHWuyGOTNZLetgrAz8ClPFpHa1ZL8rf5lFGEB2oBfAxQi4D5DeDmAP7mGJPka0oD4LnDr9imH/xFe8AP4vLIjBclxWXItCOtaIBjwOKo3HaFRyWdnLbmYUHhAJKumdkt4ECk9JCkSitmWixFAwxKOjt5uZvdBvZH2vZLit8XSSBFA/yjpJndAfY1A9FSgOCJu0BnBNErqfIkzfRCywECxCNgR6Rtt6TzmdqHBmyKXG4ZM4sTWc04NzNPWE+AuG3ZlZInSuGBinXMbBzYGVkrE6JUACGcHgPbUyGKAIj7REmZ18y897o5ghiQ5E/bltRChwE/kF7Xj0jyLkbDYWbzgBfA+iA4LmlXqwD8LydvszjAF0lfswBCKC0E3gBeP22p186f8RBKUbaejJmtAr5L+lBPptQAKfCzAClWmkmZWQ/MpHVTvv0X9iFAQGQyevIAAAAASUVORK5CYII=\") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-audio{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACrUlEQVRoQ+2ZPYgTURCAZzbBXJnCeL2Cnb87b9MEtPBUrrMQFAtrtT5/ClGs9LBWWz0RtbBUFCF4oJDsbO68wsLA2YqQSmLlvpEHu7IuMdlLcus+yUKKhJfZ+ebnvZl5CJY/aLn+MAP41x7M1QPMfFtr/crzvHfTAs8FoNPp1LTWzwHgqIg0lFLvrQHwfX8BER8DwC6jNCIecF13wwoA3/dvIuKNpLJa60Oe560XGoCZd4rICiKeTCtaeABmPg4AJmRqg6xcaABmvg4At4aFRyEBhoVM4UMoCplHADCfJTEL5YEsIVNID5iQAYCHALCYxeq5b6PMfF5EBAAEESthGK7W6/XPRpFWq7W3VCqtZg2ZcT3g+/6i4zjzIlLSWn/yPO/DIGMNLCWY2Sj/+xGRK0qpZfNDEASnROTFVi0fr8+aA8z8Ld6KEfGt67oLYwMAwEUium8EREn7OgeAjwCwPyo/nrque3YSgAtE9GDaAM1mc65arc4Zuf1+P2w0Gt9jJZl5DQAORt+fENG5wgEw8zUAMB/zbBBRwyqAIAjuiMjlSOlNItpjFUCqWl0josMzgChR/9hGAWBbknjmAdPhDdqa0gfZzAMJKyVP4v8hhJYRcSni+0JEu63ahZj5anyQici6UuqIVQDdbrfS6/UqRulyufyTiH5sF8AlIro37VpoWEHIzGZ2tM+sEZFnSqkzk9RCS0R01wjIsZz+mug53hDRia0AnI4bGgDYISItz/M2jYC8Gpp2u30MEWuO4zha665Sqp0ZYFStX/iWchRAItFGzoHSsrJ2ZFl1mHg6bfVYJeGJv85CC++BpIJZ5kSFC6G0ha0e7mYJqcJ7IOkRay84UhD2XjHFIFZf8iW9YcYoYRi+tO6aNeupOs66iU/icV46zf/MAKZpzXFk/QL+JG1PUPhRiQAAAABJRU5ErkJggg==\") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-audio:hover{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACSElEQVRoQ+2Zu4sUQRCHf5+C+gf4yBXMfMYHGvjCzEBQDIzV+HwEohipGKupD0QNDE8UEwUFTe68wEDhTMVUMFJ+0tArzbjs9u3Ojt0wBR0M9MzUV1XdXVWNKhcq1189wP/2YKcesH1d0nPgdVvgnQDY3iTpqaT9kuaAt9UA2D4o6aGkzVHpXcByFQC2r0q60lB2D7BUNIDtjZIeSDoyRNGyAWwfiiET4n6YlAtg+7Kka2PCozyAMSHT5CkLIIbMfUlbMhdmOQCZIVOeB2LI3JN0NNPq6bTZe8D2aUmOY72kN8DnoIXt7eF5FSEzkQdsB+OEsFwr6RPwbpixhqYStoPyqVwAbkaAY5KeTWD5wStZHrD9XdJgK34FhBP9H8kFOAvciQBhn3/RAcBHSTvjfx4DJ6cBOAPcbRvA9gZJYQT5DfwYKGl7UdLu+PwIOFUiwCVJYQRZBuZqA7gh6XxUegXYVhtAmq0uAnt7gLhQm9vorBZx74Hcc6D3QLKH/z2JGyVnlYs4pCfzEe4rsLW2XehicpAtAftqAwiZbhhBfgE/ZwVwDrjddi40KiG0HXpHO+KcJ8CJaXKheeBWBOgqnf6W1BwvgcOrATieFDTrJL0HViJAVwXNgVgPrJH0BfiQDTDKtREiNK7KLSnHASQLLacP1PxcVkWWq8PU3emq2yqJJ0b1Qsv2QKpdZp+orBBqmrfq5m5mSJXtgUZI1XnB0YCo94opCal6L/ka3ghtlIXqrllzT9VJ5k19Ek/y0zbf6QHatOYk3/oDujC8QMWgjf4AAAAASUVORK5CYII=\") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-mute{background:url(\"data:image/png;base64,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\") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-mute:hover{background:url(\"data:image/png;base64,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\") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-text{font-size:14px;width:30px}.jessibuca-container .jessibuca-speed{font-size:14px;color:#fff}.jessibuca-container .jessibuca-quality-menu-list{position:absolute;left:50%;bottom:100%;visibility:hidden;opacity:0;transform:translateX(-50%);transition:visibility .3s,opacity .3s;background-color:rgba(0,0,0,.5);border-radius:4px}.jessibuca-container .jessibuca-quality-menu-list.jessibuca-quality-menu-shown{visibility:visible;opacity:1}.jessibuca-container .icon-title-tips{pointer-events:none;position:absolute;left:50%;bottom:100%;visibility:hidden;opacity:0;transform:translateX(-50%);transition:visibility .3s ease 0s,opacity .3s ease 0s;background-color:rgba(0,0,0,.5);border-radius:4px}.jessibuca-container .icon-title{display:inline-block;padding:5px 10px;font-size:12px;white-space:nowrap;color:#fff}.jessibuca-container .jessibuca-quality-menu{padding:8px 0}.jessibuca-container .jessibuca-quality-menu-item{display:block;height:25px;margin:0;padding:0 10px;cursor:pointer;font-size:14px;text-align:center;width:50px;color:hsla(0,0%,100%,.5);transition:color .3s,background-color .3s}.jessibuca-container .jessibuca-quality-menu-item:hover{background-color:hsla(0,0%,100%,.2)}.jessibuca-container .jessibuca-quality-menu-item:focus{outline:none}.jessibuca-container .jessibuca-quality-menu-item.jessibuca-quality-menu-item-active{color:#2298fc}.jessibuca-container .jessibuca-volume-panel-wrap{position:absolute;left:50%;bottom:100%;visibility:hidden;opacity:0;transform:translateX(-50%) translateY(22%);transition:visibility .3s,opacity .3s;background-color:rgba(0,0,0,.5);border-radius:4px;height:120px;width:50px;overflow:hidden}.jessibuca-container .jessibuca-volume-panel-wrap.jessibuca-volume-panel-wrap-show{visibility:visible;opacity:1}.jessibuca-container .jessibuca-volume-panel{cursor:pointer;position:absolute;top:21px;height:60px;width:50px;overflow:hidden}.jessibuca-container .jessibuca-volume-panel-text{position:absolute;left:0;top:0;width:50px;height:20px;line-height:20px;text-align:center;color:#fff;font-size:12px}.jessibuca-container .jessibuca-volume-panel-handle{position:absolute;top:48px;left:50%;width:12px;height:12px;border-radius:12px;margin-left:-6px;background:#fff}.jessibuca-container .jessibuca-volume-panel-handle:before{bottom:-54px;background:#fff}.jessibuca-container .jessibuca-volume-panel-handle:after{bottom:6px;background:hsla(0,0%,100%,.2)}.jessibuca-container .jessibuca-volume-panel-handle:after,.jessibuca-container .jessibuca-volume-panel-handle:before{content:\"\";position:absolute;display:block;left:50%;width:3px;margin-left:-1px;height:60px}.jessibuca-container.jessibuca-fullscreen-web .jessibuca-controls{width:100vh}.jessibuca-container.jessibuca-fullscreen-web .jessibuca-play-big:after{transform:translate(-50%,-50%) rotate(270deg)}.jessibuca-container.jessibuca-fullscreen-web .jessibuca-loading{flex-direction:row}.jessibuca-container.jessibuca-fullscreen-web .jessibuca-loading-text{transform:rotate(270deg)}\n/*# sourceMappingURL=data:application/json;base64,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eWZyYW1lcyByb3RhdGlvbiB7XG4gIGZyb20ge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH1cbiAgdG8ge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfSB9XG5cbkBrZXlmcmFtZXMgbWFnZW50YVB1bHNlIHtcbiAgZnJvbSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzYzMDAzMDtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA5cHggIzMzMzsgfVxuICA1MCUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNhOTAxNGI7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMThweCAjYTkwMTRiOyB9XG4gIHRvIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjMwMDMwO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDlweCAjMzMzOyB9IH1cblxuLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS1pY29uIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB3aWR0aDogMTZweDtcbiAgaGVpZ2h0OiAxNnB4OyB9XG5cbi5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtcG9zdGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxMDtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gIHBvaW50ZXItZXZlbnRzOiBub25lOyB9XG5cbi5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtcGxheS1iaWcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC40KTsgfVxuICAuamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLXBsYXktYmlnOmFmdGVyIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICB0b3A6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogNDhweDtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiLi4vYXNzZXRzL3BsYXkucG5nXCIpO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOyB9XG4gIC5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtcGxheS1iaWc6aG92ZXI6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL2Fzc2V0cy9wbGF5LWhvdmVyLnBuZ1wiKTsgfVxuXG4uamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLXJlY29yZGluZyB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNTAlO1xuICB0b3A6IDA7XG4gIHBhZGRpbmc6IDAgM3B4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB3aWR0aDogOTVweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICBiYWNrZ3JvdW5kOiAjMDAwMDAwO1xuICBvcGFjaXR5OiAxO1xuICBib3JkZXItcmFkaXVzOiAwcHggMHB4IDhweCA4cHg7XG4gIHotaW5kZXg6IDE7IH1cbiAgLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS1yZWNvcmRpbmcgLmplc3NpYnVjYS1yZWNvcmRpbmctcmVkLXBvaW50IHtcbiAgICB3aWR0aDogOHB4O1xuICAgIGhlaWdodDogOHB4O1xuICAgIGJhY2tncm91bmQ6ICNGRjFGMUY7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGFuaW1hdGlvbjogbWFnZW50YVB1bHNlIDFzIGxpbmVhciBpbmZpbml0ZTsgfVxuICAuamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLXJlY29yZGluZyAuamVzc2lidWNhLXJlY29yZGluZy10aW1lIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBjb2xvcjogI0RERERERDsgfVxuICAuamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLXJlY29yZGluZyAuamVzc2lidWNhLWljb24tcmVjb3JkU3RvcCB7XG4gICAgd2lkdGg6IDE2cHg7XG4gICAgaGVpZ2h0OiAxNnB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjsgfVxuXG4uamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLWxvYWRpbmcge1xuICBkaXNwbGF5OiBub25lO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyMDtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTsgfVxuXG4uamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLWxvYWRpbmctdGV4dCB7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBmb250LXNpemU6IDEzcHg7XG4gIGNvbG9yOiAjZmZmO1xuICBtYXJnaW4tdG9wOiAxMHB4OyB9XG5cbi5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtY29udHJvbHMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTYxNjE2O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDQwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBoZWlnaHQ6IDM4cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nLWxlZnQ6IDEzcHg7XG4gIHBhZGRpbmctcmlnaHQ6IDEzcHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6ICNmZmY7XG4gIG9wYWNpdHk6IDA7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICB0cmFuc2l0aW9uOiB3aWR0aCAuNXMgZWFzZS1pbjsgfVxuICAuamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLWNvbnRyb2xzIC5qZXNzaWJ1Y2EtY29udHJvbHMtaXRlbSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgcGFkZGluZzogMCA4cHg7IH1cbiAgICAuamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLWNvbnRyb2xzIC5qZXNzaWJ1Y2EtY29udHJvbHMtaXRlbTpob3ZlciAuaWNvbi10aXRsZS10aXBzIHtcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgICBvcGFjaXR5OiAxOyB9XG4gIC5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtY29udHJvbHMgLmplc3NpYnVjYS1taWNyb3Bob25lLWNsb3NlIHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gIC5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtY29udHJvbHMgLmplc3NpYnVjYS1pY29uLWF1ZGlvIHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gIC5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtY29udHJvbHMgLmplc3NpYnVjYS1wbGF5IHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gIC5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtY29udHJvbHMgLmplc3NpYnVjYS1wYXVzZSB7XG4gICAgZGlzcGxheTogbm9uZTsgfVxuICAuamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLWNvbnRyb2xzIC5qZXNzaWJ1Y2EtZnVsbHNjcmVlbi1leGl0IHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gIC5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtY29udHJvbHMgLmplc3NpYnVjYS1zY3JlZW5zaG90IHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gIC5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtY29udHJvbHMgLmplc3NpYnVjYS1yZWNvcmQge1xuICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS1jb250cm9scyAuamVzc2lidWNhLWZ1bGxzY3JlZW4ge1xuICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS1jb250cm9scyAuamVzc2lidWNhLXJlY29yZC1zdG9wIHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gIC5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtY29udHJvbHMgLmplc3NpYnVjYS1pY29uLWF1ZGlvLCAuamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLWNvbnRyb2xzIC5qZXNzaWJ1Y2EtaWNvbi1tdXRlIHtcbiAgICB6LWluZGV4OiAxOyB9XG4gIC5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtY29udHJvbHMgLmplc3NpYnVjYS1jb250cm9scy1ib3R0b20ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGhlaWdodDogMTAwJTsgfVxuICAgIC5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtY29udHJvbHMgLmplc3NpYnVjYS1jb250cm9scy1ib3R0b20gLmplc3NpYnVjYS1jb250cm9scy1sZWZ0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS1jb250cm9scyAuamVzc2lidWNhLWNvbnRyb2xzLWJvdHRvbSAuamVzc2lidWNhLWNvbnRyb2xzLXJpZ2h0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG5cbi5qZXNzaWJ1Y2EtY29udGFpbmVyLmplc3NpYnVjYS1jb250cm9scy1zaG93IC5qZXNzaWJ1Y2EtY29udHJvbHMge1xuICBvcGFjaXR5OiAxO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlOyB9XG5cbi5qZXNzaWJ1Y2EtY29udGFpbmVyLmplc3NpYnVjYS1jb250cm9scy1zaG93LWF1dG8taGlkZSAuamVzc2lidWNhLWNvbnRyb2xzIHtcbiAgb3BhY2l0eTogMC44O1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBkaXNwbGF5OiBub25lOyB9XG5cbi5qZXNzaWJ1Y2EtY29udGFpbmVyLmplc3NpYnVjYS1oaWRlLWN1cnNvciAqIHtcbiAgY3Vyc29yOiBub25lICFpbXBvcnRhbnQ7IH1cblxuLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS1pY29uLWxvYWRpbmcge1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiA1MHB4O1xuICBiYWNrZ3JvdW5kOiB1cmwoXCIuLi9hc3NldHMvbG9hZGluZy5wbmdcIikgbm8tcmVwZWF0IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7XG4gIGFuaW1hdGlvbjogcm90YXRpb24gMXMgbGluZWFyIGluZmluaXRlOyB9XG5cbi5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtaWNvbi1zY3JlZW5zaG90IHtcbiAgYmFja2dyb3VuZDogdXJsKFwiLi4vYXNzZXRzL3NjcmVlbnNob3QucG5nXCIpIG5vLXJlcGVhdCBjZW50ZXI7XG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlOyB9XG4gIC5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtaWNvbi1zY3JlZW5zaG90OmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIuLi9hc3NldHMvc2NyZWVuc2hvdC1ob3Zlci5wbmdcIikgbm8tcmVwZWF0IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTsgfVxuXG4uamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLWljb24tcGxheSB7XG4gIGJhY2tncm91bmQ6IHVybChcIi4uL2Fzc2V0cy9wbGF5LnBuZ1wiKSBuby1yZXBlYXQgY2VudGVyO1xuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTsgfVxuICAuamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLWljb24tcGxheTpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiLi4vYXNzZXRzL3BsYXktaG92ZXIucG5nXCIpIG5vLXJlcGVhdCBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7IH1cblxuLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS1pY29uLXBhdXNlIHtcbiAgYmFja2dyb3VuZDogdXJsKFwiLi4vYXNzZXRzL3BhdXNlLnBuZ1wiKSBuby1yZXBlYXQgY2VudGVyO1xuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTsgfVxuICAuamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLWljb24tcGF1c2U6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHVybChcIi4uL2Fzc2V0cy9wYXVzZS1ob3Zlci5wbmdcIikgbm8tcmVwZWF0IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTsgfVxuXG4uamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLWljb24tcmVjb3JkIHtcbiAgYmFja2dyb3VuZDogdXJsKFwiLi4vYXNzZXRzL3JlY29yZC5wbmdcIikgbm8tcmVwZWF0IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7IH1cbiAgLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS1pY29uLXJlY29yZDpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiLi4vYXNzZXRzL3JlY29yZC1ob3Zlci5wbmdcIikgbm8tcmVwZWF0IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTsgfVxuXG4uamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLWljb24tcmVjb3JkU3RvcCB7XG4gIGJhY2tncm91bmQ6IHVybChcIi4uL2Fzc2V0cy9yZWNvcmQtc3RvcC5wbmdcIikgbm8tcmVwZWF0IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7IH1cbiAgLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS1pY29uLXJlY29yZFN0b3A6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHVybChcIi4uL2Fzc2V0cy9yZWNvcmQtc3RvcC1ob3Zlci5wbmdcIikgbm8tcmVwZWF0IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTsgfVxuXG4uamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLWljb24tZnVsbHNjcmVlbiB7XG4gIGJhY2tncm91bmQ6IHVybChcIi4uL2Fzc2V0cy9mdWxsc2NyZWVuLnBuZ1wiKSBuby1yZXBlYXQgY2VudGVyO1xuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTsgfVxuICAuamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLWljb24tZnVsbHNjcmVlbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiLi4vYXNzZXRzL2Z1bGxzY3JlZW4taG92ZXIucG5nXCIpIG5vLXJlcGVhdCBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7IH1cblxuLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS1pY29uLWZ1bGxzY3JlZW5FeGl0IHtcbiAgYmFja2dyb3VuZDogdXJsKFwiLi4vYXNzZXRzL2V4aXQtZnVsbHNjcmVlbi5wbmdcIikgbm8tcmVwZWF0IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7IH1cbiAgLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS1pY29uLWZ1bGxzY3JlZW5FeGl0OmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIuLi9hc3NldHMvZXhpdC1mdWxsc2NyZWVuLWhvdmVyLnBuZ1wiKSBuby1yZXBlYXQgY2VudGVyO1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlOyB9XG5cbi5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtaWNvbi1hdWRpbyB7XG4gIGJhY2tncm91bmQ6IHVybChcIi4uL2Fzc2V0cy9hdWRpby5wbmdcIikgbm8tcmVwZWF0IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7IH1cbiAgLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS1pY29uLWF1ZGlvOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIuLi9hc3NldHMvYXVkaW8taG92ZXIucG5nXCIpIG5vLXJlcGVhdCBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7IH1cblxuLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS1pY29uLW11dGUge1xuICBiYWNrZ3JvdW5kOiB1cmwoXCIuLi9hc3NldHMvbXV0ZS5wbmdcIikgbm8tcmVwZWF0IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7IH1cbiAgLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS1pY29uLW11dGU6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHVybChcIi4uL2Fzc2V0cy9tdXRlLWhvdmVyLnBuZ1wiKSBuby1yZXBlYXQgY2VudGVyO1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlOyB9XG5cbi5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtaWNvbi10ZXh0IHtcbiAgZm9udC1zaXplOiAxNHB4O1xuICB3aWR0aDogMzBweDsgfVxuXG4uamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLXNwZWVkIHtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogI2ZmZjsgfVxuXG4uamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLXF1YWxpdHktbWVudS1saXN0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIGJvdHRvbTogMTAwJTtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMzAwbXMsIG9wYWNpdHkgMzAwbXM7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgYm9yZGVyLXJhZGl1czogNHB4OyB9XG4gIC5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtcXVhbGl0eS1tZW51LWxpc3QuamVzc2lidWNhLXF1YWxpdHktbWVudS1zaG93biB7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICBvcGFjaXR5OiAxOyB9XG5cbi5qZXNzaWJ1Y2EtY29udGFpbmVyIC5pY29uLXRpdGxlLXRpcHMge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIGJvdHRvbTogMTAwJTtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMzAwbXMgZWFzZSAwcywgb3BhY2l0eSAzMDBtcyBlYXNlIDBzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gIGJvcmRlci1yYWRpdXM6IDRweDsgfVxuXG4uamVzc2lidWNhLWNvbnRhaW5lciAuaWNvbi10aXRsZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogNXB4IDEwcHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgY29sb3I6IHdoaXRlOyB9XG5cbi5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtcXVhbGl0eS1tZW51IHtcbiAgcGFkZGluZzogOHB4IDA7IH1cblxuLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS1xdWFsaXR5LW1lbnUtaXRlbSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDI1cHg7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMCAxMHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aWR0aDogNTBweDtcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMzAwbXMsIGJhY2tncm91bmQtY29sb3IgMzAwbXM7IH1cbiAgLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS1xdWFsaXR5LW1lbnUtaXRlbTpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOyB9XG4gIC5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2EtcXVhbGl0eS1tZW51LWl0ZW06Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7IH1cbiAgLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS1xdWFsaXR5LW1lbnUtaXRlbS5qZXNzaWJ1Y2EtcXVhbGl0eS1tZW51LWl0ZW0tYWN0aXZlIHtcbiAgICBjb2xvcjogIzIyOThGQzsgfVxuXG4uamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLXZvbHVtZS1wYW5lbC13cmFwIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIGJvdHRvbTogMTAwJTtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgyMiUpO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDMwMG1zLCBvcGFjaXR5IDMwMG1zO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgaGVpZ2h0OiAxMjBweDtcbiAgd2lkdGg6IDUwcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47IH1cbiAgLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS12b2x1bWUtcGFuZWwtd3JhcC5qZXNzaWJ1Y2Etdm9sdW1lLXBhbmVsLXdyYXAtc2hvdyB7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICBvcGFjaXR5OiAxOyB9XG5cbi5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2Etdm9sdW1lLXBhbmVsIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMjFweDtcbiAgaGVpZ2h0OiA2MHB4O1xuICB3aWR0aDogNTBweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuXG4uamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLXZvbHVtZS1wYW5lbC10ZXh0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIHdpZHRoOiA1MHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAjZmZmO1xuICBmb250LXNpemU6IDEycHg7IH1cblxuLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS12b2x1bWUtcGFuZWwtaGFuZGxlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDQ4cHg7XG4gIGxlZnQ6IDUwJTtcbiAgd2lkdGg6IDEycHg7XG4gIGhlaWdodDogMTJweDtcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgbWFyZ2luLWxlZnQ6IC02cHg7XG4gIGJhY2tncm91bmQ6ICNmZmY7IH1cbiAgLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS12b2x1bWUtcGFuZWwtaGFuZGxlOjpiZWZvcmUge1xuICAgIGJvdHRvbTogLTU0cHg7XG4gICAgYmFja2dyb3VuZDogI2ZmZjsgfVxuICAuamVzc2lidWNhLWNvbnRhaW5lciAuamVzc2lidWNhLXZvbHVtZS1wYW5lbC1oYW5kbGU6OmFmdGVyIHtcbiAgICBib3R0b206IDZweDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7IH1cbiAgLmplc3NpYnVjYS1jb250YWluZXIgLmplc3NpYnVjYS12b2x1bWUtcGFuZWwtaGFuZGxlOjpiZWZvcmUsIC5qZXNzaWJ1Y2EtY29udGFpbmVyIC5qZXNzaWJ1Y2Etdm9sdW1lLXBhbmVsLWhhbmRsZTo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBsZWZ0OiA1MCU7XG4gICAgd2lkdGg6IDNweDtcbiAgICBtYXJnaW4tbGVmdDogLTFweDtcbiAgICBoZWlnaHQ6IDYwcHg7IH1cblxuLmplc3NpYnVjYS1jb250YWluZXIuamVzc2lidWNhLWZ1bGxzY3JlZW4td2ViIC5qZXNzaWJ1Y2EtY29udHJvbHMge1xuICB3aWR0aDogMTAwdmg7IH1cblxuLmplc3NpYnVjYS1jb250YWluZXIuamVzc2lidWNhLWZ1bGxzY3JlZW4td2ViIC5qZXNzaWJ1Y2EtcGxheS1iaWc6YWZ0ZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoMjcwZGVnKTsgfVxuXG4uamVzc2lidWNhLWNvbnRhaW5lci5qZXNzaWJ1Y2EtZnVsbHNjcmVlbi13ZWIgLmplc3NpYnVjYS1sb2FkaW5nIHtcbiAgZmxleC1kaXJlY3Rpb246IHJvdzsgfVxuXG4uamVzc2lidWNhLWNvbnRhaW5lci5qZXNzaWJ1Y2EtZnVsbHNjcmVlbi13ZWIgLmplc3NpYnVjYS1sb2FkaW5nLXRleHQge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOyB9XG4iXX0= */"; + styleInject(css_248z$1); + + // todo: 待定 + var hotkey = ((player, control) => { + const { + events: { + proxy + } + } = player; + const keys = {}; + + function addHotkey(key, event) { + if (keys[key]) { + keys[key].push(event); + } else { + keys[key] = [event]; + } + } // + + + addHotkey(HOT_KEY.esc, () => { + if (player.fullscreen) { + player.fullscreen = false; + } + }); // + + addHotkey(HOT_KEY.arrowUp, () => { + player.volume += 0.05; + }); // + + addHotkey(HOT_KEY.arrowDown, () => { + player.volume -= 0.05; + }); + proxy(window, 'keydown', event => { + if (control.isFocus) { + const tag = document.activeElement.tagName.toUpperCase(); + const editable = document.activeElement.getAttribute('contenteditable'); + + if (tag !== 'INPUT' && tag !== 'TEXTAREA' && editable !== '' && editable !== 'true') { + const events = keys[event.keyCode]; + + if (events) { + event.preventDefault(); + events.forEach(fn => fn()); + } + } + } + }); + }); + + class Control { + constructor(player) { + this.player = player; + template(player, this); + property(player, this); + observer$1(player, this); + events(player, this); + + if (player._opt.hotKey) { + hotkey(player, this); + } + + this.player.debug.log('Control', 'init'); + } + + destroy() { + if (this.$poster) { + this.player.$container.removeChild(this.$poster); + } + + if (this.$loading) { + this.player.$container.removeChild(this.$loading); + } + + if (this.$controls) { + this.player.$container.removeChild(this.$controls); + } + + if (this.$recording) { + this.player.$container.removeChild(this.$recording); + } + + if (this.$playBig) { + this.player.$container.removeChild(this.$playBig); + } + + this.player.debug.log('control', 'destroy'); + } + + autoSize() { + const player = this.player; + player.$container.style.padding = '0 0'; + const playerWidth = player.width; + const playerHeight = player.height; + const playerRatio = playerWidth / playerHeight; + const canvasWidth = player.video.$videoElement.width; + const canvasHeight = player.video.$videoElement.height; + const canvasRatio = canvasWidth / canvasHeight; + + if (playerRatio > canvasRatio) { + const padding = (playerWidth - playerHeight * canvasRatio) / 2; + player.$container.style.padding = `0 ${padding}px`; + } else { + const padding = (playerHeight - playerWidth / canvasRatio) / 2; + player.$container.style.padding = `${padding}px 0`; + } + } + + } + + var css_248z = ".jessibuca-container{position:relative;display:block;width:100%;height:100%;overflow:hidden}.jessibuca-container.jessibuca-fullscreen-web{position:fixed;z-index:9999;left:0;top:0;right:0;bottom:0;width:100vw!important;height:100vh!important;background:#000}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscUJBQ0UsaUJBQWtCLENBQ2xCLGFBQWMsQ0FDZCxVQUFXLENBQ1gsV0FBWSxDQUNaLGVBQWtCLENBQ2xCLDhDQUNFLGNBQWUsQ0FDZixZQUFhLENBQ2IsTUFBTyxDQUNQLEtBQU0sQ0FDTixPQUFRLENBQ1IsUUFBUyxDQUNULHFCQUF1QixDQUN2QixzQkFBd0IsQ0FDeEIsZUFBa0IiLCJmaWxlIjoic3R5bGUuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi5qZXNzaWJ1Y2EtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuICAuamVzc2lidWNhLWNvbnRhaW5lci5qZXNzaWJ1Y2EtZnVsbHNjcmVlbi13ZWIge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB6LWluZGV4OiA5OTk5O1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICB3aWR0aDogMTAwdncgIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7XG4gICAgYmFja2dyb3VuZDogIzAwMDsgfVxuIl19 */"; + styleInject(css_248z); + + var observer = (player => { + const { + _opt, + debug, + events: { + proxy + } + } = player; + + if (_opt.supportDblclickFullscreen) { + proxy(player.$container, 'dblclick', e => { + const target = getTarget(e); + const nodeName = target.nodeName.toLowerCase(); + + if (nodeName === 'canvas' || nodeName === 'video') { + player.fullscreen = !player.fullscreen; + } + }); + } // + + + proxy(document, 'visibilitychange', () => { + if (_opt.hiddenAutoPause) { + debug.log('visibilitychange', document.visibilityState, player._isPlayingBeforePageHidden); + + if ("visible" === document.visibilityState) { + if (player._isPlayingBeforePageHidden) { + player.play(); + } + } else { + player._isPlayingBeforePageHidden = player.playing; // hidden + + if (player.playing) { + player.pause(); + } + } + } + }); + proxy(window, 'fullscreenchange', () => { + // + if (player.keepScreenOn !== null && "visible" === document.visibilityState) { + player.enableWakeLock(); + } + }); + }); + + class MP4$1 { + static init() { + MP4$1.types = { + avc1: [], + avcC: [], + hvc1: [], + hvcC: [], + btrt: [], + dinf: [], + dref: [], + esds: [], + ftyp: [], + hdlr: [], + mdat: [], + mdhd: [], + mdia: [], + mfhd: [], + minf: [], + moof: [], + moov: [], + mp4a: [], + mvex: [], + mvhd: [], + sdtp: [], + stbl: [], + stco: [], + stsc: [], + stsd: [], + stsz: [], + stts: [], + tfdt: [], + tfhd: [], + traf: [], + trak: [], + trun: [], + trex: [], + tkhd: [], + vmhd: [], + smhd: [] + }; + + for (let name in MP4$1.types) { + if (MP4$1.types.hasOwnProperty(name)) { + MP4$1.types[name] = [name.charCodeAt(0), name.charCodeAt(1), name.charCodeAt(2), name.charCodeAt(3)]; + } + } + + let constants = MP4$1.constants = {}; + constants.FTYP = new Uint8Array([0x69, 0x73, 0x6F, 0x6D, // major_brand: isom + 0x0, 0x0, 0x0, 0x1, // minor_version: 0x01 + 0x69, 0x73, 0x6F, 0x6D, // isom + 0x61, 0x76, 0x63, 0x31 // avc1 + ]); + constants.STSD_PREFIX = new Uint8Array([0x00, 0x00, 0x00, 0x00, // version(0) + flags + 0x00, 0x00, 0x00, 0x01 // entry_count + ]); + constants.STTS = new Uint8Array([0x00, 0x00, 0x00, 0x00, // version(0) + flags + 0x00, 0x00, 0x00, 0x00 // entry_count + ]); + constants.STSC = constants.STCO = constants.STTS; + constants.STSZ = new Uint8Array([0x00, 0x00, 0x00, 0x00, // version(0) + flags + 0x00, 0x00, 0x00, 0x00, // sample_size + 0x00, 0x00, 0x00, 0x00 // sample_count + ]); + constants.HDLR_VIDEO = new Uint8Array([0x00, 0x00, 0x00, 0x00, // version(0) + flags + 0x00, 0x00, 0x00, 0x00, // pre_defined + 0x76, 0x69, 0x64, 0x65, // handler_type: 'vide' + 0x00, 0x00, 0x00, 0x00, // reserved: 3 * 4 bytes + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x69, 0x64, 0x65, 0x6F, 0x48, 0x61, 0x6E, 0x64, 0x6C, 0x65, 0x72, 0x00 // name: VideoHandler + ]); + constants.HDLR_AUDIO = new Uint8Array([0x00, 0x00, 0x00, 0x00, // version(0) + flags + 0x00, 0x00, 0x00, 0x00, // pre_defined + 0x73, 0x6F, 0x75, 0x6E, // handler_type: 'soun' + 0x00, 0x00, 0x00, 0x00, // reserved: 3 * 4 bytes + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x6F, 0x75, 0x6E, 0x64, 0x48, 0x61, 0x6E, 0x64, 0x6C, 0x65, 0x72, 0x00 // name: SoundHandler + ]); + constants.DREF = new Uint8Array([0x00, 0x00, 0x00, 0x00, // version(0) + flags + 0x00, 0x00, 0x00, 0x01, // entry_count + 0x00, 0x00, 0x00, 0x0C, // entry_size + 0x75, 0x72, 0x6C, 0x20, // type 'url ' + 0x00, 0x00, 0x00, 0x01 // version(0) + flags + ]); // Sound media header + + constants.SMHD = new Uint8Array([0x00, 0x00, 0x00, 0x00, // version(0) + flags + 0x00, 0x00, 0x00, 0x00 // balance(2) + reserved(2) + ]); // video media header + + constants.VMHD = new Uint8Array([0x00, 0x00, 0x00, 0x01, // version(0) + flags + 0x00, 0x00, // graphicsmode: 2 bytes + 0x00, 0x00, 0x00, 0x00, // opcolor: 3 * 2 bytes + 0x00, 0x00]); + } // Generate a box + + + static box(type) { + let size = 8; + let result = null; + let datas = Array.prototype.slice.call(arguments, 1); + let arrayCount = datas.length; + + for (let i = 0; i < arrayCount; i++) { + size += datas[i].byteLength; + } + + result = new Uint8Array(size); + result[0] = size >>> 24 & 0xFF; // size + + result[1] = size >>> 16 & 0xFF; + result[2] = size >>> 8 & 0xFF; + result[3] = size & 0xFF; + result.set(type, 4); // type + + let offset = 8; + + for (let i = 0; i < arrayCount; i++) { + // data body + result.set(datas[i], offset); + offset += datas[i].byteLength; + } + + return result; + } // emit ftyp & moov + + + static generateInitSegment(meta) { + let ftyp = MP4$1.box(MP4$1.types.ftyp, MP4$1.constants.FTYP); + let moov = MP4$1.moov(meta); + let result = new Uint8Array(ftyp.byteLength + moov.byteLength); + result.set(ftyp, 0); + result.set(moov, ftyp.byteLength); + return result; + } // Movie metadata box + + + static moov(meta) { + let mvhd = MP4$1.mvhd(meta.timescale, meta.duration); + let trak = MP4$1.trak(meta); + let mvex = MP4$1.mvex(meta); + return MP4$1.box(MP4$1.types.moov, mvhd, trak, mvex); + } // Movie header box + + + static mvhd(timescale, duration) { + return MP4$1.box(MP4$1.types.mvhd, new Uint8Array([0x00, 0x00, 0x00, 0x00, // version(0) + flags + 0x00, 0x00, 0x00, 0x00, // creation_time + 0x00, 0x00, 0x00, 0x00, // modification_time + timescale >>> 24 & 0xFF, // timescale: 4 bytes + timescale >>> 16 & 0xFF, timescale >>> 8 & 0xFF, timescale & 0xFF, duration >>> 24 & 0xFF, // duration: 4 bytes + duration >>> 16 & 0xFF, duration >>> 8 & 0xFF, duration & 0xFF, 0x00, 0x01, 0x00, 0x00, // Preferred rate: 1.0 + 0x01, 0x00, 0x00, 0x00, // PreferredVolume(1.0, 2bytes) + reserved(2bytes) + 0x00, 0x00, 0x00, 0x00, // reserved: 4 + 4 bytes + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ----begin composition matrix---- + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, // ----end composition matrix---- + 0x00, 0x00, 0x00, 0x00, // ----begin pre_defined 6 * 4 bytes---- + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ----end pre_defined 6 * 4 bytes---- + 0xFF, 0xFF, 0xFF, 0xFF // next_track_ID + ])); + } // Track box + + + static trak(meta) { + return MP4$1.box(MP4$1.types.trak, MP4$1.tkhd(meta), MP4$1.mdia(meta)); + } // Track header box + + + static tkhd(meta) { + let trackId = meta.id, + duration = meta.duration; + let width = meta.presentWidth, + height = meta.presentHeight; + return MP4$1.box(MP4$1.types.tkhd, new Uint8Array([0x00, 0x00, 0x00, 0x07, // version(0) + flags + 0x00, 0x00, 0x00, 0x00, // creation_time + 0x00, 0x00, 0x00, 0x00, // modification_time + trackId >>> 24 & 0xFF, // track_ID: 4 bytes + trackId >>> 16 & 0xFF, trackId >>> 8 & 0xFF, trackId & 0xFF, 0x00, 0x00, 0x00, 0x00, // reserved: 4 bytes + duration >>> 24 & 0xFF, // duration: 4 bytes + duration >>> 16 & 0xFF, duration >>> 8 & 0xFF, duration & 0xFF, 0x00, 0x00, 0x00, 0x00, // reserved: 2 * 4 bytes + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // layer(2bytes) + alternate_group(2bytes) + 0x00, 0x00, 0x00, 0x00, // volume(2bytes) + reserved(2bytes) + 0x00, 0x01, 0x00, 0x00, // ----begin composition matrix---- + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, // ----end composition matrix---- + width >>> 8 & 0xFF, // width and height + width & 0xFF, 0x00, 0x00, height >>> 8 & 0xFF, height & 0xFF, 0x00, 0x00])); + } + + static mdia(meta) { + return MP4$1.box(MP4$1.types.mdia, MP4$1.mdhd(meta), MP4$1.hdlr(meta), MP4$1.minf(meta)); + } // Media header box + + + static mdhd(meta) { + let timescale = meta.timescale; + let duration = meta.duration; + return MP4$1.box(MP4$1.types.mdhd, new Uint8Array([0x00, 0x00, 0x00, 0x00, // version(0) + flags + 0x00, 0x00, 0x00, 0x00, // creation_time + 0x00, 0x00, 0x00, 0x00, // modification_time + timescale >>> 24 & 0xFF, // timescale: 4 bytes + timescale >>> 16 & 0xFF, timescale >>> 8 & 0xFF, timescale & 0xFF, duration >>> 24 & 0xFF, // duration: 4 bytes + duration >>> 16 & 0xFF, duration >>> 8 & 0xFF, duration & 0xFF, 0x55, 0xC4, // language: und (undetermined) + 0x00, 0x00 // pre_defined = 0 + ])); + } // Media handler reference box + + + static hdlr(meta) { + let data = null; + + if (meta.type === 'audio') { + data = MP4$1.constants.HDLR_AUDIO; + } else { + data = MP4$1.constants.HDLR_VIDEO; + } + + return MP4$1.box(MP4$1.types.hdlr, data); + } // Media infomation box + + + static minf(meta) { + let xmhd = null; + + if (meta.type === 'audio') { + xmhd = MP4$1.box(MP4$1.types.smhd, MP4$1.constants.SMHD); + } else { + xmhd = MP4$1.box(MP4$1.types.vmhd, MP4$1.constants.VMHD); + } + + return MP4$1.box(MP4$1.types.minf, xmhd, MP4$1.dinf(), MP4$1.stbl(meta)); + } // Data infomation box + + + static dinf() { + let result = MP4$1.box(MP4$1.types.dinf, MP4$1.box(MP4$1.types.dref, MP4$1.constants.DREF)); + return result; + } // Sample table box + + + static stbl(meta) { + let result = MP4$1.box(MP4$1.types.stbl, // type: stbl + MP4$1.stsd(meta), // Sample Description Table + MP4$1.box(MP4$1.types.stts, MP4$1.constants.STTS), // Time-To-Sample + MP4$1.box(MP4$1.types.stsc, MP4$1.constants.STSC), // Sample-To-Chunk + MP4$1.box(MP4$1.types.stsz, MP4$1.constants.STSZ), // Sample size + MP4$1.box(MP4$1.types.stco, MP4$1.constants.STCO) // Chunk offset + ); + return result; + } // Sample description box + + + static stsd(meta) { + if (meta.type === 'audio') { + // else: aac -> mp4a + return MP4$1.box(MP4$1.types.stsd, MP4$1.constants.STSD_PREFIX, MP4$1.mp4a(meta)); + } else { + if (meta.videoType === 'avc') { + // + return MP4$1.box(MP4$1.types.stsd, MP4$1.constants.STSD_PREFIX, MP4$1.avc1(meta)); + } else { + // + return MP4$1.box(MP4$1.types.stsd, MP4$1.constants.STSD_PREFIX, MP4$1.hvc1(meta)); + } + } + } + + static mp4a(meta) { + let channelCount = meta.channelCount; + let sampleRate = meta.audioSampleRate; + let data = new Uint8Array([0x00, 0x00, 0x00, 0x00, // reserved(4) + 0x00, 0x00, 0x00, 0x01, // reserved(2) + data_reference_index(2) + 0x00, 0x00, 0x00, 0x00, // reserved: 2 * 4 bytes + 0x00, 0x00, 0x00, 0x00, 0x00, channelCount, // channelCount(2) + 0x00, 0x10, // sampleSize(2) + 0x00, 0x00, 0x00, 0x00, // reserved(4) + sampleRate >>> 8 & 0xFF, // Audio sample rate + sampleRate & 0xFF, 0x00, 0x00]); + return MP4$1.box(MP4$1.types.mp4a, data, MP4$1.esds(meta)); + } + + static esds(meta) { + let config = meta.config || []; + let configSize = config.length; + let data = new Uint8Array([0x00, 0x00, 0x00, 0x00, // version 0 + flags + 0x03, // descriptor_type + 0x17 + configSize, // length3 + 0x00, 0x01, // es_id + 0x00, // stream_priority + 0x04, // descriptor_type + 0x0F + configSize, // length + 0x40, // codec: mpeg4_audio + 0x15, // stream_type: Audio + 0x00, 0x00, 0x00, // buffer_size + 0x00, 0x00, 0x00, 0x00, // maxBitrate + 0x00, 0x00, 0x00, 0x00, // avgBitrate + 0x05 // descriptor_type + ].concat([configSize]).concat(config).concat([0x06, 0x01, 0x02 // GASpecificConfig + ])); + return MP4$1.box(MP4$1.types.esds, data); + } // avc + + + static avc1(meta) { + let avcc = meta.avcc; + const width = meta.codecWidth; + const height = meta.codecHeight; + let data = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, width >>> 8 & 255, width & 255, height >>> 8 & 255, height & 255, 0, 72, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 255, 255]); + return MP4$1.box(MP4$1.types.avc1, data, MP4$1.box(MP4$1.types.avcC, avcc)); + } // hvc + + + static hvc1(meta) { + let avcc = meta.avcc; + const width = meta.codecWidth; + const height = meta.codecHeight; + let data = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, width >>> 8 & 255, width & 255, height >>> 8 & 255, height & 255, 0, 72, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 255, 255]); + return MP4$1.box(MP4$1.types.hvc1, data, MP4$1.box(MP4$1.types.hvcC, avcc)); + } // Movie Extends box + + + static mvex(meta) { + return MP4$1.box(MP4$1.types.mvex, MP4$1.trex(meta)); + } // Track Extends box + + + static trex(meta) { + let trackId = meta.id; + let data = new Uint8Array([0x00, 0x00, 0x00, 0x00, // version(0) + flags + trackId >>> 24 & 0xFF, // track_ID + trackId >>> 16 & 0xFF, trackId >>> 8 & 0xFF, trackId & 0xFF, 0x00, 0x00, 0x00, 0x01, // default_sample_description_index + 0x00, 0x00, 0x00, 0x00, // default_sample_duration + 0x00, 0x00, 0x00, 0x00, // default_sample_size + 0x00, 0x01, 0x00, 0x01 // default_sample_flags + ]); + return MP4$1.box(MP4$1.types.trex, data); + } // Movie fragment box + + + static moof(track, baseMediaDecodeTime) { + return MP4$1.box(MP4$1.types.moof, MP4$1.mfhd(track.sequenceNumber), MP4$1.traf(track, baseMediaDecodeTime)); + } // + + + static mfhd(sequenceNumber) { + let data = new Uint8Array([0x00, 0x00, 0x00, 0x00, sequenceNumber >>> 24 & 0xFF, // sequence_number: int32 + sequenceNumber >>> 16 & 0xFF, sequenceNumber >>> 8 & 0xFF, sequenceNumber & 0xFF]); + return MP4$1.box(MP4$1.types.mfhd, data); + } // Track fragment box + + + static traf(track, baseMediaDecodeTime) { + let trackId = track.id; // Track fragment header box + + let tfhd = MP4$1.box(MP4$1.types.tfhd, new Uint8Array([0x00, 0x00, 0x00, 0x00, // version(0) & flags + trackId >>> 24 & 0xFF, // track_ID + trackId >>> 16 & 0xFF, trackId >>> 8 & 0xFF, trackId & 0xFF])); // Track Fragment Decode Time + + let tfdt = MP4$1.box(MP4$1.types.tfdt, new Uint8Array([0x00, 0x00, 0x00, 0x00, // version(0) & flags + baseMediaDecodeTime >>> 24 & 0xFF, // baseMediaDecodeTime: int32 + baseMediaDecodeTime >>> 16 & 0xFF, baseMediaDecodeTime >>> 8 & 0xFF, baseMediaDecodeTime & 0xFF])); + let sdtp = MP4$1.sdtp(track); + let trun = MP4$1.trun(track, sdtp.byteLength + 16 + 16 + 8 + 16 + 8 + 8); + return MP4$1.box(MP4$1.types.traf, tfhd, tfdt, trun, sdtp); + } // Sample Dependency Type box + + + static sdtp(track) { + let data = new Uint8Array(4 + 1); + let flags = track.flags; + data[4] = flags.isLeading << 6 | flags.dependsOn << 4 | flags.isDependedOn << 2 | flags.hasRedundancy; + return MP4$1.box(MP4$1.types.sdtp, data); + } // trun + + + static trun(track, offset) { + let dataSize = 12 + 16; + let data = new Uint8Array(dataSize); + offset += 8 + dataSize; + data.set([0x00, 0x00, 0x0F, 0x01, // version(0) & flags + 0x00, 0x00, 0x00, 0x01, // sample_count + offset >>> 24 & 0xFF, // data_offset + offset >>> 16 & 0xFF, offset >>> 8 & 0xFF, offset & 0xFF], 0); + let duration = track.duration; + let size = track.size; + let flags = track.flags; + let cts = track.cts; + data.set([duration >>> 24 & 0xFF, // sample_duration + duration >>> 16 & 0xFF, duration >>> 8 & 0xFF, duration & 0xFF, size >>> 24 & 0xFF, // sample_size + size >>> 16 & 0xFF, size >>> 8 & 0xFF, size & 0xFF, flags.isLeading << 2 | flags.dependsOn, // sample_flags + flags.isDependedOn << 6 | flags.hasRedundancy << 4 | flags.isNonSync, 0x00, 0x00, // sample_degradation_priority + cts >>> 24 & 0xFF, // sample_composition_time_offset + cts >>> 16 & 0xFF, cts >>> 8 & 0xFF, cts & 0xFF], 12); + return MP4$1.box(MP4$1.types.trun, data); + } // mdat + + + static mdat(data) { + return MP4$1.box(MP4$1.types.mdat, data); + } + + } + + MP4$1.init(); + + class MseDecoder extends Emitter { + constructor(player) { + super(); + this.player = player; + this.isAvc = true; + this.mediaSource = new window.MediaSource(); + this.sourceBuffer = null; + this.hasInit = false; + this.isInitInfo = false; + this.cacheTrack = {}; + this.timeInit = false; + this.sequenceNumber = 0; + this.mediaSourceOpen = false; + this.dropping = false; + this.firstRenderTime = null; + this.mediaSourceAppendBufferError = false; + this.mediaSourceAppendBufferFull = false; + this.isDecodeFirstIIframe = false; + this.player.video.$videoElement.src = window.URL.createObjectURL(this.mediaSource); + const { + debug, + events: { + proxy + } + } = player; + proxy(this.mediaSource, 'sourceopen', () => { + this.mediaSourceOpen = true; + this.player.emit(EVENTS.mseSourceOpen); + }); + proxy(this.mediaSource, 'sourceclose', () => { + this.player.emit(EVENTS.mseSourceClose); + }); + player.debug.log('MediaSource', 'init'); + } + + destroy() { + this.stop(); + this.mediaSource = null; + this.mediaSourceOpen = false; + this.sourceBuffer = null; + this.hasInit = false; + this.isInitInfo = false; + this.sequenceNumber = 0; + this.cacheTrack = null; + this.timeInit = false; + this.mediaSourceAppendBufferError = false; + this.mediaSourceAppendBufferFull = false; + this.isDecodeFirstIIframe = false; + this.off(); + this.player.debug.log('MediaSource', 'destroy'); + } + + get state() { + return this.mediaSource && this.mediaSource.readyState; + } + + get isStateOpen() { + return this.state === MEDIA_SOURCE_STATE.open; + } + + get isStateClosed() { + return this.state === MEDIA_SOURCE_STATE.closed; + } + + get isStateEnded() { + return this.state === MEDIA_SOURCE_STATE.ended; + } + + get duration() { + return this.mediaSource && this.mediaSource.duration; + } + + set duration(duration) { + this.mediaSource.duration = duration; + } + + decodeVideo(payload, ts, isIframe, cts) { + const player = this.player; + + if (!player) { + return; + } + + if (!this.hasInit) { + if (isIframe && payload[1] === 0) { + const videoCodec = payload[0] & 0x0F; + player.video.updateVideoInfo({ + encTypeCode: videoCodec + }); // 如果解码出来的是 + + if (videoCodec === VIDEO_ENC_CODE.h265) { + this.emit(EVENTS_ERROR.mediaSourceH265NotSupport); + return; + } + + if (!player._times.decodeStart) { + player._times.decodeStart = now(); + } + + this._decodeConfigurationRecord(payload, ts, isIframe, videoCodec); + + this.hasInit = true; + } + } else { + if (isIframe && payload[1] === 0) { + let config = parseAVCDecoderConfigurationRecord(payload.slice(5)); + const videoInfo = this.player.video.videoInfo; + + if (videoInfo && videoInfo.width && videoInfo.height && config && config.codecWidth && config.codecHeight && (config.codecWidth !== videoInfo.width || config.codecHeight !== videoInfo.height)) { + this.player.debug.warn('MediaSource', `width or height is update, width ${videoInfo.width}-> ${config.codecWidth}, height ${videoInfo.height}-> ${config.codecHeight}`); + this.isInitInfo = false; + this.player.video.init = false; + } + } + + if (!this.isDecodeFirstIIframe && isIframe) { + this.isDecodeFirstIIframe = true; + } + + if (this.isDecodeFirstIIframe) { + if (this.firstRenderTime === null) { + this.firstRenderTime = ts; + } + + const dts = ts - this.firstRenderTime; + + this._decodeVideo(payload, dts, isIframe, cts); + } else { + this.player.debug.warn('MediaSource', 'decodeVideo isDecodeFirstIIframe false'); + } + } + } + + _decodeConfigurationRecord(payload, ts, isIframe, videoCodec) { + let data = payload.slice(5); + let config = {}; + config = parseAVCDecoderConfigurationRecord(data); + const metaData = { + id: 1, + // video tag data + type: 'video', + timescale: 1000, + duration: 0, + avcc: data, + codecWidth: config.codecWidth, + codecHeight: config.codecHeight, + videoType: config.videoType + }; // ftyp + + const metaBox = MP4$1.generateInitSegment(metaData); + this.isAvc = true; + this.appendBuffer(metaBox.buffer); + this.sequenceNumber = 0; + this.cacheTrack = null; + this.timeInit = false; + } // + + + _decodeVideo(payload, dts, isIframe, cts) { + const player = this.player; + let arrayBuffer = payload.slice(5); + let bytes = arrayBuffer.byteLength; // player.debug.log('MediaSource', '_decodeVideo', ts); + + const $video = player.video.$videoElement; + const videoBufferDelay = player._opt.videoBufferDelay; + + if ($video.buffered.length > 1) { + this.removeBuffer($video.buffered.start(0), $video.buffered.end(0)); + this.timeInit = false; + } + + if (this.dropping && dts - this.cacheTrack.dts > videoBufferDelay) { + this.dropping = false; + this.cacheTrack = {}; + } else if (this.cacheTrack && dts >= this.cacheTrack.dts) { + // 需要额外加8个size + let mdatBytes = 8 + this.cacheTrack.size; + let mdatbox = new Uint8Array(mdatBytes); + mdatbox[0] = mdatBytes >>> 24 & 255; + mdatbox[1] = mdatBytes >>> 16 & 255; + mdatbox[2] = mdatBytes >>> 8 & 255; + mdatbox[3] = mdatBytes & 255; + mdatbox.set(MP4$1.types.mdat, 4); + mdatbox.set(this.cacheTrack.data, 8); + this.cacheTrack.duration = dts - this.cacheTrack.dts; // moof + + let moofbox = MP4$1.moof(this.cacheTrack, this.cacheTrack.dts); + let result = new Uint8Array(moofbox.byteLength + mdatbox.byteLength); + result.set(moofbox, 0); + result.set(mdatbox, moofbox.byteLength); // appendBuffer + + this.appendBuffer(result.buffer); + player.handleRender(); + player.updateStats({ + fps: true, + ts: dts, + buf: player.demux && player.demux.delay || 0 + }); + + if (!player._times.videoStart) { + player._times.videoStart = now(); + player.handlePlayToRenderTimes(); + } + } else { + player.debug.log('MediaSource', 'timeInit set false , cacheTrack = {}'); + this.timeInit = false; + this.cacheTrack = {}; + } + + if (!this.cacheTrack) { + this.cacheTrack = {}; + } + + this.cacheTrack.id = 1; + this.cacheTrack.sequenceNumber = ++this.sequenceNumber; + this.cacheTrack.size = bytes; + this.cacheTrack.dts = dts; + this.cacheTrack.cts = cts; + this.cacheTrack.isKeyframe = isIframe; + this.cacheTrack.data = arrayBuffer; // + + this.cacheTrack.flags = { + isLeading: 0, + dependsOn: isIframe ? 2 : 1, + isDependedOn: isIframe ? 1 : 0, + hasRedundancy: 0, + isNonSync: isIframe ? 0 : 1 + }; // + + if (!this.timeInit && $video.buffered.length === 1) { + player.debug.log('MediaSource', 'timeInit set true'); + this.timeInit = true; + $video.currentTime = $video.buffered.end(0); + } + + if (!this.isInitInfo && $video.videoWidth > 0 && $video.videoHeight > 0) { + player.debug.log('MediaSource', `updateVideoInfo: ${$video.videoWidth},${$video.videoHeight}`); + player.video.updateVideoInfo({ + width: $video.videoWidth, + height: $video.videoHeight + }); + player.video.initCanvasViewSize(); + this.isInitInfo = true; + } + } + + appendBuffer(buffer) { + const { + debug, + events: { + proxy + } + } = this.player; + + if (this.sourceBuffer === null) { + this.sourceBuffer = this.mediaSource.addSourceBuffer(MP4_CODECS.avc); + proxy(this.sourceBuffer, 'error', error => { + this.player.emit(EVENTS.mseSourceBufferError, error); // this.dropSourceBuffer(false) + }); + } + + if (this.mediaSourceAppendBufferError) { + debug.error('MediaSource', `this.mediaSourceAppendBufferError is true`); + return; + } + + if (this.mediaSourceAppendBufferFull) { + debug.error('MediaSource', `this.mediaSourceAppendBufferFull is true`); + return; + } + + if (this.sourceBuffer.updating === false && this.isStateOpen) { + try { + this.sourceBuffer.appendBuffer(buffer); + } catch (e) { + debug.warn('MediaSource', 'this.sourceBuffer.appendBuffer()', e.code, e); + + if (e.code === 22) { + // QuotaExceededError + // The SourceBuffer is full, and cannot free space to append additional buffers + this.stop(); + this.mediaSourceAppendBufferFull = true; + this.emit(EVENTS_ERROR.mediaSourceFull); + } else if (e.code === 11) { + // Failed to execute 'appendBuffer' on 'SourceBuffer': The HTMLMediaElement.error attribute is not null. + this.stop(); + this.mediaSourceAppendBufferError = true; + this.emit(EVENTS_ERROR.mediaSourceAppendBufferError); + } else { + debug.error('MediaSource', 'appendBuffer error', e); + this.player.emit(EVENTS.mseSourceBufferError, e); + } + } + + return; + } + + if (this.isStateClosed) { + this.player.emitError(EVENTS_ERROR.mseSourceBufferError, 'mediaSource is not attached to video or mediaSource is closed'); + } else if (this.isStateEnded) { + this.player.emitError(EVENTS_ERROR.mseSourceBufferError, 'mediaSource is closed'); + } else { + if (this.sourceBuffer.updating === true) { + this.player.emit(EVENTS.mseSourceBufferBusy); // this.dropSourceBuffer(true); + } + } + } + + stop() { + this.abortSourceBuffer(); + this.removeSourceBuffer(); + this.endOfStream(); + } + + dropSourceBuffer(isDropping) { + const $video = this.player.video.$videoElement; + this.dropping = isDropping; + + if ($video.buffered.length > 0) { + if ($video.buffered.end(0) - $video.currentTime > 1) { + this.player.debug.warn('MediaSource', 'dropSourceBuffer', `$video.buffered.end(0) is ${$video.buffered.end(0)} - $video.currentTime ${$video.currentTime}`); + $video.currentTime = $video.buffered.end(0); + } + } + } + + removeBuffer(start, end) { + if (this.isStateOpen && this.sourceBuffer.updating === false) { + try { + this.sourceBuffer.remove(start, end); + } catch (e) { + this.player.debug.warn('MediaSource', 'removeBuffer() error', e); + } + } else { + this.player.debug.warn('MediaSource', 'removeBuffer() this.isStateOpen is', this.isStateOpen, 'this.sourceBuffer.updating', this.sourceBuffer.updating); + } + } + + endOfStream() { + // fix: MediaSource endOfStream before demuxer initialization completes (before HAVE_METADATA) is treated as an error + const $videoElement = this.player.video && this.player.video.$videoElement; + + if (this.isStateOpen && $videoElement && $videoElement.readyState >= 1) { + try { + this.mediaSource.endOfStream(); + } catch (e) { + this.player.debug.warn('MediaSource', 'endOfStream() error', e); + } + } + } + + abortSourceBuffer() { + if (this.isStateOpen) { + if (this.sourceBuffer) { + this.sourceBuffer.abort(); + this.sourceBuffer = null; + } + } + } + + removeSourceBuffer() { + if (!this.isStateClosed) { + if (this.mediaSource && this.sourceBuffer) { + try { + this.mediaSource.removeSourceBuffer(this.sourceBuffer); + } catch (e) { + this.player.debug.warn('MediaSource', 'removeSourceBuffer() error', e); + } + } + } + } + + } + + // tks: https://github.com/richtr/NoSleep.js + const WEBM = "data:video/webm;base64,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"; + const MP4 = "data:video/mp4;base64,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"; // Detect iOS browsers < version 10 + + const oldIOS = () => typeof navigator !== "undefined" && parseFloat(("" + (/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0, ""])[1]).replace("undefined", "3_2").replace("_", ".").replace("_", "")) < 10 && !window.MSStream; // Detect native Wake Lock API support + + + const nativeWakeLock = () => "wakeLock" in navigator; + + class NoSleep { + constructor(player) { + this.player = player; + this.enabled = false; + + if (nativeWakeLock()) { + this._wakeLock = null; + + const handleVisibilityChange = () => { + if (this._wakeLock !== null && document.visibilityState === "visible") { + this.enable(); + } + }; + + document.addEventListener("visibilitychange", handleVisibilityChange); + document.addEventListener("fullscreenchange", handleVisibilityChange); + } else if (oldIOS()) { + this.noSleepTimer = null; + } else { + // Set up no sleep video element + this.noSleepVideo = document.createElement("video"); + this.noSleepVideo.setAttribute("title", "No Sleep"); + this.noSleepVideo.setAttribute("playsinline", ""); + + this._addSourceToVideo(this.noSleepVideo, "webm", WEBM); + + this._addSourceToVideo(this.noSleepVideo, "mp4", MP4); + + this.noSleepVideo.addEventListener("loadedmetadata", () => { + if (this.noSleepVideo.duration <= 1) { + // webm source + this.noSleepVideo.setAttribute("loop", ""); + } else { + // mp4 source + this.noSleepVideo.addEventListener("timeupdate", () => { + if (this.noSleepVideo.currentTime > 0.5) { + this.noSleepVideo.currentTime = Math.random(); + } + }); + } + }); + } + } + + _addSourceToVideo(element, type, dataURI) { + var source = document.createElement("source"); + source.src = dataURI; + source.type = `video/${type}`; + element.appendChild(source); + } + + get isEnabled() { + return this.enabled; + } + + enable() { + const debug = this.player.debug; + + if (nativeWakeLock()) { + return navigator.wakeLock.request("screen").then(wakeLock => { + this._wakeLock = wakeLock; + this.enabled = true; + debug.log('wakeLock', 'Wake Lock active.'); + + this._wakeLock.addEventListener("release", () => { + // ToDo: Potentially emit an event for the page to observe since + // Wake Lock releases happen when page visibility changes. + // (https://web.dev/wakelock/#wake-lock-lifecycle) + debug.log('wakeLock', 'Wake Lock released.'); + }); + }).catch(err => { + this.enabled = false; + debug.error('wakeLock', `${err.name}, ${err.message}`); + throw err; + }); + } else if (oldIOS()) { + this.disable(); + this.noSleepTimer = window.setInterval(() => { + if (!document.hidden) { + window.location.href = window.location.href.split("#")[0]; + window.setTimeout(window.stop, 0); + } + }, 15000); + this.enabled = true; + return Promise.resolve(); + } else { + let playPromise = this.noSleepVideo.play(); + return playPromise.then(res => { + this.enabled = true; + return res; + }).catch(err => { + this.enabled = false; + throw err; + }); + } + } + + disable() { + const debug = this.player.debug; + + if (nativeWakeLock()) { + if (this._wakeLock) { + this._wakeLock.release(); + } + + this._wakeLock = null; + } else if (oldIOS()) { + if (this.noSleepTimer) { + debug.warn('wakeLock', 'NoSleep now disabled for older iOS devices.'); + window.clearInterval(this.noSleepTimer); + this.noSleepTimer = null; + } + } else { + this.noSleepVideo.pause(); + } + + this.enabled = false; + } + + } + + class Player extends Emitter { + constructor(container, options) { + super(); + this.$container = container; + this._opt = Object.assign({}, DEFAULT_PLAYER_OPTIONS, options); + this.debug = new Debug(this); // + + if (this._opt.useWCS) { + this._opt.useWCS = supportWCS(); + } // + + + if (this._opt.useMSE) { + this._opt.useMSE = supportMSE(); + } // + + + if (this._opt.wcsUseVideoRender) { + this._opt.wcsUseVideoRender = supportMediaStreamTrack(); + } // 如果使用mse则强制不允许 webcodecs + + + if (this._opt.useMSE) { + if (this._opt.useWCS) { + this.debug.log('Player', 'useWCS set true->false'); + } + + if (!this._opt.forceNoOffscreen) { + this.debug.log('Player', 'forceNoOffscreen set false->true'); + } + + this._opt.useWCS = false; + this._opt.forceNoOffscreen = true; + } + + if (!this._opt.forceNoOffscreen) { + if (!supportOffscreenV2()) { + this._opt.forceNoOffscreen = true; + this._opt.useOffscreen = false; + } else { + this._opt.useOffscreen = true; + } + } + + if (!this._opt.hasAudio) { + this._opt.operateBtns.audio = false; + } + + this._opt.hasControl = this._hasControl(); // + + this._loading = false; + this._playing = false; + this._hasLoaded = false; // + + this._checkHeartTimeout = null; + this._checkLoadingTimeout = null; + this._checkStatsInterval = null; // + + this._startBpsTime = null; + this._isPlayingBeforePageHidden = false; + this._stats = { + buf: 0, + // 当前缓冲区时长,单位毫秒, + fps: 0, + // 当前视频帧率 + abps: 0, + // 当前音频码率,单位bit + vbps: 0, + // 当前视频码率,单位bit + ts: 0 // 当前视频帧pts,单位毫秒 + + }; // 各个步骤的时间统计 + + this._times = initPlayTimes(); // + + this._videoTimestamp = 0; + this._audioTimestamp = 0; + property$1(this); + this.events = new Events(this); + this.video = new Video(this); + + if (this._opt.hasAudio) { + this.audio = new Audio(this); + } + + this.recorder = new Recorder(this); + + if (!this._onlyMseOrWcsVideo()) { + this.decoderWorker = new DecoderWorker(this); + } else { + this.loaded = true; + } + + this.stream = null; + this.demux = null; + this._lastVolume = null; + + if (this._opt.useWCS) { + this.webcodecsDecoder = new WebcodecsDecoder(this); + this.loaded = true; + } + + if (this._opt.useMSE) { + this.mseDecoder = new MseDecoder(this); + this.loaded = true; + } // + + + this.control = new Control(this); + + if (isMobile()) { + this.keepScreenOn = new NoSleep(this); + } + + events$1(this); + observer(this); + + if (this._opt.useWCS) { + this.debug.log('Player', 'use WCS'); + } + + if (this._opt.useMSE) { + this.debug.log('Player', 'use MSE'); + } + + if (this._opt.useOffscreen) { + this.debug.log('Player', 'use offscreen'); + } + + this.debug.log('Player options', this._opt); + } + + destroy() { + this._loading = false; + this._playing = false; + this._hasLoaded = false; + this._lastVolume = null; + this._times = initPlayTimes(); + + if (this.decoderWorker) { + this.decoderWorker.destroy(); + this.decoderWorker = null; + } + + if (this.video) { + this.video.destroy(); + this.video = null; + } + + if (this.audio) { + this.audio.destroy(); + this.audio = null; + } + + if (this.stream) { + this.stream.destroy(); + this.stream = null; + } + + if (this.recorder) { + this.recorder.destroy(); + this.recorder = null; + } + + if (this.control) { + this.control.destroy(); + this.control = null; + } + + if (this.webcodecsDecoder) { + this.webcodecsDecoder.destroy(); + this.webcodecsDecoder = null; + } + + if (this.mseDecoder) { + this.mseDecoder.destroy(); + this.mseDecoder = null; + } + + if (this.demux) { + this.demux.destroy(); + this.demux = null; + } + + if (this.events) { + this.events.destroy(); + this.events = null; + } + + this.clearCheckHeartTimeout(); + this.clearCheckLoadingTimeout(); + this.clearStatsInterval(); // + + this.releaseWakeLock(); + this.keepScreenOn = null; // reset stats + + this.resetStats(); + this._audioTimestamp = 0; + this._videoTimestamp = 0; // 其他没法解耦的,通过 destroy 方式 + + this.emit('destroy'); // 接触所有绑定事件 + + this.off(); + this.debug.log('play', 'destroy end'); + } + + set fullscreen(value) { + if (isMobile() && this._opt.useWebFullScreen) { + this.emit(EVENTS.webFullscreen, value); + setTimeout(() => { + this.updateOption({ + rotate: value ? 270 : 0 + }); + this.resize(); + }, 10); + } else { + this.emit(EVENTS.fullscreen, value); + } + } + + get fullscreen() { + return isFullScreen() || this.webFullscreen; + } + + set webFullscreen(value) { + this.emit(EVENTS.webFullscreen, value); + } + + get webFullscreen() { + return this.$container.classList.contains('jessibuca-fullscreen-web'); + } + + set loaded(value) { + this._hasLoaded = value; + } + + get loaded() { + return this._hasLoaded; + } // + + + set playing(value) { + if (value) { + // 将loading 设置为 false + this.loading = false; + } + + if (this.playing !== value) { + this._playing = value; + this.emit(EVENTS.playing, value); + this.emit(EVENTS.volumechange, this.volume); + + if (value) { + this.emit(EVENTS.play); + } else { + this.emit(EVENTS.pause); + } + } + } + + get playing() { + return this._playing; + } + + get volume() { + return this.audio && this.audio.volume || 0; + } + + set volume(value) { + if (value !== this.volume) { + this.audio && this.audio.setVolume(value); + this._lastVolume = value; + } + } + + get lastVolume() { + return this._lastVolume; + } + + set loading(value) { + if (this.loading !== value) { + this._loading = value; + this.emit(EVENTS.loading, this._loading); + } + } + + get loading() { + return this._loading; + } + + set recording(value) { + if (value) { + if (this.playing) { + this.recorder && this.recorder.startRecord(); + } + } else { + this.recorder && this.recorder.stopRecordAndSave(); + } + } + + get recording() { + return this.recorder ? this.recorder.recording : false; + } + + set audioTimestamp(value) { + if (value === null) { + return; + } + + this._audioTimestamp = value; + } // + + + get audioTimestamp() { + return this._audioTimestamp; + } // + + + set videoTimestamp(value) { + if (value === null) { + return; + } + + this._videoTimestamp = value; // just for wasm + + if (!this._opt.useWCS && !this._opt.useMSE) { + if (this.audioTimestamp && this.videoTimestamp) { + this.audio && this.audio.emit(EVENTS.videoSyncAudio, { + audioTimestamp: this.audioTimestamp, + videoTimestamp: this.videoTimestamp, + diff: this.audioTimestamp - this.videoTimestamp + }); + } + } + } // + + + get videoTimestamp() { + return this._videoTimestamp; + } + + get isDebug() { + return this._opt.debug === true; + } + /** + * + * @param options + */ + + + updateOption(options) { + this._opt = Object.assign({}, this._opt, options); + } + /** + * + * @returns {Promise} + */ + + + init() { + return new Promise((resolve, reject) => { + if (!this.stream) { + this.stream = new Stream(this); + } + + if (!this.audio) { + if (this._opt.hasAudio) { + this.audio = new Audio(this); + } + } + + if (!this.demux) { + this.demux = new Demux(this); + } + + if (this._opt.useWCS) { + if (!this.webcodecsDecoder) { + this.webcodecsDecoder = new WebcodecsDecoder(this); + } + } + + if (this._opt.useMSE) { + if (!this.mseDecoder) { + this.mseDecoder = new MseDecoder(this); + } + } + + if (!this.decoderWorker && !this._onlyMseOrWcsVideo()) { + this.decoderWorker = new DecoderWorker(this); + this.once(EVENTS.decoderWorkerInit, () => { + resolve(); + }); + } else { + resolve(); + } + }); + } + /** + * + * @param url + * @returns {Promise} + */ + + + play(url, options) { + return new Promise((resolve, reject) => { + if (!url && !this._opt.url) { + return reject(); + } + + this.loading = true; + this.playing = false; + this._times.playInitStart = now(); + + if (!url) { + url = this._opt.url; + } + + this._opt.url = url; + this.clearCheckHeartTimeout(); + this.init().then(() => { + this._times.playStart = now(); // + + if (this._opt.isNotMute) { + this.mute(false); + } + + if (this.webcodecsDecoder) { + this.webcodecsDecoder.once(EVENTS_ERROR.webcodecsH265NotSupport, () => { + this.emit(EVENTS_ERROR.webcodecsH265NotSupport); + + if (!this._opt.autoWasm) { + this.emit(EVENTS.error, EVENTS_ERROR.webcodecsH265NotSupport); + } + }); + } + + if (this.mseDecoder) { + this.mseDecoder.once(EVENTS_ERROR.mediaSourceH265NotSupport, () => { + this.emit(EVENTS_ERROR.mediaSourceH265NotSupport); + + if (!this._opt.autoWasm) { + this.emit(EVENTS.error, EVENTS_ERROR.mediaSourceH265NotSupport); + } + }); + this.mseDecoder.once(EVENTS_ERROR.mediaSourceFull, () => { + this.emitError(EVENTS_ERROR.mediaSourceFull); + }); + this.mseDecoder.once(EVENTS_ERROR.mediaSourceAppendBufferError, () => { + this.emitError(EVENTS_ERROR.mediaSourceAppendBufferError); + }); + this.mseDecoder.once(EVENTS_ERROR.mediaSourceBufferListLarge, () => { + this.emitError(EVENTS_ERROR.mediaSourceBufferListLarge); + }); + this.mseDecoder.once(EVENTS_ERROR.mediaSourceAppendBufferEndTimeout, () => { + this.emitError(EVENTS_ERROR.mediaSourceAppendBufferEndTimeout); + }); + } + + this.enableWakeLock(); + this.stream.fetchStream(url, options); // + + this.checkLoadingTimeout(); // fetch error + + this.stream.once(EVENTS_ERROR.fetchError, error => { + reject(error); + }); // ws + + this.stream.once(EVENTS_ERROR.websocketError, error => { + reject(error); + }); // stream end + + this.stream.once(EVENTS.streamEnd, () => { + reject(); + }); // success + + this.stream.once(EVENTS.streamSuccess, () => { + resolve(); + this._times.streamResponse = now(); // + + this.video.play(); + this.checkStatsInterval(); + }); + }).catch(e => { + reject(e); + }); + }); + } + /** + * + */ + + + close() { + return new Promise((resolve, reject) => { + this._close().then(() => { + this.video && this.video.clearView(); + resolve(); + }); + }); + } + + resumeAudioAfterPause() { + if (this.lastVolume) { + this.volume = this.lastVolume; + } + } + + _close() { + return new Promise((resolve, reject) => { + // + if (this.stream) { + this.stream.destroy(); + this.stream = null; + } + + if (this.demux) { + this.demux.destroy(); + this.demux = null; + } // + + + if (this.decoderWorker) { + this.decoderWorker.destroy(); + this.decoderWorker = null; + } + + if (this.webcodecsDecoder) { + this.webcodecsDecoder.destroy(); + this.webcodecsDecoder = null; + } + + if (this.mseDecoder) { + this.mseDecoder.destroy(); + this.mseDecoder = null; + } + + if (this.audio) { + this.audio.destroy(); + this.audio = null; + } + + this.clearCheckHeartTimeout(); + this.clearCheckLoadingTimeout(); + this.clearStatsInterval(); + this.playing = false; + this.loading = false; + this.recording = false; + + if (this.video) { + this.video.resetInit(); + this.video.pause(true); + } // release lock + + + this.releaseWakeLock(); // reset stats + + this.resetStats(); // + + this._audioTimestamp = 0; + this._videoTimestamp = 0; // + + this._times = initPlayTimes(); // + + setTimeout(() => { + resolve(); + }, 0); + }); + } + /** + * + * @param flag {boolean} 是否清除画面 + * @returns {Promise} + */ + + + pause() { + let flag = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + + if (flag) { + return this.close(); + } else { + return this._close(); + } + } + /** + * + * @param flag + */ + + + mute(flag) { + this.audio && this.audio.mute(flag); + } + /** + * + */ + + + resize() { + this.video.resize(); + } + /** + * + * @param fileName + * @param fileType + */ + + + startRecord(fileName, fileType) { + if (this.recording) { + return; + } + + this.recorder.setFileName(fileName, fileType); + this.recording = true; + } + /** + * + */ + + + stopRecordAndSave() { + if (this.recording) { + this.recording = false; + } + } + + _hasControl() { + let result = false; + let hasBtnShow = false; + Object.keys(this._opt.operateBtns).forEach(key => { + if (this._opt.operateBtns[key]) { + hasBtnShow = true; + } + }); + + if (this._opt.showBandwidth || this._opt.text || hasBtnShow) { + result = true; + } + + return result; + } + + _onlyMseOrWcsVideo() { + return this._opt.hasAudio === false && (this._opt.useMSE || this._opt.useWCS && !this._opt.useOffscreen); + } + + checkHeart() { + this.clearCheckHeartTimeout(); + this.checkHeartTimeout(); + } // 心跳检查,如果渲染间隔暂停了多少时间之后,就会抛出异常 + + + checkHeartTimeout() { + this._checkHeartTimeout = setTimeout(() => { + if (this.playing) { + // check again + if (this._stats.fps !== 0) { + return; + } + + this.pause().then(() => { + this.emit(EVENTS.timeout, EVENTS.delayTimeout); + this.emit(EVENTS.delayTimeout); + }); + } + }, this._opt.heartTimeout * 1000); + } + + checkStatsInterval() { + this._checkStatsInterval = setInterval(() => { + this.updateStats(); + }, 1000); + } // + + + clearCheckHeartTimeout() { + if (this._checkHeartTimeout) { + clearTimeout(this._checkHeartTimeout); + this._checkHeartTimeout = null; + } + } // loading 等待时间 + + + checkLoadingTimeout() { + this._checkLoadingTimeout = setTimeout(() => { + // check again + if (this.playing) { + return; + } + + this.pause().then(() => { + this.emit(EVENTS.timeout, EVENTS.loadingTimeout); + this.emit(EVENTS.loadingTimeout); + }); + }, this._opt.loadingTimeout * 1000); + } + + clearCheckLoadingTimeout() { + if (this._checkLoadingTimeout) { + clearTimeout(this._checkLoadingTimeout); + this._checkLoadingTimeout = null; + } + } + + clearStatsInterval() { + if (this._checkStatsInterval) { + clearInterval(this._checkStatsInterval); + this._checkStatsInterval = null; + } + } + + handleRender() { + if (this.loading) { + this.emit(EVENTS.start); + this.loading = false; + this.clearCheckLoadingTimeout(); + } + + if (!this.playing) { + this.playing = true; + } + + this.checkHeart(); + } // + + + updateStats(options) { + options = options || {}; + + if (!this._startBpsTime) { + this._startBpsTime = now(); + } + + if (isNotEmpty(options.ts)) { + this._stats.ts = options.ts; + } + + if (isNotEmpty(options.buf)) { + this._stats.buf = options.buf; + } + + if (options.fps) { + this._stats.fps += 1; + } + + if (options.abps) { + this._stats.abps += options.abps; + } + + if (options.vbps) { + this._stats.vbps += options.vbps; + } + + const _nowTime = now(); + + const timestamp = _nowTime - this._startBpsTime; + + if (timestamp < 1 * 1000) { + return; + } + + this.emit(EVENTS.stats, this._stats); + this.emit(EVENTS.performance, fpsStatus(this._stats.fps)); + this._stats.fps = 0; + this._stats.abps = 0; + this._stats.vbps = 0; + this._startBpsTime = _nowTime; + } + + resetStats() { + this._startBpsTime = null; + this._stats = { + buf: 0, + //ms + fps: 0, + abps: 0, + vbps: 0, + ts: 0 + }; + } + + enableWakeLock() { + if (this._opt.keepScreenOn) { + this.keepScreenOn && this.keepScreenOn.enable(); + } + } + + releaseWakeLock() { + if (this._opt.keepScreenOn) { + this.keepScreenOn && this.keepScreenOn.disable(); + } + } + + handlePlayToRenderTimes() { + const _times = this._times; + _times.playTimestamp = _times.playStart - _times.playInitStart; + _times.streamTimestamp = _times.streamStart - _times.playStart; + _times.streamResponseTimestamp = _times.streamResponse - _times.streamStart; + _times.demuxTimestamp = _times.demuxStart - _times.streamResponse; + _times.decodeTimestamp = _times.decodeStart - _times.demuxStart; + _times.videoTimestamp = _times.videoStart - _times.decodeStart; + _times.allTimestamp = _times.videoStart - _times.playInitStart; + this.emit(EVENTS.playToRenderTimes, _times); + } + + getOption() { + return this._opt; + } + + emitError(errorType) { + let message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + this.emit(EVENTS.error, errorType, message); + this.emit(errorType, message); + } + + } + + class Jessibuca extends Emitter { + constructor(options) { + super(); + let _opt = options; + let $container = options.container; + + if (typeof options.container === 'string') { + $container = document.querySelector(options.container); + } + + if (!$container) { + throw new Error('Jessibuca need container option'); + } // check container node name + + + if ($container.nodeName === 'CANVAS' || $container.nodeName === 'VIDEO') { + throw new Error(`Jessibuca container type can not be ${$container.nodeName} type`); + } + + if (_opt.videoBuffer >= _opt.heartTimeout) { + throw new Error(`Jessibuca videoBuffer ${_opt.videoBuffer}s must be less than heartTimeout ${_opt.heartTimeout}s`); + } + + $container.classList.add('jessibuca-container'); + delete _opt.container; // 禁用离屏渲染 + + _opt.forceNoOffscreen = true; // 移动端不支持自动关闭控制栏 + + if (isMobile()) { + _opt.controlAutoHide = false; + } // s -> ms + + + if (isNotEmpty(_opt.videoBuffer)) { + _opt.videoBuffer = Number(_opt.videoBuffer) * 1000; + } // setting + + + if (isNotEmpty(_opt.timeout)) { + if (isEmpty(_opt.loadingTimeout)) { + _opt.loadingTimeout = _opt.timeout; + } + + if (isEmpty(_opt.heartTimeout)) { + _opt.heartTimeout = _opt.timeout; + } + } + + this._opt = _opt; + this.$container = $container; + this._loadingTimeoutReplayTimes = 0; + this._heartTimeoutReplayTimes = 0; + this.events = new Events(this); + + this._initPlayer($container, _opt); + } + /** + * + */ + + + destroy() { + if (this.events) { + this.events.destroy(); + this.events = null; + } + + if (this.player) { + this.player.destroy(); + this.player = null; + } + + this.$container = null; + this._opt = null; + this._loadingTimeoutReplayTimes = 0; + this._heartTimeoutReplayTimes = 0; + this.off(); + } + + _initPlayer($container, options) { + this.player = new Player($container, options); + this.player.debug.log('jessibuca', '_initPlayer', this.player.getOption()); + + this._bindEvents(); + } + + _resetPlayer() { + let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + this.player.destroy(); + this.player = null; + this._opt = Object.assign(this._opt, options); + this._opt.url = ''; // reset url + + this._initPlayer(this.$container, this._opt); + } + + _bindEvents() { + // 对外的事件 + Object.keys(JESSIBUCA_EVENTS).forEach(key => { + this.player.on(JESSIBUCA_EVENTS[key], value => { + this.emit(key, value); + }); + }); + } + /** + * 是否开启控制台调试打印 + * @param value {Boolean} + */ + + + setDebug(value) { + this.player.updateOption({ + debug: !!value + }); + } + /** + * + */ + + + mute() { + this.player.mute(true); + } + /** + * + */ + + + cancelMute() { + this.player.mute(false); + } + /** + * + * @param value {number} + */ + + + setVolume(value) { + this.player.volume = value; + } + /** + * + */ + + + audioResume() { + this.player.audio && this.player.audio.audioEnabled(true); + } + /** + * 设置超时时长, 单位秒 在连接成功之前和播放中途,如果超过设定时长无数据返回,则回调timeout事件 + * @param value {number} + */ + + + setTimeout(time) { + time = Number(time); + this.player.updateOption({ + timeout: time, + loadingTimeout: time, + heartTimeout: time + }); + } + /** + * + * @param type {number}: 0,1,2 + */ + + + setScaleMode(type) { + type = Number(type); + let options = { + isFullResize: false, + isResize: false + }; + + switch (type) { + case SCALE_MODE_TYPE.full: + options.isFullResize = false; + options.isResize = false; + break; + + case SCALE_MODE_TYPE.auto: + options.isFullResize = false; + options.isResize = true; + break; + + case SCALE_MODE_TYPE.fullAuto: + options.isFullResize = true; + options.isResize = true; + break; + } + + this.player.updateOption(options); + this.resize(); + } + /** + * + * @returns {Promise} + */ + + + pause() { + return this.player.pause(); + } + /** + * + */ + + + close() { + // clear url + this._opt.url = ''; + this._opt.playOptions = {}; + return this.player.close(); + } + /** + * + */ + + + clearView() { + this.player.video.clearView(); + } + /** + * + * @param url {string} + * @param options {object} + * @returns {Promise} + */ + + + play(url) { + let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + return new Promise((resolve, reject) => { + if (!url && !this._opt.url) { + this.emit(EVENTS.error, EVENTS_ERROR.playError); + reject('play url is empty'); + return; + } + + if (url) { + // url 相等的时候。 + if (this._opt.url) { + // 存在相同的 url + if (url === this._opt.url) { + // 正在播放 + if (this.player.playing) { + resolve(); + } else { + // pause -> play + this.clearView(); + this.player.play(this._opt.url, this._opt.playOptions).then(() => { + resolve(); // 恢复下之前的音量 + + this.player.resumeAudioAfterPause(); + }).catch(e => { + this.player.debug.warn('jessibuca', 'pause -> play and play error', e); + this.player.pause().then(() => { + reject(e); + }); + }); + } + } else { + // url 发生改变了 + this.player.pause().then(() => { + // 清除 画面 + this.clearView(); + + this._play(url, options).then(() => { + resolve(); + }).catch(e => { + this.player.debug.warn('jessibuca', 'this._play error', e); + reject(e); + }); + }).catch(e => { + this.player.debug.warn('jessibuca', 'this._opt.url is null and pause error', e); + reject(e); + }); + } + } else { + this._play(url, options).then(() => { + resolve(); + }).catch(e => { + this.player.debug.warn('jessibuca', 'this._play error', e); + reject(e); + }); + } + } else { + // url 不存在的时候 + // 就是从 play -> pause -> play + this.player.play(this._opt.url, this._opt.playOptions).then(() => { + resolve(); // 恢复下之前的音量 + + this.player.resumeAudioAfterPause(); + }).catch(e => { + this.player.debug.warn('jessibuca', 'url is null and play error', e); + this.player.pause().then(() => { + reject(e); + }); + }); + } + }); + } + /** + * + * @param url {string} + * @param options {object} + * @returns {Promise} + * @private + */ + + + _play(url) { + let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + return new Promise((resolve, reject) => { + this._opt.url = url; + this._opt.playOptions = options; // 新的url + + const isHttp = url.indexOf("http") === 0; // + + const protocol = isHttp ? PLAYER_PLAY_PROTOCOL.fetch : PLAYER_PLAY_PROTOCOL.websocket; // + + const demuxType = isHttp || url.indexOf(".flv") !== -1 || this._opt.isFlv ? DEMUX_TYPE.flv : DEMUX_TYPE.m7s; + this.player.updateOption({ + protocol, + demuxType + }); + this.player.once(EVENTS_ERROR.webglAlignmentError, () => { + this.pause().then(() => { + this.player.debug.log('Jessibuca', 'webglAlignmentError'); + + this._resetPlayer({ + openWebglAlignment: true + }); + + this.play(url).then(() => { + // resolve(); + this.player.debug.log('Jessibuca', 'webglAlignmentError and play success'); + }).catch(() => { + // reject(); + this.player.debug.log('Jessibuca', 'webglAlignmentError and play error'); + }); + }); + }); + this.player.once(EVENTS_ERROR.mediaSourceH265NotSupport, () => { + this.pause().then(() => { + if (this.player._opt.autoWasm) { + this.player.debug.log('Jessibuca', 'auto wasm [mse-> wasm] reset player and play'); + + this._resetPlayer({ + useMSE: false + }); + + this.play(url, options).then(() => { + // resolve(); + this.player.debug.log('Jessibuca', 'auto wasm [mse-> wasm] reset player and play success'); + }).catch(() => { + // reject(); + this.player.debug.log('Jessibuca', 'auto wasm [mse-> wasm] reset player and play error'); + }); + } + }); + }); // media source full error + + this.player.once(EVENTS_ERROR.mediaSourceFull, () => { + this.pause().then(() => { + this.player.debug.log('Jessibuca', 'media source full'); + + this._resetPlayer(); + + this.play(url).then(() => { + // resolve(); + this.player.debug.log('Jessibuca', 'media source full and reset player and play success'); + }).catch(() => { + // reject(); + this.player.debug.warn('Jessibuca', 'media source full and reset player and play error'); + }); + }); + }); // media source append buffer error + + this.player.once(EVENTS_ERROR.mediaSourceAppendBufferError, () => { + this.pause().then(() => { + this.player.debug.log('Jessibuca', 'media source append buffer error'); + + this._resetPlayer(); + + this.play(url).then(() => { + // resolve(); + this.player.debug.log('Jessibuca', 'media source append buffer error and reset player and play success'); + }).catch(() => { + // reject(); + this.player.debug.warn('Jessibuca', 'media source append buffer error and reset player and play error'); + }); + }); + }); + this.player.once(EVENTS_ERROR.mediaSourceBufferListLarge, () => { + this.pause().then(() => { + this.player.debug.log('Jessibuca', 'media source buffer list large'); + + this._resetPlayer(); + + this.play(url).then(() => { + // resolve(); + this.player.debug.log('Jessibuca', 'media source buffer list large and reset player and play success'); + }).catch(() => { + // reject(); + this.player.debug.warn('Jessibuca', 'media source buffer list large and reset player and play error'); + }); + }); + }); + this.player.once(EVENTS_ERROR.mediaSourceAppendBufferEndTimeout, () => { + this.pause().then(() => { + this.player.debug.log('Jessibuca', 'media source append buffer end timeout'); + + this._resetPlayer(); + + this.play(url).then(() => { + // resolve(); + this.player.debug.log('Jessibuca', 'media source append buffer end timeout and reset player and play success'); + }).catch(() => { + // reject(); + this.player.debug.warn('Jessibuca', 'media source append buffer end timeout and reset player and play error'); + }); + }); + }); + this.player.once(EVENTS_ERROR.mseSourceBufferError, () => { + this.pause().then(() => { + this.player.debug.log('Jessibuca', 'mseSourceBufferError close success'); + }); + }); // + + this.player.once(EVENTS_ERROR.webcodecsH265NotSupport, () => { + this.pause().then(() => { + if (this.player._opt.autoWasm) { + this.player.debug.log('Jessibuca', 'auto wasm [wcs-> wasm] reset player and play'); + + this._resetPlayer({ + useWCS: false + }); + + this.play(url).then(() => { + // resolve(); + this.player.debug.log('Jessibuca', 'auto wasm [wcs-> wasm] reset player and play success'); + }).catch(() => { + // reject(); + this.player.debug.warn('Jessibuca', 'auto wasm [wcs-> wasm] reset player and play error'); + }); + } + }); + }); // webcodecs + + this.player.once(EVENTS_ERROR.webcodecsWidthOrHeightChange, () => { + this.pause().then(() => { + this.player.debug.log('Jessibuca', 'webcodecs Width Or Height Change reset player and play'); + + this._resetPlayer({ + useWCS: true + }); + + this.play(url).then(() => { + // resolve(); + this.player.debug.log('Jessibuca', 'webcodecs Width Or Height Change reset player and play success'); + }).catch(() => { + // reject(); + this.player.debug.warn('Jessibuca', 'webcodecs Width Or Height Change reset player and play error'); + }); + }); + }); // webcodecs + + this.player.once(EVENTS_ERROR.webcodecsDecodeError, () => { + this.pause().then(() => { + if (this.player._opt.autoWasm) { + this.player.debug.log('Jessibuca', 'webcodecs decode error reset player and play'); + + this._resetPlayer({ + useWCS: false + }); + + this.play(url).then(() => { + // resolve(); + this.player.debug.log('Jessibuca', 'webcodecs decode error reset player and play success'); + }).catch(() => { + // reject(); + this.player.debug.warn('Jessibuca', 'webcodecs decode error reset player and play error'); + }); + } + }); + }); // wasm。 + + this.player.once(EVENTS_ERROR.wasmDecodeError, () => { + if (this.player._opt.wasmDecodeErrorReplay) { + this.pause().then(() => { + this.player.debug.log('Jessibuca', 'wasm decode error and reset player and play'); + + this._resetPlayer({ + useWCS: false + }); + + this.play(url, options).then(() => { + // resolve(); + this.player.debug.log('Jessibuca', 'wasm decode error and reset player and play success'); + }).catch(() => { + // reject(); + this.player.debug.warn('Jessibuca', 'wasm decode error and reset player and play error'); + }); + }); + } + }); // 监听 delay timeout + + this.player.on(EVENTS.delayTimeout, () => { + if (this.player._opt.heartTimeoutReplay && (this._heartTimeoutReplayTimes < this.player._opt.heartTimeoutReplayTimes || this.player._opt.heartTimeoutReplayTimes === -1)) { + this.player.debug.log('Jessibuca', `delay timeout replay time is ${this._heartTimeoutReplayTimes}`); + this._heartTimeoutReplayTimes += 1; + this.play(url, options).then(() => { + // resolve(); + this._heartTimeoutReplayTimes = 0; + }).catch(() => {// reject(); + }); + } + }); // 监听 loading timeout + + this.player.on(EVENTS.loadingTimeout, () => { + if (this.player._opt.loadingTimeoutReplay && (this._loadingTimeoutReplayTimes < this.player._opt.loadingTimeoutReplayTimes || this.player._opt.loadingTimeoutReplayTimes === -1)) { + this.player.debug.log('Jessibuca', `loading timeout replay time is ${this._loadingTimeoutReplayTimes}`); + this._loadingTimeoutReplayTimes += 1; + this.play(url, options).then(() => { + // resolve(); + this._loadingTimeoutReplayTimes = 0; + }).catch(() => {// reject(); + }); + } + }); + + if (this.hasLoaded()) { + this.player.play(url, options).then(() => { + resolve(); + }).catch(e => { + this.player.debug.warn('Jessibuca', 'hasLoaded and play error', e); + this.player.pause().then(() => { + reject(e); + }); + }); + } else { + this.player.once(EVENTS.decoderWorkerInit, () => { + this.player.play(url, options).then(() => { + resolve(); + }).catch(e => { + this.player.debug.warn('Jessibuca', 'decoderWorkerInit and play error', e); + this.player.pause().then(() => { + reject(e); + }); + }); + }); + } + }); + } + /** + * + */ + + + resize() { + this.player.resize(); + } + /** + * + * @param time {number} s + */ + + + setBufferTime(time) { + time = Number(time); // s -> ms + + this.player.updateOption({ + videoBuffer: time * 1000 + }); // update worker config + + this.player.decoderWorker && this.player.decoderWorker.updateWorkConfig({ + key: 'videoBuffer', + value: time * 1000 + }); + } + /** + * + * @param deg {number} + */ + + + setRotate(deg) { + deg = parseInt(deg, 10); + const list = [0, 90, 180, 270]; + + if (this._opt.rotate === deg || list.indexOf(deg) === -1) { + return; + } + + this.player.updateOption({ + rotate: deg + }); + this.resize(); + } + /** + * + * @returns {boolean} + */ + + + hasLoaded() { + return this.player.loaded; + } + /** + * + */ + + + setKeepScreenOn() { + this.player.updateOption({ + keepScreenOn: true + }); + } + /** + * + * @param flag {Boolean} + */ + + + setFullscreen(flag) { + const fullscreen = !!flag; + + if (this.player.fullscreen !== fullscreen) { + this.player.fullscreen = fullscreen; + } + } + /** + * + * @param filename {string} + * @param format {string} + * @param quality {number} + * @param type {string} download,base64,blob + */ + + + screenshot(filename, format, quality, type) { + if (!this.player.video) { + return ''; + } + + return this.player.video.screenshot(filename, format, quality, type); + } + /** + * + * @param fileName {string} + * @param fileType {string} + * @returns {Promise} + */ + + + startRecord(fileName, fileType) { + return new Promise((resolve, reject) => { + if (this.player.playing) { + this.player.startRecord(fileName, fileType); + resolve(); + } else { + reject(); + } + }); + } + + stopRecordAndSave() { + if (this.player.recording) { + this.player.stopRecordAndSave(); + } + } + /** + * + * @returns {Boolean} + */ + + + isPlaying() { + return this.player ? this.player.playing : false; + } + /** + * 是否静音状态 + * @returns {Boolean} + */ + + + isMute() { + return this.player.audio ? this.player.audio.isMute : true; + } + /** + * 是否在录制视频 + * @returns {*} + */ + + + isRecording() { + return this.player.recorder.recording; + } + + } + + _defineProperty(Jessibuca, "ERROR", EVENTS_ERROR); + + _defineProperty(Jessibuca, "TIMEOUT", { + loadingTimeout: EVENTS.loadingTimeout, + delayTimeout: EVENTS.delayTimeout + }); + + window.Jessibuca = Jessibuca; + + return Jessibuca; + +})); +//# sourceMappingURL=jessibuca.js.map diff --git a/console/client/assets/js/jessibuca/manifest.json b/console/client/assets/js/jessibuca/manifest.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/console/client/assets/js/jessibuca/manifest.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/console/client/index.html b/console/client/index.html index 9f4a66d..0a30fe8 100644 --- a/console/client/index.html +++ b/console/client/index.html @@ -1,4 +1,4 @@ - + diff --git a/console/client/src/sections/console/containers/index.js b/console/client/src/sections/console/containers/index.js index a03fab3..a4e9b6f 100644 --- a/console/client/src/sections/console/containers/index.js +++ b/console/client/src/sections/console/containers/index.js @@ -570,7 +570,6 @@ function Index (props) { // dispatch(getVideo()).then(res => { - console.log(res); if ( res.success ) { @@ -579,67 +578,74 @@ function Index (props) { const container = document.getElementById('video-play'); console.log(`准备播放`); // 播放方式 1 - // const jessibuca = new window.Jessibuca({ - // container: container, - // videoBuffer: 0.2, // 缓存时长 - // isResize: false, - // text: "", - // loadingText: "加载中", - // debug: true, - // showBandwidth: false, // 显示网速 - // operateBtns: { - // fullscreen: false, - // screenshot: false, - // play: false, - // audio: false, - // }, - // forceNoOffscreen: false, - // controlAutoHide: true, - // isNotMute: false, - // }); - // jessibucas.current = jessibuca - // jessibuca.play( - // `${res.payload.data.ws_flv}` - // ); + const jessibuca = new window.Jessibuca({ + container: container, + videoBuffer: 0.2, // 缓存时长 + isResize: false, + text: "", + loadingText: "加载中", + debug: true, + showBandwidth: false, // 显示网速 + showBandwidth: false, + operateBtns: { + fullscreen: false, + screenshot: false, + play: false, + audio: false, + + fullscreen: true, + screenshot: true, + play: true, + audio: true, + }, + forceNoOffscreen: false, + controlAutoHide: true, + isNotMute: false, + }); + jessibucas.current = jessibuca + jessibuca.play( + `${res.payload.data.ws_flv}` + ); // 播放方式 2 - const flv = flvjs.createPlayer({ - type: 'flv', - url: `${res.payload.data.ws_flv}`, - isLive: true, - hasAudio: false, - hasVideo: true, - }, { - enableWorker: false,//分离线程 - enalleStashBuffer: false, //IO隐藏缓冲区 - stashInitialSize: 128, - isLive: true, - lazyLoad: false, - // lazyLoadMaxDuration: 3 * 60, - lazyLoadMaxDuration: 1, - seekType: 'range', - autoCleanupSourceBuffer: true, - // cors: true, - // stashInitialSize: 1024 - }); - flv.attachMediaElement(container); - flv.load(); - - try { - // 初始化 _remuxer - let controller = flv?._transmuxer?._controller - controller._remuxer = { - flushStashedSamples: function () { - console.log("flushStashedSamples") - } - } - } catch (error) { - console.error(error); - } + // const flv = flvjs.createPlayer({ + // type: 'flv', + // url: `${res.payload.data.ws_flv}`, + // isLive: true, + // hasAudio: false, + // hasVideo: true, + // }, { + // enableWorker: false,//分离线程 + // enalleStashBuffer: false, //IO隐藏缓冲区 + // stashInitialSize: 128, + // isLive: true, + // lazyLoad: false, + // // lazyLoadMaxDuration: 3 * 60, + // lazyLoadMaxDuration: 1, + // seekType: 'range', + // autoCleanupSourceBuffer: true, + // // cors: true, + // // stashInitialSize: 1024 + // }); + // flv.attachMediaElement(container); + // flv.load(); + + // try { + // // 初始化 _remuxer + // let controller = flv?._transmuxer?._controller + // controller._remuxer = { + // flushStashedSamples: function () { + // console.log("flushStashedSamples") + // } + // } + // } catch (error) { + // console.error(error); + // } - flv.play(); - flvPlayer.current = flv + // flv.play(); + // flvPlayer.current = flv + /** 尝试解决播放延迟问题 */ if (flvPlayerInterval) { clearInterval(flvPlayerInterval) } @@ -654,8 +660,9 @@ function Index (props) { // } // } // }, 1000 * 10); + /** 尝试 END */ } catch (error) { - + console.error(error); } } }) @@ -708,7 +715,8 @@ function Index (props) { 您的浏览器不支持canvas,请更换浏览器. - + */} + + {/* 这个 div 配合 解析不卡使用 */} +
+ +

VC^7K~P~!z;-#*1PE#*IYjfd;=bX;pZ8ftTYg6 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