-
Notifications
You must be signed in to change notification settings - Fork 31
Expand file tree
/
Copy pathws.js
More file actions
1 lines (1 loc) · 38.7 KB
/
ws.js
File metadata and controls
1 lines (1 loc) · 38.7 KB
1
var require=function(){return function e(t,s,i){function r(o,a){if(!s[o]){if(!t[o]){var c="function"==typeof require&&require;if(!a&&c)return c(o,!0);if(n)return n(o,!0);var h=new Error("Cannot find module '"+o+"'");throw h.code="MODULE_NOT_FOUND",h}var l=s[o]={exports:{}};t[o][0].call(l.exports,function(e){return r(t[o][1][e]||e)},l,l.exports,e,t,s,i)}return s[o].exports}for(var n="function"==typeof require&&require,o=0;o<i.length;o++)r(i[o]);return r}}()({"/index":[function(e,t,s){"use strict";const i=e("./lib/websocket");i.createWebSocketStream=e("./lib/stream"),i.Server=e("./lib/websocket-server"),i.Receiver=e("./lib/receiver"),i.Sender=e("./lib/sender"),t.exports=i},{"./lib/receiver":7,"./lib/sender":8,"./lib/stream":9,"./lib/websocket":12,"./lib/websocket-server":11}],1:[function(e,t,s){"use strict";const{EMPTY_BUFFER:i}=e("./constants");function r(e,t){if(0===e.length)return i;if(1===e.length)return e[0];const s=Buffer.allocUnsafe(t);let r=0;for(let t=0;t<e.length;t++){const i=e[t];s.set(i,r),r+=i.length}return r<t?s.slice(0,r):s}function n(e,t,s,i,r){for(let n=0;n<r;n++)s[i+n]=e[n]^t[3&n]}function o(e,t){const s=e.length;for(let i=0;i<s;i++)e[i]^=t[3&i]}function a(e){return e.byteLength===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function c(e){if(c.readOnly=!0,Buffer.isBuffer(e))return e;let t;return e instanceof ArrayBuffer?t=Buffer.from(e):ArrayBuffer.isView(e)?t=Buffer.from(e.buffer,e.byteOffset,e.byteLength):(t=Buffer.from(e),c.readOnly=!1),t}try{const s=e("bufferutil"),i=s.BufferUtil||s;t.exports={concat:r,mask(e,t,s,r,o){o<48?n(e,t,s,r,o):i.mask(e,t,s,r,o)},toArrayBuffer:a,toBuffer:c,unmask(e,t){e.length<32?o(e,t):i.unmask(e,t)}}}catch(e){t.exports={concat:r,mask:n,toArrayBuffer:a,toBuffer:c,unmask:o}}},{"./constants":2,bufferutil:14}],2:[function(e,t,s){"use strict";t.exports={BINARY_TYPES:["nodebuffer","arraybuffer","fragments"],GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),EMPTY_BUFFER:Buffer.alloc(0),NOOP:()=>{}}},{}],3:[function(e,t,s){"use strict";class i{constructor(e,t){this.target=t,this.type=e}}class r extends i{constructor(e,t){super("message",t),this.data=e}}class n extends i{constructor(e,t,s){super("close",s),this.wasClean=s._closeFrameReceived&&s._closeFrameSent,this.reason=t,this.code=e}}class o extends i{constructor(e){super("open",e)}}class a extends i{constructor(e,t){super("error",t),this.message=e.message,this.error=e}}const c={addEventListener(e,t,s){if("function"!=typeof t)return;function i(e){t.call(this,new r(e,this))}function c(e,s){t.call(this,new n(e,s,this))}function h(e){t.call(this,new a(e,this))}function l(){t.call(this,new o(this))}const d=s&&s.once?"once":"on";"message"===e?(i._listener=t,this[d](e,i)):"close"===e?(c._listener=t,this[d](e,c)):"error"===e?(h._listener=t,this[d](e,h)):"open"===e?(l._listener=t,this[d](e,l)):this[d](e,t)},removeEventListener(e,t){const s=this.listeners(e);for(let i=0;i<s.length;i++)s[i]!==t&&s[i]._listener!==t||this.removeListener(e,s[i])}};t.exports=c},{}],4:[function(e,t,s){"use strict";const i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function r(e,t,s){void 0===e[t]?e[t]=[s]:e[t].push(s)}t.exports={format:function(e){return Object.keys(e).map(t=>{let s=e[t];return Array.isArray(s)||(s=[s]),s.map(e=>[t].concat(Object.keys(e).map(t=>{let s=e[t];return Array.isArray(s)||(s=[s]),s.map(e=>!0===e?t:`${t}=${e}`).join("; ")})).join("; ")).join(", ")}).join(", ")},parse:function(e){const t=Object.create(null);if(void 0===e||""===e)return t;let s,n,o=Object.create(null),a=!1,c=!1,h=!1,l=-1,d=-1,f=0;for(;f<e.length;f++){const u=e.charCodeAt(f);if(void 0===s)if(-1===d&&1===i[u])-1===l&&(l=f);else if(32===u||9===u)-1===d&&-1!==l&&(d=f);else{if(59!==u&&44!==u)throw new SyntaxError(`Unexpected character at index ${f}`);{if(-1===l)throw new SyntaxError(`Unexpected character at index ${f}`);-1===d&&(d=f);const i=e.slice(l,d);44===u?(r(t,i,o),o=Object.create(null)):s=i,l=d=-1}}else if(void 0===n)if(-1===d&&1===i[u])-1===l&&(l=f);else if(32===u||9===u)-1===d&&-1!==l&&(d=f);else if(59===u||44===u){if(-1===l)throw new SyntaxError(`Unexpected character at index ${f}`);-1===d&&(d=f),r(o,e.slice(l,d),!0),44===u&&(r(t,s,o),o=Object.create(null),s=void 0),l=d=-1}else{if(61!==u||-1===l||-1!==d)throw new SyntaxError(`Unexpected character at index ${f}`);n=e.slice(l,f),l=d=-1}else if(c){if(1!==i[u])throw new SyntaxError(`Unexpected character at index ${f}`);-1===l?l=f:a||(a=!0),c=!1}else if(h)if(1===i[u])-1===l&&(l=f);else if(34===u&&-1!==l)h=!1,d=f;else{if(92!==u)throw new SyntaxError(`Unexpected character at index ${f}`);c=!0}else if(34===u&&61===e.charCodeAt(f-1))h=!0;else if(-1===d&&1===i[u])-1===l&&(l=f);else if(-1===l||32!==u&&9!==u){if(59!==u&&44!==u)throw new SyntaxError(`Unexpected character at index ${f}`);{if(-1===l)throw new SyntaxError(`Unexpected character at index ${f}`);-1===d&&(d=f);let i=e.slice(l,d);a&&(i=i.replace(/\\/g,""),a=!1),r(o,n,i),44===u&&(r(t,s,o),o=Object.create(null),s=void 0),n=void 0,l=d=-1}}else-1===d&&(d=f)}if(-1===l||h)throw new SyntaxError("Unexpected end of input");-1===d&&(d=f);const u=e.slice(l,d);return void 0===s?r(t,u,o):(void 0===n?r(o,u,!0):r(o,n,a?u.replace(/\\/g,""):u),r(t,s,o)),t}}},{}],5:[function(e,t,s){"use strict";const i=Symbol("kDone"),r=Symbol("kRun");t.exports=class{constructor(e){this[i]=(()=>{this.pending--,this[r]()}),this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[r]()}[r](){if(this.pending!==this.concurrency&&this.jobs.length){const e=this.jobs.shift();this.pending++,e(this[i])}}}},{}],6:[function(e,t,s){"use strict";const i=e("zlib"),r=e("./buffer-util"),n=e("./limiter"),{kStatusCode:o,NOOP:a}=e("./constants"),c=Buffer.from([0,0,255,255]),h=Symbol("permessage-deflate"),l=Symbol("total-length"),d=Symbol("callback"),f=Symbol("buffers"),u=Symbol("error");let _;function p(e){this[f].push(e),this[l]+=e.length}function m(e){this[l]+=e.length,this[h]._maxPayload<1||this[l]<=this[h]._maxPayload?this[f].push(e):(this[u]=new RangeError("Max payload size exceeded"),this[u][o]=1009,this.removeListener("data",m),this.reset())}function v(e){this[h]._inflate=null,e[o]=1007,this[d](e)}t.exports=class{constructor(e,t,s){if(this._maxPayload=0|s,this._options=e||{},this._threshold=void 0!==this._options.threshold?this._options.threshold:1024,this._isServer=!!t,this._deflate=null,this._inflate=null,this.params=null,!_){const e=void 0!==this._options.concurrencyLimit?this._options.concurrencyLimit:10;_=new n(e)}}static get extensionName(){return"permessage-deflate"}offer(){const e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:null==this._options.clientMaxWindowBits&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){const e=this._deflate[d];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){const t=this._options,s=e.find(e=>!(!1===t.serverNoContextTakeover&&e.server_no_context_takeover||e.server_max_window_bits&&(!1===t.serverMaxWindowBits||"number"==typeof t.serverMaxWindowBits&&t.serverMaxWindowBits>e.server_max_window_bits)||"number"==typeof t.clientMaxWindowBits&&!e.client_max_window_bits));if(!s)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(s.server_no_context_takeover=!0),t.clientNoContextTakeover&&(s.client_no_context_takeover=!0),"number"==typeof t.serverMaxWindowBits&&(s.server_max_window_bits=t.serverMaxWindowBits),"number"==typeof t.clientMaxWindowBits?s.client_max_window_bits=t.clientMaxWindowBits:!0!==s.client_max_window_bits&&!1!==t.clientMaxWindowBits||delete s.client_max_window_bits,s}acceptAsClient(e){const t=e[0];if(!1===this._options.clientNoContextTakeover&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(t.client_max_window_bits){if(!1===this._options.clientMaxWindowBits||"number"==typeof this._options.clientMaxWindowBits&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"')}else"number"==typeof this._options.clientMaxWindowBits&&(t.client_max_window_bits=this._options.clientMaxWindowBits);return t}normalizeParams(e){return e.forEach(e=>{Object.keys(e).forEach(t=>{let s=e[t];if(s.length>1)throw new Error(`Parameter "${t}" must have only a single value`);if(s=s[0],"client_max_window_bits"===t){if(!0!==s){const e=+s;if(!Number.isInteger(e)||e<8||e>15)throw new TypeError(`Invalid value for parameter "${t}": ${s}`);s=e}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${t}": ${s}`)}else if("server_max_window_bits"===t){const e=+s;if(!Number.isInteger(e)||e<8||e>15)throw new TypeError(`Invalid value for parameter "${t}": ${s}`);s=e}else{if("client_no_context_takeover"!==t&&"server_no_context_takeover"!==t)throw new Error(`Unknown parameter "${t}"`);if(!0!==s)throw new TypeError(`Invalid value for parameter "${t}": ${s}`)}e[t]=s})}),e}decompress(e,t,s){_.add(i=>{this._decompress(e,t,(e,t)=>{i(),s(e,t)})})}compress(e,t,s){_.add(i=>{this._compress(e,t,(e,t)=>{i(),s(e,t)})})}_decompress(e,t,s){const n=this._isServer?"client":"server";if(!this._inflate){const e=`${n}_max_window_bits`,t="number"!=typeof this.params[e]?i.Z_DEFAULT_WINDOWBITS:this.params[e];this._inflate=i.createInflateRaw({...this._options.zlibInflateOptions,windowBits:t}),this._inflate[h]=this,this._inflate[l]=0,this._inflate[f]=[],this._inflate.on("error",v),this._inflate.on("data",m)}this._inflate[d]=s,this._inflate.write(e),t&&this._inflate.write(c),this._inflate.flush(()=>{const e=this._inflate[u];if(e)return this._inflate.close(),this._inflate=null,void s(e);const i=r.concat(this._inflate[f],this._inflate[l]);t&&this.params[`${n}_no_context_takeover`]?(this._inflate.close(),this._inflate=null):(this._inflate[l]=0,this._inflate[f]=[]),s(null,i)})}_compress(e,t,s){const n=this._isServer?"server":"client";if(!this._deflate){const e=`${n}_max_window_bits`,t="number"!=typeof this.params[e]?i.Z_DEFAULT_WINDOWBITS:this.params[e];this._deflate=i.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:t}),this._deflate[l]=0,this._deflate[f]=[],this._deflate.on("error",a),this._deflate.on("data",p)}this._deflate[d]=s,this._deflate.write(e),this._deflate.flush(i.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let e=r.concat(this._deflate[f],this._deflate[l]);t&&(e=e.slice(0,e.length-4)),this._deflate[d]=null,t&&this.params[`${n}_no_context_takeover`]?(this._deflate.close(),this._deflate=null):(this._deflate[l]=0,this._deflate[f]=[]),s(null,e)})}}},{"./buffer-util":1,"./constants":2,"./limiter":5,zlib:void 0}],7:[function(e,t,s){"use strict";const{Writable:i}=e("stream"),r=e("./permessage-deflate"),{BINARY_TYPES:n,EMPTY_BUFFER:o,kStatusCode:a,kWebSocket:c}=e("./constants"),{concat:h,toArrayBuffer:l,unmask:d}=e("./buffer-util"),{isValidStatusCode:f,isValidUTF8:u}=e("./validation"),_=0,p=1,m=2,v=3,g=4,y=5;function b(e,t,s,i){const r=new e(s?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(r,b),r[a]=i,r}t.exports=class extends i{constructor(e,t,s,i){super(),this._binaryType=e||n[0],this[c]=void 0,this._extensions=t||{},this._isServer=!!s,this._maxPayload=0|i,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._state=_,this._loop=!1}_write(e,t,s){if(8===this._opcode&&this._state==_)return s();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(s)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){const t=this._buffers[0];return this._buffers[0]=t.slice(e),t.slice(0,e)}const t=Buffer.allocUnsafe(e);do{const s=this._buffers[0],i=t.length-e;e>=s.length?t.set(this._buffers.shift(),i):(t.set(new Uint8Array(s.buffer,s.byteOffset,e),i),this._buffers[0]=s.slice(e)),e-=s.length}while(e>0);return t}startLoop(e){let t;this._loop=!0;do{switch(this._state){case _:t=this.getInfo();break;case p:t=this.getPayloadLength16();break;case m:t=this.getPayloadLength64();break;case v:this.getMask();break;case g:t=this.getData(e);break;default:return void(this._loop=!1)}}while(this._loop);e(t)}getInfo(){if(this._bufferedBytes<2)return void(this._loop=!1);const e=this.consume(2);if(0!=(48&e[0]))return this._loop=!1,b(RangeError,"RSV2 and RSV3 must be clear",!0,1002);const t=64==(64&e[0]);if(t&&!this._extensions[r.extensionName])return this._loop=!1,b(RangeError,"RSV1 must be clear",!0,1002);if(this._fin=128==(128&e[0]),this._opcode=15&e[0],this._payloadLength=127&e[1],0===this._opcode){if(t)return this._loop=!1,b(RangeError,"RSV1 must be clear",!0,1002);if(!this._fragmented)return this._loop=!1,b(RangeError,"invalid opcode 0",!0,1002);this._opcode=this._fragmented}else if(1===this._opcode||2===this._opcode){if(this._fragmented)return this._loop=!1,b(RangeError,`invalid opcode ${this._opcode}`,!0,1002);this._compressed=t}else{if(!(this._opcode>7&&this._opcode<11))return this._loop=!1,b(RangeError,`invalid opcode ${this._opcode}`,!0,1002);if(!this._fin)return this._loop=!1,b(RangeError,"FIN must be set",!0,1002);if(t)return this._loop=!1,b(RangeError,"RSV1 must be clear",!0,1002);if(this._payloadLength>125)return this._loop=!1,b(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002)}if(this._fin||this._fragmented||(this._fragmented=this._opcode),this._masked=128==(128&e[1]),this._isServer){if(!this._masked)return this._loop=!1,b(RangeError,"MASK must be set",!0,1002)}else if(this._masked)return this._loop=!1,b(RangeError,"MASK must be clear",!0,1002);if(126===this._payloadLength)this._state=p;else{if(127!==this._payloadLength)return this.haveLength();this._state=m}}getPayloadLength16(){if(!(this._bufferedBytes<2))return this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength();this._loop=!1}getPayloadLength64(){if(this._bufferedBytes<8)return void(this._loop=!1);const e=this.consume(8),t=e.readUInt32BE(0);return t>Math.pow(2,21)-1?(this._loop=!1,b(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009)):(this._payloadLength=t*Math.pow(2,32)+e.readUInt32BE(4),this.haveLength())}haveLength(){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0))return this._loop=!1,b(RangeError,"Max payload size exceeded",!1,1009);this._masked?this._state=v:this._state=g}getMask(){this._bufferedBytes<4?this._loop=!1:(this._mask=this.consume(4),this._state=g)}getData(e){let t=o;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength)return void(this._loop=!1);t=this.consume(this._payloadLength),this._masked&&d(t,this._mask)}return this._opcode>7?this.controlMessage(t):this._compressed?(this._state=y,void this.decompress(t,e)):(t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage())}decompress(e,t){this._extensions[r.extensionName].decompress(e,this._fin,(e,s)=>{if(e)return t(e);if(s.length){if(this._messageLength+=s.length,this._messageLength>this._maxPayload&&this._maxPayload>0)return t(b(RangeError,"Max payload size exceeded",!1,1009));this._fragments.push(s)}const i=this.dataMessage();if(i)return t(i);this.startLoop(t)})}dataMessage(){if(this._fin){const e=this._messageLength,t=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],2===this._opcode){let s;s="nodebuffer"===this._binaryType?h(t,e):"arraybuffer"===this._binaryType?l(h(t,e)):t,this.emit("message",s)}else{const s=h(t,e);if(!u(s))return this._loop=!1,b(Error,"invalid UTF-8 sequence",!0,1007);this.emit("message",s.toString())}}this._state=_}controlMessage(e){if(8===this._opcode)if(this._loop=!1,0===e.length)this.emit("conclude",1005,""),this.end();else{if(1===e.length)return b(RangeError,"invalid payload length 1",!0,1002);{const t=e.readUInt16BE(0);if(!f(t))return b(RangeError,`invalid status code ${t}`,!0,1002);const s=e.slice(2);if(!u(s))return b(Error,"invalid UTF-8 sequence",!0,1007);this.emit("conclude",t,s.toString()),this.end()}}else 9===this._opcode?this.emit("ping",e):this.emit("pong",e);this._state=_}}},{"./buffer-util":1,"./constants":2,"./permessage-deflate":6,"./validation":10,stream:void 0}],8:[function(e,t,s){"use strict";const{randomFillSync:i}=e("crypto"),r=e("./permessage-deflate"),{EMPTY_BUFFER:n}=e("./constants"),{isValidStatusCode:o}=e("./validation"),{mask:a,toBuffer:c}=e("./buffer-util"),h=Buffer.alloc(4);class l{constructor(e,t){this._extensions=t||{},this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._deflating=!1,this._queue=[]}static frame(e,t){const s=t.mask&&t.readOnly;let r=t.mask?6:2,n=e.length;e.length>=65536?(r+=8,n=127):e.length>125&&(r+=2,n=126);const o=Buffer.allocUnsafe(s?e.length+r:r);return o[0]=t.fin?128|t.opcode:t.opcode,t.rsv1&&(o[0]|=64),o[1]=n,126===n?o.writeUInt16BE(e.length,2):127===n&&(o.writeUInt32BE(0,2),o.writeUInt32BE(e.length,6)),t.mask?(i(h,0,4),o[1]|=128,o[r-4]=h[0],o[r-3]=h[1],o[r-2]=h[2],o[r-1]=h[3],s?(a(e,h,o,r,e.length),[o]):(a(e,h,e,0,e.length),[o,e])):[o,e]}close(e,t,s,i){let r;if(void 0===e)r=n;else{if("number"!=typeof e||!o(e))throw new TypeError("First argument must be a valid error code number");if(void 0===t||""===t)(r=Buffer.allocUnsafe(2)).writeUInt16BE(e,0);else{const s=Buffer.byteLength(t);if(s>123)throw new RangeError("The message must not be greater than 123 bytes");(r=Buffer.allocUnsafe(2+s)).writeUInt16BE(e,0),r.write(t,2)}}this._deflating?this.enqueue([this.doClose,r,s,i]):this.doClose(r,s,i)}doClose(e,t,s){this.sendFrame(l.frame(e,{fin:!0,rsv1:!1,opcode:8,mask:t,readOnly:!1}),s)}ping(e,t,s){const i=c(e);if(i.length>125)throw new RangeError("The data size must not be greater than 125 bytes");this._deflating?this.enqueue([this.doPing,i,t,c.readOnly,s]):this.doPing(i,t,c.readOnly,s)}doPing(e,t,s,i){this.sendFrame(l.frame(e,{fin:!0,rsv1:!1,opcode:9,mask:t,readOnly:s}),i)}pong(e,t,s){const i=c(e);if(i.length>125)throw new RangeError("The data size must not be greater than 125 bytes");this._deflating?this.enqueue([this.doPong,i,t,c.readOnly,s]):this.doPong(i,t,c.readOnly,s)}doPong(e,t,s,i){this.sendFrame(l.frame(e,{fin:!0,rsv1:!1,opcode:10,mask:t,readOnly:s}),i)}send(e,t,s){const i=c(e),n=this._extensions[r.extensionName];let o=t.binary?2:1,a=t.compress;if(this._firstFragment?(this._firstFragment=!1,a&&n&&(a=i.length>=n._threshold),this._compress=a):(a=!1,o=0),t.fin&&(this._firstFragment=!0),n){const e={fin:t.fin,rsv1:a,opcode:o,mask:t.mask,readOnly:c.readOnly};this._deflating?this.enqueue([this.dispatch,i,this._compress,e,s]):this.dispatch(i,this._compress,e,s)}else this.sendFrame(l.frame(i,{fin:t.fin,rsv1:!1,opcode:o,mask:t.mask,readOnly:c.readOnly}),s)}dispatch(e,t,s,i){if(!t)return void this.sendFrame(l.frame(e,s),i);const n=this._extensions[r.extensionName];this._bufferedBytes+=e.length,this._deflating=!0,n.compress(e,s.fin,(t,r)=>{if(this._socket.destroyed){const e=new Error("The socket was closed while data was being compressed");"function"==typeof i&&i(e);for(let t=0;t<this._queue.length;t++){const s=this._queue[t][4];"function"==typeof s&&s(e)}}else this._bufferedBytes-=e.length,this._deflating=!1,s.readOnly=!1,this.sendFrame(l.frame(r,s),i),this.dequeue()})}dequeue(){for(;!this._deflating&&this._queue.length;){const e=this._queue.shift();this._bufferedBytes-=e[1].length,Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[1].length,this._queue.push(e)}sendFrame(e,t){2===e.length?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}}t.exports=l},{"./buffer-util":1,"./constants":2,"./permessage-deflate":6,"./validation":10,crypto:void 0}],9:[function(e,t,s){"use strict";const{Duplex:i}=e("stream");function r(e){e.emit("close")}function n(){!this.destroyed&&this._writableState.finished&&this.destroy()}function o(e){this.removeListener("error",o),this.destroy(),0===this.listenerCount("error")&&this.emit("error",e)}t.exports=function(e,t){let s=!0;function a(){s&&e._socket.resume()}e.readyState===e.CONNECTING?e.once("open",function(){e._receiver.removeAllListeners("drain"),e._receiver.on("drain",a)}):(e._receiver.removeAllListeners("drain"),e._receiver.on("drain",a));const c=new i({...t,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return e.on("message",function(t){c.push(t)||(s=!1,e._socket.pause())}),e.once("error",function(e){c.destroyed||c.destroy(e)}),e.once("close",function(){c.destroyed||c.push(null)}),c._destroy=function(t,s){if(e.readyState===e.CLOSED)return s(t),void process.nextTick(r,c);let i=!1;e.once("error",function(e){i=!0,s(e)}),e.once("close",function(){i||s(t),process.nextTick(r,c)}),e.terminate()},c._final=function(t){e.readyState!==e.CONNECTING?null!==e._socket&&(e._socket._writableState.finished?(t(),c._readableState.endEmitted&&c.destroy()):(e._socket.once("finish",function(){t()}),e.close())):e.once("open",function(){c._final(t)})},c._read=function(){e.readyState!==e.OPEN||s||(s=!0,e._receiver._writableState.needDrain||e._socket.resume())},c._write=function(t,s,i){e.readyState!==e.CONNECTING?e.send(t,i):e.once("open",function(){c._write(t,s,i)})},c.on("end",n),c.on("error",o),c}},{stream:void 0}],10:[function(e,t,s){"use strict";try{const t=e("utf-8-validate");s.isValidUTF8="object"==typeof t?t.Validation.isValidUTF8:t}catch(e){s.isValidUTF8=(()=>!0)}s.isValidStatusCode=(e=>e>=1e3&&e<=1014&&1004!==e&&1005!==e&&1006!==e||e>=3e3&&e<=4999)},{"utf-8-validate":17}],11:[function(e,t,s){"use strict";const i=e("events"),{createHash:r}=e("crypto"),{createServer:n,STATUS_CODES:o}=e("http"),a=e("./permessage-deflate"),c=e("./websocket"),{format:h,parse:l}=e("./extension"),{GUID:d,kWebSocket:f}=e("./constants"),u=/^[+\/0-9A-Za-z]{22}==$/;function _(e){e.emit("close")}function p(){this.destroy()}function m(e,t,s,i){e.writable&&(s=s||o[t],i={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(s),...i},e.write(`HTTP/1.1 ${t} ${o[t]}\r\n`+Object.keys(i).map(e=>`${e}: ${i[e]}`).join("\r\n")+"\r\n\r\n"+s)),e.removeListener("error",p),e.destroy()}t.exports=class extends i{constructor(e,t){if(super(),null==(e={maxPayload:104857600,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,...e}).port&&!e.server&&!e.noServer)throw new TypeError('One of the "port", "server", or "noServer" options must be specified');null!=e.port?(this._server=n((e,t)=>{const s=o[426];t.writeHead(426,{"Content-Length":s.length,"Content-Type":"text/plain"}),t.end(s)}),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server&&(this._removeListeners=function(e,t){for(const s of Object.keys(t))e.on(s,t[s]);return function(){for(const s of Object.keys(t))e.removeListener(s,t[s])}}(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(e,t,s)=>{this.handleUpgrade(e,t,s,t=>{this.emit("connection",t,e)})}})),!0===e.perMessageDeflate&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set),this.options=e}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(e&&this.once("close",e),this.clients)for(const e of this.clients)e.terminate();const t=this._server;t&&(this._removeListeners(),this._removeListeners=this._server=null,null!=this.options.port)?t.close(()=>this.emit("close")):process.nextTick(_,this)}shouldHandle(e){if(this.options.path){const t=e.url.indexOf("?");if((-1!==t?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,s,i){t.on("error",p);const r=void 0!==e.headers["sec-websocket-key"]&&e.headers["sec-websocket-key"].trim(),n=+e.headers["sec-websocket-version"],o={};if("GET"!==e.method||"websocket"!==e.headers.upgrade.toLowerCase()||!r||!u.test(r)||8!==n&&13!==n||!this.shouldHandle(e))return m(t,400);if(this.options.perMessageDeflate){const s=new a(this.options.perMessageDeflate,!0,this.options.maxPayload);try{const i=l(e.headers["sec-websocket-extensions"]);i[a.extensionName]&&(s.accept(i[a.extensionName]),o[a.extensionName]=s)}catch(e){return m(t,400)}}if(this.options.verifyClient){const a={origin:e.headers[`${8===n?"sec-websocket-origin":"origin"}`],secure:!(!e.connection.authorized&&!e.connection.encrypted),req:e};if(2===this.options.verifyClient.length)return void this.options.verifyClient(a,(n,a,c,h)=>{if(!n)return m(t,a||401,c,h);this.completeUpgrade(r,o,e,t,s,i)});if(!this.options.verifyClient(a))return m(t,401)}this.completeUpgrade(r,o,e,t,s,i)}completeUpgrade(e,t,s,i,n,o){if(!i.readable||!i.writable)return i.destroy();if(i[f])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");const l=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${r("sha1").update(e+d).digest("base64")}`],u=new c(null);let _=s.headers["sec-websocket-protocol"];if(_&&(_=_.trim().split(/ *, */),(_=this.options.handleProtocols?this.options.handleProtocols(_,s):_[0])&&(l.push(`Sec-WebSocket-Protocol: ${_}`),u.protocol=_)),t[a.extensionName]){const e=t[a.extensionName].params,s=h({[a.extensionName]:[e]});l.push(`Sec-WebSocket-Extensions: ${s}`),u._extensions=t}this.emit("headers",l,s),i.write(l.concat("\r\n").join("\r\n")),i.removeListener("error",p),u.setSocket(i,n,this.options.maxPayload),this.clients&&(this.clients.add(u),u.on("close",()=>this.clients.delete(u))),o(u)}}},{"./constants":2,"./extension":4,"./permessage-deflate":6,"./websocket":12,crypto:void 0,events:void 0,http:void 0}],12:[function(e,t,s){"use strict";const i=e("events"),r=e("https"),n=e("http"),o=e("net"),a=e("tls"),{randomBytes:c,createHash:h}=e("crypto"),{URL:l}=e("url"),d=e("./permessage-deflate"),f=e("./receiver"),u=e("./sender"),{BINARY_TYPES:_,EMPTY_BUFFER:p,GUID:m,kStatusCode:v,kWebSocket:g,NOOP:y}=e("./constants"),{addEventListener:b,removeEventListener:w}=e("./event-target"),{format:x,parse:S}=e("./extension"),{toBuffer:k}=e("./buffer-util"),E=["CONNECTING","OPEN","CLOSING","CLOSED"],N=[8,13],C=3e4;class L extends i{constructor(e,t,s){super(),this.readyState=L.CONNECTING,this.protocol="",this._binaryType=_[0],this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage="",this._closeTimer=null,this._closeCode=1006,this._extensions={},this._receiver=null,this._sender=null,this._socket=null,null!==e?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,Array.isArray(t)?t=t.join(", "):"object"==typeof t&&null!==t&&(s=t,t=void 0),function e(t,s,i,o){const a={protocolVersion:N[1],maxPayload:104857600,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...o,createConnection:void 0,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:void 0,host:void 0,path:void 0,port:void 0};if(!N.includes(a.protocolVersion))throw new RangeError(`Unsupported protocol version: ${a.protocolVersion} `+`(supported versions: ${N.join(", ")})`);let f;s instanceof l?(f=s,t.url=s.href):(f=new l(s),t.url=s);const u="ws+unix:"===f.protocol;if(!(f.host||u&&f.pathname))throw new Error(`Invalid URL: ${t.url}`);const _="wss:"===f.protocol||"https:"===f.protocol;const p=_?443:80;const v=c(16).toString("base64");const g=_?r.get:n.get;let y;a.createConnection=_?T:O;a.defaultPort=a.defaultPort||p;a.port=f.port||p;a.host=f.hostname.startsWith("[")?f.hostname.slice(1,-1):f.hostname;a.headers={"Sec-WebSocket-Version":a.protocolVersion,"Sec-WebSocket-Key":v,Connection:"Upgrade",Upgrade:"websocket",...a.headers};a.path=f.pathname+f.search;a.timeout=a.handshakeTimeout;a.perMessageDeflate&&(y=new d(!0!==a.perMessageDeflate?a.perMessageDeflate:{},!1,a.maxPayload),a.headers["Sec-WebSocket-Extensions"]=x({[d.extensionName]:y.offer()}));i&&(a.headers["Sec-WebSocket-Protocol"]=i);a.origin&&(a.protocolVersion<13?a.headers["Sec-WebSocket-Origin"]=a.origin:a.headers.Origin=a.origin);(f.username||f.password)&&(a.auth=`${f.username}:${f.password}`);if(u){const e=a.path.split(":");a.socketPath=e[0],a.path=e[1]}let b=t._req=g(a);a.timeout&&b.on("timeout",()=>{B(t,b,"Opening handshake has timed out")});b.on("error",e=>{t._req.aborted||(b=t._req=null,t.readyState=L.CLOSING,t.emit("error",e),t.emitClose())});b.on("response",r=>{const n=r.headers.location,c=r.statusCode;if(n&&a.followRedirects&&c>=300&&c<400){if(++t._redirects>a.maxRedirects)return void B(t,b,"Maximum redirects exceeded");b.abort();const r=new l(n,s);e(t,r,i,o)}else t.emit("unexpected-response",b,r)||B(t,b,`Unexpected server response: ${r.statusCode}`)});b.on("upgrade",(e,s,r)=>{if(t.emit("upgrade",e),t.readyState!==L.CONNECTING)return;b=t._req=null;const n=h("sha1").update(v+m).digest("base64");if(e.headers["sec-websocket-accept"]!==n)return void B(t,s,"Invalid Sec-WebSocket-Accept header");const o=e.headers["sec-websocket-protocol"],c=(i||"").split(/, */);let l;/*if(!i&&o?l="Server sent a subprotocol but none was requested":i&&!o?l="Server sent no subprotocol":o&&!c.includes(o)&&(l="Server sent an invalid subprotocol"),l)B(t,s,l);else*/{if(o&&(t.protocol=o),y)try{const i=S(e.headers["sec-websocket-extensions"]);i[d.extensionName]&&(y.accept(i[d.extensionName]),t._extensions[d.extensionName]=y)}catch(e){return void B(t,s,"Invalid Sec-WebSocket-Extensions header")}t.setSocket(s,r,a.maxPayload)}})}(this,e,t,s)):this._isServer=!0}get CONNECTING(){return L.CONNECTING}get CLOSING(){return L.CLOSING}get CLOSED(){return L.CLOSED}get OPEN(){return L.OPEN}get binaryType(){return this._binaryType}set binaryType(e){_.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}setSocket(e,t,s){const i=new f(this._binaryType,this._extensions,this._isServer,s);this._sender=new u(e,this._extensions),this._receiver=i,this._socket=e,i[g]=this,e[g]=this,i.on("conclude",U),i.on("drain",I),i.on("error",R),i.on("message",W),i.on("ping",$),i.on("pong",F),e.setTimeout(0),e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",A),e.on("data",D),e.on("end",j),e.on("error",q),this.readyState=L.OPEN,this.emit("open")}emitClose(){if(!this._socket)return this.readyState=L.CLOSED,void this.emit("close",this._closeCode,this._closeMessage);this._extensions[d.extensionName]&&this._extensions[d.extensionName].cleanup(),this._receiver.removeAllListeners(),this.readyState=L.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==L.CLOSED){if(this.readyState===L.CONNECTING){const e="WebSocket was closed before the connection was established";return B(this,this._req,e)}this.readyState!==L.CLOSING?(this.readyState=L.CLOSING,this._sender.close(e,t,!this._isServer,e=>{e||(this._closeFrameSent=!0,this._closeFrameReceived&&this._socket.end())}),this._closeTimer=setTimeout(this._socket.destroy.bind(this._socket),C)):this._closeFrameSent&&this._closeFrameReceived&&this._socket.end()}}ping(e,t,s){if(this.readyState===L.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");"function"==typeof e?(s=e,e=t=void 0):"function"==typeof t&&(s=t,t=void 0),"number"==typeof e&&(e=e.toString()),this.readyState===L.OPEN?(void 0===t&&(t=!this._isServer),this._sender.ping(e||p,t,s)):P(this,e,s)}pong(e,t,s){if(this.readyState===L.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");"function"==typeof e?(s=e,e=t=void 0):"function"==typeof t&&(s=t,t=void 0),"number"==typeof e&&(e=e.toString()),this.readyState===L.OPEN?(void 0===t&&(t=!this._isServer),this._sender.pong(e||p,t,s)):P(this,e,s)}send(e,t,s){if(this.readyState===L.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if("function"==typeof t&&(s=t,t={}),"number"==typeof e&&(e=e.toString()),this.readyState!==L.OPEN)return void P(this,e,s);const i={binary:"string"!=typeof e,mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[d.extensionName]||(i.compress=!1),this._sender.send(e||p,i,s)}terminate(){if(this.readyState!==L.CLOSED){if(this.readyState===L.CONNECTING){const e="WebSocket was closed before the connection was established";return B(this,this._req,e)}this._socket&&(this.readyState=L.CLOSING,this._socket.destroy())}}}function O(e){return e.path=e.socketPath,o.connect(e)}function T(e){return e.path=void 0,e.servername||""===e.servername||(e.servername=e.host),a.connect(e)}function B(e,t,s){e.readyState=L.CLOSING;const i=new Error(s);Error.captureStackTrace(i,B),t.setHeader?(t.abort(),t.once("abort",e.emitClose.bind(e)),e.emit("error",i)):(t.destroy(i),t.once("error",e.emit.bind(e,"error")),t.once("close",e.emitClose.bind(e)))}function P(e,t,s){if(t){const s=k(t).length;e._socket?e._sender._bufferedBytes+=s:e._bufferedAmount+=s}if(s){s(new Error(`WebSocket is not open: readyState ${e.readyState} `+`(${E[e.readyState]})`))}}function U(e,t){const s=this[g];s._socket.removeListener("data",D),s._socket.resume(),s._closeFrameReceived=!0,s._closeMessage=t,s._closeCode=e,1005===e?s.close():s.close(e,t)}function I(){this[g]._socket.resume()}function R(e){const t=this[g];t._socket.removeListener("data",D),t.readyState=L.CLOSING,t._closeCode=e[v],t.emit("error",e),t._socket.destroy()}function M(){this[g].emitClose()}function W(e){this[g].emit("message",e)}function $(e){const t=this[g];t.pong(e,!t._isServer,y),t.emit("ping",e)}function F(e){this[g].emit("pong",e)}function A(){const e=this[g];this.removeListener("close",A),this.removeListener("end",j),e.readyState=L.CLOSING,e._socket.read(),e._receiver.end(),this.removeListener("data",D),this[g]=void 0,clearTimeout(e._closeTimer),e._receiver._writableState.finished||e._receiver._writableState.errorEmitted?e.emitClose():(e._receiver.on("error",M),e._receiver.on("finish",M))}function D(e){this[g]._receiver.write(e)||this.pause()}function j(){const e=this[g];e.readyState=L.CLOSING,e._receiver.end(),this.end()}function q(){const e=this[g];this.removeListener("error",q),this.on("error",y),e&&(e.readyState=L.CLOSING,this.destroy())}E.forEach((e,t)=>{L[e]=t}),["open","error","close","message"].forEach(e=>{Object.defineProperty(L.prototype,`on${e}`,{get(){const t=this.listeners(e);for(let e=0;e<t.length;e++)if(t[e]._listener)return t[e]._listener},set(t){const s=this.listeners(e);for(let t=0;t<s.length;t++)s[t]._listener&&this.removeListener(e,s[t]);this.addEventListener(e,t)}})}),L.prototype.addEventListener=b,L.prototype.removeEventListener=w,t.exports=L},{"./buffer-util":1,"./constants":2,"./event-target":3,"./extension":4,"./permessage-deflate":6,"./receiver":7,"./sender":8,crypto:void 0,events:void 0,http:void 0,https:void 0,net:void 0,tls:void 0,url:void 0}],13:[function(e,t,s){"use strict";t.exports={mask:(e,t,s,i,r)=>{for(var n=0;n<r;n++)s[i+n]=e[n]^t[3&n]},unmask:(e,t)=>{const s=e.length;for(var i=0;i<s;i++)e[i]^=t[3&i]}}},{}],14:[function(e,t,s){(function(s){(function(){"use strict";try{t.exports=e("node-gyp-build")(s)}catch(s){t.exports=e("./fallback")}}).call(this)}).call(this,e("path").join(__dirname,"node_modules","bufferutil"))},{"./fallback":13,"node-gyp-build":15,path:void 0}],15:[function(e,t,s){var i=e("fs"),r=e("path"),n=e("os"),o="function"==typeof __webpack_require__?__non_webpack_require__:e,a=process.config&&process.config.variables||{},c=!!process.env.PREBUILDS_ONLY,h=process.versions.modules,l=process.versions&&process.versions.electron||process.env.ELECTRON_RUN_AS_NODE||"undefined"!=typeof window&&window.process&&"renderer"===window.process.type?"electron":"node",d=n.arch(),f=n.platform(),u=process.env.LIBC||(function(e){return"linux"===e&&i.existsSync("/etc/alpine-release")}(f)?"musl":"glibc"),_=process.env.ARM_VERSION||("arm64"===d?"8":a.arm_version)||"",p=(process.versions.uv||"").split(".")[0];function m(e){return o(m.path(e))}function v(e){try{return i.readdirSync(e)}catch(e){return[]}}function g(e,t){var s=v(e).filter(t);return s[0]&&r.join(e,s[0])}function y(e){return/\.node$/.test(e)}function b(e){var t=e.split("."),s={file:e,specificity:0};if("node"===t.pop()){for(var i=0;i<t.length;i++){var r=t[i];if("node"===r||"electron"===r||"node-webkit"===r)s.runtime=r;else if("napi"===r)s.napi=!0;else if("abi"===r.slice(0,3))s.abi=r.slice(3);else if("uv"===r.slice(0,2))s.uv=r.slice(2);else if("armv"===r.slice(0,4))s.armv=r.slice(4);else{if("glibc"!==r&&"musl"!==r)continue;s.libc=r}s.specificity++}return s}}function w(e,t){return function(s){return null!=s&&(!(s.runtime!==e&&!function(e){return"node"===e.runtime&&e.napi}(s))&&(!(s.abi!==t&&!s.napi)&&((!s.uv||s.uv===p)&&((!s.armv||s.armv===_)&&(!s.libc||s.libc===u)))))}}function x(e){return function(t,s){return t.runtime!==s.runtime?t.runtime===e?-1:1:t.abi!==s.abi?t.abi?-1:1:t.specificity!==s.specificity?t.specificity>s.specificity?-1:1:0}}t.exports=m,m.path=function(e){e=r.resolve(e||".");try{var t=o(r.join(e,"package.json")).name.toUpperCase().replace(/-/g,"_");process.env[t+"_PREBUILD"]&&(e=process.env[t+"_PREBUILD"])}catch(e){}if(!c){var s=g(r.join(e,"build/Release"),y);if(s)return s;var i=g(r.join(e,"build/Debug"),y);if(i)return i}var n=S(e);if(n)return n;var a=S(r.dirname(process.execPath));if(a)return a;var m=["platform="+f,"arch="+d,"runtime="+l,"abi="+h,"uv="+p,_?"armv="+_:"","libc="+u,"node="+process.versions.node,process.versions&&process.versions.electron?"electron="+process.versions.electron:"","function"==typeof __webpack_require__?"webpack=true":""].filter(Boolean).join(" ");throw new Error("No native build was found for "+m+"\n loaded from: "+e+"\n");function S(e){var t=r.join(e,"prebuilds",f+"-"+d),s=v(t).map(b).filter(w(l,h)).sort(x(l))[0];if(s)return r.join(t,s.file)}},m.parseTags=b,m.matchTags=w,m.compareTags=x},{fs:void 0,os:void 0,path:void 0}],16:[function(e,t,s){"use strict";t.exports=(e=>{for(var t=e.length,s=0;s<t;)if(e[s]<128)s++;else if(192==(224&e[s])){if(s+1===t||128!=(192&e[s+1])||192==(254&e[s]))return!1;s+=2}else if(224==(240&e[s])){if(s+2>=t||128!=(192&e[s+1])||128!=(192&e[s+2])||224===e[s]&&128==(224&e[s+1])||237===e[s]&&160==(224&e[s+1]))return!1;s+=3}else{if(240!=(248&e[s]))return!1;if(s+3>=t||128!=(192&e[s+1])||128!=(192&e[s+2])||128!=(192&e[s+3])||240===e[s]&&128==(240&e[s+1])||244===e[s]&&e[s+1]>143||e[s]>244)return!1;s+=4}return!0})},{}],17:[function(e,t,s){(function(s){(function(){"use strict";try{t.exports=e("node-gyp-build")(s)}catch(s){t.exports=e("./fallback")}}).call(this)}).call(this,e("path").join(__dirname,"node_modules","utf-8-validate"))},{"./fallback":16,"node-gyp-build":15,path:void 0}]},{},[]);module.exports=require("/index");