From 1123374718806409760cfaab04c974f985b1b9ae Mon Sep 17 00:00:00 2001 From: mx2 Date: Wed, 21 Jun 2023 15:33:47 +0000 Subject: [PATCH] add source files --- .gitignore | 5 + media/rendezvous-screenshots.jpg | Bin 0 -> 35085 bytes www/index.html | 290 +++++++ www/lib/b64-to-blob.js | 14 + www/lib/bin2hex.js | 6 + www/lib/blob-to-b64.js | 29 + www/lib/bundle.js | 2 + www/lib/hash.js | 5 + www/lib/hex2bin.js | 53 ++ www/lib/nosleep.js | 265 ++++++ www/lib/random-string.js | 38 + www/main.js | 1341 ++++++++++++++++++++++++++++++ www/rendezvous-icon.png | Bin 0 -> 4048 bytes www/rendvz | 1 + 14 files changed, 2049 insertions(+) create mode 100644 media/rendezvous-screenshots.jpg create mode 100644 www/index.html create mode 100644 www/lib/b64-to-blob.js create mode 100644 www/lib/bin2hex.js create mode 100644 www/lib/blob-to-b64.js create mode 100644 www/lib/bundle.js create mode 100644 www/lib/hash.js create mode 100644 www/lib/hex2bin.js create mode 100644 www/lib/nosleep.js create mode 100644 www/lib/random-string.js create mode 100644 www/main.js create mode 100644 www/rendezvous-icon.png create mode 100644 www/rendvz diff --git a/.gitignore b/.gitignore index ceaea36..caf24f8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,8 @@ +# custom +*.zip +*(copy* +zarch* + # ---> Node # Logs logs diff --git a/media/rendezvous-screenshots.jpg b/media/rendezvous-screenshots.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76c1ae52206e9f74e8ceacfbdd043a1b62908025 GIT binary patch literal 35085 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 J?ic-D`adcLPxJr) literal 0 HcmV?d00001 diff --git a/www/index.html b/www/index.html new file mode 100644 index 0000000..dae3197 --- /dev/null +++ b/www/index.html @@ -0,0 +1,290 @@ + + + Rendezvous | Linky IO + + + + + +
+ +
+
+ + + +
+ + +
+ + + + + +
+
+ + +
+
+ x 1 +
+
+ + +
+
+ +
+
+ + Peering.. +
+ +
+
+
+
+ + +
+
+ +
+
+ +
+
+
+ +
+ +
+ +
+ +
+ + + +
+ +
+ +
+
+ + diff --git a/www/lib/b64-to-blob.js b/www/lib/b64-to-blob.js new file mode 100644 index 0000000..480f5ec --- /dev/null +++ b/www/lib/b64-to-blob.js @@ -0,0 +1,14 @@ +export default async function b64toBlob(b,type){ + // https://ionic.io/blog/converting-a-base64-string-to-a-blob-in-javascript + // https://github.com/jeremyBanks/b64-to-blob/blob/master/b64toBlob.js + + // size limit? + + //console.log({b,type}) + const u = `data:${type};base64,${b}` + //console.log({u}) + const f = await fetch(u) // this always works? + const blob = await f.blob() + //console.log({blob}) + return blob + }//func diff --git a/www/lib/bin2hex.js b/www/lib/bin2hex.js new file mode 100644 index 0000000..3452112 --- /dev/null +++ b/www/lib/bin2hex.js @@ -0,0 +1,6 @@ +// ------------------------------ +export default function bin2hex(n){ + const a = new Uint8Array(n) + return Array.from(a).map(v=>v.toString(16).padStart(2,'0')).join('') + } + diff --git a/www/lib/blob-to-b64.js b/www/lib/blob-to-b64.js new file mode 100644 index 0000000..b50600e --- /dev/null +++ b/www/lib/blob-to-b64.js @@ -0,0 +1,29 @@ +// +// 2023.01.10 +// + +export default async function blobToB64(b,type){ + // https://ionic.io/blog/converting-a-base64-string-to-a-blob-in-javascript + // https://github.com/jeremyBanks/b64-to-blob/blob/master/b64toBlob.js + // + // upg: to b64url and/or data urls? + + // size limit? + + //console.log({b,type}) // upg: type to override blob type or? + + + let p = new Promise((res, rej) => { + const r = new FileReader + r.onerror = rej + r.onload = e=>{ + const {result} = r + const x = result.split(',') // and/or? 'data:image/jpeg;base64' + res(x[1]) + } + r.readAsDataURL(b) + }) + + let rr = await p + return p + }//func diff --git a/www/lib/bundle.js b/www/lib/bundle.js new file mode 100644 index 0000000..e91ad79 --- /dev/null +++ b/www/lib/bundle.js @@ -0,0 +1,2 @@ +/*! For license information please see bundle.js.LICENSE.txt */ +var t,e,n={742:(t,e)=>{e.byteLength=function(t){var e=l(t),n=e[0],i=e[1];return 3*(n+i)/4-i},e.toByteArray=function(t){var e,n,a=l(t),o=a[0],s=a[1],c=new r(function(t,e,n){return 3*(e+n)/4-n}(0,o,s)),p=0,d=s>0?o-4:o;for(n=0;n>16&255,c[p++]=e>>8&255,c[p++]=255&e;return 2===s&&(e=i[t.charCodeAt(n)]<<2|i[t.charCodeAt(n+1)]>>4,c[p++]=255&e),1===s&&(e=i[t.charCodeAt(n)]<<10|i[t.charCodeAt(n+1)]<<4|i[t.charCodeAt(n+2)]>>2,c[p++]=e>>8&255,c[p++]=255&e),c},e.fromByteArray=function(t){for(var e,i=t.length,r=i%3,a=[],o=16383,s=0,l=i-r;sl?l:s+o));return 1===r?(e=t[i-1],a.push(n[e>>2]+n[e<<4&63]+"==")):2===r&&(e=(t[i-2]<<8)+t[i-1],a.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"=")),a.join("")};for(var n=[],i=[],r="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0,s=a.length;o0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");return-1===n&&(n=e),[n,n===e?0:4-n%4]}function c(t,e,i){for(var r,a,o=[],s=e;s>18&63]+n[a>>12&63]+n[a>>6&63]+n[63&a]);return o.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},240:(t,e,n)=>{var i=n(764).lW,r=n(518);function a(t,e){return void 0===e&&(e="utf8"),i.isBuffer(t)?s(t.toString("base64")):s(i.from(t,e).toString("base64"))}function o(t){return t=t.toString(),r.default(t).replace(/\-/g,"+").replace(/_/g,"/")}function s(t){return t.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var l=a;l.encode=a,l.decode=function(t,e){return void 0===e&&(e="utf8"),i.from(o(t),"base64").toString(e)},l.toBase64=o,l.fromBase64=s,l.toBuffer=function(t){return i.from(o(t),"base64")},e.default=l},518:(t,e,n)=>{var i=n(764).lW;Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var e=t.length,n=e%4;if(!n)return t;var r=e,a=4-n,o=e+a,s=i.alloc(o);for(s.write(t);a--;)s.write("=",r++);return s.toString()}},772:(t,e,n)=>{t.exports=n(240).default,t.exports.default=t.exports},764:(t,e,n)=>{const i=n(742),r=n(645),a="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.lW=l,e.h2=50;const o=2147483647;function s(t){if(t>o)throw new RangeError('The value "'+t+'" is invalid for option "size"');const e=new Uint8Array(t);return Object.setPrototypeOf(e,l.prototype),e}function l(t,e,n){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return d(t)}return c(t,e,n)}function c(t,e,n){if("string"==typeof t)return function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!l.isEncoding(e))throw new TypeError("Unknown encoding: "+e);const n=0|m(t,e);let i=s(n);const r=i.write(t,e);return r!==n&&(i=i.slice(0,r)),i}(t,e);if(ArrayBuffer.isView(t))return function(t){if(G(t,Uint8Array)){const e=new Uint8Array(t);return h(e.buffer,e.byteOffset,e.byteLength)}return u(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(G(t,ArrayBuffer)||t&&G(t.buffer,ArrayBuffer))return h(t,e,n);if("undefined"!=typeof SharedArrayBuffer&&(G(t,SharedArrayBuffer)||t&&G(t.buffer,SharedArrayBuffer)))return h(t,e,n);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');const i=t.valueOf&&t.valueOf();if(null!=i&&i!==t)return l.from(i,e,n);const r=function(t){if(l.isBuffer(t)){const e=0|f(t.length),n=s(e);return 0===n.length||t.copy(n,0,0,e),n}return void 0!==t.length?"number"!=typeof t.length||J(t.length)?s(0):u(t):"Buffer"===t.type&&Array.isArray(t.data)?u(t.data):void 0}(t);if(r)return r;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return l.from(t[Symbol.toPrimitive]("string"),e,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function p(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function d(t){return p(t),s(t<0?0:0|f(t))}function u(t){const e=t.length<0?0:0|f(t.length),n=s(e);for(let i=0;i=o)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o.toString(16)+" bytes");return 0|t}function m(t,e){if(l.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||G(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);const n=t.length,i=arguments.length>2&&!0===arguments[2];if(!i&&0===n)return 0;let r=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return Y(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return $(t).length;default:if(r)return i?-1:Y(t).length;e=(""+e).toLowerCase(),r=!0}}function g(t,e,n){let i=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return R(this,e,n);case"utf8":case"utf-8":return A(this,e,n);case"ascii":return S(this,e,n);case"latin1":case"binary":return I(this,e,n);case"base64":return C(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return B(this,e,n);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0}}function v(t,e,n){const i=t[e];t[e]=t[n],t[n]=i}function y(t,e,n,i,r){if(0===t.length)return-1;if("string"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),J(n=+n)&&(n=r?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(r)return-1;n=t.length-1}else if(n<0){if(!r)return-1;n=0}if("string"==typeof e&&(e=l.from(e,i)),l.isBuffer(e))return 0===e.length?-1:b(t,e,n,i,r);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):b(t,[e],n,i,r);throw new TypeError("val must be string, number or Buffer")}function b(t,e,n,i,r){let a,o=1,s=t.length,l=e.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(t.length<2||e.length<2)return-1;o=2,s/=2,l/=2,n/=2}function c(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(r){let i=-1;for(a=n;as&&(n=s-l),a=n;a>=0;a--){let n=!0;for(let i=0;ir&&(i=r):i=r;const a=e.length;let o;for(i>a/2&&(i=a/2),o=0;o>8,r=n%256,a.push(r),a.push(i);return a}(e,t.length-n),t,n,i)}function C(t,e,n){return 0===e&&n===t.length?i.fromByteArray(t):i.fromByteArray(t.slice(e,n))}function A(t,e,n){n=Math.min(t.length,n);const i=[];let r=e;for(;r239?4:e>223?3:e>191?2:1;if(r+o<=n){let n,i,s,l;switch(o){case 1:e<128&&(a=e);break;case 2:n=t[r+1],128==(192&n)&&(l=(31&e)<<6|63&n,l>127&&(a=l));break;case 3:n=t[r+1],i=t[r+2],128==(192&n)&&128==(192&i)&&(l=(15&e)<<12|(63&n)<<6|63&i,l>2047&&(l<55296||l>57343)&&(a=l));break;case 4:n=t[r+1],i=t[r+2],s=t[r+3],128==(192&n)&&128==(192&i)&&128==(192&s)&&(l=(15&e)<<18|(63&n)<<12|(63&i)<<6|63&s,l>65535&&l<1114112&&(a=l))}}null===a?(a=65533,o=1):a>65535&&(a-=65536,i.push(a>>>10&1023|55296),a=56320|1023&a),i.push(a),r+=o}return function(t){const e=t.length;if(e<=T)return String.fromCharCode.apply(String,t);let n="",i=0;for(;ii.length?(l.isBuffer(e)||(e=l.from(e)),e.copy(i,r)):Uint8Array.prototype.set.call(i,e,r);else{if(!l.isBuffer(e))throw new TypeError('"list" argument must be an Array of Buffers');e.copy(i,r)}r+=e.length}return i},l.byteLength=m,l.prototype._isBuffer=!0,l.prototype.swap16=function(){const t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let e=0;en&&(t+=" ... "),""},a&&(l.prototype[a]=l.prototype.inspect),l.prototype.compare=function(t,e,n,i,r){if(G(t,Uint8Array)&&(t=l.from(t,t.offset,t.byteLength)),!l.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===i&&(i=0),void 0===r&&(r=this.length),e<0||n>t.length||i<0||r>this.length)throw new RangeError("out of range index");if(i>=r&&e>=n)return 0;if(i>=r)return-1;if(e>=n)return 1;if(this===t)return 0;let a=(r>>>=0)-(i>>>=0),o=(n>>>=0)-(e>>>=0);const s=Math.min(a,o),c=this.slice(i,r),p=t.slice(e,n);for(let t=0;t>>=0,isFinite(n)?(n>>>=0,void 0===i&&(i="utf8")):(i=n,n=void 0)}const r=this.length-e;if((void 0===n||n>r)&&(n=r),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");let a=!1;for(;;)switch(i){case"hex":return _(this,t,e,n);case"utf8":case"utf-8":return w(this,t,e,n);case"ascii":case"latin1":case"binary":return x(this,t,e,n);case"base64":return k(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,t,e,n);default:if(a)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),a=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const T=4096;function S(t,e,n){let i="";n=Math.min(t.length,n);for(let r=e;ri)&&(n=i);let r="";for(let i=e;in)throw new RangeError("Trying to access beyond buffer length")}function O(t,e,n,i,r,a){if(!l.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>r||et.length)throw new RangeError("Index out of range")}function P(t,e,n,i,r){W(e,i,r,t,n,7);let a=Number(e&BigInt(4294967295));t[n++]=a,a>>=8,t[n++]=a,a>>=8,t[n++]=a,a>>=8,t[n++]=a;let o=Number(e>>BigInt(32)&BigInt(4294967295));return t[n++]=o,o>>=8,t[n++]=o,o>>=8,t[n++]=o,o>>=8,t[n++]=o,n}function N(t,e,n,i,r){W(e,i,r,t,n,7);let a=Number(e&BigInt(4294967295));t[n+7]=a,a>>=8,t[n+6]=a,a>>=8,t[n+5]=a,a>>=8,t[n+4]=a;let o=Number(e>>BigInt(32)&BigInt(4294967295));return t[n+3]=o,o>>=8,t[n+2]=o,o>>=8,t[n+1]=o,o>>=8,t[n]=o,n+8}function D(t,e,n,i,r,a){if(n+i>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function j(t,e,n,i,a){return e=+e,n>>>=0,a||D(t,0,n,4),r.write(t,e,n,i,23,4),n+4}function U(t,e,n,i,a){return e=+e,n>>>=0,a||D(t,0,n,8),r.write(t,e,n,i,52,8),n+8}l.prototype.slice=function(t,e){const n=this.length;(t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(e=void 0===e?n:~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),e>>=0,e>>>=0,n||z(t,e,this.length);let i=this[t],r=1,a=0;for(;++a>>=0,e>>>=0,n||z(t,e,this.length);let i=this[t+--e],r=1;for(;e>0&&(r*=256);)i+=this[t+--e]*r;return i},l.prototype.readUint8=l.prototype.readUInt8=function(t,e){return t>>>=0,e||z(t,1,this.length),this[t]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(t,e){return t>>>=0,e||z(t,2,this.length),this[t]|this[t+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(t,e){return t>>>=0,e||z(t,2,this.length),this[t]<<8|this[t+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(t,e){return t>>>=0,e||z(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(t,e){return t>>>=0,e||z(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},l.prototype.readBigUInt64LE=X((function(t){q(t>>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||Z(t,this.length-8);const i=e+256*this[++t]+65536*this[++t]+this[++t]*2**24,r=this[++t]+256*this[++t]+65536*this[++t]+n*2**24;return BigInt(i)+(BigInt(r)<>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||Z(t,this.length-8);const i=e*2**24+65536*this[++t]+256*this[++t]+this[++t],r=this[++t]*2**24+65536*this[++t]+256*this[++t]+n;return(BigInt(i)<>>=0,e>>>=0,n||z(t,e,this.length);let i=this[t],r=1,a=0;for(;++a=r&&(i-=Math.pow(2,8*e)),i},l.prototype.readIntBE=function(t,e,n){t>>>=0,e>>>=0,n||z(t,e,this.length);let i=e,r=1,a=this[t+--i];for(;i>0&&(r*=256);)a+=this[t+--i]*r;return r*=128,a>=r&&(a-=Math.pow(2,8*e)),a},l.prototype.readInt8=function(t,e){return t>>>=0,e||z(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},l.prototype.readInt16LE=function(t,e){t>>>=0,e||z(t,2,this.length);const n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(t,e){t>>>=0,e||z(t,2,this.length);const n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(t,e){return t>>>=0,e||z(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},l.prototype.readInt32BE=function(t,e){return t>>>=0,e||z(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},l.prototype.readBigInt64LE=X((function(t){q(t>>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||Z(t,this.length-8);const i=this[t+4]+256*this[t+5]+65536*this[t+6]+(n<<24);return(BigInt(i)<>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||Z(t,this.length-8);const i=(e<<24)+65536*this[++t]+256*this[++t]+this[++t];return(BigInt(i)<>>=0,e||z(t,4,this.length),r.read(this,t,!0,23,4)},l.prototype.readFloatBE=function(t,e){return t>>>=0,e||z(t,4,this.length),r.read(this,t,!1,23,4)},l.prototype.readDoubleLE=function(t,e){return t>>>=0,e||z(t,8,this.length),r.read(this,t,!0,52,8)},l.prototype.readDoubleBE=function(t,e){return t>>>=0,e||z(t,8,this.length),r.read(this,t,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(t,e,n,i){t=+t,e>>>=0,n>>>=0,i||O(this,t,e,n,Math.pow(2,8*n)-1,0);let r=1,a=0;for(this[e]=255&t;++a>>=0,n>>>=0,i||O(this,t,e,n,Math.pow(2,8*n)-1,0);let r=n-1,a=1;for(this[e+r]=255&t;--r>=0&&(a*=256);)this[e+r]=t/a&255;return e+n},l.prototype.writeUint8=l.prototype.writeUInt8=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,1,255,0),this[e]=255&t,e+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},l.prototype.writeBigUInt64LE=X((function(t,e=0){return P(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeBigUInt64BE=X((function(t,e=0){return N(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeIntLE=function(t,e,n,i){if(t=+t,e>>>=0,!i){const i=Math.pow(2,8*n-1);O(this,t,e,n,i-1,-i)}let r=0,a=1,o=0;for(this[e]=255&t;++r>0)-o&255;return e+n},l.prototype.writeIntBE=function(t,e,n,i){if(t=+t,e>>>=0,!i){const i=Math.pow(2,8*n-1);O(this,t,e,n,i-1,-i)}let r=n-1,a=1,o=0;for(this[e+r]=255&t;--r>=0&&(a*=256);)t<0&&0===o&&0!==this[e+r+1]&&(o=1),this[e+r]=(t/a>>0)-o&255;return e+n},l.prototype.writeInt8=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},l.prototype.writeInt16LE=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},l.prototype.writeInt16BE=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},l.prototype.writeInt32LE=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},l.prototype.writeInt32BE=function(t,e,n){return t=+t,e>>>=0,n||O(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},l.prototype.writeBigInt64LE=X((function(t,e=0){return P(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeBigInt64BE=X((function(t,e=0){return N(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeFloatLE=function(t,e,n){return j(this,t,e,!0,n)},l.prototype.writeFloatBE=function(t,e,n){return j(this,t,e,!1,n)},l.prototype.writeDoubleLE=function(t,e,n){return U(this,t,e,!0,n)},l.prototype.writeDoubleBE=function(t,e,n){return U(this,t,e,!1,n)},l.prototype.copy=function(t,e,n,i){if(!l.isBuffer(t))throw new TypeError("argument should be a Buffer");if(n||(n=0),i||0===i||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i=this.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),t.length-e>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(r=e;r=i+4;n-=3)e=`_${t.slice(n-3,n)}${e}`;return`${t.slice(0,n)}${e}`}function W(t,e,n,i,r,a){if(t>n||t3?0===e||e===BigInt(0)?`>= 0${i} and < 2${i} ** ${8*(a+1)}${i}`:`>= -(2${i} ** ${8*(a+1)-1}${i}) and < 2 ** ${8*(a+1)-1}${i}`:`>= ${e}${i} and <= ${n}${i}`,new L.ERR_OUT_OF_RANGE("value",r,t)}!function(t,e,n){q(e,"offset"),void 0!==t[e]&&void 0!==t[e+n]||Z(e,t.length-(n+1))}(i,r,a)}function q(t,e){if("number"!=typeof t)throw new L.ERR_INVALID_ARG_TYPE(e,"number",t)}function Z(t,e,n){if(Math.floor(t)!==t)throw q(t,n),new L.ERR_OUT_OF_RANGE(n||"offset","an integer",t);if(e<0)throw new L.ERR_BUFFER_OUT_OF_BOUNDS;throw new L.ERR_OUT_OF_RANGE(n||"offset",`>= ${n?1:0} and <= ${e}`,t)}M("ERR_BUFFER_OUT_OF_BOUNDS",(function(t){return t?`${t} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),M("ERR_INVALID_ARG_TYPE",(function(t,e){return`The "${t}" argument must be of type number. Received type ${typeof e}`}),TypeError),M("ERR_OUT_OF_RANGE",(function(t,e,n){let i=`The value of "${t}" is out of range.`,r=n;return Number.isInteger(n)&&Math.abs(n)>2**32?r=F(String(n)):"bigint"==typeof n&&(r=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(r=F(r)),r+="n"),i+=` It must be ${e}. Received ${r}`,i}),RangeError);const H=/[^+/0-9A-Za-z-_]/g;function Y(t,e){let n;e=e||1/0;const i=t.length;let r=null;const a=[];for(let o=0;o55295&&n<57344){if(!r){if(n>56319){(e-=3)>-1&&a.push(239,191,189);continue}if(o+1===i){(e-=3)>-1&&a.push(239,191,189);continue}r=n;continue}if(n<56320){(e-=3)>-1&&a.push(239,191,189),r=n;continue}n=65536+(r-55296<<10|n-56320)}else r&&(e-=3)>-1&&a.push(239,191,189);if(r=null,n<128){if((e-=1)<0)break;a.push(n)}else if(n<2048){if((e-=2)<0)break;a.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;a.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;a.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return a}function $(t){return i.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(H,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function K(t,e,n,i){let r;for(r=0;r=e.length||r>=t.length);++r)e[r+n]=t[r];return r}function G(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function J(t){return t!=t}const V=function(){const t="0123456789abcdef",e=new Array(256);for(let n=0;n<16;++n){const i=16*n;for(let r=0;r<16;++r)e[i+r]=t[n]+t[r]}return e}();function X(t){return"undefined"==typeof BigInt?Q:t}function Q(){throw new Error("BigInt not supported")}},987:t=>{var e={single_source_shortest_paths:function(t,n,i){var r={},a={};a[n]=0;var o,s,l,c,p,d,u,h=e.PriorityQueue.make();for(h.push(n,0);!h.empty();)for(l in s=(o=h.pop()).value,c=o.cost,p=t[s]||{})p.hasOwnProperty(l)&&(d=c+p[l],u=a[l],(void 0===a[l]||u>d)&&(a[l]=d,h.push(l,d),r[l]=s));if(void 0!==i&&void 0===a[i]){var f=["Could not find a path from ",n," to ",i,"."].join("");throw new Error(f)}return r},extract_shortest_path_from_predecessor_list:function(t,e){for(var n=[],i=e;i;)n.push(i),t[i],i=t[i];return n.reverse(),n},find_path:function(t,n,i){var r=e.single_source_shortest_paths(t,n,i);return e.extract_shortest_path_from_predecessor_list(r,i)},PriorityQueue:{make:function(t){var n,i=e.PriorityQueue,r={};for(n in t=t||{},i)i.hasOwnProperty(n)&&(r[n]=i[n]);return r.queue=[],r.sorter=t.sorter||i.default_sorter,r},default_sorter:function(t,e){return t.cost-e.cost},push:function(t,e){var n={value:t,cost:e};this.queue.push(n),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return 0===this.queue.length}}};t.exports=e},378:t=>{t.exports=function(t){for(var e=[],n=t.length,i=0;i=55296&&r<=56319&&n>i+1){var a=t.charCodeAt(i+1);a>=56320&&a<=57343&&(r=1024*(r-55296)+a-56320+65536,i+=1)}r<128?e.push(r):r<2048?(e.push(r>>6|192),e.push(63&r|128)):r<55296||r>=57344&&r<65536?(e.push(r>>12|224),e.push(r>>6&63|128),e.push(63&r|128)):r>=65536&&r<=1114111?(e.push(r>>18|240),e.push(r>>12&63|128),e.push(r>>6&63|128),e.push(63&r|128)):e.push(239,191,189)}return new Uint8Array(e).buffer}},575:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default={TALB:"album",TBPM:"bpm",TCOM:"composer",TCON:"genre",TCOP:"copyright",TDEN:"encoding-time",TDLY:"playlist-delay",TDOR:"original-release-time",TDRC:"recording-time",TDRL:"release-time",TDTG:"tagging-time",TENC:"encoder",TEXT:"writer",TFLT:"file-type",TIPL:"involved-people",TIT1:"content-group",TIT2:"title",TIT3:"subtitle",TKEY:"initial-key",TLAN:"language",TLEN:"length",TMCL:"credits",TMED:"media-type",TMOO:"mood",TOAL:"original-album",TOFN:"original-filename",TOLY:"original-writer",TOPE:"original-artist",TOWN:"owner",TPE1:"artist",TPE2:"band",TPE3:"conductor",TPE4:"remixer",TPOS:"set-part",TPRO:"produced-notice",TPUB:"publisher",TRCK:"track",TRSN:"radio-name",TRSO:"radio-owner",TSOA:"album-sort",TSOP:"performer-sort",TSOT:"title-sort",TSRC:"isrc",TSSE:"encoder-settings",TSST:"set-subtitle",TXXX:"user-defined-text-information",TYER:"year",WCOM:"url-commercial",WCOP:"url-legal",WOAF:"url-file",WOAR:"url-artist",WOAS:"url-source",WORS:"url-radio",WPAY:"url-payment",WPUB:"url-publisher",WAF:"url-file",WAR:"url-artist",WAS:"url-source",WCM:"url-commercial",WCP:"url-copyright",WPB:"url-publisher",COMM:"comments",USLT:"lyrics",APIC:"image",PIC:"image",IPLS:"involved-people-list",OWNE:"ownership"},e.FrameTypeValueMap={TXXX:"array",COMM:"array",USLT:"array"}},796:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=["Blues","Classic Rock","Country","Dance","Disco","Funk","Grunge","Hip-Hop","Jazz","Metal","New Age","Oldies","Other","Pop","R&B","Rap","Reggae","Rock","Techno","Industrial","Alternative","Ska","Death Metal","Pranks","Soundtrack","Euro-Techno","Ambient","Trip-Hop","Vocal","Jazz+Funk","Fusion","Trance","Classical","Instrumental","Acid","House","Game","Sound Clip","Gospel","Noise","AlternRock","Bass","Soul","Punk","Space","Meditative","Instrumental Pop","Instrumental Rock","Ethnic","Gothic","Darkwave","Techno-Industrial","Electronic","Pop-Folk","Eurodance","Dream","Southern Rock","Comedy","Cult","Gangsta Rap","Top 40","Christian Rap","Pop / Funk","Jungle","Native American","Cabaret","New Wave","Psychedelic","Rave","Showtunes","Trailer","Lo-Fi","Tribal","Acid Punk","Acid Jazz","Polka","Retro","Musical","Rock & Roll","Hard Rock","Folk","Folk-Rock","National Folk","Swing","Fast Fusion","Bebob","Latin","Revival","Celtic","Bluegrass","Avantgarde","Gothic Rock","Progressive Rock","Psychedelic Rock","Symphonic Rock","Slow Rock","Big Band","Chorus","Easy Listening","Acoustic","Humour","Speech","Chanson","Opera","Chamber Music","Sonata","Symphony","Booty Bass","Primus","Porn Groove","Satire","Slow Jam","Club","Tango","Samba","Folklore","Ballad","Power Ballad","Rhythmic Soul","Freestyle","Duet","Punk Rock","Drum Solo","A Cappella","Euro-House","Dance Hall","Goa","Drum & Bass","Club-House","Hardcore","Terror","Indie","BritPop","Negerpunk","Polsk Punk","Beat","Christian Gangsta Rap","Heavy Metal","Black Metal","Crossover","Contemporary Christian","Christian Rock","Merengue","Salsa","Thrash Metal","Anime","JPop","Synthpop","Rock/Pop"]},547:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=["other","file-icon","icon","cover-front","cover-back","leaflet","media","artist-lead","artist","conductor","band","composer","lyricist-writer","recording-location","during-recording","during-performance","screen","fish","illustration","logo-band","logo-publisher"]},180:function(t,e,n){var i=this&&this.__assign||Object.assign||function(t){for(var e,n=1,i=arguments.length;n{Object.defineProperty(e,"__esModule",{value:!0});var i=n(796),r=n(790);e.default=function(t){if(!t||t.length<128)return!1;t=t.slice(t.length-128);var e={version:{major:1,minor:0}};if("TAG"!==r.readBytesToUTF8(t,3))return!1;var n=/(^[\s0]+|[\s0]+$)/;return e.title=r.readBytesToUTF8(t.slice(3),30).replace(n,""),e.artist=r.readBytesToUTF8(t.slice(33),30).replace(n,""),e.album=r.readBytesToUTF8(t.slice(63),30).replace(n,""),e.year=r.readBytesToUTF8(t.slice(93),4).replace(n,""),0===t[125]?(e.comments=r.readBytesToUTF8(t.slice(97),28).replace(n,""),e.version.minor=1,e.track=t[126]):e.comments=r.readBytesToUTF8(t.slice(97),30).replace(n,""),e.genre=i.default[t[127]]||"",e}},417:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0});var i=n(575),r=n(796),a=n(547),o=n(790);function s(t){return 2097152*(127&t[0])+16384*(127&t[1])+128*(127&t[2])+(127&t[3])}function l(t){return t.length<4?0:16777216*t[0]+65536*t[1]+256*t[2]+t[3]}function c(t,e,n){var s={id:null,tag:null,value:null},l={id:o.readBytesToUTF8(t,4),type:null,size:n,flags:[t[8],t[9]]};if(l.type=l.id[0],s.id=l.id,0!==l.flags[1])return s;if(!(l.id in i.default))return s;s.tag=i.default[l.id];var c=0,p=0,d=0,u=0;if("T"===l.type){if(c=t[10],"TXXX"===l.id){p=11,d=o.getEndpointOfBytes(t,c,p)-p;var h={description:o.readBytesToString(t.slice(p),c,d),value:""};p+=d+1,p=o.skipPaddingZeros(t,p),h.value=o.readBytesToString(t.slice(p),c),s.value=h}else if(s.value=o.readBytesToString(t.slice(11),c),"TCON"===l.id&&null!==s.value)if("("===s.value[0]){var f=s.value.match(/\(\d+\)/g);f&&(s.value=f.map((function(t){return r.default[+t.slice(1,-1)]})).join(","))}else{var m=parseInt(s.value,10);isNaN(m)||(s.value=r.default[m])}}else if("W"===l.type)"WXXX"===l.id&&0===t[10]?s.value=o.readBytesToISO8859(t.slice(11)):s.value=o.readBytesToISO8859(t.slice(10));else if("COMM"===l.id||"USLT"===l.id){c=t[10],p=14,d=0;var g=o.readBytesToISO8859(t.slice(11),3);d=o.getEndpointOfBytes(t,c,p)-p;var v=o.readBytesToString(t.slice(p),c,d);p=o.skipPaddingZeros(t,p+d+1),s.value={language:g,description:v,value:o.readBytesToString(t.slice(p),c)}}else if("APIC"===l.id){c=t[10];var y={type:null,mime:null,description:null,data:null};for(p=11,d=o.getEndpointOfBytes(t,0,p)-p,y.mime=o.readBytesToString(t.slice(p),0,d),y.type=a.default[t[p+d+1]]||"other",p+=d+2,d=0,u=p;;u++)if(0===t[u]){d=u-p;break}y.description=0===d?null:o.readBytesToString(t.slice(p),c,d),p=o.skipPaddingZeros(t,p+d+1),y.data=t.slice(p),s.value=y}else if("IPLS"===l.id)c=t[10],s.value=o.readBytesToString(t.slice(11),c);else if("OWNE"===l.id){c=t[10],p=11,d=o.getEndpointOfBytes(t,c,p);var b=o.readBytesToISO8859(t.slice(p),d);p+=d+1;var _=o.readBytesToISO8859(t.slice(p),8);p+=8,s.value={pricePayed:b,dateOfPurch:_,seller:o.readBytesToString(t.slice(p),c)}}return s}e.default=function(t){if(!t||t.length<20)return!1;var e=function(t){if(!t||t.length<10)return!1;if("ID3"!==o.readBytesToUTF8(t,3))return!1;var e=t[5];return{version:{major:2,minor:t[3],revision:t[4],flags:{unsync:0!=(128&e),xheader:0!=(64&e),experimental:0!=(32&e)}}}}(t.slice(0,10));if(!e)return!1;var n=e.version.flags;if(n.unsync)throw new Error("no support for unsynchronisation");var r=10;n.xheader&&(r+=s(t.slice(10,14)));var a=s(t.slice(6,10));return function(t,e){for(var n=0,r=e.version;n{Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){"function"!=typeof Uint8Array||Uint8Array.prototype.slice||Object.defineProperty(Uint8Array.prototype,"slice",{value:Array.prototype.slice})}},790:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0});var n=String.fromCharCode;function i(t,e){e=null==e||e<0?t.length:Math.min(e,t.length);var i=0;239===t[0]&&187===t[1]&&191===t[2]&&(i=3);for(var r=[],a=0;i=194&&o<224?(s=t[i++],r[a]=n(((31&o)<<6)+(63&s))):o>=224&&o<240?(s=t[i++],l=t[i++],r[a]=n(((15&o)<<12)+((63&s)<<6)+(63&l))):o>=240&&o<245&&(c=((7&o)<<18)+((63&(s=t[i++]))<<12)+((63&(l=t[i++]))<<6)+(63&t[i++])-65536,r[a]=n(55296+(c>>10),56320+(1023&c)))}return r.join("")}function r(t,e,i){i=null==i||i<0?t.length:Math.min(i,t.length);var r=0,a=1,o=0;254===t[0]&&255===t[1]?(e=!0,r=2):255===t[0]&&254===t[1]&&(e=!1,r=2),e&&(a=0,o=1);for(var s,l,c,p,d=[],u=0;r=224?d[u]=n(c):(p=(t[r+a]<<8)+t[r+o],r+=2,d[u]=n(c,p));return d.join("")}function a(t,e){e=null==e||e<0?t.length:Math.min(e,t.length);for(var i=[],r=0;r{e.read=function(t,e,n,i,r){var a,o,s=8*r-i-1,l=(1<>1,p=-7,d=n?r-1:0,u=n?-1:1,h=t[e+d];for(d+=u,a=h&(1<<-p)-1,h>>=-p,p+=s;p>0;a=256*a+t[e+d],d+=u,p-=8);for(o=a&(1<<-p)-1,a>>=-p,p+=i;p>0;o=256*o+t[e+d],d+=u,p-=8);if(0===a)a=1-c;else{if(a===l)return o?NaN:1/0*(h?-1:1);o+=Math.pow(2,i),a-=c}return(h?-1:1)*o*Math.pow(2,a-i)},e.write=function(t,e,n,i,r,a){var o,s,l,c=8*a-r-1,p=(1<>1,u=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,h=i?0:a-1,f=i?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=p):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+d>=1?u/l:u*Math.pow(2,1-d))*l>=2&&(o++,l/=2),o+d>=p?(s=0,o=p):o+d>=1?(s=(e*l-1)*Math.pow(2,r),o+=d):(s=e*Math.pow(2,d-1)*Math.pow(2,r),o=0));r>=8;t[n+h]=255&s,h+=f,s/=256,r-=8);for(o=o<0;t[n+h]=255&o,h+=f,o/=256,c-=8);t[n+h-f]|=128*m}},733:(t,e,n)=>{var i=n(764).lW;t.exports=function t(e,n,i){function r(o,s){if(!n[o]){if(!e[o]){if(a)return a(o,!0);var l=new Error("Cannot find module '"+o+"'");throw l.code="MODULE_NOT_FOUND",l}var c=n[o]={exports:{}};e[o][0].call(c.exports,(function(t){return r(e[o][1][t]||t)}),c,c.exports,t,e,n,i)}return n[o].exports}for(var a=void 0,o=0;o>2,s=(3&e)<<4|n>>4,l=1>6:64,c=2>4,n=(15&o)<<4|(s=a.indexOf(t.charAt(c++)))>>2,i=(3&s)<<6|(l=a.indexOf(t.charAt(c++))),u[p++]=e,64!==s&&(u[p++]=n),64!==l&&(u[p++]=i);return u}},{"./support":30,"./utils":32}],2:[function(t,e,n){var i=t("./external"),r=t("./stream/DataWorker"),a=t("./stream/Crc32Probe"),o=t("./stream/DataLengthProbe");function s(t,e,n,i,r){this.compressedSize=t,this.uncompressedSize=e,this.crc32=n,this.compression=i,this.compressedContent=r}s.prototype={getContentWorker:function(){var t=new r(i.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new o("data_length")),e=this;return t.on("end",(function(){if(this.streamInfo.data_length!==e.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")})),t},getCompressedWorker:function(){return new r(i.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},s.createWorkerFrom=function(t,e,n){return t.pipe(new a).pipe(new o("uncompressedSize")).pipe(e.compressWorker(n)).pipe(new o("compressedSize")).withStreamInfo("compression",e)},e.exports=s},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(t,e,n){var i=t("./stream/GenericWorker");n.STORE={magic:"\0\0",compressWorker:function(){return new i("STORE compression")},uncompressWorker:function(){return new i("STORE decompression")}},n.DEFLATE=t("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(t,e,n){var i=t("./utils"),r=function(){for(var t,e=[],n=0;n<256;n++){t=n;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[n]=t}return e}();e.exports=function(t,e){return void 0!==t&&t.length?"string"!==i.getTypeOf(t)?function(t,e,n,i){var a=r,o=0+n;t^=-1;for(var s=0;s>>8^a[255&(t^e[s])];return-1^t}(0|e,t,t.length):function(t,e,n,i){var a=r,o=0+n;t^=-1;for(var s=0;s>>8^a[255&(t^e.charCodeAt(s))];return-1^t}(0|e,t,t.length):0}},{"./utils":32}],5:[function(t,e,n){n.base64=!1,n.binary=!1,n.dir=!1,n.createFolders=!0,n.date=null,n.compression=null,n.compressionOptions=null,n.comment=null,n.unixPermissions=null,n.dosPermissions=null},{}],6:[function(t,e,n){var i;i="undefined"!=typeof Promise?Promise:t("lie"),e.exports={Promise:i}},{lie:37}],7:[function(t,e,n){var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,r=t("pako"),a=t("./utils"),o=t("./stream/GenericWorker"),s=i?"uint8array":"array";function l(t,e){o.call(this,"FlateWorker/"+t),this._pako=null,this._pakoAction=t,this._pakoOptions=e,this.meta={}}n.magic="\b\0",a.inherits(l,o),l.prototype.processChunk=function(t){this.meta=t.meta,null===this._pako&&this._createPako(),this._pako.push(a.transformTo(s,t.data),!1)},l.prototype.flush=function(){o.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},l.prototype.cleanUp=function(){o.prototype.cleanUp.call(this),this._pako=null},l.prototype._createPako=function(){this._pako=new r[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},n.compressWorker=function(t){return new l("Deflate",t)},n.uncompressWorker=function(){return new l("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(t,e,n){function i(t,e){var n,i="";for(n=0;n>>=8;return i}function r(t,e,n,r,o,p){var d,u,h=t.file,f=t.compression,m=p!==s.utf8encode,g=a.transformTo("string",p(h.name)),v=a.transformTo("string",s.utf8encode(h.name)),y=h.comment,b=a.transformTo("string",p(y)),_=a.transformTo("string",s.utf8encode(y)),w=v.length!==h.name.length,x=_.length!==y.length,k="",E="",C="",A=h.dir,T=h.date,S={crc32:0,compressedSize:0,uncompressedSize:0};e&&!n||(S.crc32=t.crc32,S.compressedSize=t.compressedSize,S.uncompressedSize=t.uncompressedSize);var I=0;e&&(I|=8),m||!w&&!x||(I|=2048);var R=0,B=0;A&&(R|=16),"UNIX"===o?(B=798,R|=function(t,e){var n=t;return t||(n=e?16893:33204),(65535&n)<<16}(h.unixPermissions,A)):(B=20,R|=function(t){return 63&(t||0)}(h.dosPermissions)),d=T.getUTCHours(),d<<=6,d|=T.getUTCMinutes(),d<<=5,d|=T.getUTCSeconds()/2,u=T.getUTCFullYear()-1980,u<<=4,u|=T.getUTCMonth()+1,u<<=5,u|=T.getUTCDate(),w&&(E=i(1,1)+i(l(g),4)+v,k+="up"+i(E.length,2)+E),x&&(C=i(1,1)+i(l(b),4)+_,k+="uc"+i(C.length,2)+C);var z="";return z+="\n\0",z+=i(I,2),z+=f.magic,z+=i(d,2),z+=i(u,2),z+=i(S.crc32,4),z+=i(S.compressedSize,4),z+=i(S.uncompressedSize,4),z+=i(g.length,2),z+=i(k.length,2),{fileRecord:c.LOCAL_FILE_HEADER+z+g+k,dirRecord:c.CENTRAL_FILE_HEADER+i(B,2)+z+i(b.length,2)+"\0\0\0\0"+i(R,4)+i(r,4)+g+k+b}}var a=t("../utils"),o=t("../stream/GenericWorker"),s=t("../utf8"),l=t("../crc32"),c=t("../signature");function p(t,e,n,i){o.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=e,this.zipPlatform=n,this.encodeFileName=i,this.streamFiles=t,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}a.inherits(p,o),p.prototype.push=function(t){var e=t.meta.percent||0,n=this.entriesCount,i=this._sources.length;this.accumulate?this.contentBuffer.push(t):(this.bytesWritten+=t.data.length,o.prototype.push.call(this,{data:t.data,meta:{currentFile:this.currentFile,percent:n?(e+100*(n-i-1))/n:100}}))},p.prototype.openedSource=function(t){this.currentSourceOffset=this.bytesWritten,this.currentFile=t.file.name;var e=this.streamFiles&&!t.file.dir;if(e){var n=r(t,e,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:n.fileRecord,meta:{percent:0}})}else this.accumulate=!0},p.prototype.closedSource=function(t){this.accumulate=!1;var e=this.streamFiles&&!t.file.dir,n=r(t,e,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(n.dirRecord),e)this.push({data:function(t){return c.DATA_DESCRIPTOR+i(t.crc32,4)+i(t.compressedSize,4)+i(t.uncompressedSize,4)}(t),meta:{percent:100}});else for(this.push({data:n.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},p.prototype.flush=function(){for(var t=this.bytesWritten,e=0;e=this.index;e--)n=(n<<8)+this.byteAt(e);return this.index+=t,n},readString:function(t){return i.transformTo("string",this.readData(t))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var t=this.readInt(4);return new Date(Date.UTC(1980+(t>>25&127),(t>>21&15)-1,t>>16&31,t>>11&31,t>>5&63,(31&t)<<1))}},e.exports=r},{"../utils":32}],19:[function(t,e,n){var i=t("./Uint8ArrayReader");function r(t){i.call(this,t)}t("../utils").inherits(r,i),r.prototype.readData=function(t){this.checkOffset(t);var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=r},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(t,e,n){var i=t("./DataReader");function r(t){i.call(this,t)}t("../utils").inherits(r,i),r.prototype.byteAt=function(t){return this.data.charCodeAt(this.zero+t)},r.prototype.lastIndexOfSignature=function(t){return this.data.lastIndexOf(t)-this.zero},r.prototype.readAndCheckSignature=function(t){return t===this.readData(4)},r.prototype.readData=function(t){this.checkOffset(t);var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=r},{"../utils":32,"./DataReader":18}],21:[function(t,e,n){var i=t("./ArrayReader");function r(t){i.call(this,t)}t("../utils").inherits(r,i),r.prototype.readData=function(t){if(this.checkOffset(t),0===t)return new Uint8Array(0);var e=this.data.subarray(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=r},{"../utils":32,"./ArrayReader":17}],22:[function(t,e,n){var i=t("../utils"),r=t("../support"),a=t("./ArrayReader"),o=t("./StringReader"),s=t("./NodeBufferReader"),l=t("./Uint8ArrayReader");e.exports=function(t){var e=i.getTypeOf(t);return i.checkSupport(e),"string"!==e||r.uint8array?"nodebuffer"===e?new s(t):r.uint8array?new l(i.transformTo("uint8array",t)):new a(i.transformTo("array",t)):new o(t)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(t,e,n){n.LOCAL_FILE_HEADER="PK",n.CENTRAL_FILE_HEADER="PK",n.CENTRAL_DIRECTORY_END="PK",n.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",n.ZIP64_CENTRAL_DIRECTORY_END="PK",n.DATA_DESCRIPTOR="PK\b"},{}],24:[function(t,e,n){var i=t("./GenericWorker"),r=t("../utils");function a(t){i.call(this,"ConvertWorker to "+t),this.destType=t}r.inherits(a,i),a.prototype.processChunk=function(t){this.push({data:r.transformTo(this.destType,t.data),meta:t.meta})},e.exports=a},{"../utils":32,"./GenericWorker":28}],25:[function(t,e,n){var i=t("./GenericWorker"),r=t("../crc32");function a(){i.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}t("../utils").inherits(a,i),a.prototype.processChunk=function(t){this.streamInfo.crc32=r(t.data,this.streamInfo.crc32||0),this.push(t)},e.exports=a},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(t,e,n){var i=t("../utils"),r=t("./GenericWorker");function a(t){r.call(this,"DataLengthProbe for "+t),this.propName=t,this.withStreamInfo(t,0)}i.inherits(a,r),a.prototype.processChunk=function(t){if(t){var e=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=e+t.data.length}r.prototype.processChunk.call(this,t)},e.exports=a},{"../utils":32,"./GenericWorker":28}],27:[function(t,e,n){var i=t("../utils"),r=t("./GenericWorker");function a(t){r.call(this,"DataWorker");var e=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,t.then((function(t){e.dataIsReady=!0,e.data=t,e.max=t&&t.length||0,e.type=i.getTypeOf(t),e.isPaused||e._tickAndRepeat()}),(function(t){e.error(t)}))}i.inherits(a,r),a.prototype.cleanUp=function(){r.prototype.cleanUp.call(this),this.data=null},a.prototype.resume=function(){return!!r.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,i.delay(this._tickAndRepeat,[],this)),!0)},a.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(i.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},a.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var t=null,e=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":t=this.data.substring(this.index,e);break;case"uint8array":t=this.data.subarray(this.index,e);break;case"array":case"nodebuffer":t=this.data.slice(this.index,e)}return this.index=e,this.push({data:t,meta:{percent:this.max?this.index/this.max*100:0}})},e.exports=a},{"../utils":32,"./GenericWorker":28}],28:[function(t,e,n){function i(t){this.name=t||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}i.prototype={push:function(t){this.emit("data",t)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(t){this.emit("error",t)}return!0},error:function(t){return!this.isFinished&&(this.isPaused?this.generatedError=t:(this.isFinished=!0,this.emit("error",t),this.previous&&this.previous.error(t),this.cleanUp()),!0)},on:function(t,e){return this._listeners[t].push(e),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(t,e){if(this._listeners[t])for(var n=0;n "+t:t}},e.exports=i},{}],29:[function(t,e,n){var r=t("../utils"),a=t("./ConvertWorker"),o=t("./GenericWorker"),s=t("../base64"),l=t("../support"),c=t("../external"),p=null;if(l.nodestream)try{p=t("../nodejs/NodejsStreamOutputAdapter")}catch(t){}function d(t,e,n){var i=e;switch(e){case"blob":case"arraybuffer":i="uint8array";break;case"base64":i="string"}try{this._internalType=i,this._outputType=e,this._mimeType=n,r.checkSupport(i),this._worker=t.pipe(new a(i)),t.lock()}catch(t){this._worker=new o("error"),this._worker.error(t)}}d.prototype={accumulate:function(t){return function(t,e){return new c.Promise((function(n,a){var o=[],l=t._internalType,c=t._outputType,p=t._mimeType;t.on("data",(function(t,n){o.push(t),e&&e(n)})).on("error",(function(t){o=[],a(t)})).on("end",(function(){try{var t=function(t,e,n){switch(t){case"blob":return r.newBlob(r.transformTo("arraybuffer",e),n);case"base64":return s.encode(e);default:return r.transformTo(t,e)}}(c,function(t,e){var n,r=0,a=null,o=0;for(n=0;n>>6:(n<65536?e[o++]=224|n>>>12:(e[o++]=240|n>>>18,e[o++]=128|n>>>12&63),e[o++]=128|n>>>6&63),e[o++]=128|63&n);return e}(t)},n.utf8decode=function(t){return r.nodebuffer?i.transformTo("nodebuffer",t).toString("utf-8"):function(t){var e,n,r,a,o=t.length,l=new Array(2*o);for(e=n=0;e>10&1023,l[n++]=56320|1023&r)}return l.length!==n&&(l.subarray?l=l.subarray(0,n):l.length=n),i.applyFromCharCode(l)}(t=i.transformTo(r.uint8array?"uint8array":"array",t))},i.inherits(c,o),c.prototype.processChunk=function(t){var e=i.transformTo(r.uint8array?"uint8array":"array",t.data);if(this.leftOver&&this.leftOver.length){if(r.uint8array){var a=e;(e=new Uint8Array(a.length+this.leftOver.length)).set(this.leftOver,0),e.set(a,this.leftOver.length)}else e=this.leftOver.concat(e);this.leftOver=null}var o=function(t,e){var n;for((e=e||t.length)>t.length&&(e=t.length),n=e-1;0<=n&&128==(192&t[n]);)n--;return n<0||0===n?e:n+s[t[n]]>e?n:e}(e),l=e;o!==e.length&&(r.uint8array?(l=e.subarray(0,o),this.leftOver=e.subarray(o,e.length)):(l=e.slice(0,o),this.leftOver=e.slice(o,e.length))),this.push({data:n.utf8decode(l),meta:t.meta})},c.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:n.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},n.Utf8DecodeWorker=c,i.inherits(p,o),p.prototype.processChunk=function(t){this.push({data:n.utf8encode(t.data),meta:t.meta})},n.Utf8EncodeWorker=p},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(t,e,n){var i=t("./support"),r=t("./base64"),a=t("./nodejsUtils"),o=t("./external");function s(t){return t}function l(t,e){for(var n=0;n>8;this.dir=!!(16&this.externalFileAttributes),0==t&&(this.dosPermissions=63&this.externalFileAttributes),3==t&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var t=i(this.extraFields[1].value);this.uncompressedSize===r.MAX_VALUE_32BITS&&(this.uncompressedSize=t.readInt(8)),this.compressedSize===r.MAX_VALUE_32BITS&&(this.compressedSize=t.readInt(8)),this.localHeaderOffset===r.MAX_VALUE_32BITS&&(this.localHeaderOffset=t.readInt(8)),this.diskNumberStart===r.MAX_VALUE_32BITS&&(this.diskNumberStart=t.readInt(4))}},readExtraFields:function(t){var e,n,i,r=t.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});t.index+4>>6:(n<65536?e[o++]=224|n>>>12:(e[o++]=240|n>>>18,e[o++]=128|n>>>12&63),e[o++]=128|n>>>6&63),e[o++]=128|63&n);return e},n.buf2binstring=function(t){return l(t,t.length)},n.binstring2buf=function(t){for(var e=new i.Buf8(t.length),n=0,r=e.length;n>10&1023,c[i++]=56320|1023&r)}return l(c,i)},n.utf8border=function(t,e){var n;for((e=e||t.length)>t.length&&(e=t.length),n=e-1;0<=n&&128==(192&t[n]);)n--;return n<0||0===n?e:n+o[t[n]]>e?n:e}},{"./common":41}],43:[function(t,e,n){e.exports=function(t,e,n,i){for(var r=65535&t|0,a=t>>>16&65535|0,o=0;0!==n;){for(n-=o=2e3>>1:t>>>1;e[n]=t}return e}();e.exports=function(t,e,n,r){var a=i,o=r+n;t^=-1;for(var s=r;s>>8^a[255&(t^e[s])];return-1^t}},{}],46:[function(t,e,n){var i,r=t("../utils/common"),a=t("./trees"),o=t("./adler32"),s=t("./crc32"),l=t("./messages"),c=-2,p=258,d=262,u=113;function h(t,e){return t.msg=l[e],e}function f(t){return(t<<1)-(4t.avail_out&&(n=t.avail_out),0!==n&&(r.arraySet(t.output,e.pending_buf,e.pending_out,n,t.next_out),t.next_out+=n,e.pending_out+=n,t.total_out+=n,t.avail_out-=n,e.pending-=n,0===e.pending&&(e.pending_out=0))}function v(t,e){a._tr_flush_block(t,0<=t.block_start?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,g(t.strm)}function y(t,e){t.pending_buf[t.pending++]=e}function b(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function _(t,e){var n,i,r=t.max_chain_length,a=t.strstart,o=t.prev_length,s=t.nice_match,l=t.strstart>t.w_size-d?t.strstart-(t.w_size-d):0,c=t.window,u=t.w_mask,h=t.prev,f=t.strstart+p,m=c[a+o-1],g=c[a+o];t.prev_length>=t.good_match&&(r>>=2),s>t.lookahead&&(s=t.lookahead);do{if(c[(n=e)+o]===g&&c[n+o-1]===m&&c[n]===c[a]&&c[++n]===c[a+1]){a+=2,n++;do{}while(c[++a]===c[++n]&&c[++a]===c[++n]&&c[++a]===c[++n]&&c[++a]===c[++n]&&c[++a]===c[++n]&&c[++a]===c[++n]&&c[++a]===c[++n]&&c[++a]===c[++n]&&al&&0!=--r);return o<=t.lookahead?o:t.lookahead}function w(t){var e,n,i,a,l,c,p,u,h,f,m=t.w_size;do{if(a=t.window_size-t.lookahead-t.strstart,t.strstart>=m+(m-d)){for(r.arraySet(t.window,t.window,m,m,0),t.match_start-=m,t.strstart-=m,t.block_start-=m,e=n=t.hash_size;i=t.head[--e],t.head[e]=m<=i?i-m:0,--n;);for(e=n=m;i=t.prev[--e],t.prev[e]=m<=i?i-m:0,--n;);a+=m}if(0===t.strm.avail_in)break;if(c=t.strm,p=t.window,u=t.strstart+t.lookahead,f=void 0,(h=a)<(f=c.avail_in)&&(f=h),n=0===f?0:(c.avail_in-=f,r.arraySet(p,c.input,c.next_in,f,u),1===c.state.wrap?c.adler=o(c.adler,p,f,u):2===c.state.wrap&&(c.adler=s(c.adler,p,f,u)),c.next_in+=f,c.total_in+=f,f),t.lookahead+=n,t.lookahead+t.insert>=3)for(l=t.strstart-t.insert,t.ins_h=t.window[l],t.ins_h=(t.ins_h<=3&&(t.ins_h=(t.ins_h<=3)if(i=a._tr_tally(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){for(t.match_length--;t.strstart++,t.ins_h=(t.ins_h<=3&&(t.ins_h=(t.ins_h<=3&&t.match_length<=t.prev_length){for(r=t.strstart+t.lookahead-3,i=a._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;++t.strstart<=r&&(t.ins_h=(t.ins_h<t.pending_buf_size-5&&(n=t.pending_buf_size-5);;){if(t.lookahead<=1){if(w(t),0===t.lookahead&&0===e)return 1;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var i=t.block_start+n;if((0===t.strstart||t.strstart>=i)&&(t.lookahead=t.strstart-i,t.strstart=i,v(t,!1),0===t.strm.avail_out))return 1;if(t.strstart-t.block_start>=t.w_size-d&&(v(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,4===e?(v(t,!0),0===t.strm.avail_out?3:4):(t.strstart>t.block_start&&(v(t,!1),t.strm.avail_out),1)})),new E(4,4,8,4,x),new E(4,5,16,8,x),new E(4,6,32,32,x),new E(4,4,16,16,k),new E(8,16,32,32,k),new E(8,16,128,128,k),new E(8,32,128,256,k),new E(32,128,258,1024,k),new E(32,258,258,4096,k)],n.deflateInit=function(t,e){return S(t,e,8,15,8,0)},n.deflateInit2=S,n.deflateReset=T,n.deflateResetKeep=A,n.deflateSetHeader=function(t,e){return t&&t.state?2!==t.state.wrap?c:(t.state.gzhead=e,0):c},n.deflate=function(t,e){var n,r,o,l;if(!t||!t.state||5>8&255),y(r,r.gzhead.time>>16&255),y(r,r.gzhead.time>>24&255),y(r,9===r.level?2:2<=r.strategy||r.level<2?4:0),y(r,255&r.gzhead.os),r.gzhead.extra&&r.gzhead.extra.length&&(y(r,255&r.gzhead.extra.length),y(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(t.adler=s(t.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=69):(y(r,0),y(r,0),y(r,0),y(r,0),y(r,0),y(r,9===r.level?2:2<=r.strategy||r.level<2?4:0),y(r,3),r.status=u);else{var d=8+(r.w_bits-8<<4)<<8;d|=(2<=r.strategy||r.level<2?0:r.level<6?1:6===r.level?2:3)<<6,0!==r.strstart&&(d|=32),d+=31-d%31,r.status=u,b(r,d),0!==r.strstart&&(b(r,t.adler>>>16),b(r,65535&t.adler)),t.adler=1}if(69===r.status)if(r.gzhead.extra){for(o=r.pending;r.gzindex<(65535&r.gzhead.extra.length)&&(r.pending!==r.pending_buf_size||(r.gzhead.hcrc&&r.pending>o&&(t.adler=s(t.adler,r.pending_buf,r.pending-o,o)),g(t),o=r.pending,r.pending!==r.pending_buf_size));)y(r,255&r.gzhead.extra[r.gzindex]),r.gzindex++;r.gzhead.hcrc&&r.pending>o&&(t.adler=s(t.adler,r.pending_buf,r.pending-o,o)),r.gzindex===r.gzhead.extra.length&&(r.gzindex=0,r.status=73)}else r.status=73;if(73===r.status)if(r.gzhead.name){o=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>o&&(t.adler=s(t.adler,r.pending_buf,r.pending-o,o)),g(t),o=r.pending,r.pending===r.pending_buf_size)){l=1;break}l=r.gzindexo&&(t.adler=s(t.adler,r.pending_buf,r.pending-o,o)),0===l&&(r.gzindex=0,r.status=91)}else r.status=91;if(91===r.status)if(r.gzhead.comment){o=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>o&&(t.adler=s(t.adler,r.pending_buf,r.pending-o,o)),g(t),o=r.pending,r.pending===r.pending_buf_size)){l=1;break}l=r.gzindexo&&(t.adler=s(t.adler,r.pending_buf,r.pending-o,o)),0===l&&(r.status=103)}else r.status=103;if(103===r.status&&(r.gzhead.hcrc?(r.pending+2>r.pending_buf_size&&g(t),r.pending+2<=r.pending_buf_size&&(y(r,255&t.adler),y(r,t.adler>>8&255),t.adler=0,r.status=u)):r.status=u),0!==r.pending){if(g(t),0===t.avail_out)return r.last_flush=-1,0}else if(0===t.avail_in&&f(e)<=f(n)&&4!==e)return h(t,-5);if(666===r.status&&0!==t.avail_in)return h(t,-5);if(0!==t.avail_in||0!==r.lookahead||0!==e&&666!==r.status){var _=2===r.strategy?function(t,e){for(var n;;){if(0===t.lookahead&&(w(t),0===t.lookahead)){if(0===e)return 1;break}if(t.match_length=0,n=a._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,n&&(v(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,4===e?(v(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(v(t,!1),0===t.strm.avail_out)?1:2}(r,e):3===r.strategy?function(t,e){for(var n,i,r,o,s=t.window;;){if(t.lookahead<=p){if(w(t),t.lookahead<=p&&0===e)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&0t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(n=a._tr_tally(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(n=a._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),n&&(v(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,4===e?(v(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(v(t,!1),0===t.strm.avail_out)?1:2}(r,e):i[r.level].func(r,e);if(3!==_&&4!==_||(r.status=666),1===_||3===_)return 0===t.avail_out&&(r.last_flush=-1),0;if(2===_&&(1===e?a._tr_align(r):5!==e&&(a._tr_stored_block(r,0,0,!1),3===e&&(m(r.head),0===r.lookahead&&(r.strstart=0,r.block_start=0,r.insert=0))),g(t),0===t.avail_out))return r.last_flush=-1,0}return 4!==e?0:r.wrap<=0?1:(2===r.wrap?(y(r,255&t.adler),y(r,t.adler>>8&255),y(r,t.adler>>16&255),y(r,t.adler>>24&255),y(r,255&t.total_in),y(r,t.total_in>>8&255),y(r,t.total_in>>16&255),y(r,t.total_in>>24&255)):(b(r,t.adler>>>16),b(r,65535&t.adler)),g(t),0=n.w_size&&(0===s&&(m(n.head),n.strstart=0,n.block_start=0,n.insert=0),u=new r.Buf8(n.w_size),r.arraySet(u,e,h-n.w_size,n.w_size,0),e=u,h=n.w_size),l=t.avail_in,p=t.next_in,d=t.input,t.avail_in=h,t.next_in=0,t.input=e,w(n);n.lookahead>=3;){for(i=n.strstart,a=n.lookahead-2;n.ins_h=(n.ins_h<>>=_=b>>>24,f-=_,0==(_=b>>>16&255))A[a++]=65535&b;else{if(!(16&_)){if(0==(64&_)){b=m[(65535&b)+(h&(1<<_)-1)];continue e}if(32&_){n.mode=12;break t}t.msg="invalid literal/length code",n.mode=30;break t}w=65535&b,(_&=15)&&(f<_&&(h+=C[i++]<>>=_,f-=_),f<15&&(h+=C[i++]<>>=_=b>>>24,f-=_,!(16&(_=b>>>16&255))){if(0==(64&_)){b=g[(65535&b)+(h&(1<<_)-1)];continue n}t.msg="invalid distance code",n.mode=30;break t}if(x=65535&b,f<(_&=15)&&(h+=C[i++]<>>=_,f-=_,(_=a-o)>3,h&=(1<<(f-=w<<3))-1,t.next_in=i,t.next_out=a,t.avail_in=i>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function p(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new i.Buf16(320),this.work=new i.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function d(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=1,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new i.Buf32(852),e.distcode=e.distdyn=new i.Buf32(592),e.sane=1,e.back=-1,0):l}function u(t){var e;return t&&t.state?((e=t.state).wsize=0,e.whave=0,e.wnext=0,d(t)):l}function h(t,e){var n,i;return t&&t.state?(i=t.state,e<0?(n=0,e=-e):(n=1+(e>>4),e<48&&(e&=15)),e&&(e<8||15=o.wsize?(i.arraySet(o.window,e,n-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):(r<(a=o.wsize-o.wnext)&&(a=r),i.arraySet(o.window,e,n-r,a,o.wnext),(r-=a)?(i.arraySet(o.window,e,n-r,r,0),o.wnext=r,o.whave=o.wsize):(o.wnext+=a,o.wnext===o.wsize&&(o.wnext=0),o.whave>>8&255,n.check=a(n.check,D,2,0),v=g=0,n.mode=2;break}if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&g)<<8)+(g>>8))%31){t.msg="incorrect header check",n.mode=30;break}if(8!=(15&g)){t.msg="unknown compression method",n.mode=30;break}if(v-=4,B=8+(15&(g>>>=4)),0===n.wbits)n.wbits=B;else if(B>n.wbits){t.msg="invalid window size",n.mode=30;break}n.dmax=1<>8&1),512&n.flags&&(D[0]=255&g,D[1]=g>>>8&255,n.check=a(n.check,D,2,0)),v=g=0,n.mode=3;case 3:for(;v<32;){if(0===f)break t;f--,g+=p[u++]<>>8&255,D[2]=g>>>16&255,D[3]=g>>>24&255,n.check=a(n.check,D,4,0)),v=g=0,n.mode=4;case 4:for(;v<16;){if(0===f)break t;f--,g+=p[u++]<>8),512&n.flags&&(D[0]=255&g,D[1]=g>>>8&255,n.check=a(n.check,D,2,0)),v=g=0,n.mode=5;case 5:if(1024&n.flags){for(;v<16;){if(0===f)break t;f--,g+=p[u++]<>>8&255,n.check=a(n.check,D,2,0)),v=g=0}else n.head&&(n.head.extra=null);n.mode=6;case 6:if(1024&n.flags&&(f<(x=n.length)&&(x=f),x&&(n.head&&(B=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Array(n.head.extra_len)),i.arraySet(n.head.extra,p,u,x,B)),512&n.flags&&(n.check=a(n.check,p,x,u)),f-=x,u+=x,n.length-=x),n.length))break t;n.length=0,n.mode=7;case 7:if(2048&n.flags){if(0===f)break t;for(x=0;B=p[u+x++],n.head&&B&&n.length<65536&&(n.head.name+=String.fromCharCode(B)),B&&x>9&1,n.head.done=!0),t.adler=n.check=0,n.mode=12;break;case 10:for(;v<32;){if(0===f)break t;f--,g+=p[u++]<>>=7&v,v-=7&v,n.mode=27;break}for(;v<3;){if(0===f)break t;f--,g+=p[u++]<>>=1)){case 0:n.mode=14;break;case 1:if(y(n),n.mode=20,6!==e)break;g>>>=2,v-=2;break t;case 2:n.mode=17;break;case 3:t.msg="invalid block type",n.mode=30}g>>>=2,v-=2;break;case 14:for(g>>>=7&v,v-=7&v;v<32;){if(0===f)break t;f--,g+=p[u++]<>>16^65535)){t.msg="invalid stored block lengths",n.mode=30;break}if(n.length=65535&g,v=g=0,n.mode=15,6===e)break t;case 15:n.mode=16;case 16:if(x=n.length){if(f>>=5,v-=5,n.ndist=1+(31&g),g>>>=5,v-=5,n.ncode=4+(15&g),g>>>=4,v-=4,286>>=3,v-=3}for(;n.have<19;)n.lens[j[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,O={bits:n.lenbits},z=s(0,n.lens,0,19,n.lencode,0,n.work,O),n.lenbits=O.bits,z){t.msg="invalid code lengths set",n.mode=30;break}n.have=0,n.mode=19;case 19:for(;n.have>>16&255,T=65535&N,!((C=N>>>24)<=v);){if(0===f)break t;f--,g+=p[u++]<>>=C,v-=C,n.lens[n.have++]=T;else{if(16===T){for(P=C+2;v>>=C,v-=C,0===n.have){t.msg="invalid bit length repeat",n.mode=30;break}B=n.lens[n.have-1],x=3+(3&g),g>>>=2,v-=2}else if(17===T){for(P=C+3;v>>=C)),g>>>=3,v-=3}else{for(P=C+7;v>>=C)),g>>>=7,v-=7}if(n.have+x>n.nlen+n.ndist){t.msg="invalid bit length repeat",n.mode=30;break}for(;x--;)n.lens[n.have++]=B}}if(30===n.mode)break;if(0===n.lens[256]){t.msg="invalid code -- missing end-of-block",n.mode=30;break}if(n.lenbits=9,O={bits:n.lenbits},z=s(1,n.lens,0,n.nlen,n.lencode,0,n.work,O),n.lenbits=O.bits,z){t.msg="invalid literal/lengths set",n.mode=30;break}if(n.distbits=6,n.distcode=n.distdyn,O={bits:n.distbits},z=s(2,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,O),n.distbits=O.bits,z){t.msg="invalid distances set",n.mode=30;break}if(n.mode=20,6===e)break t;case 20:n.mode=21;case 21:if(6<=f&&258<=m){t.next_out=h,t.avail_out=m,t.next_in=u,t.avail_in=f,n.hold=g,n.bits=v,o(t,w),h=t.next_out,d=t.output,m=t.avail_out,u=t.next_in,p=t.input,f=t.avail_in,g=n.hold,v=n.bits,12===n.mode&&(n.back=-1);break}for(n.back=0;A=(N=n.lencode[g&(1<>>16&255,T=65535&N,!((C=N>>>24)<=v);){if(0===f)break t;f--,g+=p[u++]<>S)])>>>16&255,T=65535&N,!(S+(C=N>>>24)<=v);){if(0===f)break t;f--,g+=p[u++]<>>=S,v-=S,n.back+=S}if(g>>>=C,v-=C,n.back+=C,n.length=T,0===A){n.mode=26;break}if(32&A){n.back=-1,n.mode=12;break}if(64&A){t.msg="invalid literal/length code",n.mode=30;break}n.extra=15&A,n.mode=22;case 22:if(n.extra){for(P=n.extra;v>>=n.extra,v-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=23;case 23:for(;A=(N=n.distcode[g&(1<>>16&255,T=65535&N,!((C=N>>>24)<=v);){if(0===f)break t;f--,g+=p[u++]<>S)])>>>16&255,T=65535&N,!(S+(C=N>>>24)<=v);){if(0===f)break t;f--,g+=p[u++]<>>=S,v-=S,n.back+=S}if(g>>>=C,v-=C,n.back+=C,64&A){t.msg="invalid distance code",n.mode=30;break}n.offset=T,n.extra=15&A,n.mode=24;case 24:if(n.extra){for(P=n.extra;v>>=n.extra,v-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){t.msg="invalid distance too far back",n.mode=30;break}n.mode=25;case 25:if(0===m)break t;if(x=w-m,n.offset>x){if((x=n.offset-x)>n.whave&&n.sane){t.msg="invalid distance too far back",n.mode=30;break}k=x>n.wnext?(x-=n.wnext,n.wsize-x):n.wnext-x,x>n.length&&(x=n.length),E=n.window}else E=d,k=h-n.offset,x=n.length;for(my?(_=j[U+d[E]],O[P+d[E]]):(_=96,0),h=1<>I)+(f-=h)]=b<<24|_<<16|w|0,0!==f;);for(h=1<>=1;if(0!==h?(z&=h-1,z+=h):z=0,E++,0==--N[k]){if(k===A)break;k=e[n+d[E]]}if(T>>7)]}function C(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function A(t,e,n){t.bi_valid>16-n?(t.bi_buf|=e<>16-t.bi_valid,t.bi_valid+=n-16):(t.bi_buf|=e<>>=1,n<<=1,0<--e;);return n>>>1}function I(t,e,n){var i,r,a=new Array(16),o=0;for(i=1;i<=l;i++)a[i]=o=o+n[i-1]<<1;for(r=0;r<=e;r++){var s=t[2*r+1];0!==s&&(t[2*r]=S(a[s]++,s))}}function R(t){var e;for(e=0;e>1;1<=n;n--)O(t,a,n);for(r=c;n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],O(t,a,1),i=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=i,a[2*r]=a[2*n]+a[2*i],t.depth[r]=(t.depth[n]>=t.depth[i]?t.depth[n]:t.depth[i])+1,a[2*n+1]=a[2*i+1]=r,t.heap[1]=r++,O(t,a,1),2<=t.heap_len;);t.heap[--t.heap_max]=t.heap[1],function(t,e){var n,i,r,a,o,s,c=e.dyn_tree,p=e.max_code,d=e.stat_desc.static_tree,u=e.stat_desc.has_stree,h=e.stat_desc.extra_bits,f=e.stat_desc.extra_base,m=e.stat_desc.max_length,g=0;for(a=0;a<=l;a++)t.bl_count[a]=0;for(c[2*t.heap[t.heap_max]+1]=0,n=t.heap_max+1;n<573;n++)m<(a=c[2*c[2*(i=t.heap[n])+1]+1]+1)&&(a=m,g++),c[2*i+1]=a,p>=7;i>>=1)if(1&n&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e>>3,(o=t.static_len+3+7>>>3)<=r&&(r=o)):r=o=n+5,n+4<=r&&-1!==e?L(t,e,n,i):4===t.strategy||o===r?(A(t,2+(i?1:0),3),P(t,h,f)):(A(t,4+(i?1:0),3),function(t,e,n,i){var r;for(A(t,e-257,5),A(t,n-1,5),A(t,i-4,4),r=0;r>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&n,t.last_lit++,0===e?t.dyn_ltree[2*n]++:(t.matches++,e--,t.dyn_ltree[2*(g[n]+a+1)]++,t.dyn_dtree[2*E(e)]++),t.last_lit===t.lit_bufsize-1},n._tr_align=function(t){A(t,2,3),T(t,256,h),function(t){16===t.bi_valid?(C(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):8<=t.bi_valid&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}(t)}},{"../utils/common":41}],53:[function(t,e,n){e.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(t,e,i){(function(t){!function(t,e){if(!t.setImmediate){var n,i,r,a,o=1,s={},l=!1,c=t.document,p=Object.getPrototypeOf&&Object.getPrototypeOf(t);p=p&&p.setTimeout?p:t,n="[object process]"==={}.toString.call(t.process)?function(t){process.nextTick((function(){u(t)}))}:function(){if(t.postMessage&&!t.importScripts){var e=!0,n=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=n,e}}()?(a="setImmediate$"+Math.random()+"$",t.addEventListener?t.addEventListener("message",h,!1):t.attachEvent("onmessage",h),function(e){t.postMessage(a+e,"*")}):t.MessageChannel?((r=new MessageChannel).port1.onmessage=function(t){u(t.data)},function(t){r.port2.postMessage(t)}):c&&"onreadystatechange"in c.createElement("script")?(i=c.documentElement,function(t){var e=c.createElement("script");e.onreadystatechange=function(){u(t),e.onreadystatechange=null,i.removeChild(e),e=null},i.appendChild(e)}):function(t){setTimeout(u,0,t)},p.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),i=0;i{function e(){this._types=Object.create(null),this._extensions=Object.create(null);for(let t=0;t{let i=n(146);t.exports=new i(n(415),n(14))},14:t=>{t.exports={"application/prs.cww":["cww"],"application/vnd.1000minds.decision-model+xml":["1km"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.keynote":["key"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.numbers":["numbers"],"application/vnd.apple.pages":["pages"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.balsamiq.bmml+xml":["bmml"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.citationstyles.style+xml":["csl"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dbf":["dbf"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mapbox-vector-tile":["mvt"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["*stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.ac+xml":["*ac"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openblox.game+xml":["obgx"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openstreetmap.data+xml":["osm"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.rar":["rar"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.software602.filler.form+xml":["fo"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.syncml.dmddf+xml":["ddf"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["*dmg"],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":["*bdoc"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["*deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["*iso"],"application/x-iwork-keynote-sffkey":["*key"],"application/x-iwork-numbers-sffnumbers":["*numbers"],"application/x-iwork-pages-sffpages":["*pages"],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-keepass2":["kdbx"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":["*exe"],"application/x-msdownload":["*exe","*dll","com","bat","*msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["*wmf","*wmz","*emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":["*prc","*pdb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["*rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["*obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["*xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":["*m4a"],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":["*ra"],"audio/x-wav":["*wav"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"image/prs.btif":["btif"],"image/prs.pti":["pti"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.airzip.accelerator.azv":["azv"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["*sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.microsoft.icon":["ico"],"image/vnd.ms-dds":["dds"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.pco.b16":["b16"],"image/vnd.tencent.tap":["tap"],"image/vnd.valve.source.texture":["vtf"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/vnd.zbrush.pcx":["pcx"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["*ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":["*bmp"],"image/x-pcx":["*pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/vnd.wfa.wsc":["wsc"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.opengex":["ogex"],"model/vnd.parasolid.transmit.binary":["x_b"],"model/vnd.parasolid.transmit.text":["x_t"],"model/vnd.sap.vds":["vds"],"model/vnd.usdz+zip":["usdz"],"model/vnd.valve.source.compiled-map":["bsp"],"model/vnd.vtu":["vtu"],"text/prs.lines.tag":["dsc"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":["*org"],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]}},415:t=>{t.exports={"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomdeleted+xml":["atomdeleted"],"application/atomsvc+xml":["atomsvc"],"application/atsc-dwd+xml":["dwd"],"application/atsc-held+xml":["held"],"application/atsc-rsat+xml":["rsat"],"application/bdoc":["bdoc"],"application/calendar+xml":["xcs"],"application/ccxml+xml":["ccxml"],"application/cdfx+xml":["cdfx"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["es","ecma"],"application/emma+xml":["emma"],"application/emotionml+xml":["emotionml"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/express":["exp"],"application/fdt+xml":["fdt"],"application/font-tdpfr":["pfr"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hjson":["hjson"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/its+xml":["its"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lgr+xml":["lgr"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mmt-aei+xml":["maei"],"application/mmt-usd+xml":["musd"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/n-quads":["nq"],"application/n-triples":["nt"],"application/node":["cjs"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/p2p-overlay+xml":["relo"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/provenance+xml":["provx"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf","owl"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/route-apd+xml":["rapd"],"application/route-s-tsid+xml":["sls"],"application/route-usd+xml":["rusd"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/senml+xml":["senmlx"],"application/sensml+xml":["sensmlx"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/sieve":["siv","sieve"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/swid+xml":["swidtag"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/toml":["toml"],"application/trig":["trig"],"application/ttml+xml":["ttml"],"application/ubjson":["ubj"],"application/urc-ressheet+xml":["rsheet"],"application/urc-targetdesc+xml":["td"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/xaml+xml":["xaml"],"application/xcap-att+xml":["xav"],"application/xcap-caps+xml":["xca"],"application/xcap-diff+xml":["xdf"],"application/xcap-el+xml":["xel"],"application/xcap-ns+xml":["xns"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xliff+xml":["xlf"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["*xsl","xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["*3gpp"],"audio/adpcm":["adp"],"audio/amr":["amr"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mobile-xmf":["mxmf"],"audio/mp3":["*mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx","opus"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/wav":["wav"],"audio/wave":["*wav"],"audio/webm":["weba"],"audio/xm":["xm"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/aces":["exr"],"image/apng":["apng"],"image/avif":["avif"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/dicom-rle":["drle"],"image/emf":["emf"],"image/fits":["fits"],"image/g3fax":["g3"],"image/gif":["gif"],"image/heic":["heic"],"image/heic-sequence":["heics"],"image/heif":["heif"],"image/heif-sequence":["heifs"],"image/hej2k":["hej2"],"image/hsj2":["hsj2"],"image/ief":["ief"],"image/jls":["jls"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jph":["jph"],"image/jphc":["jhc"],"image/jpm":["jpm"],"image/jpx":["jpx","jpf"],"image/jxr":["jxr"],"image/jxra":["jxra"],"image/jxrs":["jxrs"],"image/jxs":["jxs"],"image/jxsc":["jxsc"],"image/jxsi":["jxsi"],"image/jxss":["jxss"],"image/ktx":["ktx"],"image/ktx2":["ktx2"],"image/png":["png"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/t38":["t38"],"image/tiff":["tif","tiff"],"image/tiff-fx":["tfx"],"image/webp":["webp"],"image/wmf":["wmf"],"message/disposition-notification":["disposition-notification"],"message/global":["u8msg"],"message/global-delivery-status":["u8dsn"],"message/global-disposition-notification":["u8mdn"],"message/global-headers":["u8hdr"],"message/rfc822":["eml","mime"],"model/3mf":["3mf"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/mtl":["mtl"],"model/obj":["obj"],"model/step+xml":["stpx"],"model/step+zip":["stpz"],"model/step-xml+zip":["stpxz"],"model/stl":["stl"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["*x3db","x3dbz"],"model/x3d+fastinfoset":["x3db"],"model/x3d+vrml":["*x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"model/x3d-vrml":["x3dv"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/mdx":["mdx"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/richtext":["rtx"],"text/rtf":["*rtf"],"text/sgml":["sgml","sgm"],"text/shex":["shex"],"text/slim":["slim","slm"],"text/spdx":["spdx"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vtt":["vtt"],"text/xml":["*xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/iso.segment":["m4s"],"video/jpeg":["jpgv"],"video/jpm":["*jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/webm":["webm"]}},592:(t,e,n)=>{const i=n(138),r=n(115),a=n(907),o=n(776);function s(t,e,n,a,o){const s=[].slice.call(arguments,1),l=s.length,c="function"==typeof s[l-1];if(!c&&!i())throw new Error("Callback required as last argument");if(!c){if(l<1)throw new Error("Too few arguments provided");return 1===l?(n=e,e=a=void 0):2!==l||e.getContext||(a=n,n=e,e=void 0),new Promise((function(i,o){try{const o=r.create(n,a);i(t(o,e,a))}catch(t){o(t)}}))}if(l<2)throw new Error("Too few arguments provided");2===l?(o=n,n=e,e=a=void 0):3===l&&(e.getContext&&void 0===o?(o=a,a=void 0):(o=a,a=n,n=e,e=void 0));try{const i=r.create(n,a);o(null,t(i,e,a))}catch(t){o(t)}}e.create=r.create,e.toCanvas=s.bind(null,a.render),e.toDataURL=s.bind(null,a.renderToDataURL),e.toString=s.bind(null,(function(t,e,n){return o.render(t,n)}))},138:t=>{t.exports=function(){return"function"==typeof Promise&&Promise.prototype&&Promise.prototype.then}},845:(t,e,n)=>{const i=n(242).getSymbolSize;e.getRowColCoords=function(t){if(1===t)return[];const e=Math.floor(t/7)+2,n=i(t),r=145===n?26:2*Math.ceil((n-13)/(2*e-2)),a=[n-7];for(let t=1;t{const i=n(910),r=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function a(t){this.mode=i.ALPHANUMERIC,this.data=t}a.getBitsLength=function(t){return 11*Math.floor(t/2)+t%2*6},a.prototype.getLength=function(){return this.data.length},a.prototype.getBitsLength=function(){return a.getBitsLength(this.data.length)},a.prototype.write=function(t){let e;for(e=0;e+2<=this.data.length;e+=2){let n=45*r.indexOf(this.data[e]);n+=r.indexOf(this.data[e+1]),t.put(n,11)}this.data.length%2&&t.put(r.indexOf(this.data[e]),6)},t.exports=a},245:t=>{function e(){this.buffer=[],this.length=0}e.prototype={get:function(t){const e=Math.floor(t/8);return 1==(this.buffer[e]>>>7-t%8&1)},put:function(t,e){for(let n=0;n>>e-n-1&1))},getLengthInBits:function(){return this.length},putBit:function(t){const e=Math.floor(this.length/8);this.buffer.length<=e&&this.buffer.push(0),t&&(this.buffer[e]|=128>>>this.length%8),this.length++}},t.exports=e},280:t=>{function e(t){if(!t||t<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=t,this.data=new Uint8Array(t*t),this.reservedBit=new Uint8Array(t*t)}e.prototype.set=function(t,e,n,i){const r=t*this.size+e;this.data[r]=n,i&&(this.reservedBit[r]=!0)},e.prototype.get=function(t,e){return this.data[t*this.size+e]},e.prototype.xor=function(t,e,n){this.data[t*this.size+e]^=n},e.prototype.isReserved=function(t,e){return this.reservedBit[t*this.size+e]},t.exports=e},424:(t,e,n)=>{const i=n(378),r=n(910);function a(t){this.mode=r.BYTE,"string"==typeof t&&(t=i(t)),this.data=new Uint8Array(t)}a.getBitsLength=function(t){return 8*t},a.prototype.getLength=function(){return this.data.length},a.prototype.getBitsLength=function(){return a.getBitsLength(this.data.length)},a.prototype.write=function(t){for(let e=0,n=this.data.length;e{const i=n(908),r=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],a=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];e.getBlocksCount=function(t,e){switch(e){case i.L:return r[4*(t-1)+0];case i.M:return r[4*(t-1)+1];case i.Q:return r[4*(t-1)+2];case i.H:return r[4*(t-1)+3];default:return}},e.getTotalCodewordsCount=function(t,e){switch(e){case i.L:return a[4*(t-1)+0];case i.M:return a[4*(t-1)+1];case i.Q:return a[4*(t-1)+2];case i.H:return a[4*(t-1)+3];default:return}}},908:(t,e)=>{e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2},e.isValid=function(t){return t&&void 0!==t.bit&&t.bit>=0&&t.bit<4},e.from=function(t,n){if(e.isValid(t))return t;try{return function(t){if("string"!=typeof t)throw new Error("Param is not a string");switch(t.toLowerCase()){case"l":case"low":return e.L;case"m":case"medium":return e.M;case"q":case"quartile":return e.Q;case"h":case"high":return e.H;default:throw new Error("Unknown EC Level: "+t)}}(t)}catch(t){return n}}},526:(t,e,n)=>{const i=n(242).getSymbolSize;e.getPositions=function(t){const e=i(t);return[[0,0],[e-7,0],[0,e-7]]}},642:(t,e,n)=>{const i=n(242),r=i.getBCHDigit(1335);e.getEncodedBits=function(t,e){const n=t.bit<<3|e;let a=n<<10;for(;i.getBCHDigit(a)-r>=0;)a^=1335<{const n=new Uint8Array(512),i=new Uint8Array(256);!function(){let t=1;for(let e=0;e<255;e++)n[e]=t,i[t]=e,t<<=1,256&t&&(t^=285);for(let t=255;t<512;t++)n[t]=n[t-255]}(),e.log=function(t){if(t<1)throw new Error("log("+t+")");return i[t]},e.exp=function(t){return n[t]},e.mul=function(t,e){return 0===t||0===e?0:n[i[t]+i[e]]}},442:(t,e,n)=>{const i=n(910),r=n(242);function a(t){this.mode=i.KANJI,this.data=t}a.getBitsLength=function(t){return 13*t},a.prototype.getLength=function(){return this.data.length},a.prototype.getBitsLength=function(){return a.getBitsLength(this.data.length)},a.prototype.write=function(t){let e;for(e=0;e=33088&&n<=40956)n-=33088;else{if(!(n>=57408&&n<=60351))throw new Error("Invalid SJIS character: "+this.data[e]+"\nMake sure your charset is UTF-8");n-=49472}n=192*(n>>>8&255)+(255&n),t.put(n,13)}},t.exports=a},126:(t,e)=>{e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};function n(t,n,i){switch(t){case e.Patterns.PATTERN000:return(n+i)%2==0;case e.Patterns.PATTERN001:return n%2==0;case e.Patterns.PATTERN010:return i%3==0;case e.Patterns.PATTERN011:return(n+i)%3==0;case e.Patterns.PATTERN100:return(Math.floor(n/2)+Math.floor(i/3))%2==0;case e.Patterns.PATTERN101:return n*i%2+n*i%3==0;case e.Patterns.PATTERN110:return(n*i%2+n*i%3)%2==0;case e.Patterns.PATTERN111:return(n*i%3+(n+i)%2)%2==0;default:throw new Error("bad maskPattern:"+t)}}e.isValid=function(t){return null!=t&&""!==t&&!isNaN(t)&&t>=0&&t<=7},e.from=function(t){return e.isValid(t)?parseInt(t,10):void 0},e.getPenaltyN1=function(t){const e=t.size;let n=0,i=0,r=0,a=null,o=null;for(let s=0;s=5&&(n+=i-5+3),a=e,i=1),e=t.get(l,s),e===o?r++:(r>=5&&(n+=r-5+3),o=e,r=1)}i>=5&&(n+=i-5+3),r>=5&&(n+=r-5+3)}return n},e.getPenaltyN2=function(t){const e=t.size;let n=0;for(let i=0;i=10&&(1488===i||93===i)&&n++,r=r<<1&2047|t.get(o,a),o>=10&&(1488===r||93===r)&&n++}return 40*n},e.getPenaltyN4=function(t){let e=0;const n=t.data.length;for(let i=0;i{const i=n(114),r=n(7);e.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},e.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},e.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(t,e){if(!t.ccBits)throw new Error("Invalid mode: "+t);if(!i.isValid(e))throw new Error("Invalid version: "+e);return e>=1&&e<10?t.ccBits[0]:e<27?t.ccBits[1]:t.ccBits[2]},e.getBestModeForData=function(t){return r.testNumeric(t)?e.NUMERIC:r.testAlphanumeric(t)?e.ALPHANUMERIC:r.testKanji(t)?e.KANJI:e.BYTE},e.toString=function(t){if(t&&t.id)return t.id;throw new Error("Invalid mode")},e.isValid=function(t){return t&&t.bit&&t.ccBits},e.from=function(t,n){if(e.isValid(t))return t;try{return function(t){if("string"!=typeof t)throw new Error("Param is not a string");switch(t.toLowerCase()){case"numeric":return e.NUMERIC;case"alphanumeric":return e.ALPHANUMERIC;case"kanji":return e.KANJI;case"byte":return e.BYTE;default:throw new Error("Unknown mode: "+t)}}(t)}catch(t){return n}}},85:(t,e,n)=>{const i=n(910);function r(t){this.mode=i.NUMERIC,this.data=t.toString()}r.getBitsLength=function(t){return 10*Math.floor(t/3)+(t%3?t%3*3+1:0)},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(t){let e,n,i;for(e=0;e+3<=this.data.length;e+=3)n=this.data.substr(e,3),i=parseInt(n,10),t.put(i,10);const r=this.data.length-e;r>0&&(n=this.data.substr(e),i=parseInt(n,10),t.put(i,3*r+1))},t.exports=r},143:(t,e,n)=>{const i=n(729);e.mul=function(t,e){const n=new Uint8Array(t.length+e.length-1);for(let r=0;r=0;){const t=n[0];for(let r=0;r{const i=n(242),r=n(908),a=n(245),o=n(280),s=n(845),l=n(526),c=n(126),p=n(393),d=n(882),u=n(103),h=n(642),f=n(910),m=n(130);function g(t,e,n){const i=t.size,r=h.getEncodedBits(e,n);let a,o;for(a=0;a<15;a++)o=1==(r>>a&1),a<6?t.set(a,8,o,!0):a<8?t.set(a+1,8,o,!0):t.set(i-15+a,8,o,!0),a<8?t.set(8,i-a-1,o,!0):a<9?t.set(8,15-a-1+1,o,!0):t.set(8,15-a-1,o,!0);t.set(i-8,8,1,!0)}function v(t,e,n,r){let h;if(Array.isArray(t))h=m.fromArray(t);else{if("string"!=typeof t)throw new Error("Invalid data");{let i=e;if(!i){const e=m.rawSplit(t);i=u.getBestVersionForData(e,n)}h=m.fromString(t,i||40)}}const v=u.getBestVersionForData(h,n);if(!v)throw new Error("The amount of data is too big to be stored in a QR Code");if(e){if(e=0&&e<=6&&(0===i||6===i)||i>=0&&i<=6&&(0===e||6===e)||e>=2&&e<=4&&i>=2&&i<=4?t.set(r+e,a+i,!0,!0):t.set(r+e,a+i,!1,!0))}}(_,e),function(t){const e=t.size;for(let n=8;n=7&&function(t,e){const n=t.size,i=u.getEncodedBits(e);let r,a,o;for(let e=0;e<18;e++)r=Math.floor(e/3),a=e%3+n-8-3,o=1==(i>>e&1),t.set(r,a,o,!0),t.set(a,r,o,!0)}(_,e),function(t,e){const n=t.size;let i=-1,r=n-1,a=7,o=0;for(let s=n-1;s>0;s-=2)for(6===s&&s--;;){for(let n=0;n<2;n++)if(!t.isReserved(r,s-n)){let i=!1;o>>a&1)),t.set(r,s-n,i),a--,-1===a&&(o++,a=7)}if(r+=i,r<0||n<=r){r-=i,i=-i;break}}}(_,y),isNaN(r)&&(r=c.getBestMask(_,g.bind(null,_,n))),c.applyMask(r,_),g(_,n,r),{modules:_,version:e,errorCorrectionLevel:n,maskPattern:r,segments:h}}e.create=function(t,e){if(void 0===t||""===t)throw new Error("No input text");let n,a,o=r.M;return void 0!==e&&(o=r.from(e.errorCorrectionLevel,r.M),n=u.from(e.version),a=c.from(e.maskPattern),e.toSJISFunc&&i.setToSJISFunction(e.toSJISFunc)),v(t,n,o,a)}},882:(t,e,n)=>{const i=n(143);function r(t){this.genPoly=void 0,this.degree=t,this.degree&&this.initialize(this.degree)}r.prototype.initialize=function(t){this.degree=t,this.genPoly=i.generateECPolynomial(this.degree)},r.prototype.encode=function(t){if(!this.genPoly)throw new Error("Encoder not initialized");const e=new Uint8Array(t.length+this.degree);e.set(t);const n=i.mod(e,this.genPoly),r=this.degree-n.length;if(r>0){const t=new Uint8Array(this.degree);return t.set(n,r),t}return n},t.exports=r},7:(t,e)=>{const n="[0-9]+";let i="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";i=i.replace(/u/g,"\\u");const r="(?:(?![A-Z0-9 $%*+\\-./:]|"+i+")(?:.|[\r\n]))+";e.KANJI=new RegExp(i,"g"),e.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),e.BYTE=new RegExp(r,"g"),e.NUMERIC=new RegExp(n,"g"),e.ALPHANUMERIC=new RegExp("[A-Z $%*+\\-./:]+","g");const a=new RegExp("^"+i+"$"),o=new RegExp("^"+n+"$"),s=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");e.testKanji=function(t){return a.test(t)},e.testNumeric=function(t){return o.test(t)},e.testAlphanumeric=function(t){return s.test(t)}},130:(t,e,n)=>{const i=n(910),r=n(85),a=n(260),o=n(424),s=n(442),l=n(7),c=n(242),p=n(987);function d(t){return unescape(encodeURIComponent(t)).length}function u(t,e,n){const i=[];let r;for(;null!==(r=t.exec(n));)i.push({data:r[0],index:r.index,mode:e,length:r[0].length});return i}function h(t){const e=u(l.NUMERIC,i.NUMERIC,t),n=u(l.ALPHANUMERIC,i.ALPHANUMERIC,t);let r,a;return c.isKanjiModeEnabled()?(r=u(l.BYTE,i.BYTE,t),a=u(l.KANJI,i.KANJI,t)):(r=u(l.BYTE_KANJI,i.BYTE,t),a=[]),e.concat(n,r,a).sort((function(t,e){return t.index-e.index})).map((function(t){return{data:t.data,mode:t.mode,length:t.length}}))}function f(t,e){switch(e){case i.NUMERIC:return r.getBitsLength(t);case i.ALPHANUMERIC:return a.getBitsLength(t);case i.KANJI:return s.getBitsLength(t);case i.BYTE:return o.getBitsLength(t)}}function m(t,e){let n;const l=i.getBestModeForData(t);if(n=i.from(e,l),n!==i.BYTE&&n.bit=0?t[t.length-1]:null;return n&&n.mode===e.mode?(t[t.length-1].data+=e.data,t):(t.push(e),t)}),[]))},e.rawSplit=function(t){return e.fromArray(h(t,c.isKanjiModeEnabled()))}},242:(t,e)=>{let n;const i=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];e.getSymbolSize=function(t){if(!t)throw new Error('"version" cannot be null or undefined');if(t<1||t>40)throw new Error('"version" should be in range from 1 to 40');return 4*t+17},e.getSymbolTotalCodewords=function(t){return i[t]},e.getBCHDigit=function(t){let e=0;for(;0!==t;)e++,t>>>=1;return e},e.setToSJISFunction=function(t){if("function"!=typeof t)throw new Error('"toSJISFunc" is not a valid function.');n=t},e.isKanjiModeEnabled=function(){return void 0!==n},e.toSJIS=function(t){return n(t)}},114:(t,e)=>{e.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}},103:(t,e,n)=>{const i=n(242),r=n(393),a=n(908),o=n(910),s=n(114),l=i.getBCHDigit(7973);function c(t,e){return o.getCharCountIndicator(t,e)+4}function p(t,e){let n=0;return t.forEach((function(t){const i=c(t.mode,e);n+=i+t.getBitsLength()})),n}e.from=function(t,e){return s.isValid(t)?parseInt(t,10):e},e.getCapacity=function(t,e,n){if(!s.isValid(t))throw new Error("Invalid QR Code version");void 0===n&&(n=o.BYTE);const a=8*(i.getSymbolTotalCodewords(t)-r.getTotalCodewordsCount(t,e));if(n===o.MIXED)return a;const l=a-c(n,t);switch(n){case o.NUMERIC:return Math.floor(l/10*3);case o.ALPHANUMERIC:return Math.floor(l/11*2);case o.KANJI:return Math.floor(l/13);case o.BYTE:default:return Math.floor(l/8)}},e.getBestVersionForData=function(t,n){let i;const r=a.from(n,a.M);if(Array.isArray(t)){if(t.length>1)return function(t,n){for(let i=1;i<=40;i++)if(p(t,i)<=e.getCapacity(i,n,o.MIXED))return i}(t,r);if(0===t.length)return 1;i=t[0]}else i=t;return function(t,n,i){for(let r=1;r<=40;r++)if(n<=e.getCapacity(r,i,t))return r}(i.mode,i.getLength(),r)},e.getEncodedBits=function(t){if(!s.isValid(t)||t<7)throw new Error("Invalid QR Code version");let e=t<<12;for(;i.getBCHDigit(e)-l>=0;)e^=7973<{const i=n(653);e.render=function(t,e,n){let r=n,a=e;void 0!==r||e&&e.getContext||(r=e,e=void 0),e||(a=function(){try{return document.createElement("canvas")}catch(t){throw new Error("You need to specify a canvas element")}}()),r=i.getOptions(r);const o=i.getImageWidth(t.modules.size,r),s=a.getContext("2d"),l=s.createImageData(o,o);return i.qrToImageData(l.data,t,r),function(t,e,n){t.clearRect(0,0,e.width,e.height),e.style||(e.style={}),e.height=n,e.width=n,e.style.height=n+"px",e.style.width=n+"px"}(s,a,o),s.putImageData(l,0,0),a},e.renderToDataURL=function(t,n,i){let r=i;void 0!==r||n&&n.getContext||(r=n,n=void 0),r||(r={});const a=e.render(t,n,r),o=r.type||"image/png",s=r.rendererOpts||{};return a.toDataURL(o,s.quality)}},776:(t,e,n)=>{const i=n(653);function r(t,e){const n=t.a/255,i=e+'="'+t.hex+'"';return n<1?i+" "+e+'-opacity="'+n.toFixed(2).slice(1)+'"':i}function a(t,e,n){let i=t+e;return void 0!==n&&(i+=" "+n),i}e.render=function(t,e,n){const o=i.getOptions(e),s=t.modules.size,l=t.modules.data,c=s+2*o.margin,p=o.color.light.a?"':"",d="0&&c>0&&t[l-1]||(i+=o?a("M",c+n,.5+p+n):a("m",r,0),r=0,o=!1),c+1',u='viewBox="0 0 '+c+" "+c+'"',h=''+p+d+"\n";return"function"==typeof n&&n(null,h),h}},653:(t,e)=>{function n(t){if("number"==typeof t&&(t=t.toString()),"string"!=typeof t)throw new Error("Color should be defined as hex string");let e=t.slice().replace("#","").split("");if(e.length<3||5===e.length||e.length>8)throw new Error("Invalid hex color: "+t);3!==e.length&&4!==e.length||(e=Array.prototype.concat.apply([],e.map((function(t){return[t,t]})))),6===e.length&&e.push("F","F");const n=parseInt(e.join(""),16);return{r:n>>24&255,g:n>>16&255,b:n>>8&255,a:255&n,hex:"#"+e.slice(0,6).join("")}}e.getOptions=function(t){t||(t={}),t.color||(t.color={});const e=void 0===t.margin||null===t.margin||t.margin<0?4:t.margin,i=t.width&&t.width>=21?t.width:void 0,r=t.scale||4;return{width:i,scale:i?4:r,margin:e,color:{dark:n(t.color.dark||"#000000ff"),light:n(t.color.light||"#ffffffff")},type:t.type,rendererOpts:t.rendererOpts||{}}},e.getScale=function(t,e){return e.width&&e.width>=t+2*e.margin?e.width/(t+2*e.margin):e.scale},e.getImageWidth=function(t,n){const i=e.getScale(t,n);return Math.floor((t+2*n.margin)*i)},e.qrToImageData=function(t,n,i){const r=n.modules.size,a=n.modules.data,o=e.getScale(r,i),s=Math.floor((r+2*i.margin)*o),l=i.margin*o,c=[i.color.light,i.color.dark];for(let e=0;e=l&&n>=l&&eObject.getPrototypeOf(t):t=>t.__proto__,r.t=function(n,i){if(1&i&&(n=this(n)),8&i)return n;if("object"==typeof n&&n){if(4&i&&n.__esModule)return n;if(16&i&&"function"==typeof n.then)return n}var a=Object.create(null);r.r(a);var o={};t=t||[null,e({}),e([]),e(e)];for(var s=2&i&&n;"object"==typeof s&&!~t.indexOf(s);s=e(s))Object.getOwnPropertyNames(s).forEach((t=>o[t]=()=>n[t]));return o.default=()=>n,r.d(a,o),a},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var a={};(()=>{r.d(a,{w$:()=>xt,s_:()=>_t,tH:()=>At,rD:()=>t,r4:()=>e,Ai:()=>Et,Xw:()=>St,_Z:()=>n});var t={};r.r(t),r.d(t,{deleteDB:()=>v,openDB:()=>g,unwrap:()=>m,wrap:()=>f});var e={};r.r(e),r.d(e,{clear:()=>O,createStore:()=>k,del:()=>B,delMany:()=>z,entries:()=>j,get:()=>A,getMany:()=>I,keys:()=>N,promisifyRequest:()=>x,set:()=>T,setMany:()=>S,update:()=>R,values:()=>D});var n={};let i,o;r.r(n),r.d(n,{joinRoom:()=>yt,selfId:()=>G});const s=new WeakMap,l=new WeakMap,c=new WeakMap,p=new WeakMap,d=new WeakMap;let u={get(t,e,n){if(t instanceof IDBTransaction){if("done"===e)return l.get(t);if("objectStoreNames"===e)return t.objectStoreNames||c.get(t);if("store"===e)return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return f(t[e])},set:(t,e,n)=>(t[e]=n,!0),has:(t,e)=>t instanceof IDBTransaction&&("done"===e||"store"===e)||e in t};function h(t){return"function"==typeof t?(e=t)!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(o||(o=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(e)?function(...t){return e.apply(m(this),t),f(s.get(this))}:function(...t){return f(e.apply(m(this),t))}:function(t,...n){const i=e.call(m(this),t,...n);return c.set(i,t.sort?t.sort():[t]),f(i)}:(t instanceof IDBTransaction&&function(t){if(l.has(t))return;const e=new Promise(((e,n)=>{const i=()=>{t.removeEventListener("complete",r),t.removeEventListener("error",a),t.removeEventListener("abort",a)},r=()=>{e(),i()},a=()=>{n(t.error||new DOMException("AbortError","AbortError")),i()};t.addEventListener("complete",r),t.addEventListener("error",a),t.addEventListener("abort",a)}));l.set(t,e)}(t),n=t,(i||(i=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some((t=>n instanceof t))?new Proxy(t,u):t);var e,n}function f(t){if(t instanceof IDBRequest)return function(t){const e=new Promise(((e,n)=>{const i=()=>{t.removeEventListener("success",r),t.removeEventListener("error",a)},r=()=>{e(f(t.result)),i()},a=()=>{n(t.error),i()};t.addEventListener("success",r),t.addEventListener("error",a)}));return e.then((e=>{e instanceof IDBCursor&&s.set(e,t)})).catch((()=>{})),d.set(e,t),e}(t);if(p.has(t))return p.get(t);const e=h(t);return e!==t&&(p.set(t,e),d.set(e,t)),e}const m=t=>d.get(t);function g(t,e,{blocked:n,upgrade:i,blocking:r,terminated:a}={}){const o=indexedDB.open(t,e),s=f(o);return i&&o.addEventListener("upgradeneeded",(t=>{i(f(o.result),t.oldVersion,t.newVersion,f(o.transaction),t)})),n&&o.addEventListener("blocked",(t=>n(t.oldVersion,t.newVersion,t))),s.then((t=>{a&&t.addEventListener("close",(()=>a())),r&&t.addEventListener("versionchange",(t=>r(t.oldVersion,t.newVersion,t)))})).catch((()=>{})),s}function v(t,{blocked:e}={}){const n=indexedDB.deleteDatabase(t);return e&&n.addEventListener("blocked",(t=>e(t.oldVersion,t))),f(n).then((()=>{}))}const y=["get","getKey","getAll","getAllKeys","count"],b=["put","add","delete","clear"],_=new Map;function w(t,e){if(!(t instanceof IDBDatabase)||e in t||"string"!=typeof e)return;if(_.get(e))return _.get(e);const n=e.replace(/FromIndex$/,""),i=e!==n,r=b.includes(n);if(!(n in(i?IDBIndex:IDBObjectStore).prototype)||!r&&!y.includes(n))return;const a=async function(t,...e){const a=this.transaction(t,r?"readwrite":"readonly");let o=a.store;return i&&(o=o.index(e.shift())),(await Promise.all([o[n](...e),r&&a.done]))[0]};return _.set(e,a),a}function x(t){return new Promise(((e,n)=>{t.oncomplete=t.onsuccess=()=>e(t.result),t.onabort=t.onerror=()=>n(t.error)}))}function k(t,e){const n=indexedDB.open(t);n.onupgradeneeded=()=>n.result.createObjectStore(e);const i=x(n);return(t,n)=>i.then((i=>n(i.transaction(e,t).objectStore(e))))}let E;function C(){return E||(E=k("keyval-store","keyval")),E}function A(t,e=C()){return e("readonly",(e=>x(e.get(t))))}function T(t,e,n=C()){return n("readwrite",(n=>(n.put(e,t),x(n.transaction))))}function S(t,e=C()){return e("readwrite",(e=>(t.forEach((t=>e.put(t[1],t[0]))),x(e.transaction))))}function I(t,e=C()){return e("readonly",(e=>Promise.all(t.map((t=>x(e.get(t)))))))}function R(t,e,n=C()){return n("readwrite",(n=>new Promise(((i,r)=>{n.get(t).onsuccess=function(){try{n.put(e(this.result),t),i(x(n.transaction))}catch(t){r(t)}}}))))}function B(t,e=C()){return e("readwrite",(e=>(e.delete(t),x(e.transaction))))}function z(t,e=C()){return e("readwrite",(e=>(t.forEach((t=>e.delete(t))),x(e.transaction))))}function O(t=C()){return t("readwrite",(t=>(t.clear(),x(t.transaction))))}function P(t,e){return t.openCursor().onsuccess=function(){this.result&&(e(this.result),this.result.continue())},x(t.transaction)}function N(t=C()){return t("readonly",(t=>{if(t.getAllKeys)return x(t.getAllKeys());const e=[];return P(t,(t=>e.push(t.key))).then((()=>e))}))}function D(t=C()){return t("readonly",(t=>{if(t.getAll)return x(t.getAll());const e=[];return P(t,(t=>e.push(t.value))).then((()=>e))}))}function j(t=C()){return t("readonly",(e=>{if(e.getAll&&e.getAllKeys)return Promise.all([x(e.getAllKeys()),x(e.getAll())]).then((([t,e])=>t.map(((t,n)=>[t,e[n]]))));const n=[];return t("readonly",(t=>P(t,(t=>n.push([t.key,t.value]))).then((()=>n))))}))}var U;function L(t){const e=new Uint8Array(t);for(let n=0;nw(t,e)||U.get(t,e,n),has:(t,e)=>!!w(t,e)||U.has(t,e)};class q{constructor(t={}){if(this._map=new Map,this._id=L(4).toString("hex").slice(0,7),this._doDebug=t.debug,this._debug("new peer %o",t),this.channelName=t.initiator?t.channelName||L(20).toString("hex"):null,this.initiator=t.initiator||!1,this.channelConfig=t.channelConfig||q.channelConfig,this.channelNegotiated=this.channelConfig.negotiated,this.config=Object.assign({},q.config,t.config),this.offerOptions=t.offerOptions||{},this.answerOptions=t.answerOptions||{},this.sdpTransform=t.sdpTransform||(t=>t),this.streams=t.streams||(t.stream?[t.stream]:[]),this.trickle=void 0===t.trickle||t.trickle,this.allowHalfTrickle=void 0!==t.allowHalfTrickle&&t.allowHalfTrickle,this.iceCompleteTimeout=t.iceCompleteTimeout||5e3,this.destroyed=!1,this.destroying=!1,this._connected=!1,this.remoteAddress=void 0,this.remoteFamily=void 0,this.remotePort=void 0,this.localAddress=void 0,this.localFamily=void 0,this.localPort=void 0,this._wrtc=t.wrtc&&"object"==typeof t.wrtc?t.wrtc:M(),!this._wrtc)throw"undefined"==typeof window?F(new Error("No WebRTC support: Specify `opts.wrtc` option in this environment"),"ERR_WEBRTC_SUPPORT"):F(new Error("No WebRTC support: Not a supported browser"),"ERR_WEBRTC_SUPPORT");this._pcReady=!1,this._channelReady=!1,this._iceComplete=!1,this._iceCompleteTimer=null,this._channel=null,this._pendingCandidates=[],this._isNegotiating=!1,this._firstNegotiation=!0,this._batchedNegotiation=!1,this._queuedNegotiation=!1,this._sendersAwaitingStable=[],this._senderMap=new Map,this._closingInterval=null,this._remoteTracks=[],this._remoteStreams=[],this._chunk=null,this._cb=null,this._interval=null;try{this._pc=new this._wrtc.RTCPeerConnection(this.config)}catch(t){return void this.destroy(F(t,"ERR_PC_CONSTRUCTOR"))}this._isReactNativeWebrtc="number"==typeof this._pc._peerConnectionId,this._pc.oniceconnectionstatechange=()=>{this._onIceStateChange()},this._pc.onicegatheringstatechange=()=>{this._onIceStateChange()},this._pc.onconnectionstatechange=()=>{this._onConnectionStateChange()},this._pc.onsignalingstatechange=()=>{this._onSignalingStateChange()},this._pc.onicecandidate=t=>{this._onIceCandidate(t)},"object"==typeof this._pc.peerIdentity&&this._pc.peerIdentity.catch((t=>{this.destroy(F(t,"ERR_PC_PEER_IDENTITY"))})),this.initiator||this.channelNegotiated?this._setupData({channel:this._pc.createDataChannel(this.channelName,this.channelConfig)}):this._pc.ondatachannel=t=>{this._setupData(t)},this.streams&&this.streams.forEach((t=>{this.addStream(t)})),this._pc.ontrack=t=>{this._onTrack(t)},this._debug("initial negotiation"),this._needsNegotiation()}get bufferSize(){return this._channel&&this._channel.bufferedAmount||0}get connected(){return this._connected&&"open"===this._channel.readyState}address(){return{port:this.localPort,family:this.localFamily,address:this.localAddress}}signal(t){if(!this.destroying){if(this.destroyed)throw F(new Error("cannot signal after peer is destroyed"),"ERR_DESTROYED");if("string"==typeof t)try{t=JSON.parse(t)}catch(e){t={}}this._debug("signal()"),t.renegotiate&&this.initiator&&(this._debug("got request to renegotiate"),this._needsNegotiation()),t.transceiverRequest&&this.initiator&&(this._debug("got request for transceiver"),this.addTransceiver(t.transceiverRequest.kind,t.transceiverRequest.init)),t.candidate&&(this._pc.remoteDescription&&this._pc.remoteDescription.type?this._addIceCandidate(t.candidate):this._pendingCandidates.push(t.candidate)),t.sdp&&this._pc.setRemoteDescription(new this._wrtc.RTCSessionDescription(t)).then((()=>{this.destroyed||(this._pendingCandidates.forEach((t=>{this._addIceCandidate(t)})),this._pendingCandidates=[],"offer"===this._pc.remoteDescription.type&&this._createAnswer())})).catch((t=>{this.destroy(F(t,"ERR_SET_REMOTE_DESCRIPTION"))})),t.sdp||t.candidate||t.renegotiate||t.transceiverRequest||this.destroy(F(new Error("signal() called with invalid signal data"),"ERR_SIGNALING"))}}_addIceCandidate(t){const e=new this._wrtc.RTCIceCandidate(t);this._pc.addIceCandidate(e).catch((t=>{!e.address||e.address.endsWith(".local")?("Ignoring unsupported ICE candidate.",console.warn("Ignoring unsupported ICE candidate.")):this.destroy(F(t,"ERR_ADD_ICE_CANDIDATE"))}))}send(t){if(!this.destroying){if(this.destroyed)throw F(new Error("cannot send after peer is destroyed"),"ERR_DESTROYED");this._channel.send(t)}}addTransceiver(t,e){if(!this.destroying){if(this.destroyed)throw F(new Error("cannot addTransceiver after peer is destroyed"),"ERR_DESTROYED");if(this._debug("addTransceiver()"),this.initiator)try{this._pc.addTransceiver(t,e),this._needsNegotiation()}catch(t){this.destroy(F(t,"ERR_ADD_TRANSCEIVER"))}else this.emit("signal",{type:"transceiverRequest",transceiverRequest:{kind:t,init:e}})}}addStream(t){if(!this.destroying){if(this.destroyed)throw F(new Error("cannot addStream after peer is destroyed"),"ERR_DESTROYED");this._debug("addStream()"),t.getTracks().forEach((e=>{this.addTrack(e,t)}))}}addTrack(t,e){if(this.destroying)return;if(this.destroyed)throw F(new Error("cannot addTrack after peer is destroyed"),"ERR_DESTROYED");this._debug("addTrack()");const n=this._senderMap.get(t)||new Map;let i=n.get(e);if(i)throw i.removed?F(new Error("Track has been removed. You should enable/disable tracks that you want to re-add."),"ERR_SENDER_REMOVED"):F(new Error("Track has already been added to that stream."),"ERR_SENDER_ALREADY_ADDED");i=this._pc.addTrack(t,e),n.set(e,i),this._senderMap.set(t,n),this._needsNegotiation()}replaceTrack(t,e,n){if(this.destroying)return;if(this.destroyed)throw F(new Error("cannot replaceTrack after peer is destroyed"),"ERR_DESTROYED");this._debug("replaceTrack()");const i=this._senderMap.get(t),r=i?i.get(n):null;if(!r)throw F(new Error("Cannot replace track that was never added."),"ERR_TRACK_NOT_ADDED");e&&this._senderMap.set(e,i),null!=r.replaceTrack?r.replaceTrack(e):this.destroy(F(new Error("replaceTrack is not supported in this browser"),"ERR_UNSUPPORTED_REPLACETRACK"))}removeTrack(t,e){if(this.destroying)return;if(this.destroyed)throw F(new Error("cannot removeTrack after peer is destroyed"),"ERR_DESTROYED");this._debug("removeSender()");const n=this._senderMap.get(t),i=n?n.get(e):null;if(!i)throw F(new Error("Cannot remove track that was never added."),"ERR_TRACK_NOT_ADDED");try{i.removed=!0,this._pc.removeTrack(i)}catch(t){"NS_ERROR_UNEXPECTED"===t.name?this._sendersAwaitingStable.push(i):this.destroy(F(t,"ERR_REMOVE_TRACK"))}this._needsNegotiation()}removeStream(t){if(!this.destroying){if(this.destroyed)throw F(new Error("cannot removeStream after peer is destroyed"),"ERR_DESTROYED");this._debug("removeSenders()"),t.getTracks().forEach((e=>{this.removeTrack(e,t)}))}}_needsNegotiation(){this._debug("_needsNegotiation"),this._batchedNegotiation||(this._batchedNegotiation=!0,queueMicrotask((()=>{this._batchedNegotiation=!1,this.initiator||!this._firstNegotiation?(this._debug("starting batched negotiation"),this.negotiate()):this._debug("non-initiator initial negotiation request discarded"),this._firstNegotiation=!1})))}negotiate(){if(!this.destroying){if(this.destroyed)throw F(new Error("cannot negotiate after peer is destroyed"),"ERR_DESTROYED");this.initiator?this._isNegotiating?(this._queuedNegotiation=!0,this._debug("already negotiating, queueing")):(this._debug("start negotiation"),setTimeout((()=>{this._createOffer()}),0)):this._isNegotiating?(this._queuedNegotiation=!0,this._debug("already negotiating, queueing")):(this._debug("requesting negotiation from initiator"),this.emit("signal",{type:"renegotiate",renegotiate:!0})),this._isNegotiating=!0}}destroy(t){this.destroyed||this.destroying||(this.destroying=!0,this._debug("destroying (error: %s)",t&&(t.message||t)),queueMicrotask((()=>{if(this.destroyed=!0,this.destroying=!1,this._debug("destroy (error: %s)",t&&(t.message||t)),this._connected=!1,this._pcReady=!1,this._channelReady=!1,this._remoteTracks=null,this._remoteStreams=null,this._senderMap=null,clearInterval(this._closingInterval),this._closingInterval=null,clearInterval(this._interval),this._interval=null,this._chunk=null,this._cb=null,this._channel){try{this._channel.close()}catch(t){}this._channel.onmessage=null,this._channel.onopen=null,this._channel.onclose=null,this._channel.onerror=null}if(this._pc){try{this._pc.close()}catch(t){}this._pc.oniceconnectionstatechange=null,this._pc.onicegatheringstatechange=null,this._pc.onsignalingstatechange=null,this._pc.onicecandidate=null,this._pc.ontrack=null,this._pc.ondatachannel=null}this._pc=null,this._channel=null,t&&this.emit("error",t),this.emit("close")})))}_setupData(t){if(!t.channel)return this.destroy(F(new Error("Data channel event is missing `channel` property"),"ERR_DATA_CHANNEL"));this._channel=t.channel,this._channel.binaryType="arraybuffer","number"==typeof this._channel.bufferedAmountLowThreshold&&(this._channel.bufferedAmountLowThreshold=65536),this.channelName=this._channel.label,this._channel.onmessage=t=>{this._onChannelMessage(t)},this._channel.onbufferedamountlow=()=>{this._onChannelBufferedAmountLow()},this._channel.onopen=()=>{this._onChannelOpen()},this._channel.onclose=()=>{this._onChannelClose()},this._channel.onerror=t=>{this.destroy(F(t,"ERR_DATA_CHANNEL"))};let e=!1;this._closingInterval=setInterval((()=>{this._channel&&"closing"===this._channel.readyState?(e&&this._onChannelClose(),e=!0):e=!1}),5e3)}_startIceCompleteTimeout(){this.destroyed||this._iceCompleteTimer||(this._debug("started iceComplete timeout"),this._iceCompleteTimer=setTimeout((()=>{this._iceComplete||(this._iceComplete=!0,this._debug("iceComplete timeout completed"),this.emit("iceTimeout"),this.emit("_iceComplete"))}),this.iceCompleteTimeout))}_createOffer(){this.destroyed||this._pc.createOffer(this.offerOptions).then((t=>{if(this.destroyed)return;this.trickle||this.allowHalfTrickle||(t.sdp=W(t.sdp)),t.sdp=this.sdpTransform(t.sdp);const e=()=>{if(this.destroyed)return;const e=this._pc.localDescription||t;this._debug("signal"),this.emit("signal",{type:e.type,sdp:e.sdp})};this._pc.setLocalDescription(t).then((()=>{this._debug("createOffer success"),this.destroyed||(this.trickle||this._iceComplete?e():this.once("_iceComplete",e))})).catch((t=>{this.destroy(F(t,"ERR_SET_LOCAL_DESCRIPTION"))}))})).catch((t=>{this.destroy(F(t,"ERR_CREATE_OFFER"))}))}_requestMissingTransceivers(){this._pc.getTransceivers&&this._pc.getTransceivers().forEach((t=>{t.mid||!t.sender.track||t.requested||(t.requested=!0,this.addTransceiver(t.sender.track.kind))}))}_createAnswer(){this.destroyed||this._pc.createAnswer(this.answerOptions).then((t=>{if(this.destroyed)return;this.trickle||this.allowHalfTrickle||(t.sdp=W(t.sdp)),t.sdp=this.sdpTransform(t.sdp);const e=()=>{if(this.destroyed)return;const e=this._pc.localDescription||t;this._debug("signal"),this.emit("signal",{type:e.type,sdp:e.sdp}),this.initiator||this._requestMissingTransceivers()};this._pc.setLocalDescription(t).then((()=>{this.destroyed||(this.trickle||this._iceComplete?e():this.once("_iceComplete",e))})).catch((t=>{this.destroy(F(t,"ERR_SET_LOCAL_DESCRIPTION"))}))})).catch((t=>{this.destroy(F(t,"ERR_CREATE_ANSWER"))}))}_onConnectionStateChange(){this.destroyed||"failed"===this._pc.connectionState&&this.destroy(F(new Error("Connection failed."),"ERR_CONNECTION_FAILURE"))}_onIceStateChange(){if(this.destroyed)return;const t=this._pc.iceConnectionState,e=this._pc.iceGatheringState;this._debug("iceStateChange (connection: %s) (gathering: %s)",t,e),this.emit("iceStateChange",t,e),"connected"!==t&&"completed"!==t||(this._pcReady=!0,this._maybeReady()),"failed"===t&&this.destroy(F(new Error("Ice connection failed."),"ERR_ICE_CONNECTION_FAILURE")),"closed"===t&&this.destroy(F(new Error("Ice connection closed."),"ERR_ICE_CONNECTION_CLOSED"))}getStats(t){const e=t=>("[object Array]"===Object.prototype.toString.call(t.values)&&t.values.forEach((e=>{Object.assign(t,e)})),t);0===this._pc.getStats.length||this._isReactNativeWebrtc?this._pc.getStats().then((n=>{const i=[];n.forEach((t=>{i.push(e(t))})),t(null,i)}),(e=>t(e))):this._pc.getStats.length>0?this._pc.getStats((n=>{if(this.destroyed)return;const i=[];n.result().forEach((t=>{const n={};t.names().forEach((e=>{n[e]=t.stat(e)})),n.id=t.id,n.type=t.type,n.timestamp=t.timestamp,i.push(e(n))})),t(null,i)}),(e=>t(e))):t(null,[])}_maybeReady(){if(this._debug("maybeReady pc %s channel %s",this._pcReady,this._channelReady),this._connected||this._connecting||!this._pcReady||!this._channelReady)return;this._connecting=!0;const t=()=>{this.destroyed||this.getStats(((e,n)=>{if(this.destroyed)return;e&&(n=[]);const i={},r={},a={};let o=!1;n.forEach((t=>{"remotecandidate"!==t.type&&"remote-candidate"!==t.type||(i[t.id]=t),"localcandidate"!==t.type&&"local-candidate"!==t.type||(r[t.id]=t),"candidatepair"!==t.type&&"candidate-pair"!==t.type||(a[t.id]=t)}));const s=t=>{o=!0;let e=r[t.localCandidateId];e&&(e.ip||e.address)?(this.localAddress=e.ip||e.address,this.localPort=Number(e.port)):e&&e.ipAddress?(this.localAddress=e.ipAddress,this.localPort=Number(e.portNumber)):"string"==typeof t.googLocalAddress&&(e=t.googLocalAddress.split(":"),this.localAddress=e[0],this.localPort=Number(e[1])),this.localAddress&&(this.localFamily=this.localAddress.includes(":")?"IPv6":"IPv4");let n=i[t.remoteCandidateId];n&&(n.ip||n.address)?(this.remoteAddress=n.ip||n.address,this.remotePort=Number(n.port)):n&&n.ipAddress?(this.remoteAddress=n.ipAddress,this.remotePort=Number(n.portNumber)):"string"==typeof t.googRemoteAddress&&(n=t.googRemoteAddress.split(":"),this.remoteAddress=n[0],this.remotePort=Number(n[1])),this.remoteAddress&&(this.remoteFamily=this.remoteAddress.includes(":")?"IPv6":"IPv4"),this._debug("connect local: %s:%s remote: %s:%s",this.localAddress,this.localPort,this.remoteAddress,this.remotePort)};if(n.forEach((t=>{"transport"===t.type&&t.selectedCandidatePairId&&s(a[t.selectedCandidatePairId]),("googCandidatePair"===t.type&&"true"===t.googActiveConnection||("candidatepair"===t.type||"candidate-pair"===t.type)&&t.selected)&&s(t)})),o||Object.keys(a).length&&!Object.keys(r).length){if(this._connecting=!1,this._connected=!0,this._chunk){try{this.send(this._chunk)}catch(e){return this.destroy(F(e,"ERR_DATA_CHANNEL"))}this._chunk=null,this._debug('sent chunk from "write before connect"');const t=this._cb;this._cb=null,t(null)}"number"!=typeof this._channel.bufferedAmountLowThreshold&&(this._interval=setInterval((()=>this._onInterval()),150),this._interval.unref&&this._interval.unref()),this._debug("connect"),this.emit("connect")}else setTimeout(t,100)}))};t()}_onInterval(){!this._cb||!this._channel||this._channel.bufferedAmount>65536||this._onChannelBufferedAmountLow()}_onSignalingStateChange(){this.destroyed||("stable"===this._pc.signalingState&&(this._isNegotiating=!1,this._debug("flushing sender queue",this._sendersAwaitingStable),this._sendersAwaitingStable.forEach((t=>{this._pc.removeTrack(t),this._queuedNegotiation=!0})),this._sendersAwaitingStable=[],this._queuedNegotiation?(this._debug("flushing negotiation queue"),this._queuedNegotiation=!1,this._needsNegotiation()):(this._debug("negotiated"),this.emit("negotiated"))),this._debug("signalingStateChange %s",this._pc.signalingState),this.emit("signalingStateChange",this._pc.signalingState))}_onIceCandidate(t){this.destroyed||(t.candidate&&this.trickle?this.emit("signal",{type:"candidate",candidate:{candidate:t.candidate.candidate,sdpMLineIndex:t.candidate.sdpMLineIndex,sdpMid:t.candidate.sdpMid}}):t.candidate||this._iceComplete||(this._iceComplete=!0,this.emit("_iceComplete")),t.candidate&&this._startIceCompleteTimeout())}_onChannelMessage(t){if(this.destroyed)return;let e=t.data;e instanceof ArrayBuffer&&(e=new Uint8Array(e)),this.emit("data",e)}_onChannelBufferedAmountLow(){if(this.destroyed||!this._cb)return;this._debug("ending backpressure: bufferedAmount %d",this._channel.bufferedAmount);const t=this._cb;this._cb=null,t(null)}_onChannelOpen(){this._connected||this.destroyed||(this._debug("on channel open"),this._channelReady=!0,this._maybeReady())}_onChannelClose(){this.destroyed||(this._debug("on channel close"),this.destroy())}_onTrack(t){this.destroyed||t.streams.forEach((e=>{this._debug("on track"),this.emit("track",t.track,e),this._remoteTracks.push({track:t.track,stream:e}),this._remoteStreams.some((t=>t.id===e.id))||(this._remoteStreams.push(e),queueMicrotask((()=>{this._debug("on stream"),this.emit("stream",e)})))}))}_debug(...t){this._doDebug&&(t[0]="["+this._id+"] "+t[0],console.log(...t))}on(t,e){const n=this._map;n.has(t)||n.set(t,new Set),n.get(t).add(e)}off(t,e){const n=this._map,i=n.get(t);i&&(i.delete(e),0===i.size&&n.delete(t))}once(t,e){const n=(...i)=>{this.off(t,n),e(...i)};this.on(t,n)}emit(t,...e){const n=this._map;if(n.has(t))for(const i of n.get(t))try{i(...e)}catch(t){console.error(t)}}}q.WEBRTC_SUPPORT=!!M(),q.config={iceServers:[{urls:["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478"]}],sdpSemantics:"unified-plan"},q.channelConfig={};const Z=q,H="0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",Y=(t,e,n)=>{const i=new Z({initiator:t,trickle:e,config:n}),r=t=>i.__earlyDataBuffer.push(t);return i.on(rt.data,r),i.__earlyDataBuffer=[],i.__drainEarlyData=t=>{i.off(rt.data,r),i.__earlyDataBuffer.forEach(t),delete i.__earlyDataBuffer,delete i.__drainEarlyData},i},$=t=>new Array(t).fill().map((()=>H[Math.floor(Math.random()*H.length)])).join(""),K="Trystero",G=$(20),{keys:J,values:V,entries:X,fromEntries:Q}=Object,tt=()=>{},et=t=>new Error(`${K}: ${t}`),nt=t=>(new TextEncoder).encode(t),it=t=>(new TextDecoder).decode(t),rt=Q(["close","connect","data","error","signal","stream","track"].map((t=>[t,t]))),at=Object.getPrototypeOf(Uint8Array),ot=16369,st=255,lt="bufferedamountlow",ct=(t,e)=>{const n={},i={},r={},a={},o={},s={},l=(t,e)=>(t?Array.isArray(t)?t:[t]:J(n)).flatMap((t=>{const i=n[t];return i?e(t,i):(console.warn(`${K}: no peer with id ${t} found`),[])})),c=t=>{if(!t)throw et("action type argument is required");const e=nt(t);if(e.byteLength>12)throw et(`action type string "${t}" (${e.byteLength}b) exceeds byte limit (12). Hint: choose a shorter name.`);const r=new Uint8Array(12);r.set(e);const a=it(r);if(i[a])throw et(`action '${t}' already registered`);let o=0;return i[a]={onComplete:tt,onProgress:tt},[async(t,e,i,a)=>{if(i&&"object"!=typeof i)throw et("action meta argument must be an object");if(void 0===t)throw et("action data cannot be undefined");const s="string"!=typeof t,c=t instanceof Blob,p=c||t instanceof ArrayBuffer||t instanceof at;if(i&&!p)throw et("action meta argument can only be used with binary data");const d=p?new Uint8Array(c?await t.arrayBuffer():t):nt(s?JSON.stringify(t):t),u=i?nt(JSON.stringify(i)):null,h=Math.ceil(d.byteLength/ot)+(i?1:0),f=new Array(h).fill().map(((t,e)=>{const n=e===h-1,a=i&&0===e,l=new Uint8Array(15+(a?u.byteLength:n?d.byteLength-ot*(h-(i?2:1)):ot));return l.set(r),l.set([o],12),l.set([n|a<<1|p<<2|s<<3],13),l.set([Math.round((e+1)/h*st)],14),l.set(i?a?u:d.subarray((e-1)*ot,e*ot):d.subarray(e*ot,(e+1)*ot),15),l}));return o=o+1&st,Promise.all(l(e,(async(t,e)=>{const r=e._channel;let o=0;for(;or.bufferedAmountLowThreshold&&await new Promise((t=>{const e=()=>{r.removeEventListener(lt,e),t()};r.addEventListener(lt,e)})),!n[t])break;e.send(s),o++,a&&a(s[14]/st,t,i)}})))},t=>i[a]={...i[a],onComplete:t},t=>i[a]={...i[a],onProgress:t}]},p=(t,e)=>{const n=new Uint8Array(e),a=it(n.subarray(0,12)),[o]=n.subarray(12,13),[s]=n.subarray(13,14),[l]=n.subarray(14,15),c=n.subarray(15),p=!!(1&s),d=!!(2&s),u=!!(4&s),h=!!(8&s);if(!i[a])throw et(`received message with unregistered type (${a})`);r[t]||(r[t]={}),r[t][a]||(r[t][a]={});let f=r[t][a][o];if(f||(f=r[t][a][o]={chunks:[]}),d?f.meta=JSON.parse(it(c)):f.chunks.push(c),i[a].onProgress(l/st,t,f.meta),!p)return;const m=(t=>{const e=new Uint8Array(t.reduce(((t,e)=>t+e.byteLength),0));return t.reduce(((t,n)=>(e.set(n,t),t+n.byteLength)),0),e})(f.chunks);if(u)i[a].onComplete(m,t,f.meta);else{const e=it(m);i[a].onComplete(h?JSON.parse(e):e,t)}delete r[t][a][o]},[d,u]=c("__91n6__"),[h,f]=c("__90n6__"),[m,g]=c("__516n4L__"),[v,y]=c("__57r34m__"),[b,_]=c("__7r4ck__");let w=tt,x=tt,k=tt,E=tt;return t(((t,e)=>{if(n[e])return;const i=p.bind(null,e);n[e]=t,t.on(rt.signal,(t=>m(t,e))),t.on(rt.close,(()=>(t=>{n[t]&&(delete n[t],delete r[t],delete a[t],x(t))})(e))),t.on(rt.data,i),t.on(rt.stream,(t=>{k(t,e,o[e]),delete o[e]})),t.on(rt.track,((t,n)=>{E(t,n,e,s[e]),delete s[e]})),t.on(rt.error,(t=>{"ERR_DATA_CHANNEL"!==t.code&&console.error(t)})),w(e),t.__drainEarlyData(i)})),u(((t,e)=>h(null,e))),f(((t,e)=>{a[e]&&(a[e](),delete a[e])})),g(((t,e)=>{n[e]&&n[e].signal(t)})),y(((t,e)=>o[e]=t)),_(((t,e)=>s[e]=t)),{makeAction:c,ping:async t=>{if(!t)throw et("ping() must be called with target peer ID");const e=Date.now();return d(null,t),await new Promise((e=>a[t]=e)),Date.now()-e},leave:()=>{X(n).forEach((([t,e])=>{e.destroy(),delete n[t]})),e()},getPeers:()=>J(n),addStream:(t,e,n)=>l(e,(async(e,i)=>{n&&await v(n,e),i.addStream(t)})),removeStream:(t,e)=>l(e,((e,n)=>n.removeStream(t))),addTrack:(t,e,n,i)=>l(n,(async(n,r)=>{i&&await b(i,n),r.addTrack(t,e)})),removeTrack:(t,e,n)=>l(n,((n,i)=>i.removeTrack(t,e))),replaceTrack:(t,e,n,i,r)=>l(i,(async(i,a)=>{r&&await b(r,i),a.replaceTrack(t,e,n)})),onPeerJoin:t=>w=t,onPeerLeave:t=>x=t,onPeerStream:t=>k=t,onPeerTrack:t=>E=t}},pt="AES-CBC",dt=async(t,e)=>{const n=crypto.getRandomValues(new Uint8Array(16));return JSON.stringify({c:(i=await crypto.subtle.encrypt({name:pt,iv:n},await t,nt(e)),window.btoa(String.fromCharCode.apply(null,new Uint8Array(i)))),iv:[...n]});var i},ut=async(t,e)=>{const{c:n,iv:i}=JSON.parse(e);return it(await crypto.subtle.decrypt({name:pt,iv:new Uint8Array(i)},await t,(t=>{const e=window.atob(t);return new Uint8Array(e.length).map(((t,n)=>e.charCodeAt(n))).buffer})(n)))},ht={},ft={},mt={},gt="announce",vt=["wss://tracker.openwebtorrent.com","wss://tracker.btorrent.xyz","wss://tracker.files.fm:7073/announce","wss://qot.abiir.top:443/announce","wss://spacetradersapi-chatbox.herokuapp.com:443/announce"],yt=((t,e)=>(n,i)=>{if(t[i])throw et(`already joined room ${i}`);if(!n)throw et("requires a config map as the first argument");if(!n.appId&&!n.firebaseApp)throw et("config map is missing appId field");if(!i)throw et("namespace argument required");return e(n,i)})(ht,((t,e)=>{const n={},i=t.password&&(async(t,e)=>crypto.subtle.importKey("raw",await crypto.subtle.digest({name:"SHA-256"},nt(`${t}:${e}`)),{name:pt},!1,["encrypt","decrypt"]))(t.password,e),r=(t.trackerUrls||vt).slice(0,t.trackerUrls?t.trackerUrls.length:t.trackerRedundancy||2);if(!r.length)throw et("trackerUrls is empty");const a=crypto.subtle.digest("SHA-1",nt(`${K}:${t.appId}:${e}`)).then((t=>Array.from(new Uint8Array(t)).map((t=>t.toString(36))).join("").slice(0,20))),o=async(e,r)=>{const o=await a;let s;try{s=JSON.parse(r.data)}catch(r){return void console.error(`${K}: received malformed SDP JSON`)}if(s.info_hash!==o||s.peer_id&&s.peer_id===G)return;const l=s["failure reason"];if(l)console.warn(`${K}: torrent tracker failure (${l})`);else{if(s.interval&&s.interval>f&&s.interval<=120&&(clearInterval(m),f=s.interval,m=setInterval(c,1e3*f)),s.offer&&s.offer_id){if(n[s.peer_id]||v[s.offer_id])return;v[s.offer_id]=!0;const r=Y(!1,!1,t.rtcConfig);return r.once(rt.signal,(async t=>e.send(JSON.stringify({answer:i?{...t,sdp:await dt(i,t.sdp)}:t,action:gt,info_hash:o,peer_id:G,to_peer_id:s.peer_id,offer_id:s.offer_id})))),r.on(rt.connect,(()=>d(r,s.peer_id))),r.on(rt.close,(()=>u(s.peer_id))),void r.signal(i?{...s.offer,sdp:await ut(i,s.offer.sdp)}:s.offer)}if(s.answer){if(n[s.peer_id]||v[s.offer_id])return;const t=h[s.offer_id];if(t){const{peer:e}=t;if(e.destroyed)return;v[s.offer_id]=!0,e.on(rt.connect,(()=>d(e,s.peer_id,s.offer_id))),e.on(rt.close,(()=>u(s.peer_id))),e.signal(i?{...s.answer,sdp:await ut(i,s.answer.sdp)}:s.answer)}}}},s=async(t,e)=>t.send(JSON.stringify({action:gt,info_hash:e,numwant:10,peer_id:G,offers:await Promise.all(X(h).map((async([t,{offerP:e}])=>{const n=await e;return{offer_id:t,offer:i?{...n,sdp:await dt(i,n.sdp)}:n}})))})),l=(t,e,n)=>(n||!ft[t]?(mt[t]={...mt[t],[e]:o},ft[t]=new Promise((e=>{const n=new WebSocket(t);n.onopen=e.bind(null,n),n.onmessage=e=>V(mt[t]).forEach((t=>t(n,e)))}))):mt[t][e]=o,ft[t]),c=async()=>{const e=await a;h&&p(),h=Q(new Array(10).fill().map((()=>{const e=Y(!0,!1,t.rtcConfig);return[$(20),{peer:e,offerP:new Promise((t=>e.once(rt.signal,t)))}]}))),r.forEach((async t=>{const n=await l(t,e);n.readyState===WebSocket.OPEN?s(n,e):n.readyState!==WebSocket.CONNECTING&&s(await l(t,e,!0),e)}))},p=()=>{X(h).forEach((([t,{peer:e}])=>{v[t]||n[t]||e.destroy()})),v={}},d=(t,e,i)=>{g(t,e),n[e]=!0,i&&(n[i]=!0)},u=t=>delete n[t];let h,f=33,m=setInterval(c,1e3*f),g=tt,v={};return ht[e]=!0,c(),ct((t=>g=t),(async()=>{const t=await a;r.forEach((e=>delete mt[e][t])),delete ht[e],clearInterval(m),p()}))}));var bt=r(592),_t=r.t(bt,2),wt=r(180),xt=r.t(wt,2),kt=r(733),Et=r.t(kt,2),Ct=r(772),At=r.t(Ct,2),Tt=r(893),St=r.t(Tt,2)})();var o=a.w$,s=a.s_,l=a.tH,c=a.rD,p=a.r4,d=a.Ai,u=a.Xw,h=a._Z;export{o as ID3,s as QRCode,l as base64url,c as idb,p as idbKeyval,d as jszip,u as mime,h as trystero}; \ No newline at end of file diff --git a/www/lib/hash.js b/www/lib/hash.js new file mode 100644 index 0000000..9edf656 --- /dev/null +++ b/www/lib/hash.js @@ -0,0 +1,5 @@ +export default async function hash(n,name){ + n = n || false + name = name || 'SHA-256' + return await window.crypto.subtle.digest({name},n) + } diff --git a/www/lib/hex2bin.js b/www/lib/hex2bin.js new file mode 100644 index 0000000..673ad92 --- /dev/null +++ b/www/lib/hex2bin.js @@ -0,0 +1,53 @@ +// +// 2022.08.09 +// + +// ------------------------------ +export default function bin2hex(n){ + n = n || '' + + // \\ + // ! \\ lossy on bad data + ///// + + const l = n.length + const c = l>>1 + const a = new Uint8Array(c) + for(let i=0;i 0.5) { + _this.noSleepVideo.currentTime = Math.random(); + } + }); + } + }); + } + } + + _createClass(NoSleep, [{ + key: "_addSourceToVideo", + value: function _addSourceToVideo(element, type, dataURI) { + var source = document.createElement("source"); + source.src = dataURI; + source.type = "video/" + type; + element.appendChild(source); + } + }, { + key: "enable", + value: function enable() { + var _this2 = this; + + if (nativeWakeLock()) { + return navigator.wakeLock.request("screen").then(function (wakeLock) { + _this2._wakeLock = wakeLock; + _this2.enabled = true; + console.log("Wake Lock active."); + _this2._wakeLock.addEventListener("release", function () { + // 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) + console.log("Wake Lock released."); + }); + }).catch(function (err) { + _this2.enabled = false; + console.error(err.name + ", " + err.message); + throw err; + }); + } else if (oldIOS()) { + this.disable(); + console.warn("\n NoSleep enabled for older iOS devices. This can interrupt\n active or long-running network requests from completing successfully.\n See https://github.com/richtr/NoSleep.js/issues/15 for more details.\n "); + this.noSleepTimer = window.setInterval(function () { + if (!document.hidden) { + window.location.href = window.location.href.split("#")[0]; + window.setTimeout(window.stop, 0); + } + }, 15000); + this.enabled = true; + return Promise.resolve(); + } else { + var playPromise = this.noSleepVideo.play(); + return playPromise.then(function (res) { + _this2.enabled = true; + return res; + }).catch(function (err) { + _this2.enabled = false; + throw err; + }); + } + } + }, { + key: "disable", + value: function disable() { + if (nativeWakeLock()) { + if (this._wakeLock) { + this._wakeLock.release(); + } + this._wakeLock = null; + } else if (oldIOS()) { + if (this.noSleepTimer) { + console.warn("\n NoSleep now disabled for older iOS devices.\n "); + window.clearInterval(this.noSleepTimer); + this.noSleepTimer = null; + } + } else { + this.noSleepVideo.pause(); + } + this.enabled = false; + } + }, { + key: "isEnabled", + get: function get() { + return this.enabled; + } + }]); + + return NoSleep; +}(); + +module.exports = NoSleep; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = { + webm: "data:video/webm;base64,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", + mp4: "data:video/mp4;base64,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" +}; + +/***/ }) +/******/ ]); +}); \ No newline at end of file diff --git a/www/lib/random-string.js b/www/lib/random-string.js new file mode 100644 index 0000000..e56ece7 --- /dev/null +++ b/www/lib/random-string.js @@ -0,0 +1,38 @@ +function randomString(n,s){ + // + // review.. + try{ + n = n || 16 + let b = new Uint8Array(n+1) // +1 for extra random value for initial start position + crypto.getRandomValues(b) + + s = s || 'ABCDEFGHIJKLMNOPQRSTUWXYZabcdefghijklmnopqrstuvwxyz01234567890' //-_' + + let aa = [] + let ii = 0 + let len = s.length + // note: this might be biased? or might be bad to add seq random numbers? + for(let i = 0;i< b.length;i++){ // first value (index 0) to start in a random location. + let v = b[i] + ii += v + if(i > 0){ + let iii = ii%len + let vv = s[iii] + if(!vv) + conole.log('out of range?',iii) + aa.push(vv) + } + }//for + + let r = aa.join('') + + return r + } + catch(e){ + // + console.log('crypto not supported?') + return Math.random().toString(36).substring(7) // till crypto bug fix? + } + } + +export default randomString diff --git a/www/main.js b/www/main.js new file mode 100644 index 0000000..00eec19 --- /dev/null +++ b/www/main.js @@ -0,0 +1,1341 @@ +// +// 2023.06.18 +// support +// - chrome +// - edge +// - ff +// - safari +// ... +// mobile / pc (linux/iOS/macOS/windows/android) +// ... +// cross device/platform +// +// +// next: +// - db +// - save user name (kv) +// - use username in messaging. +// +// ............................. +// +// +// next: select cam +// 'c' to toggle. upg: ui (in user icon) .. see your stats and pick settings there. +// +// upg: remember specific mute mike setting (even if switch video input.) +// ....... +// +// https://github.com/diafygi/webcrypto-examples/#ecdsa +// +// next: add db, c, input box, etc +// +// upg: better linky type things +// +// next: video display mangagement. choose based on environemnt. (see (with demo) what css can do automatically) +// - goal to keep full bleed. +// +// next: handle switch between audio/video mode. +// - tap video to toggle video off +// +// upg: copy/paste media +// +// +// upg: prn -- better input/output selection (when click user icon) +// +// upg: chat (with hyper and media links) +// +// upg: upload +// - media, video, pics special treated? +// +// upg: display media (screenshare) prn +// +// +// upg: HTMLCanvasElement.captureStream(). +// - make a shared whiteboard thing (allow pple to 'draw' on the whiteboard they see) prn. +// +// next: toggle mute audio +// - spacebar 'm' +// - click mic button +// +// upg: automatically activate mic if allowed (check permissions/try?) or? prn. +// +// upg: support voice call? +// - toggle off video if pic audio? +// - toggle again to switch? or? +// - or put line under mode <-- this. underline mic or cam .. upg sliding animation on toggle. +// +// hide speaker by default once audio works (only have mute page option if user sets that as option in ui) +// +// hack reload the page every 5 seconds if no peers? (and no streams yet) +// > upg: review source to see why this might be. +// +// toggle cam switches off cam. (remove underline) +// +// toggle mic mutes audio out. (video or audio mode) .. have to turn off video mode to swich to audio only mode. +// +// click on cam when on mic mode .. turns off mic and turns on cam +// (upg: can/should we have different tracks, a video track and an audio track, yes that would be eaier/better if in sync?) .. but use the same ui. +// +// upg: tap to toggle peer view. +// - time on call, video or audio on. and/or +// +// upg: opt: integrate with nostr (share addr?) +// > with ai readable text messages? +// +// upg: add version number in uio. +// +// upg: display change on peers. +// +// upg: allow u=bob to suggest a username (but the user has to accept it) + +import randStr from './lib/random-string.js' +//import NoSleep from './lib/nosleep.js' // try inlcuding in main or minifted version? + +import {trystero,idb} from './lib/bundle.js' + +const {openDB} = idb + +const {joinRoom} = trystero + +console.log(openDB) + +let VER = '[5]' +console.log('VERSION 2023.06.20 #1945 '+VER) + +const url = new URL(location.href) +const {searchParams} = url +let searchU = searchParams.get('u') + +document.querySelector('.version').textContent = VER + +let roomTag = location.hash +if(!roomTag){ + roomTag = (await randStr(6)).toLowerCase() + location.hash = roomTag + roomTag = location.hash + } + +console.log('roomTag',{roomTag}) + +// +// upg: api interface. +// +let tableName = n=>n + +const db = await openDB('main',1,{upgrade:(...args)=>{ + const [db,oldVersion,newVersion,transaction,e] = args + console.log('upgrade',{oldVersion,newVersion}) + + let t = tableName + + let s + s = db.createObjectStore(t('kv'),{keyPath:'key',unique:true}) // {key:'bob',value:'12345'} + + // s.createIndex('unitId','unitId') + }}) + +const kv = { + t:tableName, + get : async function(k){ + const {t} = this + const r = await db.get(t('kv'),k) + return r?.value + }, + + set : async function(k,v){ + const {t} = this + let m = {key:k,value:v} + const r = await db.put(t('kv'),m) + return r + } + }//kv + +if(searchU){ + await kv.set('username',searchU) + } +let username = await kv.get('username') + +console.log('username',username) + + +const ce = (...args)=>{ + const [type,value] = args + let d = cc(...args) + if(value) // upg: if str + d.textContent = value + + return d + }//func + +const dB = document.body +let q = n=>dB.querySelector(n) +let cc = n=>document.createElement(n||'div') +let ca = (a,b)=>a.appendChild(b) +const dM = q('main') +const dL = q('.log') +const dD = q('main.display') +const dPc = q('.peer-count') +const dPre = q('.preview') +const dI = q('footer .input input') +const dTl = q('.display .text-log') + +// upg: support #spaces +// +// upg: lib compliler +// +// upg: notificaton option (offline and online) +// +// upg: bring in libraries (for working with data etc.) + +const {subtle} = window.crypto + +const genSignKey = async n=>{ + + let k = await subtle.generateKey({ + name: "ECDSA", + namedCurve: "P-384" + }, + true, //whether the key is extractable (i.e. can be used in exportKey) + ["sign", "verify"] //can be any combination of "sign" and "verify" + ) + + const jPk = await subtle.exportKey('jwk',k.publicKey) + const jSk = await subtle.exportKey('jwk',k.privateKey) + + return {key:k,jPk,jSk} + }// + +let sigKey = await genSignKey() +console.log({sigKey}) + +// ---------------------------------- +onhashchange = (e) => { + const {oldURL,newURL} = e + // upg: join nrew room and update display (and/or?) // nice if keep old room open till all clear sending (using room class abstraction) + setTimeout(n=>location.reload(),150) //upg: ask to reload or? + } + + +const room = joinRoom({appId:'--linky-rendezvous'},'alpha-'+roomTag) + + +// ---------------------- +// +const [send,recv] = room.makeAction('message') + +//upg: use sync ping/query. +recv((d,p)=>{ + console.log('recived data from peer',p,d) + const {kind} = d|| {} + if(kind == 'message'){ + d.from = 'them' + logMessage(d) + } + }) + + +let peers = {} + +room.onPeerJoin(p=>{ + console.log('peer join',p) + // upg: update() // to set has-peer in body (with peer-join) only if 5 seconds peer. + //dB.classList.add('peer-join')// upg: timer to turn off peer join after 5 seconds. + // + // upg: do peer + + // upg: put peer in a wait list if we've not got the stream yet... + if(stream){ + console.log('adding existing stream to for new peer',p) + const {s,m} = stream + room.addStream(s,p,m) + } + + let ping = async n=>{ + let r = await room.ping(p) + console.log('ping update',p,r+'ms') + peers[p]._ping = setTimeout(ping,5000) + } + + + peers[p] = { + pid:p, + udate:Date.now()/1000, + ping + } + + ping() + + //upg: animate peer icon (flash) + update() + }) + +const removeMedia = n=>{ + //upg: stop media first? prn. + dD.removeChild(n) + } + + +room.onPeerLeave(p=>{ + console.log('peer leave',p,peerMedia) + dB.classList.remove('peer-join') //and/or? use has-peers set from update() + + + let l = [] + peerMedia.forEach(v=>{ // or? (use index based lookup?) though there can be multiple. + console.log('review',v) + const {dom,meta,container} = v + if(p == v.p){ + removeMedia(container) + } + else + l.push(v) + }) + + peerMedia = l // restore + + clearTimeout(peers[p]._ping) // NOTE CONNECTED --- upg: call peer.done() + delete peers[p] + + update() + }) + + +//let _toAdd = [] +let peerMedia = [] +room.onPeerStream((s,p,m)=>{ // upg on peer track? + // s = stream + // p = peer + // m = metadata + + // and/or detect media? + // + let {kind} = m||{} + + console.log('peer stream: add stream',{kind},{s,p,m}) + + ;{ + // https://developer.mozilla.org/en-US/docs/Web/API/OfflineAudioContext + // https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Using_Web_Audio_API + // https://web.dev/webaudio-intro/ + // https://developer.mozilla.org/en-US/docs/Web/API/GainNode/GainNode + // https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode/AnalyserNode + // https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/createMediaElementSource + // https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/createMediaStreamSource + // https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode/getFloatTimeDomainData + + + + + // + // upg: send what we're getting back to them? + // upg: process each input stream and display value + // + // > mainly for speaker detection for main view. + // - toggle views? + // - default full edge speaker view video with overlays. + // - second is full edge titled video. + // - and? + // + // (note will rairly be more than 3?) + // + // + // - might have screensharing too (it takes priorty) with pip speaker. + // + // what do we need to see? localy, what helps? prn. + // - just that we've got the stream and/or? + // + // + // >> WE PROB WANT TO DO THIS REMOTE SIDE AND SEND THE RESULT TO PEER + // - this will help early jump speaker selection.' + // + try{ + // also send telmetry from the user (then we'll have details) + // - send on/off events. + // upg: make this a monitoring lib class with events + const ac = new AudioContext() + // const sampleRate = 44100 + //const ac = new OfflineAudioContext(//new AudioContext() // see. + // { + // numberOfChannesl:2, + // length: sampleRate*40, + // sampleRate + // }) + //console.log({ac}) + //const options = { + // mediaStream: s + // } + const source = ac.createMediaStreamSource(s) + //console.log('remote SOURCE',source) + + const gain = new GainNode(ac,{gain:0}) + const meter = new AnalyserNode(ac) //upg: lower grained monitory. + + const data = new Float32Array(meter.frequencyBinCount) + const byteData = new Uint8Array(meter.frequencyBinCount) + + source.connect(meter).connect(gain).connect(ac.destination) + + // https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode/getByteFrequencyData + + // upg: monitor the common (long time) high average for baseline to detect speech. + // - upg: use time domain to detect? + // - upg: libraries to detect speech + // upg: detect actual speech client side (using local detection) .. and send that also data telem to peers. .. eg and/or -- https://github.com/solyarisoftware/webad + setInterval(n=>{ + return + //upg: put in groups and count groups and/or algo or? + meter.getFloatFrequencyData(data) + meter.getByteFrequencyData(byteData) //-0 ~ -165 etc. -0 is loud. -165 is soft. + //console.log(data) + //let x = byteData.join(', ') + //dB.querySelector('.debug').textContent = x + let a = 0 + let {length} = data + let g = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + for(let i=0;i{ + console.log('stream remove track',e) + //upg: smarter + let lt = s.getTracks() + if(lt.length == 0){ + console.log('remove media display',{s,p,m,dc}) + try{ + dD.removeChild(dc) + } + catch(e){ + console.log(e) + } + } + }) + + + s.addEventListener('addtrack',e=>{ + console.log('stream add track',e) + }) + + + //upg: how to detect if video? + // -- upg: ignore if unknown kind + + const d = document.createElement(kind) + d.srcObject = s + d.muted = !interacted // so video can play still. + d.autoplay = true + + + + + const onPlaying = e=>{ + // try to unmute (video can play without audio) + console.log('onplaying peer stream') + d.removeEventListener('playing',onPlaying) + startWakeLock() + + //setTimeout(n=>{ + // console.log('trying umute.') + // d.muted = false //try to unmute .. this might pause things? + // },3500) + }//func + + d.addEventListener('playing',onPlaying) + + + //setTimeout(n=>{ + //try to play: upg: keep trying or? //upg: check global wantsMute if create that. + // if(interacted) // upg: or just try to unmute anyway? .. donno how long need to wait since autoplay + // d.muted = false + // },150) + + + let dc = d + + // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video + // + if(kind == 'video'){ + //d.playsinline = true + d.setAttribute('playsinline','') // or = true ok? + dc = makeVideo(d) + } + + dD.appendChild(dc) + + peerMedia.push({p,dom:d,container:dc,meta:m}) //type:'audio' + //d.play() + + update() + }) + +//const flushInteractions(){} + +// upg: a generic class to do this. +// upg: fix this? +let hasPeersState = { + value: false, + limit:1, + ago:0, + try:function(...args){ + const [v,cb,x] = args + const now = performance.now()/1000 + console.log('this try',v,{x},this) + if(this.value !=v){ + const delta = (now-this.ago) + console.log({delta},this.ago) + if(delta >= this.limit){ // = roughly + console.log('ok to change',this.value) + cb(this.value) + this.ago = now + }//if + else{ + let next = ((this.ago+this.limit)-now)*1000 // +? + console.log(next) + clearTimeout(this._timeout) + this._timeout = setTimeout(n=>this.try(...args,'retry'),next) + } + }//if + }//fn + }//obj + +let _update = 0 +const update = n=>{ + _update++ + + let now = performance.now()/1000 + + const l = room.getPeers() + console.log(l) + dPc.textContent = l.length+1 // +1 to count self. + + let peerCount = l.length + + let audioLive = false + let videoLive = false + + if(stream){ + const {s} = stream + const tl = s.getTracks() + console.log('update',{tl}) + tl.forEach(v=>{ + let {kind,enabled} = v + if(enabled && kind =='audio') + audioLive = true + + if(enabled && kind =='video') + videoLive = true + }) + } + + dB.classList[audioLive?'add':'remove']('audio-is-live') + dB.classList[videoLive?'add':'remove']('video-is-live') + + //upg: time trigger this (so only changes once per second) + let hasPeers = (peerCount>0) + hasPeersState.try(hasPeers,n=>{ + console.log('has peers',n) + dB.classList[hasPeers?'add':'remove']('has-peers') + }) + + + let hasPeerVideo = false // hack; upg: and/or ../ upg where delete peer video? + ;(peerMedia||[]).forEach(v=>{ + const {meta} = v + const {kind} = meta + console.log('checking peer media',v,{meta,kind}) + if(kind == 'video') + hasPeerVideo = true + }) + + + dB.classList[hasPeerVideo?'add':'remove']('has-peer-video') // and/or: + + + // and or this shouldn't be in update or why not here? (so long as don't quick move) + let state = { + audioLive,videoLive,peerCount,interacted,hasPeerVideo + } + //upg: send available media etc? + //upg: toggle button to call about + // + //upg: comfort level based sharing with who etc. + // - close friends share (cached?) about mee. + + send({kind:'update',layer:_update,state}) + } + +//paint = intial create once + +const makeVideo = n=>{ + + const d = document.createElement('div') + d.classList.add('video-wrapper') + d.appendChild(n) + return d + } + + +let stream = false +const addStream = async (s,m)=>{ + // + // add stream to peers (and remember for other peers) + // + console.log('add stream',s) + //upg: switch to video audio if pick that, or seperate streams? + + stream = {s,m}// and/or? + room.addStream(s,null,m) // and/or? + console.log('stream added for peers',s,m) + }//func + +// ----------------------------- +const toggleAudio = n=>{ + if(stream){ + let {s} = stream + console.log('is video, toggle audio') + const tl = s.getAudioTracks() + console.log("audo tracks",tl) + let vl = [] + + tl.forEach(v=>{ + v.enabled = !v.enabled + vl.push(v.enabled) + }) + + console.log('new state',vl) + + update() + }//if + }//func + +let _toggleMic = false +const toggleMic = async n=>{ + if(!_toggleMic){ + console.log('toggle mic') + + if(!stream){ + //upg: switch to video audio if pick that, or seperate streams? + + const {mediaDevices:m} = navigator + + + const l = await m.enumerateDevices() + console.log({l}) + + const s = await m.getUserMedia({video:false,audio:true}) + + addStream(s,{kind:'audio'}) + + dB.classList.add('mic-on') + } + else { + console.log('has stream',stream) + const {s,m} = stream + const {kind} = m + const isVideo = (kind == 'video') + const isAudio = (kind == 'audio') + + if(isAudio){ + console.log('stop audio',s) + + //upg: use the same stream but add/remove tracks? or? + //room.removeStream(s) + const cl = s.getTracks() + console.log({cl}) + cl.forEach(v=>{ + console.log({v}) + room.removeTrack(v,s) + stream.m.kind = 'empty' + }) + + stream = false + } + else { + toggleAudio() + } + }//else + + update() + _toggleMic = false + }//if + }//func + +const switchCam = async n=>{ + + // upg: debounce + // + // upg: review + // + // upg: alpha sort deviceId (or does it always report in the same order every query?) + + if(stream){ + console.log('switchCam') + + const {s} = stream + + const a = await aboutStream(s) + console.log({a}) + + let f = a.find(v=>v.kind=='video') + console.log({f}) + // upg: what if more than one video? does that happen when we're screen sharing? + + if(f){ + const {mediaDevices:m} = navigator + const l = await m.enumerateDevices() + console.log({l}) + + // + // https://developer.mozilla.org/en-US/docs/Web/API/MediaDeviceInfo + + let ff = l.find(v=>v.deviceId == f.deviceId) + console.log({ff}) + + let i = l.indexOf(ff) + console.log({i}) + + let next = false + + l.forEach((v,ii)=>{ + const {deviceId,kind,label,groupId} = v + //groupId = same physical device + //kind = "videoinput", "audioinput" or "audiooutput" + //label = "External USB Webcam c201" + + if(kind == 'videoinput' && ii > i){ + console.log('found!',label,deviceId) + next = {deviceId,device:v} + } + }) + + if(!next){ + const fff = l.find(v=>v.kind=='videoinput') + console.log({fff,f}) + if(fff && fff.deviceId != f.deviceId){ + next = fff + } + }//if + + console.log('switch to',next) + }//if + }//if + else + console.log('no stream',stream) + }//func + + +const aboutStream = s=>{ + + let a = [] + + if(s){ + const {mediaDevices:m} = navigator + + // + // https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack + const tl = s.getTracks() + console.log({tl}) + + // upg: send device code etc to peers? + + // + // https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackSettings + tl.forEach((n,i)=>{ + const {contentHint,kind,label,muted,readyState} = n + const s = n.getSettings() + const c = n.getConstraints() + const { deviceId,groupId, ///all + + //some + aspectRatio, + cursor, + displaySurface, + frameRate, + height, + resizeMode, + width + } = s + console.log({s,c}) + console.log(i+1,{deviceId,kind,label,contentHint}) + + const aa = { + contentHint,kind,label,muted,readyState,deviceId,groupId, + + aspectRatio,cursor,displaySurface,frameRate,height,width,resizeMode, + + track:n + } + + a.push(aa) + }) + }//if + + return a + }//func + +let _toggleCam = false +const toggleCam = async n=>{ + if(!_toggleCam){ + + let dd // display to append + + if(stream){ + console.log('has stream',stream) + const {s,m} = stream + const {kind} = m + const isVideo = (kind == 'video') + const isAudio = (kind == 'audio') + + if(isVideo){ + console.log('stop video',s) + + //upg: use the same stream but add/remove tracks? or? + //room.removeStream(s) + const cl = s.getTracks() + console.log({cl}) + cl.forEach(v=>{ + console.log({v}) + room.removeTrack(v,s) + stream.m.kind = 'empty' + }) + + //// -- remove preview + dPre.innerHTML = '' // or? + + stream = false + } + } + else { + + + //upg: show ui progress (cam might take a bit.) + // - pulse animation while is-enabling-cam. + + _toggleCam = true + console.log('toggle cam') + //upg: switch to video audio if pick that, or seperate streams? + + const {mediaDevices:m} = navigator + + const l = await m.enumerateDevices() + console.log({l}) + //upg : remember + + const audio = true // upg: and/or? + const video = true + const media = {video,audio} + const s = await m.getUserMedia(media) // does it work if we send mic/cam sperately? in sync? + + // + // https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack + const tl = s.getTracks() + console.log({tl}) + + // upg: send device code etc to peers? + + // + // https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackSettings + tl.forEach((n,i)=>{ + const {contentHint,kind,label,muted,readyState} = n + const s = n.getSettings() + const c = n.getConstraints() + const {deviceId,groupId} = s + console.log({s,c}) + console.log(i+1,{deviceId,kind,label,contentHint}) + }) + + // + // https://developer.mozilla.org/en-US/docs/Web/API/MediaStream + console.log('got media device stream',s) + + + + addStream(s,{kind:'video',media}) + + // preview + const d = document.createElement('video') + //d.playsinline = true + d.setAttribute('playsinline','') // or = true ok? + dd = makeVideo(d) + d.muted = true // or? + d.autoplay = true + d.srcObject = s + //d.play() + + dPre.innerHTML = '' + dPre.appendChild(dd) + + dB.classList.add('cam-on') + }//else + + update() + _toggleCam = false + }//if + }//func + +const addDisplay = async n=>{ + console.log('add display') + const {mediaDevices:m} = navigator + + // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia + + const audio = false // upg: and/or? + const video = true + const media = {video,audio} + const s = await m.getDisplayMedia(media) // does it work if we send mic/cam sperately? in sync? + + const a = await aboutStream(s) + console.log('display media',s,{a}) + + addStream(s,{kind:'video',media,displayMedia:true}) //or + + // upg: how to display that you're sharing screen? (tile previews?) + } + + +dB.querySelector('.mic.button').onclick = e=>{ + toggleMic() + } + + +dB.querySelector('.cam.button').onclick = e=>{ + toggleCam() + } + + +dB.querySelector('.peers.button').onclick = e=>{ + //hack + switchCam() + } + + +// +// https://developer.mozilla.org/en-US/docs/Web/API/Screen_Wake_Lock_API +// +// https://github.com/richtr/NoSleep.js +// +// upg: turn wakelock on when there's a stream, (incomming or out going?) at least for outgoing video prn +// +let wakeLock = null +const startWakeLock = async n=>{ + // + // upg + // noSleep = new NoSleep() + // noSleep.enable() // on user interaction (so can play video) + // https://github.com/richtr/NoSleep.js + // + if('wakeLock' in navigator){ + try{ + wakeLock = await navigator.wakeLock.request('screen') + console.log('requested wakelock',wakeLock) + // upg: await awakeLock.release() -- when not sending stream + dB.classList.add('wakelock-active') + } + catch(e){ + console.log(e,e,name,e.message) + } + } + else { + console.log('Wakelock not supported.') + // upg: move this indicator settings section (don't need to know in some envs?) + dB.classList.add('wakelock-not-supported') + } + } + +document.addEventListener('release',e=>{ + console.log('wake lock released') + dB.classList.remove('wakelock-active') + }) + +document.addEventListener('visibilitychange',async e=>{ + const {visibilityState:v} = document // hidden, visible + console.log('new visibility',v,e) + // >> upg: send visibility state (per user's affiliation comfortabliiity) + if(v === 'visible'){ + await startWakeLock() + }//if + }) + +dB.querySelector('.reload-button').addEventListener('click',e=>{ + location.reload() + }) + +let interacted = false +const interactionEvent = e=>{ + if(!interacted){ + interacted = true + console.log('interacted!') + dB.removeEventListener('click',interactionEvent) + dB.classList.add('has-interacted') // upg: more complated than that for intential muting (set a default is_muted = true state. upg: remember it? + + peerMedia.forEach(v=>{ + console.log('need play?',v) + const {p,dom,meta} = v + console.log({p,dom,meta}) + dom.muted = false + dom.play() // and/or? // if audio? + }) + + startWakeLock() + }//if + }//funt + +dB.addEventListener('click',interactionEvent) + +const goAudio = n=>{ + //mute/unmute or start audio stream + if(stream) + toggleAudio() + else + toggleMic() + } + + +// upg: use db and sync method for catchup. + +const logMessage = n=>{ + let {value:v,from,name} = n || {} + + username = username || '' + + console.log('log messge',{n}) + const d = ce() + + const fromMe =(from=='me') + + d.classList.add('item',fromMe?'from-me':'from-them') + + let dA = ce() // upg: ce('text content' or something to appendChild) + dA.textContent = name + dA.classList.add('meta') + d.appendChild(dA) + + //let dB = ce('div',(fromMe?">> ":'')+v) + + let dB = ce('div',v) //{c:'abc'} ?? -c jfiwoefij -ce -fji jf) .. command line style and/or luange style interopated cc() or? + dB.classList = 'content' + ca(d,dB) // append dB to d + + + + dTl.appendChild(d) + + while(dTl.childElementCount > 10) + dTl.removeChild(dTl.firstChild) + + }//func + + +dI.onfocus = e=>{ + console.log('FOCUS!') + } +dI.onblur = e=>{ + console.log('BLUR!') + } +//upg: use a tick and/or watch return from focus and a check focucs function? + +dI.onkeydown = e=>{ + const {key} = e + + if(key == 'Enter'){ + console.log({key}) + const v = (dI.value).trim() + + if(v){ + // 'me' means use peer (peer's assocated cid) + const m = { + kind:'message',from:'me',value:v,name:username + } + + dI.value = '' + + logMessage(m) + send(m) + e.preventDefault() + }//if + } + }//func + +// +// Hey bob, this is my secret message to you. +// +// I'm using your public key nicknamed 'xyz'. +// +// Here's the message, it's in base64url format. +// +// Reply back when you get this, thanks! +// +// +// note: i'm using protocol cirta 2023.06.15. +// +// --------------------------- +// FJIfIOJoifejwoifjieowsdsafijFJEIFjDFSK +// DSFJKEFOIFJOEjfwieoioejwfoiewifoewiofj +// etc... +// +// +// +// +// + + + +const focusInput = n=>{ + dI.focus() + } + +// ------------------ +document.addEventListener('keydown',e=>{ + // only if not focused on typing input. + const {activeElement:aE} = document + + const inputFocus = dI == aE + //console.log({inputFocus}) + + if(inputFocus) return // keys go to input box. + + const {key} = e + if(key == 'c'){ + switchCam() + } + else + if(key == 'd'){ + addDisplay() + } + else + if(key == ' '){ + goAudio() + } + else + if(key == 'Escape'){ + focusInput() + } + else { + // or? + focusInput() + } + //if + + interactionEvent() + })//func + +// next generate ecdh https://github.com/diafygi/webcrypto-examples/#ecdh +// - this one per room? or? + +//ugp: get key if not generated.. make each room have it's own pub sig key? or allow the same id between #rooms? (prn start with shared?) +// +// +// >> [new message] +// > encrypt [generate a new public/disposable key] +// > sign +// > make message to send {M} +// > (add delvery header (mainly the room id)) +// > push to log +// - for later query. +// +// .. remember the rooms +// +// + +// +// uid: x|y is domain. +// + +// +// upg: db setup +// +// > messages { +// id, +// from:uid, +// to:uid, +// room, +// message, +// (message network sent,) +// udate +// } +// :room-id +// :room-udate +// :room-from-udate +// prn +// +// > system-log { +// id, +// from:uid +// to:uid +// udate, +// kind:'key-share', +// value:{} // and or.. make log include everything with search filterws... to start, yes prob that. +// } +// +// > rooms { +// id, +// name, +// (keys), //etc +// udate +// } +// :name +// //list of rooms +// use this and sync manager, to pull new messages (espl if visit room) +// +// +// upg: > search { ((re)buildable) +// word, +// ref:'room-id', +// from, +// to, +// udate +// } +// :word +// :from-word +// :to-word +// etc +// +// > inbox .. so can process even if not done and restart +// > outbox .. +// +// > [use a nostr type req query] +// > make fid = 000000000000000001 < prefix padding so can do.. +// : since :room-000000000000003 +// +// +// +// upg: could lock _message data with hashkey unlock when sign in. [most ppl this is not an issue.. pro mode feature? +// + + + +let _n = 0 + +setInterval(n=>{ + _n++ + + const {scrollHeight,clientHeight,scrollTop} = dM + + let size = (scrollHeight-(clientHeight+scrollTop)) + let isMaxScroll = size < 7 + + let doAutoScroll = isMaxScroll + + const d = document.createElement('div') + d.classList.add('info') + d.textContent = 'uuu' + dL.appendChild(d) + + const dd = document.createElement('div') + dd.classList.add('content') + dd.innerText = 'hello! ('+_n+')' + dL.appendChild(dd) + + document.title = _n + + //upg: wait for content to load if remote loaded content before scroll (need a event queue if then) + + + //upg detect if a snap to focus and jump to scroll positon + if(doAutoScroll){ + dM.scrollTo({top:scrollHeight,left:0,behavior:'instant'}) + } + + },1000) + +/* +let _doPing = false +const doPing = async n=>{ + if(!_doPing){ + _doPing = true + + _sincePing = performance.now()/1000 + + const l = room.getPeers() + console.log('ping',l) + let ll = l.map(async v=>{ + let p = await room.ping(v) + return {peerId:v,ping:p} + } + ) + let lr = await Promise.all(ll) + console.log('ping result',{lr}) // upg: how to use? + _doPing = false + }//if + }//func + */ + +let _sincePeers = 0 // upg: reset this if no peers again. +//let _sincePing = false + + +let _tickCount = 0 +const tick = n=>{ + _tickCount++ + + //console.log('check tick',_tickCount) + const now = performance.now()/1000 + + let pc = room.getPeers() //upg: on peer change run update to set dB.has-peers + let hasPeers = (pc.length > 0) + if(!hasPeers){ + + if(now-_sincePeers > 11){ + dB.classList.add('long-time-no-peers') + //upg: offer link + //location.reload() + } + + }//if + else { + dB.classList.remove('long-time-no-peers') + _sincePeers = performance.now()/1000 + //console.log('done with tick',{hasPeers}) + } + +// if(_sincePing === false || now-_sincePing > 10){ +// console.log('do ping test') +// doPing() +// } + + + setTimeout(tick,500) + }//func + +tick() + +console.log('ready.') + +const me = async n=> { + const f = await fetch('https://mee.pages.dev') + const j = await f.json() + console.log({j}) + } +// upg: optin to provide this (upg: as part of a resource package?) +// https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgent +// https://developer.mozilla.org/en-US/docs/Web/HTTP/Client_hints +// https://developer.mozilla.org/en-US/docs/Web/API/User-Agent_Client_Hints_API +// +// upg: ask user for name / icon. +// +// me() + + diff --git a/www/rendezvous-icon.png b/www/rendezvous-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2fa138a195782be776b471dd6e7a90b32f6dcaf8 GIT binary patch literal 4048 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