easyproctor-hml 2.5.31 → 2.5.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../node_modules/jszip/dist/jszip.min.js", "../../node_modules/file-saver/src/FileSaver.js", "../../node_modules/qrcode/lib/can-promise.js", "../../node_modules/qrcode/lib/core/utils.js", "../../node_modules/qrcode/lib/core/error-correction-level.js", "../../node_modules/qrcode/lib/core/bit-buffer.js", "../../node_modules/qrcode/lib/core/bit-matrix.js", "../../node_modules/qrcode/lib/core/alignment-pattern.js", "../../node_modules/qrcode/lib/core/finder-pattern.js", "../../node_modules/qrcode/lib/core/mask-pattern.js", "../../node_modules/qrcode/lib/core/error-correction-code.js", "../../node_modules/qrcode/lib/core/galois-field.js", "../../node_modules/qrcode/lib/core/polynomial.js", "../../node_modules/qrcode/lib/core/reed-solomon-encoder.js", "../../node_modules/qrcode/lib/core/version-check.js", "../../node_modules/qrcode/lib/core/regex.js", "../../node_modules/qrcode/lib/core/mode.js", "../../node_modules/qrcode/lib/core/version.js", "../../node_modules/qrcode/lib/core/format-info.js", "../../node_modules/qrcode/lib/core/numeric-data.js", "../../node_modules/qrcode/lib/core/alphanumeric-data.js", "../../node_modules/qrcode/lib/core/byte-data.js", "../../node_modules/qrcode/lib/core/kanji-data.js", "../../node_modules/dijkstrajs/dijkstra.js", "../../node_modules/qrcode/lib/core/segments.js", "../../node_modules/qrcode/lib/core/qrcode.js", "../../node_modules/qrcode/lib/renderer/utils.js", "../../node_modules/qrcode/lib/renderer/canvas.js", "../../node_modules/qrcode/lib/renderer/svg-tag.js", "../../node_modules/qrcode/lib/browser.js", "../../src/modules/checkPermissions.ts", "../../src/modules/enumarateDevices.ts", "../../node_modules/@mediapipe/tasks-vision/vision_bundle.mjs", "../../src/modules/BaseDetection.ts", "../../src/modules/faceDetection.ts", "../../node_modules/axios/lib/helpers/bind.js", "../../node_modules/axios/lib/utils.js", "../../node_modules/axios/lib/core/AxiosError.js", "../../node_modules/axios/lib/helpers/null.js", "../../node_modules/axios/lib/helpers/toFormData.js", "../../node_modules/axios/lib/helpers/AxiosURLSearchParams.js", "../../node_modules/axios/lib/helpers/buildURL.js", "../../node_modules/axios/lib/core/InterceptorManager.js", "../../node_modules/axios/lib/defaults/transitional.js", "../../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js", "../../node_modules/axios/lib/platform/browser/classes/FormData.js", "../../node_modules/axios/lib/platform/browser/classes/Blob.js", "../../node_modules/axios/lib/platform/browser/index.js", "../../node_modules/axios/lib/platform/common/utils.js", "../../node_modules/axios/lib/platform/index.js", "../../node_modules/axios/lib/helpers/toURLEncodedForm.js", "../../node_modules/axios/lib/helpers/formDataToJSON.js", "../../node_modules/axios/lib/defaults/index.js", "../../node_modules/axios/lib/helpers/parseHeaders.js", "../../node_modules/axios/lib/core/AxiosHeaders.js", "../../node_modules/axios/lib/core/transformData.js", "../../node_modules/axios/lib/cancel/isCancel.js", "../../node_modules/axios/lib/cancel/CanceledError.js", "../../node_modules/axios/lib/core/settle.js", "../../node_modules/axios/lib/helpers/parseProtocol.js", "../../node_modules/axios/lib/helpers/speedometer.js", "../../node_modules/axios/lib/helpers/throttle.js", "../../node_modules/axios/lib/helpers/progressEventReducer.js", "../../node_modules/axios/lib/helpers/isURLSameOrigin.js", "../../node_modules/axios/lib/helpers/cookies.js", "../../node_modules/axios/lib/helpers/isAbsoluteURL.js", "../../node_modules/axios/lib/helpers/combineURLs.js", "../../node_modules/axios/lib/core/buildFullPath.js", "../../node_modules/axios/lib/core/mergeConfig.js", "../../node_modules/axios/lib/helpers/resolveConfig.js", "../../node_modules/axios/lib/adapters/xhr.js", "../../node_modules/axios/lib/helpers/composeSignals.js", "../../node_modules/axios/lib/helpers/trackStream.js", "../../node_modules/axios/lib/adapters/fetch.js", "../../node_modules/axios/lib/adapters/adapters.js", "../../node_modules/axios/lib/core/dispatchRequest.js", "../../node_modules/axios/lib/env/data.js", "../../node_modules/axios/lib/helpers/validator.js", "../../node_modules/axios/lib/core/Axios.js", "../../node_modules/axios/lib/cancel/CancelToken.js", "../../node_modules/axios/lib/helpers/spread.js", "../../node_modules/axios/lib/helpers/isAxiosError.js", "../../node_modules/axios/lib/helpers/HttpStatusCode.js", "../../node_modules/axios/lib/axios.js", "../../src/new-flow/backend/BackendService.ts", "../../src/new-flow/backend/SpyCamBackendService.ts", "../../src/new-flow/proctoring/ProctoringSession.ts", "../../src/modules/SpyCam.ts", "../../src/proctoring/options/ProctoringOptions.ts", "../../src/proctoring/options/ProctoringVideoOptions.ts", "../../src/utils/browserInformations.ts", "../../src/plugins/insights.ts", "../../src/plugins/recorder.ts", "../../src/new-flow/upload/UploadService.ts", "../../src/errors/errors.ts", "../../src/modules/objectDetection.ts", "../../src/new-flow/recorders/VolumeMeter.ts", "../../src/new-flow/recorders/CameraRecorder.ts", "../../src/new-flow/checkers/DeviceCheckerUI.ts", "../../src/new-flow/checkers/DeviceCheckerService.ts", "../../src/proctoring/CapturePhoto.ts", "../../src/extension/extensionEasyProctor.ts", "../../src/extension/extensionEasyCatcher.ts", "../../src/modules/onChangeDevices.ts", "../../src/new-flow/download/downloadService.ts", "../../src/new-flow/proctoring/ProctoringRecorder.ts", "../../src/new-flow/proctoring/ProctoringUploader.ts", "../../src/new-flow/recorders/AlertRecorder.ts", "../../src/new-flow/recorders/ScreenRecorder.ts", "../../src/new-flow/repository/IndexDbSessionRepository.ts", "../../src/utils/geolocation.ts", "../../src/utils/verifyVersion.ts", "../../src/proctoring/Auth.ts", "../../node_modules/@microsoft/signalr/src/Errors.ts", "../../node_modules/@microsoft/signalr/src/HttpClient.ts", "../../node_modules/@microsoft/signalr/src/ILogger.ts", "../../node_modules/@microsoft/signalr/src/Loggers.ts", "../../node_modules/@microsoft/signalr/src/pkg-version.ts", "../../node_modules/@microsoft/signalr/src/Utils.ts", "../../node_modules/@microsoft/signalr/src/FetchHttpClient.ts", "../../node_modules/@microsoft/signalr/src/XhrHttpClient.ts", "../../node_modules/@microsoft/signalr/src/DefaultHttpClient.ts", "../../node_modules/@microsoft/signalr/src/TextMessageFormat.ts", "../../node_modules/@microsoft/signalr/src/HandshakeProtocol.ts", "../../node_modules/@microsoft/signalr/src/IHubProtocol.ts", "../../node_modules/@microsoft/signalr/src/Subject.ts", "../../node_modules/@microsoft/signalr/src/MessageBuffer.ts", "../../node_modules/@microsoft/signalr/src/HubConnection.ts", "../../node_modules/@microsoft/signalr/src/DefaultReconnectPolicy.ts", "../../node_modules/@microsoft/signalr/src/HeaderNames.ts", "../../node_modules/@microsoft/signalr/src/AccessTokenHttpClient.ts", "../../node_modules/@microsoft/signalr/src/ITransport.ts", "../../node_modules/@microsoft/signalr/src/AbortController.ts", "../../node_modules/@microsoft/signalr/src/LongPollingTransport.ts", "../../node_modules/@microsoft/signalr/src/ServerSentEventsTransport.ts", "../../node_modules/@microsoft/signalr/src/WebSocketTransport.ts", "../../node_modules/@microsoft/signalr/src/HttpConnection.ts", "../../node_modules/@microsoft/signalr/src/JsonHubProtocol.ts", "../../node_modules/@microsoft/signalr/src/HubConnectionBuilder.ts", "../../src/proctoring/ExternalCameraChecker.ts", "../../src/proctoring/proctoring.ts", "../../src/proctoring/SignTerm.ts", "../../src/proctoring/useProctoring.ts", "../../src/index.ts"],
4
- "sourcesContent": ["/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e<h.length;e++)u(h[e]);return u}({1:[function(e,t,r){\"use strict\";var d=e(\"./utils\"),c=e(\"./support\"),p=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.encode=function(e){for(var t,r,n,i,s,a,o,h=[],u=0,l=e.length,f=l,c=\"string\"!==d.getTypeOf(e);u<e.length;)f=l-u,n=c?(t=e[u++],r=u<l?e[u++]:0,u<l?e[u++]:0):(t=e.charCodeAt(u++),r=u<l?e.charCodeAt(u++):0,u<l?e.charCodeAt(u++):0),i=t>>2,s=(3&t)<<4|r>>4,a=1<f?(15&r)<<2|n>>6:64,o=2<f?63&n:64,h.push(p.charAt(i)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join(\"\")},r.decode=function(e){var t,r,n,i,s,a,o=0,h=0,u=\"data:\";if(e.substr(0,u.length)===u)throw new Error(\"Invalid base64 input, it looks like a data url.\");var l,f=3*(e=e.replace(/[^A-Za-z0-9+/=]/g,\"\")).length/4;if(e.charAt(e.length-1)===p.charAt(64)&&f--,e.charAt(e.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error(\"Invalid base64 input, bad content length.\");for(l=c.uint8array?new Uint8Array(0|f):new Array(0|f);o<e.length;)t=p.indexOf(e.charAt(o++))<<2|(i=p.indexOf(e.charAt(o++)))>>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r<t;r++)n+=String.fromCharCode(255&e),e>>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var r=this.bytesWritten-e,n=function(e,t,r,n,i){var s=I.transformTo(\"string\",i(n));return R.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+A(e,2)+A(e,2)+A(t,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,e,this.zipComment,this.encodeFileName);this.push({data:n,meta:{percent:100}})},s.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},s.prototype.registerPrevious=function(e){this._sources.push(e);var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end()}),e.on(\"error\",function(e){t.error(e)}),this},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},s.prototype.error=function(e){var t=this._sources;if(!i.prototype.error.call(this,e))return!1;for(var r=0;r<t.length;r++)try{t[r].error(e)}catch(e){}return!0},s.prototype.lock=function(){i.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock()},t.exports=s},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(e,t,r){\"use strict\";var u=e(\"../compressions\"),n=e(\"./ZipFileWorker\");r.generateWorker=function(e,a,t){var o=new n(a.streamFiles,t,a.platform,a.encodeFileName),h=0;try{e.forEach(function(e,t){h++;var r=function(e,t){var r=e||t,n=u[r];if(!n)throw new Error(r+\" is not a valid compression method !\");return n}(t.options.compression,a.compression),n=t.options.compressionOptions||a.compressionOptions||{},i=t.dir,s=t.date;t._compressWorker(r,n).withStreamInfo(\"file\",{name:e,dir:i,date:s,comment:t.comment||\"\",unixPermissions:t.unixPermissions,dosPermissions:t.dosPermissions}).pipe(o)}),o.entriesCount=h}catch(e){o.error(e)}return o}},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(e,t,r){\"use strict\";function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");this.files=Object.create(null),this.comment=null,this.root=\"\",this.clone=function(){var e=new n;for(var t in this)\"function\"!=typeof this[t]&&(e[t]=this[t]);return e}}(n.prototype=e(\"./object\")).loadAsync=e(\"./load\"),n.support=e(\"./support\"),n.defaults=e(\"./defaults\"),n.version=\"3.10.1\",n.loadAsync=function(e,t){return(new n).loadAsync(e,t)},n.external=e(\"./external\"),t.exports=n},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(e,t,r){\"use strict\";var u=e(\"./utils\"),i=e(\"./external\"),n=e(\"./utf8\"),s=e(\"./zipEntries\"),a=e(\"./stream/Crc32Probe\"),l=e(\"./nodejsUtils\");function f(n){return new i.Promise(function(e,t){var r=n.decompressed.getContentWorker().pipe(new a);r.on(\"error\",function(e){t(e)}).on(\"end\",function(){r.streamInfo.crc32!==n.decompressed.crc32?t(new Error(\"Corrupted zip : CRC32 mismatch\")):e()}).resume()})}t.exports=function(e,o){var h=this;return o=u.extend(o||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:n.utf8decode}),l.isNode&&l.isStream(e)?i.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\")):u.prepareContent(\"the loaded zip file\",e,!0,o.optimizedBinaryString,o.base64).then(function(e){var t=new s(o);return t.load(e),t}).then(function(e){var t=[i.Promise.resolve(e)],r=e.files;if(o.checkCRC32)for(var n=0;n<r.length;n++)t.push(f(r[n]));return i.Promise.all(t)}).then(function(e){for(var t=e.shift(),r=t.files,n=0;n<r.length;n++){var i=r[n],s=i.fileNameStr,a=u.resolve(i.fileNameStr);h.file(a,i.decompressed,{binary:!0,optimizedBinaryString:!0,date:i.date,dir:i.dir,comment:i.fileCommentStr.length?i.fileCommentStr:null,unixPermissions:i.unixPermissions,dosPermissions:i.dosPermissions,createFolders:o.createFolders}),i.dir||(h.file(a).unsafeOriginalName=s)}return t.zipComment.length&&(h.comment=t.zipComment),h})}},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../stream/GenericWorker\");function s(e,t){i.call(this,\"Nodejs stream input adapter for \"+e),this._upstreamEnded=!1,this._bindStream(t)}n.inherits(s,i),s.prototype._bindStream=function(e){var t=this;(this._stream=e).pause(),e.on(\"data\",function(e){t.push({data:e,meta:{percent:0}})}).on(\"error\",function(e){t.isPaused?this.generatedError=e:t.error(e)}).on(\"end\",function(){t.isPaused?t._upstreamEnded=!0:t.end()})},s.prototype.pause=function(){return!!i.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},t.exports=s},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(e,t,r){\"use strict\";var i=e(\"readable-stream\").Readable;function n(e,t,r){i.call(this,t),this._helper=e;var n=this;e.on(\"data\",function(e,t){n.push(e)||n._helper.pause(),r&&r(t)}).on(\"error\",function(e){n.emit(\"error\",e)}).on(\"end\",function(){n.push(null)})}e(\"../utils\").inherits(n,i),n.prototype._read=function(){this._helper.resume()},t.exports=n},{\"../utils\":32,\"readable-stream\":16}],14:[function(e,t,r){\"use strict\";t.exports={isNode:\"undefined\"!=typeof Buffer,newBufferFrom:function(e,t){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(e,t);if(\"number\"==typeof e)throw new Error('The \"data\" argument must not be a number');return new Buffer(e,t)},allocBuffer:function(e){if(Buffer.alloc)return Buffer.alloc(e);var t=new Buffer(e);return t.fill(0),t},isBuffer:function(e){return Buffer.isBuffer(e)},isStream:function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.pause&&\"function\"==typeof e.resume}}},{}],15:[function(e,t,r){\"use strict\";function s(e,t,r){var n,i=u.getTypeOf(t),s=u.extend(r||{},f);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),\"string\"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(e=g(e)),s.createFolders&&(n=_(e))&&b.call(this,n,!0);var a=\"string\"===i&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!a),(t instanceof c&&0===t.uncompressedSize||s.dir||!t||0===t.length)&&(s.base64=!1,s.binary=!0,t=\"\",s.compression=\"STORE\",i=\"string\");var o=null;o=t instanceof c||t instanceof l?t:p.isNode&&p.isStream(t)?new m(e,t):u.prepareContent(e,t,s.binary,s.optimizedBinaryString,s.base64);var h=new d(e,o,s);this.files[e]=h}var i=e(\"./utf8\"),u=e(\"./utils\"),l=e(\"./stream/GenericWorker\"),a=e(\"./stream/StreamHelper\"),f=e(\"./defaults\"),c=e(\"./compressedObject\"),d=e(\"./zipObject\"),o=e(\"./generate\"),p=e(\"./nodejsUtils\"),m=e(\"./nodejs/NodejsStreamInputAdapter\"),_=function(e){\"/\"===e.slice(-1)&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf(\"/\");return 0<t?e.substring(0,t):\"\"},g=function(e){return\"/\"!==e.slice(-1)&&(e+=\"/\"),e},b=function(e,t){return t=void 0!==t?t:f.createFolders,e=g(e),this.files[e]||s.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function h(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)}var n={load:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},forEach:function(e){var t,r,n;for(t in this.files)n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n)},filter:function(r){var n=[];return this.forEach(function(e,t){r(e,t)&&n.push(t)}),n},file:function(e,t,r){if(1!==arguments.length)return e=this.root+e,s.call(this,e,t,r),this;if(h(e)){var n=e;return this.filter(function(e,t){return!t.dir&&n.test(e)})}var i=this.files[this.root+e];return i&&!i.dir?i:null},folder:function(r){if(!r)return this;if(h(r))return this.filter(function(e,t){return t.dir&&r.test(e)});var e=this.root+r,t=b.call(this,e),n=this.clone();return n.root=t.name,n},remove:function(r){r=this.root+r;var e=this.files[r];if(e||(\"/\"!==r.slice(-1)&&(r+=\"/\"),e=this.files[r]),e&&!e.dir)delete this.files[r];else for(var t=this.filter(function(e,t){return t.name.slice(0,r.length)===r}),n=0;n<t.length;n++)delete this.files[t[n].name];return this},generate:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},generateInternalStream:function(e){var t,r={};try{if((r=u.extend(e||{},{streamFiles:!1,compression:\"STORE\",compressionOptions:null,type:\"\",platform:\"DOS\",comment:null,mimeType:\"application/zip\",encodeFileName:i.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),\"binarystring\"===r.type&&(r.type=\"string\"),!r.type)throw new Error(\"No output type specified.\");u.checkSupport(r.type),\"darwin\"!==r.platform&&\"freebsd\"!==r.platform&&\"linux\"!==r.platform&&\"sunos\"!==r.platform||(r.platform=\"UNIX\"),\"win32\"===r.platform&&(r.platform=\"DOS\");var n=r.comment||this.comment||\"\";t=o.generateWorker(this,r,n)}catch(e){(t=new l(\"error\")).error(e)}return new a(t,r.type||\"string\",r.mimeType)},generateAsync:function(e,t){return this.generateInternalStream(e).accumulate(t)},generateNodeStream:function(e,t){return(e=e||{}).type||(e.type=\"nodebuffer\"),this.generateInternalStream(e).toNodejsStream(t)}};t.exports=n},{\"./compressedObject\":2,\"./defaults\":5,\"./generate\":9,\"./nodejs/NodejsStreamInputAdapter\":12,\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31,\"./utils\":32,\"./zipObject\":35}],16:[function(e,t,r){\"use strict\";t.exports=e(\"stream\")},{stream:void 0}],17:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e);for(var t=0;t<this.data.length;t++)e[t]=255&e[t]}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data[this.zero+e]},i.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===t&&this.data[s+1]===r&&this.data[s+2]===n&&this.data[s+3]===i)return s-this.zero;return-1},i.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.readData(4);return t===s[0]&&r===s[1]&&n===s[2]&&i===s[3]},i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],18:[function(e,t,r){\"use strict\";var n=e(\"../utils\");function i(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}i.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+e+\"). Corrupted zip ?\")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(){},readInt:function(e){var t,r=0;for(this.checkOffset(e),t=this.index+e-1;t>=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"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}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r<this._listeners[e].length;r++)this._listeners[e][r].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.end()}),e.on(\"error\",function(e){t.error(e)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var e=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},lock:function(){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var e=\"Worker \"+this.name;return this.previous?this.previous+\" -> \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r<t.length;r++)s+=t[r].length;switch(e){case\"string\":return t.join(\"\");case\"array\":return Array.prototype.concat.apply([],t);case\"uint8array\":for(i=new Uint8Array(s),r=0;r<t.length;r++)i.set(t[r],n),n+=t[r].length;return i;case\"nodebuffer\":return Buffer.concat(t);default:throw new Error(\"concat : unsupported type '\"+e+\"'\")}}(i,n),a);t(e)}catch(e){r(e)}n=[]}).resume()})}function f(e,t,r){var n=t;switch(t){case\"blob\":case\"arraybuffer\":n=\"uint8array\";break;case\"base64\":n=\"string\"}try{this._internalType=n,this._outputType=t,this._mimeType=r,h.checkSupport(n),this._worker=e.pipe(new i(n)),e.lock()}catch(e){this._worker=new s(\"error\"),this._worker.error(e)}}f.prototype={accumulate:function(e){return l(this,e)},on:function(e,t){var r=this;return\"data\"===e?this._worker.on(e,function(e){t.call(r,e.data,e.meta)}):this._worker.on(e,function(){h.delay(t,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(e){if(h.checkSupport(\"nodestream\"),\"nodebuffer\"!==this._outputType)throw new Error(this._outputType+\" is not supported by this method\");return new o(this,{objectMode:\"nodebuffer\"!==this._outputType},e)}},t.exports=f},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(e,t,r){\"use strict\";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,r.nodebuffer=\"undefined\"!=typeof Buffer,r.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)r.blob=!1;else{var n=new ArrayBuffer(0);try{r.blob=0===new Blob([n],{type:\"application/zip\"}).size}catch(e){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);i.append(n),r.blob=0===i.getBlob(\"application/zip\").size}catch(e){r.blob=!1}}}try{r.nodestream=!!e(\"readable-stream\").Readable}catch(e){r.nodestream=!1}},{\"readable-stream\":16}],31:[function(e,t,s){\"use strict\";for(var o=e(\"./utils\"),h=e(\"./support\"),r=e(\"./nodejsUtils\"),n=e(\"./stream/GenericWorker\"),u=new Array(256),i=0;i<256;i++)u[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;u[254]=u[254]=1;function a(){n.call(this,\"utf-8 decode\"),this.leftOver=null}function l(){n.call(this,\"utf-8 encode\")}s.utf8encode=function(e){return h.nodebuffer?r.newBufferFrom(e,\"utf-8\"):function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=h.uint8array?new Uint8Array(o):new Array(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t<s;)if((n=e[t++])<128)a[r++]=n;else if(4<(i=u[n]))a[r++]=65533,t+=i-1;else{for(n&=2===i?31:3===i?15:7;1<i&&t<s;)n=n<<6|63&e[t++],i--;1<i?a[r++]=65533:n<65536?a[r++]=n:(n-=65536,a[r++]=55296|n>>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r<e.length;++r)t[r]=255&e.charCodeAt(r);return t}e(\"setimmediate\"),a.newBlob=function(t,r){a.checkSupport(\"blob\");try{return new Blob([t],{type:r})}catch(e){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return n.append(t),n.getBlob(r)}catch(e){throw new Error(\"Bug : can't construct the Blob.\")}}};var i={stringifyByChunk:function(e,t,r){var n=[],i=0,s=e.length;if(s<=r)return String.fromCharCode.apply(null,e);for(;i<s;)\"array\"===t||\"nodebuffer\"===t?n.push(String.fromCharCode.apply(null,e.slice(i,Math.min(i+r,s)))):n.push(String.fromCharCode.apply(null,e.subarray(i,Math.min(i+r,s)))),i+=r;return n.join(\"\")},stringifyByChar:function(e){for(var t=\"\",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t},applyCanBeUsed:{uint8array:function(){try{return o.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(e){return!1}}(),nodebuffer:function(){try{return o.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(e){return!1}}()}};function s(e){var t=65536,r=a.getTypeOf(e),n=!0;if(\"uint8array\"===r?n=i.applyCanBeUsed.uint8array:\"nodebuffer\"===r&&(n=i.applyCanBeUsed.nodebuffer),n)for(;1<t;)try{return i.stringifyByChunk(e,r,t)}catch(e){t=Math.floor(t/2)}return i.stringifyByChar(e)}function f(e,t){for(var r=0;r<e.length;r++)t[r]=e[r];return t}a.applyFromCharCode=s;var c={};c.string={string:n,array:function(e){return l(e,new Array(e.length))},arraybuffer:function(e){return c.string.uint8array(e).buffer},uint8array:function(e){return l(e,new Uint8Array(e.length))},nodebuffer:function(e){return l(e,r.allocBuffer(e.length))}},c.array={string:s,array:n,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(e)}},c.arraybuffer={string:function(e){return s(new Uint8Array(e))},array:function(e){return f(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:n,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(new Uint8Array(e))}},c.uint8array={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:n,nodebuffer:function(e){return r.newBufferFrom(e)}},c.nodebuffer={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return c.nodebuffer.uint8array(e).buffer},uint8array:function(e){return f(e,new Uint8Array(e.length))},nodebuffer:n},a.transformTo=function(e,t){if(t=t||\"\",!e)return t;a.checkSupport(e);var r=a.getTypeOf(t);return c[r][e](t)},a.resolve=function(e){for(var t=e.split(\"/\"),r=[],n=0;n<t.length;n++){var i=t[n];\".\"===i||\"\"===i&&0!==n&&n!==t.length-1||(\"..\"===i?r.pop():r.push(i))}return r.join(\"/\")},a.getTypeOf=function(e){return\"string\"==typeof e?\"string\":\"[object Array]\"===Object.prototype.toString.call(e)?\"array\":o.nodebuffer&&r.isBuffer(e)?\"nodebuffer\":o.uint8array&&e instanceof Uint8Array?\"uint8array\":o.arraybuffer&&e instanceof ArrayBuffer?\"arraybuffer\":void 0},a.checkSupport=function(e){if(!o[e.toLowerCase()])throw new Error(e+\" is not supported by this platform\")},a.MAX_VALUE_16BITS=65535,a.MAX_VALUE_32BITS=-1,a.pretty=function(e){var t,r,n=\"\";for(r=0;r<(e||\"\").length;r++)n+=\"\\\\x\"+((t=e.charCodeAt(r))<16?\"0\":\"\")+t.toString(16).toUpperCase();return n},a.delay=function(e,t,r){setImmediate(function(){e.apply(r||null,t||[])})},a.inherits=function(e,t){function r(){}r.prototype=t.prototype,e.prototype=new r},a.extend=function(){var e,t,r={};for(e=0;e<arguments.length;e++)for(t in arguments[e])Object.prototype.hasOwnProperty.call(arguments[e],t)&&void 0===r[t]&&(r[t]=arguments[e][t]);return r},a.prepareContent=function(r,e,n,i,s){return u.Promise.resolve(e).then(function(n){return o.blob&&(n instanceof Blob||-1!==[\"[object File]\",\"[object Blob]\"].indexOf(Object.prototype.toString.call(n)))&&\"undefined\"!=typeof FileReader?new u.Promise(function(t,r){var e=new FileReader;e.onload=function(e){t(e.target.result)},e.onerror=function(e){r(e.target.error)},e.readAsArrayBuffer(n)}):n}).then(function(e){var t=a.getTypeOf(e);return t?(\"arraybuffer\"===t?e=a.transformTo(\"uint8array\",e):\"string\"===t&&(s?e=h.decode(e):n&&!0!==i&&(e=function(e){return l(e,o.uint8array?new Uint8Array(e.length):new Array(e.length))}(e))),e):u.Promise.reject(new Error(\"Can't read the data of '\"+r+\"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\"))})}},{\"./base64\":1,\"./external\":6,\"./nodejsUtils\":14,\"./support\":30,setimmediate:54}],33:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),i=e(\"./utils\"),s=e(\"./signature\"),a=e(\"./zipEntry\"),o=e(\"./support\");function h(e){this.files=[],this.loadOptions=e}h.prototype={checkSignature:function(e){if(!this.reader.readAndCheckSignature(e)){this.reader.index-=4;var t=this.reader.readString(4);throw new Error(\"Corrupted zip or bug: unexpected signature (\"+i.pretty(t)+\", expected \"+i.pretty(e)+\")\")}},isSignature:function(e,t){var r=this.reader.index;this.reader.setIndex(e);var n=this.reader.readString(4)===t;return this.reader.setIndex(r),n},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var e=this.reader.readData(this.zipCommentLength),t=o.uint8array?\"uint8array\":\"array\",r=i.transformTo(t,e);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var e,t,r,n=this.zip64EndOfCentralSize-44;0<n;)e=this.reader.readInt(2),t=this.reader.readInt(4),r=this.reader.readData(t),this.zip64ExtensibleData[e]={id:e,length:t,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var e,t;for(e=0;e<this.files.length;e++)t=this.files[e],this.reader.setIndex(t.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8(),t.processAttributes()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(e=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(e);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error(\"Corrupted zip or bug: expected \"+this.centralDirRecords+\" records in central dir, got \"+this.files.length)},readEndOfCentral:function(){var e=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(e<0)throw!this.isSignature(0,s.LOCAL_FILE_HEADER)?new Error(\"Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\"):new Error(\"Corrupted zip: can't find end of central directory\");this.reader.setIndex(e);var t=e;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,(e=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");if(this.reader.setIndex(e),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var n=t-r;if(0<n)this.isSignature(t,s.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(n)+\" bytes.\")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=h},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utils\":32,\"./zipEntry\":34}],34:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),s=e(\"./utils\"),i=e(\"./compressedObject\"),a=e(\"./crc32\"),o=e(\"./utf8\"),h=e(\"./compressions\"),u=e(\"./support\");function l(e,t){this.options=e,this.loadOptions=t}l.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)\");if(null===(t=function(e){for(var t in h)if(Object.prototype.hasOwnProperty.call(h,t)&&h[t].magic===e)return h[t];return null}(this.compressionMethod)))throw new Error(\"Corrupted zip : compression \"+s.pretty(this.compressionMethod)+\" unknown (inner file : \"+s.transformTo(\"string\",this.fileName)+\")\");this.decompressed=new i(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4<i;)t=e.readInt(2),r=e.readInt(2),n=e.readData(r),this.extraFields[t]={id:t,length:r,value:n};e.setIndex(i)},handleUTF8:function(){var e=u.uint8array?\"uint8array\":\"array\";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var t=this.findExtraFieldUnicodePath();if(null!==t)this.fileNameStr=t;else{var r=s.transformTo(e,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var n=this.findExtraFieldUnicodeComment();if(null!==n)this.fileCommentStr=n;else{var i=s.transformTo(e,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileName)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileComment)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null}},t.exports=l},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(e,t,r){\"use strict\";function n(e,t,r){this.name=e,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=t,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=e(\"./stream/StreamHelper\"),i=e(\"./stream/DataWorker\"),a=e(\"./utf8\"),o=e(\"./compressedObject\"),h=e(\"./stream/GenericWorker\");n.prototype={internalStream:function(e){var t=null,r=\"string\";try{if(!e)throw new Error(\"No output type specified.\");var n=\"string\"===(r=e.toLowerCase())||\"text\"===r;\"binarystring\"!==r&&\"text\"!==r||(r=\"string\"),t=this._decompressWorker();var i=!this._dataBinary;i&&!n&&(t=t.pipe(new a.Utf8EncodeWorker)),!i&&n&&(t=t.pipe(new a.Utf8DecodeWorker))}catch(e){(t=new h(\"error\")).error(e)}return new s(t,r,\"\")},async:function(e,t){return this.internalStream(e).accumulate(t)},nodeStream:function(e,t){return this.internalStream(e||\"nodebuffer\").toNodejsStream(t)},_compressWorker:function(e,t){if(this._data instanceof o&&this._data.compression.magic===e.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,e,t)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof h?this._data:new i(this._data)}};for(var u=[\"asText\",\"asBinary\",\"asNodeBuffer\",\"asUint8Array\",\"asArrayBuffer\"],l=function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},f=0;f<u.length;f++)n.prototype[u[f]]=l;t.exports=n},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(e,l,t){(function(t){\"use strict\";var r,n,e=t.MutationObserver||t.WebKitMutationObserver;if(e){var i=0,s=new e(u),a=t.document.createTextNode(\"\");s.observe(a,{characterData:!0}),r=function(){a.data=i=++i%2}}else if(t.setImmediate||void 0===t.MessageChannel)r=\"document\"in t&&\"onreadystatechange\"in t.document.createElement(\"script\")?function(){var e=t.document.createElement(\"script\");e.onreadystatechange=function(){u(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},t.document.documentElement.appendChild(e)}:function(){setTimeout(u,0)};else{var o=new t.MessageChannel;o.port1.onmessage=u,r=function(){o.port2.postMessage(0)}}var h=[];function u(){var e,t;n=!0;for(var r=h.length;r;){for(t=h,h=[],e=-1;++e<r;)t[e]();r=h.length}n=!1}l.exports=function(e){1!==h.push(e)||n||r()}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],37:[function(e,t,r){\"use strict\";var i=e(\"immediate\");function u(){}var l={},s=[\"REJECTED\"],a=[\"FULFILLED\"],n=[\"PENDING\"];function o(e){if(\"function\"!=typeof e)throw new TypeError(\"resolver must be a function\");this.state=n,this.queue=[],this.outcome=void 0,e!==u&&d(this,e)}function h(e,t,r){this.promise=e,\"function\"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),\"function\"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(t,r,n){i(function(){var e;try{e=r(n)}catch(e){return l.reject(t,e)}e===t?l.reject(t,new TypeError(\"Cannot resolve promise with itself\")):l.resolve(t,e)})}function c(e){var t=e&&e.then;if(e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof t)return function(){t.apply(e,arguments)}}function d(t,e){var r=!1;function n(e){r||(r=!0,l.reject(t,e))}function i(e){r||(r=!0,l.resolve(t,e))}var s=p(function(){e(i,n)});\"error\"===s.status&&n(s.value)}function p(e,t){var r={};try{r.value=e(t),r.status=\"success\"}catch(e){r.status=\"error\",r.value=e}return r}(t.exports=o).prototype.finally=function(t){if(\"function\"!=typeof t)return this;var r=this.constructor;return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})},o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if(\"function\"!=typeof e&&this.state===a||\"function\"!=typeof t&&this.state===s)return this;var r=new this.constructor(u);this.state!==n?f(r,this.state===a?e:t,this.outcome):this.queue.push(new h(r,e,t));return r},h.prototype.callFulfilled=function(e){l.resolve(this.promise,e)},h.prototype.otherCallFulfilled=function(e){f(this.promise,this.onFulfilled,e)},h.prototype.callRejected=function(e){l.reject(this.promise,e)},h.prototype.otherCallRejected=function(e){f(this.promise,this.onRejected,e)},l.resolve=function(e,t){var r=p(c,t);if(\"error\"===r.status)return l.reject(e,r.value);var n=r.value;if(n)d(e,n);else{e.state=a,e.outcome=t;for(var i=-1,s=e.queue.length;++i<s;)e.queue[i].callFulfilled(t)}return e},l.reject=function(e,t){e.state=s,e.outcome=t;for(var r=-1,n=e.queue.length;++r<n;)e.queue[r].callRejected(t);return e},o.resolve=function(e){if(e instanceof this)return e;return l.resolve(new this(u),e)},o.reject=function(e){var t=new this(u);return l.reject(t,e)},o.all=function(e){var r=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var n=e.length,i=!1;if(!n)return this.resolve([]);var s=new Array(n),a=0,t=-1,o=new this(u);for(;++t<n;)h(e[t],t);return o;function h(e,t){r.resolve(e).then(function(e){s[t]=e,++a!==n||i||(i=!0,l.resolve(o,s))},function(e){i||(i=!0,l.reject(o,e))})}},o.race=function(e){var t=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var r=e.length,n=!1;if(!r)return this.resolve([]);var i=-1,s=new this(u);for(;++i<r;)a=e[i],t.resolve(a).then(function(e){n||(n=!0,l.resolve(s,e))},function(e){n||(n=!0,l.reject(s,e))});var a;return s}},{immediate:36}],38:[function(e,t,r){\"use strict\";var n={};(0,e(\"./lib/utils/common\").assign)(n,e(\"./lib/deflate\"),e(\"./lib/inflate\"),e(\"./lib/zlib/constants\")),t.exports=n},{\"./lib/deflate\":39,\"./lib/inflate\":40,\"./lib/utils/common\":41,\"./lib/zlib/constants\":44}],39:[function(e,t,r){\"use strict\";var a=e(\"./zlib/deflate\"),o=e(\"./utils/common\"),h=e(\"./utils/strings\"),i=e(\"./zlib/messages\"),s=e(\"./zlib/zstream\"),u=Object.prototype.toString,l=0,f=-1,c=0,d=8;function p(e){if(!(this instanceof p))return new p(e);this.options=o.assign({level:f,method:d,chunkSize:16384,windowBits:15,memLevel:8,strategy:c,to:\"\"},e||{});var t=this.options;t.raw&&0<t.windowBits?t.windowBits=-t.windowBits:t.gzip&&0<t.windowBits&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=a.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==l)throw new Error(i[r]);if(t.header&&a.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(n=\"string\"==typeof t.dictionary?h.string2buf(t.dictionary):\"[object ArrayBuffer]\"===u.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,(r=a.deflateSetDictionary(this.strm,n))!==l)throw new Error(i[r]);this._dict_set=!0}}function n(e,t){var r=new p(t);if(r.push(e,!0),r.err)throw r.msg||i[r.err];return r.result}p.prototype.push=function(e,t){var r,n,i=this.strm,s=this.options.chunkSize;if(this.ended)return!1;n=t===~~t?t:!0===t?4:0,\"string\"==typeof e?i.input=h.string2buf(e):\"[object ArrayBuffer]\"===u.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(0===i.avail_out&&(i.output=new o.Buf8(s),i.next_out=0,i.avail_out=s),1!==(r=a.deflate(i,n))&&r!==l)return this.onEnd(r),!(this.ended=!0);0!==i.avail_out&&(0!==i.avail_in||4!==n&&2!==n)||(\"string\"===this.options.to?this.onData(h.buf2binstring(o.shrinkBuf(i.output,i.next_out))):this.onData(o.shrinkBuf(i.output,i.next_out)))}while((0<i.avail_in||0===i.avail_out)&&1!==r);return 4===n?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l):2!==n||(this.onEnd(l),!(i.avail_out=0))},p.prototype.onData=function(e){this.chunks.push(e)},p.prototype.onEnd=function(e){e===l&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=p,r.deflate=n,r.deflateRaw=function(e,t){return(t=t||{}).raw=!0,n(e,t)},r.gzip=function(e,t){return(t=t||{}).gzip=!0,n(e,t)}},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/deflate\":46,\"./zlib/messages\":51,\"./zlib/zstream\":53}],40:[function(e,t,r){\"use strict\";var c=e(\"./zlib/inflate\"),d=e(\"./utils/common\"),p=e(\"./utils/strings\"),m=e(\"./zlib/constants\"),n=e(\"./zlib/messages\"),i=e(\"./zlib/zstream\"),s=e(\"./zlib/gzheader\"),_=Object.prototype.toString;function a(e){if(!(this instanceof a))return new a(e);this.options=d.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&0<=t.windowBits&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(0<=t.windowBits&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),15<t.windowBits&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new i,this.strm.avail_out=0;var r=c.inflateInit2(this.strm,t.windowBits);if(r!==m.Z_OK)throw new Error(n[r]);this.header=new s,c.inflateGetHeader(this.strm,this.header)}function o(e,t){var r=new a(t);if(r.push(e,!0),r.err)throw r.msg||n[r.err];return r.result}a.prototype.push=function(e,t){var r,n,i,s,a,o,h=this.strm,u=this.options.chunkSize,l=this.options.dictionary,f=!1;if(this.ended)return!1;n=t===~~t?t:!0===t?m.Z_FINISH:m.Z_NO_FLUSH,\"string\"==typeof e?h.input=p.binstring2buf(e):\"[object ArrayBuffer]\"===_.call(e)?h.input=new Uint8Array(e):h.input=e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new d.Buf8(u),h.next_out=0,h.avail_out=u),(r=c.inflate(h,m.Z_NO_FLUSH))===m.Z_NEED_DICT&&l&&(o=\"string\"==typeof l?p.string2buf(l):\"[object ArrayBuffer]\"===_.call(l)?new Uint8Array(l):l,r=c.inflateSetDictionary(this.strm,o)),r===m.Z_BUF_ERROR&&!0===f&&(r=m.Z_OK,f=!1),r!==m.Z_STREAM_END&&r!==m.Z_OK)return this.onEnd(r),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&r!==m.Z_STREAM_END&&(0!==h.avail_in||n!==m.Z_FINISH&&n!==m.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(i=p.utf8border(h.output,h.next_out),s=h.next_out-i,a=p.buf2string(h.output,i),h.next_out=s,h.avail_out=u-s,s&&d.arraySet(h.output,h.output,i,s,0),this.onData(a)):this.onData(d.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(f=!0)}while((0<h.avail_in||0===h.avail_out)&&r!==m.Z_STREAM_END);return r===m.Z_STREAM_END&&(n=m.Z_FINISH),n===m.Z_FINISH?(r=c.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):n!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(h.avail_out=0))},a.prototype.onData=function(e){this.chunks.push(e)},a.prototype.onEnd=function(e){e===m.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=d.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(e,t){return(t=t||{}).raw=!0,o(e,t)},r.ungzip=o},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/constants\":44,\"./zlib/gzheader\":47,\"./zlib/inflate\":49,\"./zlib/messages\":51,\"./zlib/zstream\":53}],41:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var i={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){var t,r,n,i,s,a;for(t=n=0,r=e.length;t<r;t++)n+=e[t].length;for(a=new Uint8Array(n),t=i=0,r=e.length;t<r;t++)s=e[t],a.set(s,i),i+=s.length;return a}},s={arraySet:function(e,t,r,n,i){for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){return[].concat.apply([],e)}};r.setTyped=function(e){e?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,i)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(n)},{}],42:[function(e,t,r){\"use strict\";var h=e(\"./common\"),i=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(e){i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){s=!1}for(var u=new h.Buf8(256),n=0;n<256;n++)u[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;function l(e,t){if(t<65537&&(e.subarray&&s||!e.subarray&&i))return String.fromCharCode.apply(null,h.shrinkBuf(e,t));for(var r=\"\",n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r}u[254]=u[254]=1,r.string2buf=function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=new h.Buf8(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r<n;r++)t[r]=e.charCodeAt(r);return t},r.buf2string=function(e,t){var r,n,i,s,a=t||e.length,o=new Array(2*a);for(r=n=0;r<a;)if((i=e[r++])<128)o[n++]=i;else if(4<(s=u[i]))o[n++]=65533,r+=s-1;else{for(i&=2===s?31:3===s?15:7;1<s&&r<a;)i=i<<6|63&e[r++],s--;1<s?o[n++]=65533:i<65536?o[n++]=i:(i-=65536,o[n++]=55296|i>>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(i=i+t[n++]|0)|0,--a;);i%=65521,s%=65521}return i|s<<16|0}},{}],44:[function(e,t,r){\"use strict\";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(e,t,r){\"use strict\";var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4<e?9:0)}function D(e){for(var t=e.length;0<=--t;)e[t]=0}function F(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&s<c);if(n=S-(c-s),s=c-S,a<n){if(e.match_start=t,o<=(a=n))break;d=u[s+a-1],p=u[s+a]}}}while((t=f[t&l])>h&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u<l&&(l=u),r=0===l?0:(a.avail_in-=l,c.arraySet(o,a.input,a.next_in,l,h),1===a.state.wrap?a.adler=d(a.adler,o,l,h):2===a.state.wrap&&(a.adler=p(a.adler,o,l,h)),a.next_in+=l,a.total_in+=l,l),e.lookahead+=r,e.lookahead+e.insert>=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+x-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<x)););}while(e.lookahead<z&&0!==e.strm.avail_in)}function Z(e,t){for(var r,n;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r)),e.match_length>=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart,0!=--e.match_length;);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function W(e,t){for(var r,n,i;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=x-1,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r),e.match_length<=5&&(1===e.strategy||e.match_length===x&&4096<e.strstart-e.match_start)&&(e.match_length=x-1)),e.prev_length>=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!=--e.prev_length;);if(e.match_available=0,e.match_length=x-1,e.strstart++,n&&(N(e,!1),0===e.strm.avail_out))return A}else if(e.match_available){if((n=u._tr_tally(e,0,e.window[e.strstart-1]))&&N(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return A}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=u._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function M(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}function H(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=v,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new c.Buf16(2*w),this.dyn_dtree=new c.Buf16(2*(2*a+1)),this.bl_tree=new c.Buf16(2*(2*o+1)),D(this.dyn_ltree),D(this.dyn_dtree),D(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new c.Buf16(k+1),this.heap=new c.Buf16(2*s+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new c.Buf16(2*s+1),D(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function G(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=i,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?C:E,e.adler=2===t.wrap?0:1,t.last_flush=l,u._tr_init(t),m):R(e,_)}function K(e){var t=G(e);return t===m&&function(e){e.window_size=2*e.w_size,D(e.head),e.max_lazy_match=h[e.level].max_lazy,e.good_match=h[e.level].good_length,e.nice_match=h[e.level].nice_length,e.max_chain_length=h[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=x-1,e.match_available=0,e.ins_h=0}(e.state),t}function Y(e,t,r,n,i,s){if(!e)return _;var a=1;if(t===g&&(t=6),n<0?(a=0,n=-n):15<n&&(a=2,n-=16),i<1||y<i||r!==v||n<8||15<n||t<0||9<t||s<0||b<s)return R(e,_);8===n&&(n=9);var o=new H;return(e.state=o).strm=e,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+x-1)/x),o.window=new c.Buf8(2*o.w_size),o.head=new c.Buf16(o.hash_size),o.prev=new c.Buf16(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new c.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=s,o.method=r,K(e)}h=[new M(0,0,0,0,function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5<t||t<0)return e?R(e,_):_;if(n=e.state,!e.output||!e.input&&0!==e.avail_in||666===n.status&&t!==f)return R(e,0===e.avail_out?-5:_);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===C)if(2===n.wrap)e.adler=0,U(n,31),U(n,139),U(n,8),n.gzhead?(U(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),U(n,255&n.gzhead.time),U(n,n.gzhead.time>>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.name.length?255&n.gzhead.name.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.comment.length?255&n.gzhead.comment.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0<e.strstart&&(n=a[i=e.strstart-1])===a[++i]&&n===a[++i]&&n===a[++i]){s=e.strstart+S;do{}while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<s);e.match_length=S-(s-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0<n.wrap&&(n.wrap=-n.wrap),0!==n.pending?m:1)},r.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==C&&69!==t&&73!==t&&91!==t&&103!==t&&t!==E&&666!==t?R(e,_):(e.state=null,t===E?R(e,-3):m):_},r.deflateSetDictionary=function(e,t){var r,n,i,s,a,o,h,u,l=t.length;if(!e||!e.state)return _;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==C||r.lookahead)return _;for(1===s&&(e.adler=d(e.adler,t,l,0)),r.wrap=0,l>=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+x-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++,--i;);r.strstart=n,r.lookahead=x-1,j(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=x-1,r.match_available=0,e.next_in=o,e.input=h,e.avail_in=a,r.wrap=s,m},r.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./messages\":51,\"./trees\":52}],47:[function(e,t,r){\"use strict\";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},{}],48:[function(e,t,r){\"use strict\";t.exports=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C;r=e.state,n=e.next_in,z=e.input,i=n+(e.avail_in-5),s=e.next_out,C=e.output,a=s-(t-e.avail_out),o=s+(e.avail_out-257),h=r.dmax,u=r.wsize,l=r.whave,f=r.wnext,c=r.window,d=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;e:do{p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=m[d&g];t:for(;;){if(d>>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<<y)-1)];continue t}if(32&y){r.mode=12;break e}e.msg=\"invalid literal/length code\",r.mode=30;break e}w=65535&v,(y&=15)&&(p<y&&(d+=z[n++]<<p,p+=8),w+=d&(1<<y)-1,d>>>=y,p-=y),p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=_[d&b];r:for(;;){if(d>>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<<y)-1)];continue r}e.msg=\"invalid distance code\",r.mode=30;break e}if(k=65535&v,p<(y&=15)&&(d+=z[n++]<<p,(p+=8)<y&&(d+=z[n++]<<p,p+=8)),h<(k+=d&(1<<y)-1)){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(d>>>=y,p-=y,(y=s-a)<k){if(l<(y=k-y)&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(S=c,(x=0)===f){if(x+=u-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}}else if(f<y){if(x+=u+f-y,(y-=f)<w){for(w-=y;C[s++]=c[x++],--y;);if(x=0,f<w){for(w-=y=f;C[s++]=c[x++],--y;);x=s-k,S=C}}}else if(x+=f-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}for(;2<w;)C[s++]=S[x++],C[s++]=S[x++],C[s++]=S[x++],w-=3;w&&(C[s++]=S[x++],1<w&&(C[s++]=S[x++]))}else{for(x=s-k;C[s++]=C[x++],C[s++]=C[x++],C[s++]=C[x++],2<(w-=3););w&&(C[s++]=C[x++],1<w&&(C[s++]=C[x++]))}break}}break}}while(n<i&&s<o);n-=w=p>>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n<i?i-n+5:5-(n-i),e.avail_out=s<o?o-s+257:257-(s-o),r.hold=d,r.bits=p}},{}],49:[function(e,t,r){\"use strict\";var I=e(\"../utils/common\"),O=e(\"./adler32\"),B=e(\"./crc32\"),R=e(\"./inffast\"),T=e(\"./inftrees\"),D=1,F=2,N=0,U=-2,P=1,n=852,i=592;function L(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){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 a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15<t)?U:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,o(e))):U}function u(e,t){var r,n;return e?(n=new s,(e.state=n).window=null,(r=h(e,t))!==N&&(e.state=null),r):U}var l,f,c=!0;function j(e){if(c){var t;for(l=new I.Buf32(512),f=new I.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(T(D,e.lens,0,288,l,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;T(F,e.lens,0,32,f,0,e.work,{bits:5}),c=!1}e.lencode=l,e.lenbits=9,e.distcode=f,e.distbits=5}function Z(e,t,r,n){var i,s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),n>=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0}r.inflateReset=o,r.inflateReset2=h,r.inflateResetKeep=a,r.inflateInit=function(e){return u(e,15)},r.inflateInit2=u,r.inflate=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C=0,E=new I.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return U;12===(r=e.state).mode&&(r.mode=13),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,f=o,c=h,x=N;e:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(2&r.wrap&&35615===u){E[r.check=0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<<k,e.adler=r.check=1,r.mode=512&u?10:12,l=u=0;break;case 2:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.flags=u,8!=(255&r.flags)){e.msg=\"unknown compression method\",r.mode=30;break}if(57344&r.flags){e.msg=\"unknown header flags set\",r.mode=30;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.time=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(65535&r.check)){e.msg=\"header crc mismatch\",r.mode=30;break}l=u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}e.adler=r.check=L(u),l=u=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,2;e.adler=r.check=1,r.mode=12;case 12:if(5===t||6===t)break e;case 13:if(r.last){u>>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}switch(r.last=1&u,l-=1,3&(u>>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if((65535&u)!=(u>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o<d&&(d=o),h<d&&(d=h),0===d)break e;I.arraySet(i,n,s,d,a),o-=d,s+=d,h-=d,a+=d,r.length-=d;break}r.mode=12;break;case 17:for(;l<14;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.nlen=257+(31&u),u>>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286<r.nlen||30<r.ndist){e.msg=\"too many length or distance symbols\",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.lens[A[r.have++]]=7&u,u>>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(b<16)u>>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u>>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=3+(7&(u>>>=_)),u>>>=3,l-=3}else{for(z=_+7;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=11+(127&(u>>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(g&&0==(240&g)){for(v=_,y=g,w=b;g=(C=r.lencode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<<r.distbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(0==(240&g)){for(v=_,y=g,w=b;g=(C=r.distcode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(h<d&&(d=h),h-=d,r.length-=d;i[a++]=m[p++],--d;);0===r.length&&(r.mode=21);break;case 26:if(0===h)break e;i[a++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;l<32;){if(0===o)break e;o--,u|=n[s++]<<l,l+=8}if(c-=h,e.total_out+=c,r.total+=c,c&&(e.adler=r.check=r.flags?B(r.check,i,c,a-c):O(r.check,i,c,a-c)),c=h,(r.flags?u:L(u))!==r.check){e.msg=\"incorrect data check\",r.mode=30;break}l=u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(4294967295&r.total)){e.msg=\"incorrect length check\",r.mode=30;break}l=u=0}r.mode=29;case 29:x=1;break e;case 30:x=-3;break e;case 31:return-4;case 32:default:return U}return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,(r.wsize||c!==e.avail_out&&r.mode<30&&(r.mode<27||4!==t))&&Z(e,e.output,e.next_out,c-e.avail_out)?(r.mode=31,-4):(f-=e.avail_in,c-=e.avail_out,e.total_in+=f,e.total_out+=c,r.total+=c,r.wrap&&c&&(e.adler=r.check=r.flags?B(r.check,i,c,e.next_out-c):O(r.check,i,c,e.next_out-c)),e.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==f&&0===c||4===t)&&x===N&&(x=-5),x)},r.inflateEnd=function(e){if(!e||!e.state)return U;var t=e.state;return t.window&&(t.window=null),e.state=null,N},r.inflateGetHeader=function(e,t){var r;return e&&e.state?0==(2&(r=e.state).wrap)?U:((r.head=t).done=!1,N):U},r.inflateSetDictionary=function(e,t){var r,n=t.length;return e&&e.state?0!==(r=e.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,t,n,0)!==r.check?-3:Z(e,t,n,n)?(r.mode=31,-4):(r.havedict=1,N):U},r.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./inffast\":48,\"./inftrees\":50}],50:[function(e,t,r){\"use strict\";var D=e(\"../utils/common\"),F=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],N=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],U=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],P=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,r,n,i,s,a,o){var h,u,l,f,c,d,p,m,_,g=o.bits,b=0,v=0,y=0,w=0,k=0,x=0,S=0,z=0,C=0,E=0,A=null,I=0,O=new D.Buf16(16),B=new D.Buf16(16),R=null,T=0;for(b=0;b<=15;b++)O[b]=0;for(v=0;v<n;v++)O[t[r+v]]++;for(k=g,w=15;1<=w&&0===O[w];w--);if(w<k&&(k=w),0===w)return i[s++]=20971520,i[s++]=20971520,o.bits=1,0;for(y=1;y<w&&0===O[y];y++);for(k<y&&(k=y),b=z=1;b<=15;b++)if(z<<=1,(z-=O[b])<0)return-1;if(0<z&&(0===e||1!==w))return-1;for(B[1]=0,b=1;b<15;b++)B[b+1]=B[b]+O[b];for(v=0;v<n;v++)0!==t[r+v]&&(a[B[t[r+v]]++]=v);if(d=0===e?(A=R=a,19):1===e?(A=F,I-=257,R=N,T-=257,256):(A=U,R=P,-1),b=y,c=s,S=v=E=0,l=-1,f=(C=1<<(x=k))-1,1===e&&852<C||2===e&&592<C)return 1;for(;;){for(p=b-S,_=a[v]<d?(m=0,a[v]):a[v]>d?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<<b-S,y=u=1<<x;i[c+(E>>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<<b-1;E&h;)h>>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k<b&&(E&f)!==l){for(0===S&&(S=k),c+=y,z=1<<(x=b-S);x+S<w&&!((z-=O[x+S])<=0);)x++,z<<=1;if(C+=1<<x,1===e&&852<C||2===e&&592<C)return 1;i[l=E&f]=k<<24|x<<16|c-s|0}}return 0!==E&&(i[c+E]=b-S<<24|64<<16|0),o.bits=k,0}},{\"../utils/common\":41}],51:[function(e,t,r){\"use strict\";t.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],52:[function(e,t,r){\"use strict\";var i=e(\"../utils/common\"),o=0,h=1;function n(e){for(var t=e.length;0<=--t;)e[t]=0}var s=0,a=29,u=256,l=u+1+a,f=30,c=19,_=2*l+1,g=15,d=16,p=7,m=256,b=16,v=17,y=18,w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],k=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],z=new Array(2*(l+2));n(z);var C=new Array(2*f);n(C);var E=new Array(512);n(E);var A=new Array(256);n(A);var I=new Array(a);n(I);var O,B,R,T=new Array(f);function D(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function F(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function N(e){return e<256?E[e]:E[256+(e>>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<<e.bi_valid&65535,U(e,e.bi_buf),e.bi_buf=t>>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function L(e,t,r){P(e,r[2*t],r[2*t+1])}function j(e,t){for(var r=0;r|=1&e,e>>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t<l;t++)e.dyn_ltree[2*t]=0;for(t=0;t<f;t++)e.dyn_dtree[2*t]=0;for(t=0;t<c;t++)e.bl_tree[2*t]=0;e.dyn_ltree[2*m]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function M(e){8<e.bi_valid?U(e,e.bi_buf):0<e.bi_valid&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function H(e,t,r,n){var i=2*t,s=2*r;return e[i]<e[s]||e[i]===e[s]&&n[t]<=n[r]}function G(e,t,r){for(var n=e.heap[r],i=r<<1;i<=e.heap_len&&(i<e.heap_len&&H(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!H(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n}function K(e,t,r){var n,i,s,a,o=0;if(0!==e.last_lit)for(;n=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],i=e.pending_buf[e.l_buf+o],o++,0===n?L(e,i,t):(L(e,(s=A[i])+u+1,t),0!==(a=w[s])&&P(e,i-=I[s],a),L(e,s=N(--n),r),0!==(a=k[s])&&P(e,n-=T[s],a)),o<e.last_lit;);L(e,m,t)}function Y(e,t){var r,n,i,s=t.dyn_tree,a=t.stat_desc.static_tree,o=t.stat_desc.has_stree,h=t.stat_desc.elems,u=-1;for(e.heap_len=0,e.heap_max=_,r=0;r<h;r++)0!==s[2*r]?(e.heap[++e.heap_len]=u=r,e.depth[r]=0):s[2*r+1]=0;for(;e.heap_len<2;)s[2*(i=e.heap[++e.heap_len]=u<2?++u:0)]=1,e.depth[i]=0,e.opt_len--,o&&(e.static_len-=a[2*i+1]);for(t.max_code=u,r=e.heap_len>>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u<n||(e.bl_count[s]++,a=0,d<=n&&(a=c[n-d]),o=h[2*n],e.opt_len+=o*(s+a),f&&(e.static_len+=o*(l[2*n+1]+a)));if(0!==m){do{for(s=p-1;0===e.bl_count[s];)s--;e.bl_count[s]--,e.bl_count[s+1]+=2,e.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(n=e.bl_count[s];0!==n;)u<(i=e.heap[--r])||(h[2*i+1]!==s&&(e.opt_len+=(s-h[2*i+1])*h[2*i],h[2*i+1]=s),n--)}}(e,t),Z(s,u,e.bl_count)}function X(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++o<h&&i===a||(o<u?e.bl_tree[2*i]+=o:0!==i?(i!==s&&e.bl_tree[2*i]++,e.bl_tree[2*b]++):o<=10?e.bl_tree[2*v]++:e.bl_tree[2*y]++,s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4))}function V(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),n=0;n<=r;n++)if(i=a,a=t[2*(n+1)+1],!(++o<h&&i===a)){if(o<u)for(;L(e,i,e.bl_tree),0!=--o;);else 0!==i?(i!==s&&(L(e,i,e.bl_tree),o--),L(e,b,e.bl_tree),P(e,o-3,2)):o<=10?(L(e,v,e.bl_tree),P(e,o-3,3)):(L(e,y,e.bl_tree),P(e,o-11,7));s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4)}}n(T);var q=!1;function J(e,t,r,n){P(e,(s<<1)+(n?1:0),3),function(e,t,r,n){M(e),n&&(U(e,r),U(e,~r)),i.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r,!0)}r._tr_init=function(e){q||(function(){var e,t,r,n,i,s=new Array(g+1);for(n=r=0;n<a-1;n++)for(I[n]=r,e=0;e<1<<w[n];e++)A[r++]=n;for(A[r-1]=n,n=i=0;n<16;n++)for(T[n]=i,e=0;e<1<<k[n];e++)E[i++]=n;for(i>>=7;n<f;n++)for(T[n]=i<<7,e=0;e<1<<k[n]-7;e++)E[256+i++]=n;for(t=0;t<=g;t++)s[t]=0;for(e=0;e<=143;)z[2*e+1]=8,e++,s[8]++;for(;e<=255;)z[2*e+1]=9,e++,s[9]++;for(;e<=279;)z[2*e+1]=7,e++,s[7]++;for(;e<=287;)z[2*e+1]=8,e++,s[8]++;for(Z(z,l+1,s),e=0;e<f;e++)C[2*e+1]=5,C[2*e]=j(e,5);O=new D(z,w,u+1,l,g),B=new D(C,k,0,f,g),R=new D(new Array(0),x,0,c,p)}(),q=!0),e.l_desc=new F(e.dyn_ltree,O),e.d_desc=new F(e.dyn_dtree,B),e.bl_desc=new F(e.bl_tree,R),e.bi_buf=0,e.bi_valid=0,W(e)},r._tr_stored_block=J,r._tr_flush_block=function(e,t,r,n){var i,s,a=0;0<e.level?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t<u;t++)if(0!==e.dyn_ltree[2*t])return h;return o}(e)),Y(e,e.l_desc),Y(e,e.d_desc),a=function(e){var t;for(X(e,e.dyn_ltree,e.l_desc.max_code),X(e,e.dyn_dtree,e.d_desc.max_code),Y(e,e.bl_desc),t=c-1;3<=t&&0===e.bl_tree[2*S[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i<n;i++)P(e,e.bl_tree[2*S[i]+1],3);V(e,e.dyn_ltree,t-1),V(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),K(e,e.dyn_ltree,e.dyn_dtree)),W(e),n&&M(e)},r._tr_tally=function(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.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(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r<t.length;r++)t[r]=arguments[r+1];var n={callback:e,args:t};return h[o]=n,i(o),o++},e.clearImmediate=f}function f(e){delete h[e]}function c(e){if(u)setTimeout(c,0,e);else{var t=h[e];if(t){u=!0;try{!function(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(n,r)}}(t)}finally{f(e),u=!1}}}}function d(e){e.source===r&&\"string\"==typeof e.data&&0===e.data.indexOf(a)&&c(+e.data.slice(a.length))}}(\"undefined\"==typeof self?void 0===e?this:e:self)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}]},{},[10])(10)});", "/*\n* FileSaver.js\n* A saveAs() FileSaver implementation.\n*\n* By Eli Grey, http://eligrey.com\n*\n* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n* source : http://purl.eligrey.com/github/FileSaver.js\n*/\n\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nvar _global = typeof window === 'object' && window.window === window\n ? window : typeof self === 'object' && self.self === self\n ? self : typeof global === 'object' && global.global === global\n ? global\n : this\n\nfunction bom (blob, opts) {\n if (typeof opts === 'undefined') opts = { autoBom: false }\n else if (typeof opts !== 'object') {\n console.warn('Deprecated: Expected third argument to be a object')\n opts = { autoBom: !opts }\n }\n\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (opts.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\n }\n return blob\n}\n\nfunction download (url, name, opts) {\n var xhr = new XMLHttpRequest()\n xhr.open('GET', url)\n xhr.responseType = 'blob'\n xhr.onload = function () {\n saveAs(xhr.response, name, opts)\n }\n xhr.onerror = function () {\n console.error('could not download file')\n }\n xhr.send()\n}\n\nfunction corsEnabled (url) {\n var xhr = new XMLHttpRequest()\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false)\n try {\n xhr.send()\n } catch (e) {}\n return xhr.status >= 200 && xhr.status <= 299\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click (node) {\n try {\n node.dispatchEvent(new MouseEvent('click'))\n } catch (e) {\n var evt = document.createEvent('MouseEvents')\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80,\n 20, false, false, false, false, 0, null)\n node.dispatchEvent(evt)\n }\n}\n\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nvar isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent)\n\nvar saveAs = _global.saveAs || (\n // probably in some web worker\n (typeof window !== 'object' || window !== _global)\n ? function saveAs () { /* noop */ }\n\n // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView\n : ('download' in HTMLAnchorElement.prototype && !isMacOSWebView)\n ? function saveAs (blob, name, opts) {\n var URL = _global.URL || _global.webkitURL\n var a = document.createElement('a')\n name = name || blob.name || 'download'\n\n a.download = name\n a.rel = 'noopener' // tabnabbing\n\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob\n if (a.origin !== location.origin) {\n corsEnabled(a.href)\n ? download(blob, name, opts)\n : click(a, a.target = '_blank')\n } else {\n click(a)\n }\n } else {\n // Support blobs\n a.href = URL.createObjectURL(blob)\n setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\n setTimeout(function () { click(a) }, 0)\n }\n }\n\n // Use msSaveOrOpenBlob as a second approach\n : 'msSaveOrOpenBlob' in navigator\n ? function saveAs (blob, name, opts) {\n name = name || blob.name || 'download'\n\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, opts)\n } else {\n var a = document.createElement('a')\n a.href = blob\n a.target = '_blank'\n setTimeout(function () { click(a) })\n }\n } else {\n navigator.msSaveOrOpenBlob(bom(blob, opts), name)\n }\n }\n\n // Fallback to using FileReader and a popup\n : function saveAs (blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank')\n if (popup) {\n popup.document.title =\n popup.document.body.innerText = 'downloading...'\n }\n\n if (typeof blob === 'string') return download(blob, name, opts)\n\n var force = blob.type === 'application/octet-stream'\n var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari\n var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent)\n\n if ((isChromeIOS || (force && isSafari) || isMacOSWebView) && typeof FileReader !== 'undefined') {\n // Safari doesn't allow downloading of blob URLs\n var reader = new FileReader()\n reader.onloadend = function () {\n var url = reader.result\n url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\n if (popup) popup.location.href = url\n else location = url\n popup = null // reverse-tabnabbing #460\n }\n reader.readAsDataURL(blob)\n } else {\n var URL = _global.URL || _global.webkitURL\n var url = URL.createObjectURL(blob)\n if (popup) popup.location = url\n else location.href = url\n popup = null // reverse-tabnabbing #460\n setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\n }\n }\n)\n\n_global.saveAs = saveAs.saveAs = saveAs\n\nif (typeof module !== 'undefined') {\n module.exports = saveAs;\n}\n", "// can-promise has a crash in some versions of react native that dont have\n// standard global objects\n// https://github.com/soldair/node-qrcode/issues/157\n\nmodule.exports = function () {\n return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then\n}\n", "let toSJISFunction\nconst CODEWORDS_COUNT = [\n 0, // Not used\n 26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\n 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\n 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\n]\n\n/**\n * Returns the QR Code size for the specified version\n *\n * @param {Number} version QR Code version\n * @return {Number} size of QR code\n */\nexports.getSymbolSize = function getSymbolSize (version) {\n if (!version) throw new Error('\"version\" cannot be null or undefined')\n if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\n return version * 4 + 17\n}\n\n/**\n * Returns the total number of codewords used to store data and EC information.\n *\n * @param {Number} version QR Code version\n * @return {Number} Data length in bits\n */\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\n return CODEWORDS_COUNT[version]\n}\n\n/**\n * Encode data with Bose-Chaudhuri-Hocquenghem\n *\n * @param {Number} data Value to encode\n * @return {Number} Encoded value\n */\nexports.getBCHDigit = function (data) {\n let digit = 0\n\n while (data !== 0) {\n digit++\n data >>>= 1\n }\n\n return digit\n}\n\nexports.setToSJISFunction = function setToSJISFunction (f) {\n if (typeof f !== 'function') {\n throw new Error('\"toSJISFunc\" is not a valid function.')\n }\n\n toSJISFunction = f\n}\n\nexports.isKanjiModeEnabled = function () {\n return typeof toSJISFunction !== 'undefined'\n}\n\nexports.toSJIS = function toSJIS (kanji) {\n return toSJISFunction(kanji)\n}\n", "exports.L = { bit: 1 }\nexports.M = { bit: 0 }\nexports.Q = { bit: 3 }\nexports.H = { bit: 2 }\n\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n const lcStr = string.toLowerCase()\n\n switch (lcStr) {\n case 'l':\n case 'low':\n return exports.L\n\n case 'm':\n case 'medium':\n return exports.M\n\n case 'q':\n case 'quartile':\n return exports.Q\n\n case 'h':\n case 'high':\n return exports.H\n\n default:\n throw new Error('Unknown EC Level: ' + string)\n }\n}\n\nexports.isValid = function isValid (level) {\n return level && typeof level.bit !== 'undefined' &&\n level.bit >= 0 && level.bit < 4\n}\n\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n}\n", "function BitBuffer () {\n this.buffer = []\n this.length = 0\n}\n\nBitBuffer.prototype = {\n\n get: function (index) {\n const bufIndex = Math.floor(index / 8)\n return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1\n },\n\n put: function (num, length) {\n for (let i = 0; i < length; i++) {\n this.putBit(((num >>> (length - i - 1)) & 1) === 1)\n }\n },\n\n getLengthInBits: function () {\n return this.length\n },\n\n putBit: function (bit) {\n const bufIndex = Math.floor(this.length / 8)\n if (this.buffer.length <= bufIndex) {\n this.buffer.push(0)\n }\n\n if (bit) {\n this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))\n }\n\n this.length++\n }\n}\n\nmodule.exports = BitBuffer\n", "/**\n * Helper class to handle QR Code symbol modules\n *\n * @param {Number} size Symbol size\n */\nfunction BitMatrix (size) {\n if (!size || size < 1) {\n throw new Error('BitMatrix size must be defined and greater than 0')\n }\n\n this.size = size\n this.data = new Uint8Array(size * size)\n this.reservedBit = new Uint8Array(size * size)\n}\n\n/**\n * Set bit value at specified location\n * If reserved flag is set, this bit will be ignored during masking process\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n * @param {Boolean} reserved\n */\nBitMatrix.prototype.set = function (row, col, value, reserved) {\n const index = row * this.size + col\n this.data[index] = value\n if (reserved) this.reservedBit[index] = true\n}\n\n/**\n * Returns bit value at specified location\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.get = function (row, col) {\n return this.data[row * this.size + col]\n}\n\n/**\n * Applies xor operator at specified location\n * (used during masking process)\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n */\nBitMatrix.prototype.xor = function (row, col, value) {\n this.data[row * this.size + col] ^= value\n}\n\n/**\n * Check if bit at specified location is reserved\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.isReserved = function (row, col) {\n return this.reservedBit[row * this.size + col]\n}\n\nmodule.exports = BitMatrix\n", "/**\n * Alignment pattern are fixed reference pattern in defined positions\n * in a matrix symbology, which enables the decode software to re-synchronise\n * the coordinate mapping of the image modules in the event of moderate amounts\n * of distortion of the image.\n *\n * Alignment patterns are present only in QR Code symbols of version 2 or larger\n * and their number depends on the symbol version.\n */\n\nconst getSymbolSize = require('./utils').getSymbolSize\n\n/**\n * Calculate the row/column coordinates of the center module of each alignment pattern\n * for the specified QR Code version.\n *\n * The alignment patterns are positioned symmetrically on either side of the diagonal\n * running from the top left corner of the symbol to the bottom right corner.\n *\n * Since positions are simmetrical only half of the coordinates are returned.\n * Each item of the array will represent in turn the x and y coordinate.\n * @see {@link getPositions}\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinate\n */\nexports.getRowColCoords = function getRowColCoords (version) {\n if (version === 1) return []\n\n const posCount = Math.floor(version / 7) + 2\n const size = getSymbolSize(version)\n const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2\n const positions = [size - 7] // Last coord is always (size - 7)\n\n for (let i = 1; i < posCount - 1; i++) {\n positions[i] = positions[i - 1] - intervals\n }\n\n positions.push(6) // First coord is always 6\n\n return positions.reverse()\n}\n\n/**\n * Returns an array containing the positions of each alignment pattern.\n * Each array's element represent the center point of the pattern as (x, y) coordinates\n *\n * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}\n * and filtering out the items that overlaps with finder pattern\n *\n * @example\n * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.\n * The alignment patterns, therefore, are to be centered on (row, column)\n * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).\n * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns\n * and are not therefore used for alignment patterns.\n *\n * let pos = getPositions(7)\n * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n const coords = []\n const pos = exports.getRowColCoords(version)\n const posLength = pos.length\n\n for (let i = 0; i < posLength; i++) {\n for (let j = 0; j < posLength; j++) {\n // Skip if position is occupied by finder patterns\n if ((i === 0 && j === 0) || // top-left\n (i === 0 && j === posLength - 1) || // bottom-left\n (i === posLength - 1 && j === 0)) { // top-right\n continue\n }\n\n coords.push([pos[i], pos[j]])\n }\n }\n\n return coords\n}\n", "const getSymbolSize = require('./utils').getSymbolSize\nconst FINDER_PATTERN_SIZE = 7\n\n/**\n * Returns an array containing the positions of each finder pattern.\n * Each array's element represent the top-left point of the pattern as (x, y) coordinates\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n const size = getSymbolSize(version)\n\n return [\n // top-left\n [0, 0],\n // top-right\n [size - FINDER_PATTERN_SIZE, 0],\n // bottom-left\n [0, size - FINDER_PATTERN_SIZE]\n ]\n}\n", "/**\n * Data mask pattern reference\n * @type {Object}\n */\nexports.Patterns = {\n PATTERN000: 0,\n PATTERN001: 1,\n PATTERN010: 2,\n PATTERN011: 3,\n PATTERN100: 4,\n PATTERN101: 5,\n PATTERN110: 6,\n PATTERN111: 7\n}\n\n/**\n * Weighted penalty scores for the undesirable features\n * @type {Object}\n */\nconst PenaltyScores = {\n N1: 3,\n N2: 3,\n N3: 40,\n N4: 10\n}\n\n/**\n * Check if mask pattern value is valid\n *\n * @param {Number} mask Mask pattern\n * @return {Boolean} true if valid, false otherwise\n */\nexports.isValid = function isValid (mask) {\n return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7\n}\n\n/**\n * Returns mask pattern from a value.\n * If value is not valid, returns undefined\n *\n * @param {Number|String} value Mask pattern value\n * @return {Number} Valid mask pattern or undefined\n */\nexports.from = function from (value) {\n return exports.isValid(value) ? parseInt(value, 10) : undefined\n}\n\n/**\n* Find adjacent modules in row/column with the same color\n* and assign a penalty value.\n*\n* Points: N1 + i\n* i is the amount by which the number of adjacent modules of the same color exceeds 5\n*/\nexports.getPenaltyN1 = function getPenaltyN1 (data) {\n const size = data.size\n let points = 0\n let sameCountCol = 0\n let sameCountRow = 0\n let lastCol = null\n let lastRow = null\n\n for (let row = 0; row < size; row++) {\n sameCountCol = sameCountRow = 0\n lastCol = lastRow = null\n\n for (let col = 0; col < size; col++) {\n let module = data.get(row, col)\n if (module === lastCol) {\n sameCountCol++\n } else {\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n lastCol = module\n sameCountCol = 1\n }\n\n module = data.get(col, row)\n if (module === lastRow) {\n sameCountRow++\n } else {\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n lastRow = module\n sameCountRow = 1\n }\n }\n\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n }\n\n return points\n}\n\n/**\n * Find 2x2 blocks with the same color and assign a penalty value\n *\n * Points: N2 * (m - 1) * (n - 1)\n */\nexports.getPenaltyN2 = function getPenaltyN2 (data) {\n const size = data.size\n let points = 0\n\n for (let row = 0; row < size - 1; row++) {\n for (let col = 0; col < size - 1; col++) {\n const last = data.get(row, col) +\n data.get(row, col + 1) +\n data.get(row + 1, col) +\n data.get(row + 1, col + 1)\n\n if (last === 4 || last === 0) points++\n }\n }\n\n return points * PenaltyScores.N2\n}\n\n/**\n * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,\n * preceded or followed by light area 4 modules wide\n *\n * Points: N3 * number of pattern found\n */\nexports.getPenaltyN3 = function getPenaltyN3 (data) {\n const size = data.size\n let points = 0\n let bitsCol = 0\n let bitsRow = 0\n\n for (let row = 0; row < size; row++) {\n bitsCol = bitsRow = 0\n for (let col = 0; col < size; col++) {\n bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)\n if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++\n\n bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)\n if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++\n }\n }\n\n return points * PenaltyScores.N3\n}\n\n/**\n * Calculate proportion of dark modules in entire symbol\n *\n * Points: N4 * k\n *\n * k is the rating of the deviation of the proportion of dark modules\n * in the symbol from 50% in steps of 5%\n */\nexports.getPenaltyN4 = function getPenaltyN4 (data) {\n let darkCount = 0\n const modulesCount = data.data.length\n\n for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]\n\n const k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)\n\n return k * PenaltyScores.N4\n}\n\n/**\n * Return mask value at given position\n *\n * @param {Number} maskPattern Pattern reference value\n * @param {Number} i Row\n * @param {Number} j Column\n * @return {Boolean} Mask value\n */\nfunction getMaskAt (maskPattern, i, j) {\n switch (maskPattern) {\n case exports.Patterns.PATTERN000: return (i + j) % 2 === 0\n case exports.Patterns.PATTERN001: return i % 2 === 0\n case exports.Patterns.PATTERN010: return j % 3 === 0\n case exports.Patterns.PATTERN011: return (i + j) % 3 === 0\n case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\n case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\n case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\n case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\n\n default: throw new Error('bad maskPattern:' + maskPattern)\n }\n}\n\n/**\n * Apply a mask pattern to a BitMatrix\n *\n * @param {Number} pattern Pattern reference number\n * @param {BitMatrix} data BitMatrix data\n */\nexports.applyMask = function applyMask (pattern, data) {\n const size = data.size\n\n for (let col = 0; col < size; col++) {\n for (let row = 0; row < size; row++) {\n if (data.isReserved(row, col)) continue\n data.xor(row, col, getMaskAt(pattern, row, col))\n }\n }\n}\n\n/**\n * Returns the best mask pattern for data\n *\n * @param {BitMatrix} data\n * @return {Number} Mask pattern reference number\n */\nexports.getBestMask = function getBestMask (data, setupFormatFunc) {\n const numPatterns = Object.keys(exports.Patterns).length\n let bestPattern = 0\n let lowerPenalty = Infinity\n\n for (let p = 0; p < numPatterns; p++) {\n setupFormatFunc(p)\n exports.applyMask(p, data)\n\n // Calculate penalty\n const penalty =\n exports.getPenaltyN1(data) +\n exports.getPenaltyN2(data) +\n exports.getPenaltyN3(data) +\n exports.getPenaltyN4(data)\n\n // Undo previously applied mask\n exports.applyMask(p, data)\n\n if (penalty < lowerPenalty) {\n lowerPenalty = penalty\n bestPattern = p\n }\n }\n\n return bestPattern\n}\n", "const ECLevel = require('./error-correction-level')\r\n\r\nconst EC_BLOCKS_TABLE = [\r\n// L M Q H\r\n 1, 1, 1, 1,\r\n 1, 1, 1, 1,\r\n 1, 1, 2, 2,\r\n 1, 2, 2, 4,\r\n 1, 2, 4, 4,\r\n 2, 4, 4, 4,\r\n 2, 4, 6, 5,\r\n 2, 4, 6, 6,\r\n 2, 5, 8, 8,\r\n 4, 5, 8, 8,\r\n 4, 5, 8, 11,\r\n 4, 8, 10, 11,\r\n 4, 9, 12, 16,\r\n 4, 9, 16, 16,\r\n 6, 10, 12, 18,\r\n 6, 10, 17, 16,\r\n 6, 11, 16, 19,\r\n 6, 13, 18, 21,\r\n 7, 14, 21, 25,\r\n 8, 16, 20, 25,\r\n 8, 17, 23, 25,\r\n 9, 17, 23, 34,\r\n 9, 18, 25, 30,\r\n 10, 20, 27, 32,\r\n 12, 21, 29, 35,\r\n 12, 23, 34, 37,\r\n 12, 25, 34, 40,\r\n 13, 26, 35, 42,\r\n 14, 28, 38, 45,\r\n 15, 29, 40, 48,\r\n 16, 31, 43, 51,\r\n 17, 33, 45, 54,\r\n 18, 35, 48, 57,\r\n 19, 37, 51, 60,\r\n 19, 38, 53, 63,\r\n 20, 40, 56, 66,\r\n 21, 43, 59, 70,\r\n 22, 45, 62, 74,\r\n 24, 47, 65, 77,\r\n 25, 49, 68, 81\r\n]\r\n\r\nconst EC_CODEWORDS_TABLE = [\r\n// L M Q H\r\n 7, 10, 13, 17,\r\n 10, 16, 22, 28,\r\n 15, 26, 36, 44,\r\n 20, 36, 52, 64,\r\n 26, 48, 72, 88,\r\n 36, 64, 96, 112,\r\n 40, 72, 108, 130,\r\n 48, 88, 132, 156,\r\n 60, 110, 160, 192,\r\n 72, 130, 192, 224,\r\n 80, 150, 224, 264,\r\n 96, 176, 260, 308,\r\n 104, 198, 288, 352,\r\n 120, 216, 320, 384,\r\n 132, 240, 360, 432,\r\n 144, 280, 408, 480,\r\n 168, 308, 448, 532,\r\n 180, 338, 504, 588,\r\n 196, 364, 546, 650,\r\n 224, 416, 600, 700,\r\n 224, 442, 644, 750,\r\n 252, 476, 690, 816,\r\n 270, 504, 750, 900,\r\n 300, 560, 810, 960,\r\n 312, 588, 870, 1050,\r\n 336, 644, 952, 1110,\r\n 360, 700, 1020, 1200,\r\n 390, 728, 1050, 1260,\r\n 420, 784, 1140, 1350,\r\n 450, 812, 1200, 1440,\r\n 480, 868, 1290, 1530,\r\n 510, 924, 1350, 1620,\r\n 540, 980, 1440, 1710,\r\n 570, 1036, 1530, 1800,\r\n 570, 1064, 1590, 1890,\r\n 600, 1120, 1680, 1980,\r\n 630, 1204, 1770, 2100,\r\n 660, 1260, 1860, 2220,\r\n 720, 1316, 1950, 2310,\r\n 750, 1372, 2040, 2430\r\n]\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n", "const EXP_TABLE = new Uint8Array(512)\nconst LOG_TABLE = new Uint8Array(256)\n/**\n * Precompute the log and anti-log tables for faster computation later\n *\n * For each possible value in the galois field 2^8, we will pre-compute\n * the logarithm and anti-logarithm (exponential) of this value\n *\n * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}\n */\n;(function initTables () {\n let x = 1\n for (let i = 0; i < 255; i++) {\n EXP_TABLE[i] = x\n LOG_TABLE[x] = i\n\n x <<= 1 // multiply by 2\n\n // The QR code specification says to use byte-wise modulo 100011101 arithmetic.\n // This means that when a number is 256 or larger, it should be XORed with 0x11D.\n if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)\n x ^= 0x11D\n }\n }\n\n // Optimization: double the size of the anti-log table so that we don't need to mod 255 to\n // stay inside the bounds (because we will mainly use this table for the multiplication of\n // two GF numbers, no more).\n // @see {@link mul}\n for (let i = 255; i < 512; i++) {\n EXP_TABLE[i] = EXP_TABLE[i - 255]\n }\n}())\n\n/**\n * Returns log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.log = function log (n) {\n if (n < 1) throw new Error('log(' + n + ')')\n return LOG_TABLE[n]\n}\n\n/**\n * Returns anti-log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.exp = function exp (n) {\n return EXP_TABLE[n]\n}\n\n/**\n * Multiplies two number inside Galois Field\n *\n * @param {Number} x\n * @param {Number} y\n * @return {Number}\n */\nexports.mul = function mul (x, y) {\n if (x === 0 || y === 0) return 0\n\n // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized\n // @see {@link initTables}\n return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]\n}\n", "const GF = require('./galois-field')\n\n/**\n * Multiplies two polynomials inside Galois Field\n *\n * @param {Uint8Array} p1 Polynomial\n * @param {Uint8Array} p2 Polynomial\n * @return {Uint8Array} Product of p1 and p2\n */\nexports.mul = function mul (p1, p2) {\n const coeff = new Uint8Array(p1.length + p2.length - 1)\n\n for (let i = 0; i < p1.length; i++) {\n for (let j = 0; j < p2.length; j++) {\n coeff[i + j] ^= GF.mul(p1[i], p2[j])\n }\n }\n\n return coeff\n}\n\n/**\n * Calculate the remainder of polynomials division\n *\n * @param {Uint8Array} divident Polynomial\n * @param {Uint8Array} divisor Polynomial\n * @return {Uint8Array} Remainder\n */\nexports.mod = function mod (divident, divisor) {\n let result = new Uint8Array(divident)\n\n while ((result.length - divisor.length) >= 0) {\n const coeff = result[0]\n\n for (let i = 0; i < divisor.length; i++) {\n result[i] ^= GF.mul(divisor[i], coeff)\n }\n\n // remove all zeros from buffer head\n let offset = 0\n while (offset < result.length && result[offset] === 0) offset++\n result = result.slice(offset)\n }\n\n return result\n}\n\n/**\n * Generate an irreducible generator polynomial of specified degree\n * (used by Reed-Solomon encoder)\n *\n * @param {Number} degree Degree of the generator polynomial\n * @return {Uint8Array} Buffer containing polynomial coefficients\n */\nexports.generateECPolynomial = function generateECPolynomial (degree) {\n let poly = new Uint8Array([1])\n for (let i = 0; i < degree; i++) {\n poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))\n }\n\n return poly\n}\n", "const Polynomial = require('./polynomial')\n\nfunction ReedSolomonEncoder (degree) {\n this.genPoly = undefined\n this.degree = degree\n\n if (this.degree) this.initialize(this.degree)\n}\n\n/**\n * Initialize the encoder.\n * The input param should correspond to the number of error correction codewords.\n *\n * @param {Number} degree\n */\nReedSolomonEncoder.prototype.initialize = function initialize (degree) {\n // create an irreducible generator polynomial\n this.degree = degree\n this.genPoly = Polynomial.generateECPolynomial(this.degree)\n}\n\n/**\n * Encodes a chunk of data\n *\n * @param {Uint8Array} data Buffer containing input data\n * @return {Uint8Array} Buffer containing encoded data\n */\nReedSolomonEncoder.prototype.encode = function encode (data) {\n if (!this.genPoly) {\n throw new Error('Encoder not initialized')\n }\n\n // Calculate EC for this data block\n // extends data size to data+genPoly size\n const paddedData = new Uint8Array(data.length + this.degree)\n paddedData.set(data)\n\n // The error correction codewords are the remainder after dividing the data codewords\n // by a generator polynomial\n const remainder = Polynomial.mod(paddedData, this.genPoly)\n\n // return EC data blocks (last n byte, where n is the degree of genPoly)\n // If coefficients number in remainder are less than genPoly degree,\n // pad with 0s to the left to reach the needed number of coefficients\n const start = this.degree - remainder.length\n if (start > 0) {\n const buff = new Uint8Array(this.degree)\n buff.set(remainder, start)\n\n return buff\n }\n\n return remainder\n}\n\nmodule.exports = ReedSolomonEncoder\n", "/**\n * Check if QR Code version is valid\n *\n * @param {Number} version QR Code version\n * @return {Boolean} true if valid version, false otherwise\n */\nexports.isValid = function isValid (version) {\n return !isNaN(version) && version >= 1 && version <= 40\n}\n", "const numeric = '[0-9]+'\nconst alphanumeric = '[A-Z $%*+\\\\-./:]+'\nlet kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\n '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\n '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\n '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'\nkanji = kanji.replace(/u/g, '\\\\u')\n\nconst byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+'\n\nexports.KANJI = new RegExp(kanji, 'g')\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g')\nexports.BYTE = new RegExp(byte, 'g')\nexports.NUMERIC = new RegExp(numeric, 'g')\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')\n\nconst TEST_KANJI = new RegExp('^' + kanji + '$')\nconst TEST_NUMERIC = new RegExp('^' + numeric + '$')\nconst TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$')\n\nexports.testKanji = function testKanji (str) {\n return TEST_KANJI.test(str)\n}\n\nexports.testNumeric = function testNumeric (str) {\n return TEST_NUMERIC.test(str)\n}\n\nexports.testAlphanumeric = function testAlphanumeric (str) {\n return TEST_ALPHANUMERIC.test(str)\n}\n", "const VersionCheck = require('./version-check')\nconst Regex = require('./regex')\n\n/**\n * Numeric mode encodes data from the decimal digit set (0 - 9)\n * (byte values 30HEX to 39HEX).\n * Normally, 3 data characters are represented by 10 bits.\n *\n * @type {Object}\n */\nexports.NUMERIC = {\n id: 'Numeric',\n bit: 1 << 0,\n ccBits: [10, 12, 14]\n}\n\n/**\n * Alphanumeric mode encodes data from a set of 45 characters,\n * i.e. 10 numeric digits (0 - 9),\n * 26 alphabetic characters (A - Z),\n * and 9 symbols (SP, $, %, *, +, -, ., /, :).\n * Normally, two input characters are represented by 11 bits.\n *\n * @type {Object}\n */\nexports.ALPHANUMERIC = {\n id: 'Alphanumeric',\n bit: 1 << 1,\n ccBits: [9, 11, 13]\n}\n\n/**\n * In byte mode, data is encoded at 8 bits per character.\n *\n * @type {Object}\n */\nexports.BYTE = {\n id: 'Byte',\n bit: 1 << 2,\n ccBits: [8, 16, 16]\n}\n\n/**\n * The Kanji mode efficiently encodes Kanji characters in accordance with\n * the Shift JIS system based on JIS X 0208.\n * The Shift JIS values are shifted from the JIS X 0208 values.\n * JIS X 0208 gives details of the shift coded representation.\n * Each two-byte character value is compacted to a 13-bit binary codeword.\n *\n * @type {Object}\n */\nexports.KANJI = {\n id: 'Kanji',\n bit: 1 << 3,\n ccBits: [8, 10, 12]\n}\n\n/**\n * Mixed mode will contain a sequences of data in a combination of any of\n * the modes described above\n *\n * @type {Object}\n */\nexports.MIXED = {\n bit: -1\n}\n\n/**\n * Returns the number of bits needed to store the data length\n * according to QR Code specifications.\n *\n * @param {Mode} mode Data mode\n * @param {Number} version QR Code version\n * @return {Number} Number of bits\n */\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\n if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\n\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid version: ' + version)\n }\n\n if (version >= 1 && version < 10) return mode.ccBits[0]\n else if (version < 27) return mode.ccBits[1]\n return mode.ccBits[2]\n}\n\n/**\n * Returns the most efficient mode to store the specified data\n *\n * @param {String} dataStr Input data string\n * @return {Mode} Best mode\n */\nexports.getBestModeForData = function getBestModeForData (dataStr) {\n if (Regex.testNumeric(dataStr)) return exports.NUMERIC\n else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\n else if (Regex.testKanji(dataStr)) return exports.KANJI\n else return exports.BYTE\n}\n\n/**\n * Return mode name as string\n *\n * @param {Mode} mode Mode object\n * @returns {String} Mode name\n */\nexports.toString = function toString (mode) {\n if (mode && mode.id) return mode.id\n throw new Error('Invalid mode')\n}\n\n/**\n * Check if input param is a valid mode object\n *\n * @param {Mode} mode Mode object\n * @returns {Boolean} True if valid mode, false otherwise\n */\nexports.isValid = function isValid (mode) {\n return mode && mode.bit && mode.ccBits\n}\n\n/**\n * Get mode object from its name\n *\n * @param {String} string Mode name\n * @returns {Mode} Mode object\n */\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n const lcStr = string.toLowerCase()\n\n switch (lcStr) {\n case 'numeric':\n return exports.NUMERIC\n case 'alphanumeric':\n return exports.ALPHANUMERIC\n case 'kanji':\n return exports.KANJI\n case 'byte':\n return exports.BYTE\n default:\n throw new Error('Unknown mode: ' + string)\n }\n}\n\n/**\n * Returns mode from a value.\n * If value is not a valid mode, returns defaultValue\n *\n * @param {Mode|String} value Encoding mode\n * @param {Mode} defaultValue Fallback value\n * @return {Mode} Encoding mode\n */\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n}\n", "const Utils = require('./utils')\nconst ECCode = require('./error-correction-code')\nconst ECLevel = require('./error-correction-level')\nconst Mode = require('./mode')\nconst VersionCheck = require('./version-check')\n\n// Generator polynomial used to encode version information\nconst G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)\nconst G18_BCH = Utils.getBCHDigit(G18)\n\nfunction getBestVersionForDataLength (mode, length, errorCorrectionLevel) {\n for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\nfunction getReservedBitsCount (mode, version) {\n // Character count indicator + mode indicator bits\n return Mode.getCharCountIndicator(mode, version) + 4\n}\n\nfunction getTotalBitsFromDataArray (segments, version) {\n let totalBits = 0\n\n segments.forEach(function (data) {\n const reservedBits = getReservedBitsCount(data.mode, version)\n totalBits += reservedBits + data.getBitsLength()\n })\n\n return totalBits\n}\n\nfunction getBestVersionForMixedData (segments, errorCorrectionLevel) {\n for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n const length = getTotalBitsFromDataArray(segments, currentVersion)\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\n/**\n * Returns version number from a value.\n * If value is not a valid version, returns defaultValue\n *\n * @param {Number|String} value QR Code version\n * @param {Number} defaultValue Fallback value\n * @return {Number} QR Code version number\n */\nexports.from = function from (value, defaultValue) {\n if (VersionCheck.isValid(value)) {\n return parseInt(value, 10)\n }\n\n return defaultValue\n}\n\n/**\n * Returns how much data can be stored with the specified QR code version\n * and error correction level\n *\n * @param {Number} version QR Code version (1-40)\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} Quantity of storable data\n */\nexports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid QR Code version')\n }\n\n // Use Byte mode as default\n if (typeof mode === 'undefined') mode = Mode.BYTE\n\n // Total codewords for this QR code version (Data + Error correction)\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n // Total number of error correction codewords\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n // Total number of data codewords\n const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n if (mode === Mode.MIXED) return dataTotalCodewordsBits\n\n const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)\n\n // Return max number of storable codewords\n switch (mode) {\n case Mode.NUMERIC:\n return Math.floor((usableBits / 10) * 3)\n\n case Mode.ALPHANUMERIC:\n return Math.floor((usableBits / 11) * 2)\n\n case Mode.KANJI:\n return Math.floor(usableBits / 13)\n\n case Mode.BYTE:\n default:\n return Math.floor(usableBits / 8)\n }\n}\n\n/**\n * Returns the minimum version needed to contain the amount of data\n *\n * @param {Segment} data Segment of data\n * @param {Number} [errorCorrectionLevel=H] Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} QR Code version\n */\nexports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {\n let seg\n\n const ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)\n\n if (Array.isArray(data)) {\n if (data.length > 1) {\n return getBestVersionForMixedData(data, ecl)\n }\n\n if (data.length === 0) {\n return 1\n }\n\n seg = data[0]\n } else {\n seg = data\n }\n\n return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)\n}\n\n/**\n * Returns version information with relative error correction bits\n *\n * The version information is included in QR Code symbols of version 7 or larger.\n * It consists of an 18-bit sequence containing 6 data bits,\n * with 12 error correction bits calculated using the (18, 6) Golay code.\n *\n * @param {Number} version QR Code version\n * @return {Number} Encoded version info bits\n */\nexports.getEncodedBits = function getEncodedBits (version) {\n if (!VersionCheck.isValid(version) || version < 7) {\n throw new Error('Invalid QR Code version')\n }\n\n let d = version << 12\n\n while (Utils.getBCHDigit(d) - G18_BCH >= 0) {\n d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))\n }\n\n return (version << 12) | d\n}\n", "const Utils = require('./utils')\n\nconst G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)\nconst G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)\nconst G15_BCH = Utils.getBCHDigit(G15)\n\n/**\n * Returns format information with relative error correction bits\n *\n * The format information is a 15-bit sequence containing 5 data bits,\n * with 10 error correction bits calculated using the (15, 5) BCH code.\n *\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Number} mask Mask pattern\n * @return {Number} Encoded format information bits\n */\nexports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {\n const data = ((errorCorrectionLevel.bit << 3) | mask)\n let d = data << 10\n\n while (Utils.getBCHDigit(d) - G15_BCH >= 0) {\n d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))\n }\n\n // xor final data with mask pattern in order to ensure that\n // no combination of Error Correction Level and data mask pattern\n // will result in an all-zero data string\n return ((data << 10) | d) ^ G15_MASK\n}\n", "const Mode = require('./mode')\n\nfunction NumericData (data) {\n this.mode = Mode.NUMERIC\n this.data = data.toString()\n}\n\nNumericData.getBitsLength = function getBitsLength (length) {\n return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)\n}\n\nNumericData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nNumericData.prototype.getBitsLength = function getBitsLength () {\n return NumericData.getBitsLength(this.data.length)\n}\n\nNumericData.prototype.write = function write (bitBuffer) {\n let i, group, value\n\n // The input data string is divided into groups of three digits,\n // and each group is converted to its 10-bit binary equivalent.\n for (i = 0; i + 3 <= this.data.length; i += 3) {\n group = this.data.substr(i, 3)\n value = parseInt(group, 10)\n\n bitBuffer.put(value, 10)\n }\n\n // If the number of input digits is not an exact multiple of three,\n // the final one or two digits are converted to 4 or 7 bits respectively.\n const remainingNum = this.data.length - i\n if (remainingNum > 0) {\n group = this.data.substr(i)\n value = parseInt(group, 10)\n\n bitBuffer.put(value, remainingNum * 3 + 1)\n }\n}\n\nmodule.exports = NumericData\n", "const Mode = require('./mode')\n\n/**\n * Array of characters available in alphanumeric mode\n *\n * As per QR Code specification, to each character\n * is assigned a value from 0 to 44 which in this case coincides\n * with the array index\n *\n * @type {Array}\n */\nconst ALPHA_NUM_CHARS = [\n '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n ' ', '$', '%', '*', '+', '-', '.', '/', ':'\n]\n\nfunction AlphanumericData (data) {\n this.mode = Mode.ALPHANUMERIC\n this.data = data\n}\n\nAlphanumericData.getBitsLength = function getBitsLength (length) {\n return 11 * Math.floor(length / 2) + 6 * (length % 2)\n}\n\nAlphanumericData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nAlphanumericData.prototype.getBitsLength = function getBitsLength () {\n return AlphanumericData.getBitsLength(this.data.length)\n}\n\nAlphanumericData.prototype.write = function write (bitBuffer) {\n let i\n\n // Input data characters are divided into groups of two characters\n // and encoded as 11-bit binary codes.\n for (i = 0; i + 2 <= this.data.length; i += 2) {\n // The character value of the first character is multiplied by 45\n let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45\n\n // The character value of the second digit is added to the product\n value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])\n\n // The sum is then stored as 11-bit binary number\n bitBuffer.put(value, 11)\n }\n\n // If the number of input data characters is not a multiple of two,\n // the character value of the final character is encoded as a 6-bit binary number.\n if (this.data.length % 2) {\n bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)\n }\n}\n\nmodule.exports = AlphanumericData\n", "const Mode = require('./mode')\n\nfunction ByteData (data) {\n this.mode = Mode.BYTE\n if (typeof (data) === 'string') {\n this.data = new TextEncoder().encode(data)\n } else {\n this.data = new Uint8Array(data)\n }\n}\n\nByteData.getBitsLength = function getBitsLength (length) {\n return length * 8\n}\n\nByteData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nByteData.prototype.getBitsLength = function getBitsLength () {\n return ByteData.getBitsLength(this.data.length)\n}\n\nByteData.prototype.write = function (bitBuffer) {\n for (let i = 0, l = this.data.length; i < l; i++) {\n bitBuffer.put(this.data[i], 8)\n }\n}\n\nmodule.exports = ByteData\n", "const Mode = require('./mode')\nconst Utils = require('./utils')\n\nfunction KanjiData (data) {\n this.mode = Mode.KANJI\n this.data = data\n}\n\nKanjiData.getBitsLength = function getBitsLength (length) {\n return length * 13\n}\n\nKanjiData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nKanjiData.prototype.getBitsLength = function getBitsLength () {\n return KanjiData.getBitsLength(this.data.length)\n}\n\nKanjiData.prototype.write = function (bitBuffer) {\n let i\n\n // In the Shift JIS system, Kanji characters are represented by a two byte combination.\n // These byte values are shifted from the JIS X 0208 values.\n // JIS X 0208 gives details of the shift coded representation.\n for (i = 0; i < this.data.length; i++) {\n let value = Utils.toSJIS(this.data[i])\n\n // For characters with Shift JIS values from 0x8140 to 0x9FFC:\n if (value >= 0x8140 && value <= 0x9FFC) {\n // Subtract 0x8140 from Shift JIS value\n value -= 0x8140\n\n // For characters with Shift JIS values from 0xE040 to 0xEBBF\n } else if (value >= 0xE040 && value <= 0xEBBF) {\n // Subtract 0xC140 from Shift JIS value\n value -= 0xC140\n } else {\n throw new Error(\n 'Invalid SJIS character: ' + this.data[i] + '\\n' +\n 'Make sure your charset is UTF-8')\n }\n\n // Multiply most significant byte of result by 0xC0\n // and add least significant byte to product\n value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)\n\n // Convert result to a 13-bit binary string\n bitBuffer.put(value, 13)\n }\n}\n\nmodule.exports = KanjiData\n", "'use strict';\n\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n * Wyatt Baldwin <self@wyattbaldwin.com>\n * All rights reserved\n *\n * Licensed under the MIT license.\n *\n * http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n single_source_shortest_paths: function(graph, s, d) {\n // Predecessor map for each node that has been encountered.\n // node ID => predecessor node ID\n var predecessors = {};\n\n // Costs of shortest paths from s to all nodes encountered.\n // node ID => cost\n var costs = {};\n costs[s] = 0;\n\n // Costs of shortest paths from s to all nodes encountered; differs from\n // `costs` in that it provides easy access to the node that currently has\n // the known shortest path from s.\n // XXX: Do we actually need both `costs` and `open`?\n var open = dijkstra.PriorityQueue.make();\n open.push(s, 0);\n\n var closest,\n u, v,\n cost_of_s_to_u,\n adjacent_nodes,\n cost_of_e,\n cost_of_s_to_u_plus_cost_of_e,\n cost_of_s_to_v,\n first_visit;\n while (!open.empty()) {\n // In the nodes remaining in graph that have a known cost from s,\n // find the node, u, that currently has the shortest path from s.\n closest = open.pop();\n u = closest.value;\n cost_of_s_to_u = closest.cost;\n\n // Get nodes adjacent to u...\n adjacent_nodes = graph[u] || {};\n\n // ...and explore the edges that connect u to those nodes, updating\n // the cost of the shortest paths to any or all of those nodes as\n // necessary. v is the node across the current edge from u.\n for (v in adjacent_nodes) {\n if (adjacent_nodes.hasOwnProperty(v)) {\n // Get the cost of the edge running from u to v.\n cost_of_e = adjacent_nodes[v];\n\n // Cost of s to u plus the cost of u to v across e--this is *a*\n // cost from s to v that may or may not be less than the current\n // known cost to v.\n cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n // If we haven't visited v yet OR if the current known cost from s to\n // v is greater than the new cost we just found (cost of s to u plus\n // cost of u to v across e), update v's cost in the cost list and\n // update v's predecessor in the predecessor list (it's now u).\n cost_of_s_to_v = costs[v];\n first_visit = (typeof costs[v] === 'undefined');\n if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n costs[v] = cost_of_s_to_u_plus_cost_of_e;\n open.push(v, cost_of_s_to_u_plus_cost_of_e);\n predecessors[v] = u;\n }\n }\n }\n }\n\n if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n throw new Error(msg);\n }\n\n return predecessors;\n },\n\n extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n var nodes = [];\n var u = d;\n var predecessor;\n while (u) {\n nodes.push(u);\n predecessor = predecessors[u];\n u = predecessors[u];\n }\n nodes.reverse();\n return nodes;\n },\n\n find_path: function(graph, s, d) {\n var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n return dijkstra.extract_shortest_path_from_predecessor_list(\n predecessors, d);\n },\n\n /**\n * A very naive priority queue implementation.\n */\n PriorityQueue: {\n make: function (opts) {\n var T = dijkstra.PriorityQueue,\n t = {},\n key;\n opts = opts || {};\n for (key in T) {\n if (T.hasOwnProperty(key)) {\n t[key] = T[key];\n }\n }\n t.queue = [];\n t.sorter = opts.sorter || T.default_sorter;\n return t;\n },\n\n default_sorter: function (a, b) {\n return a.cost - b.cost;\n },\n\n /**\n * Add a new item to the queue and ensure the highest priority element\n * is at the front of the queue.\n */\n push: function (value, cost) {\n var item = {value: value, cost: cost};\n this.queue.push(item);\n this.queue.sort(this.sorter);\n },\n\n /**\n * Return the highest priority element in the queue.\n */\n pop: function () {\n return this.queue.shift();\n },\n\n empty: function () {\n return this.queue.length === 0;\n }\n }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n module.exports = dijkstra;\n}\n", "const Mode = require('./mode')\nconst NumericData = require('./numeric-data')\nconst AlphanumericData = require('./alphanumeric-data')\nconst ByteData = require('./byte-data')\nconst KanjiData = require('./kanji-data')\nconst Regex = require('./regex')\nconst Utils = require('./utils')\nconst dijkstra = require('dijkstrajs')\n\n/**\n * Returns UTF8 byte length\n *\n * @param {String} str Input string\n * @return {Number} Number of byte\n */\nfunction getStringByteLength (str) {\n return unescape(encodeURIComponent(str)).length\n}\n\n/**\n * Get a list of segments of the specified mode\n * from a string\n *\n * @param {Mode} mode Segment mode\n * @param {String} str String to process\n * @return {Array} Array of object with segments data\n */\nfunction getSegments (regex, mode, str) {\n const segments = []\n let result\n\n while ((result = regex.exec(str)) !== null) {\n segments.push({\n data: result[0],\n index: result.index,\n mode: mode,\n length: result[0].length\n })\n }\n\n return segments\n}\n\n/**\n * Extracts a series of segments with the appropriate\n * modes from a string\n *\n * @param {String} dataStr Input string\n * @return {Array} Array of object with segments data\n */\nfunction getSegmentsFromString (dataStr) {\n const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)\n const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)\n let byteSegs\n let kanjiSegs\n\n if (Utils.isKanjiModeEnabled()) {\n byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)\n kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)\n } else {\n byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)\n kanjiSegs = []\n }\n\n const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)\n\n return segs\n .sort(function (s1, s2) {\n return s1.index - s2.index\n })\n .map(function (obj) {\n return {\n data: obj.data,\n mode: obj.mode,\n length: obj.length\n }\n })\n}\n\n/**\n * Returns how many bits are needed to encode a string of\n * specified length with the specified mode\n *\n * @param {Number} length String length\n * @param {Mode} mode Segment mode\n * @return {Number} Bit length\n */\nfunction getSegmentBitsLength (length, mode) {\n switch (mode) {\n case Mode.NUMERIC:\n return NumericData.getBitsLength(length)\n case Mode.ALPHANUMERIC:\n return AlphanumericData.getBitsLength(length)\n case Mode.KANJI:\n return KanjiData.getBitsLength(length)\n case Mode.BYTE:\n return ByteData.getBitsLength(length)\n }\n}\n\n/**\n * Merges adjacent segments which have the same mode\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction mergeSegments (segs) {\n return segs.reduce(function (acc, curr) {\n const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null\n if (prevSeg && prevSeg.mode === curr.mode) {\n acc[acc.length - 1].data += curr.data\n return acc\n }\n\n acc.push(curr)\n return acc\n }, [])\n}\n\n/**\n * Generates a list of all possible nodes combination which\n * will be used to build a segments graph.\n *\n * Nodes are divided by groups. Each group will contain a list of all the modes\n * in which is possible to encode the given text.\n *\n * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.\n * The group for '12345' will contain then 3 objects, one for each\n * possible encoding mode.\n *\n * Each node represents a possible segment.\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction buildNodes (segs) {\n const nodes = []\n for (let i = 0; i < segs.length; i++) {\n const seg = segs[i]\n\n switch (seg.mode) {\n case Mode.NUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ])\n break\n case Mode.ALPHANUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ])\n break\n case Mode.KANJI:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ])\n break\n case Mode.BYTE:\n nodes.push([\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ])\n }\n }\n\n return nodes\n}\n\n/**\n * Builds a graph from a list of nodes.\n * All segments in each node group will be connected with all the segments of\n * the next group and so on.\n *\n * At each connection will be assigned a weight depending on the\n * segment's byte length.\n *\n * @param {Array} nodes Array of object with segments data\n * @param {Number} version QR Code version\n * @return {Object} Graph of all possible segments\n */\nfunction buildGraph (nodes, version) {\n const table = {}\n const graph = { start: {} }\n let prevNodeIds = ['start']\n\n for (let i = 0; i < nodes.length; i++) {\n const nodeGroup = nodes[i]\n const currentNodeIds = []\n\n for (let j = 0; j < nodeGroup.length; j++) {\n const node = nodeGroup[j]\n const key = '' + i + j\n\n currentNodeIds.push(key)\n table[key] = { node: node, lastCount: 0 }\n graph[key] = {}\n\n for (let n = 0; n < prevNodeIds.length; n++) {\n const prevNodeId = prevNodeIds[n]\n\n if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {\n graph[prevNodeId][key] =\n getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -\n getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)\n\n table[prevNodeId].lastCount += node.length\n } else {\n if (table[prevNodeId]) table[prevNodeId].lastCount = node.length\n\n graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +\n 4 + Mode.getCharCountIndicator(node.mode, version) // switch cost\n }\n }\n }\n\n prevNodeIds = currentNodeIds\n }\n\n for (let n = 0; n < prevNodeIds.length; n++) {\n graph[prevNodeIds[n]].end = 0\n }\n\n return { map: graph, table: table }\n}\n\n/**\n * Builds a segment from a specified data and mode.\n * If a mode is not specified, the more suitable will be used.\n *\n * @param {String} data Input data\n * @param {Mode | String} modesHint Data mode\n * @return {Segment} Segment\n */\nfunction buildSingleSegment (data, modesHint) {\n let mode\n const bestMode = Mode.getBestModeForData(data)\n\n mode = Mode.from(modesHint, bestMode)\n\n // Make sure data can be encoded\n if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {\n throw new Error('\"' + data + '\"' +\n ' cannot be encoded with mode ' + Mode.toString(mode) +\n '.\\n Suggested mode is: ' + Mode.toString(bestMode))\n }\n\n // Use Mode.BYTE if Kanji support is disabled\n if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {\n mode = Mode.BYTE\n }\n\n switch (mode) {\n case Mode.NUMERIC:\n return new NumericData(data)\n\n case Mode.ALPHANUMERIC:\n return new AlphanumericData(data)\n\n case Mode.KANJI:\n return new KanjiData(data)\n\n case Mode.BYTE:\n return new ByteData(data)\n }\n}\n\n/**\n * Builds a list of segments from an array.\n * Array can contain Strings or Objects with segment's info.\n *\n * For each item which is a string, will be generated a segment with the given\n * string and the more appropriate encoding mode.\n *\n * For each item which is an object, will be generated a segment with the given\n * data and mode.\n * Objects must contain at least the property \"data\".\n * If property \"mode\" is not present, the more suitable mode will be used.\n *\n * @param {Array} array Array of objects with segments data\n * @return {Array} Array of Segments\n */\nexports.fromArray = function fromArray (array) {\n return array.reduce(function (acc, seg) {\n if (typeof seg === 'string') {\n acc.push(buildSingleSegment(seg, null))\n } else if (seg.data) {\n acc.push(buildSingleSegment(seg.data, seg.mode))\n }\n\n return acc\n }, [])\n}\n\n/**\n * Builds an optimized sequence of segments from a string,\n * which will produce the shortest possible bitstream.\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @return {Array} Array of segments\n */\nexports.fromString = function fromString (data, version) {\n const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n\n const nodes = buildNodes(segs)\n const graph = buildGraph(nodes, version)\n const path = dijkstra.find_path(graph.map, 'start', 'end')\n\n const optimizedSegs = []\n for (let i = 1; i < path.length - 1; i++) {\n optimizedSegs.push(graph.table[path[i]].node)\n }\n\n return exports.fromArray(mergeSegments(optimizedSegs))\n}\n\n/**\n * Splits a string in various segments with the modes which\n * best represent their content.\n * The produced segments are far from being optimized.\n * The output of this function is only used to estimate a QR Code version\n * which may contain the data.\n *\n * @param {string} data Input string\n * @return {Array} Array of segments\n */\nexports.rawSplit = function rawSplit (data) {\n return exports.fromArray(\n getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n )\n}\n", "const Utils = require('./utils')\nconst ECLevel = require('./error-correction-level')\nconst BitBuffer = require('./bit-buffer')\nconst BitMatrix = require('./bit-matrix')\nconst AlignmentPattern = require('./alignment-pattern')\nconst FinderPattern = require('./finder-pattern')\nconst MaskPattern = require('./mask-pattern')\nconst ECCode = require('./error-correction-code')\nconst ReedSolomonEncoder = require('./reed-solomon-encoder')\nconst Version = require('./version')\nconst FormatInfo = require('./format-info')\nconst Mode = require('./mode')\nconst Segments = require('./segments')\n\n/**\n * QRCode for JavaScript\n *\n * modified by Ryan Day for nodejs support\n * Copyright (c) 2011 Ryan Day\n *\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/mit-license.php\n *\n//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n*/\n\n/**\n * Add finder patterns bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupFinderPattern (matrix, version) {\n const size = matrix.size\n const pos = FinderPattern.getPositions(version)\n\n for (let i = 0; i < pos.length; i++) {\n const row = pos[i][0]\n const col = pos[i][1]\n\n for (let r = -1; r <= 7; r++) {\n if (row + r <= -1 || size <= row + r) continue\n\n for (let c = -1; c <= 7; c++) {\n if (col + c <= -1 || size <= col + c) continue\n\n if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\n (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\n (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n matrix.set(row + r, col + c, true, true)\n } else {\n matrix.set(row + r, col + c, false, true)\n }\n }\n }\n }\n}\n\n/**\n * Add timing pattern bits to matrix\n *\n * Note: this function must be called before {@link setupAlignmentPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n */\nfunction setupTimingPattern (matrix) {\n const size = matrix.size\n\n for (let r = 8; r < size - 8; r++) {\n const value = r % 2 === 0\n matrix.set(r, 6, value, true)\n matrix.set(6, r, value, true)\n }\n}\n\n/**\n * Add alignment patterns bits to matrix\n *\n * Note: this function must be called after {@link setupTimingPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupAlignmentPattern (matrix, version) {\n const pos = AlignmentPattern.getPositions(version)\n\n for (let i = 0; i < pos.length; i++) {\n const row = pos[i][0]\n const col = pos[i][1]\n\n for (let r = -2; r <= 2; r++) {\n for (let c = -2; c <= 2; c++) {\n if (r === -2 || r === 2 || c === -2 || c === 2 ||\n (r === 0 && c === 0)) {\n matrix.set(row + r, col + c, true, true)\n } else {\n matrix.set(row + r, col + c, false, true)\n }\n }\n }\n }\n}\n\n/**\n * Add version info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupVersionInfo (matrix, version) {\n const size = matrix.size\n const bits = Version.getEncodedBits(version)\n let row, col, mod\n\n for (let i = 0; i < 18; i++) {\n row = Math.floor(i / 3)\n col = i % 3 + size - 8 - 3\n mod = ((bits >> i) & 1) === 1\n\n matrix.set(row, col, mod, true)\n matrix.set(col, row, mod, true)\n }\n}\n\n/**\n * Add format info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {Number} maskPattern Mask pattern reference value\n */\nfunction setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {\n const size = matrix.size\n const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)\n let i, mod\n\n for (i = 0; i < 15; i++) {\n mod = ((bits >> i) & 1) === 1\n\n // vertical\n if (i < 6) {\n matrix.set(i, 8, mod, true)\n } else if (i < 8) {\n matrix.set(i + 1, 8, mod, true)\n } else {\n matrix.set(size - 15 + i, 8, mod, true)\n }\n\n // horizontal\n if (i < 8) {\n matrix.set(8, size - i - 1, mod, true)\n } else if (i < 9) {\n matrix.set(8, 15 - i - 1 + 1, mod, true)\n } else {\n matrix.set(8, 15 - i - 1, mod, true)\n }\n }\n\n // fixed module\n matrix.set(size - 8, 8, 1, true)\n}\n\n/**\n * Add encoded data bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Uint8Array} data Data codewords\n */\nfunction setupData (matrix, data) {\n const size = matrix.size\n let inc = -1\n let row = size - 1\n let bitIndex = 7\n let byteIndex = 0\n\n for (let col = size - 1; col > 0; col -= 2) {\n if (col === 6) col--\n\n while (true) {\n for (let c = 0; c < 2; c++) {\n if (!matrix.isReserved(row, col - c)) {\n let dark = false\n\n if (byteIndex < data.length) {\n dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)\n }\n\n matrix.set(row, col - c, dark)\n bitIndex--\n\n if (bitIndex === -1) {\n byteIndex++\n bitIndex = 7\n }\n }\n }\n\n row += inc\n\n if (row < 0 || size <= row) {\n row -= inc\n inc = -inc\n break\n }\n }\n }\n}\n\n/**\n * Create encoded codewords from data input\n *\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {ByteData} data Data input\n * @return {Uint8Array} Buffer containing encoded codewords\n */\nfunction createData (version, errorCorrectionLevel, segments) {\n // Prepare data buffer\n const buffer = new BitBuffer()\n\n segments.forEach(function (data) {\n // prefix data with mode indicator (4 bits)\n buffer.put(data.mode.bit, 4)\n\n // Prefix data with character count indicator.\n // The character count indicator is a string of bits that represents the\n // number of characters that are being encoded.\n // The character count indicator must be placed after the mode indicator\n // and must be a certain number of bits long, depending on the QR version\n // and data mode\n // @see {@link Mode.getCharCountIndicator}.\n buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))\n\n // add binary data sequence to buffer\n data.write(buffer)\n })\n\n // Calculate required number of bits\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n // Add a terminator.\n // If the bit string is shorter than the total number of required bits,\n // a terminator of up to four 0s must be added to the right side of the string.\n // If the bit string is more than four bits shorter than the required number of bits,\n // add four 0s to the end.\n if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {\n buffer.put(0, 4)\n }\n\n // If the bit string is fewer than four bits shorter, add only the number of 0s that\n // are needed to reach the required number of bits.\n\n // After adding the terminator, if the number of bits in the string is not a multiple of 8,\n // pad the string on the right with 0s to make the string's length a multiple of 8.\n while (buffer.getLengthInBits() % 8 !== 0) {\n buffer.putBit(0)\n }\n\n // Add pad bytes if the string is still shorter than the total number of required bits.\n // Extend the buffer to fill the data capacity of the symbol corresponding to\n // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)\n // and 00010001 (0x11) alternately.\n const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8\n for (let i = 0; i < remainingByte; i++) {\n buffer.put(i % 2 ? 0x11 : 0xEC, 8)\n }\n\n return createCodewords(buffer, version, errorCorrectionLevel)\n}\n\n/**\n * Encode input data with Reed-Solomon and return codewords with\n * relative error correction bits\n *\n * @param {BitBuffer} bitBuffer Data to encode\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @return {Uint8Array} Buffer containing encoded codewords\n */\nfunction createCodewords (bitBuffer, version, errorCorrectionLevel) {\n // Total codewords for this QR code version (Data + Error correction)\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n // Total number of error correction codewords\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n // Total number of data codewords\n const dataTotalCodewords = totalCodewords - ecTotalCodewords\n\n // Total number of blocks\n const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)\n\n // Calculate how many blocks each group should contain\n const blocksInGroup2 = totalCodewords % ecTotalBlocks\n const blocksInGroup1 = ecTotalBlocks - blocksInGroup2\n\n const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)\n\n const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)\n const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1\n\n // Number of EC codewords is the same for both groups\n const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1\n\n // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount\n const rs = new ReedSolomonEncoder(ecCount)\n\n let offset = 0\n const dcData = new Array(ecTotalBlocks)\n const ecData = new Array(ecTotalBlocks)\n let maxDataSize = 0\n const buffer = new Uint8Array(bitBuffer.buffer)\n\n // Divide the buffer into the required number of blocks\n for (let b = 0; b < ecTotalBlocks; b++) {\n const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2\n\n // extract a block of data from buffer\n dcData[b] = buffer.slice(offset, offset + dataSize)\n\n // Calculate EC codewords for this data block\n ecData[b] = rs.encode(dcData[b])\n\n offset += dataSize\n maxDataSize = Math.max(maxDataSize, dataSize)\n }\n\n // Create final data\n // Interleave the data and error correction codewords from each block\n const data = new Uint8Array(totalCodewords)\n let index = 0\n let i, r\n\n // Add data codewords\n for (i = 0; i < maxDataSize; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n if (i < dcData[r].length) {\n data[index++] = dcData[r][i]\n }\n }\n }\n\n // Apped EC codewords\n for (i = 0; i < ecCount; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n data[index++] = ecData[r][i]\n }\n }\n\n return data\n}\n\n/**\n * Build QR Code symbol\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @param {ErrorCorretionLevel} errorCorrectionLevel Error level\n * @param {MaskPattern} maskPattern Mask pattern\n * @return {Object} Object containing symbol data\n */\nfunction createSymbol (data, version, errorCorrectionLevel, maskPattern) {\n let segments\n\n if (Array.isArray(data)) {\n segments = Segments.fromArray(data)\n } else if (typeof data === 'string') {\n let estimatedVersion = version\n\n if (!estimatedVersion) {\n const rawSegments = Segments.rawSplit(data)\n\n // Estimate best version that can contain raw splitted segments\n estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)\n }\n\n // Build optimized segments\n // If estimated version is undefined, try with the highest version\n segments = Segments.fromString(data, estimatedVersion || 40)\n } else {\n throw new Error('Invalid data')\n }\n\n // Get the min version that can contain data\n const bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)\n\n // If no version is found, data cannot be stored\n if (!bestVersion) {\n throw new Error('The amount of data is too big to be stored in a QR Code')\n }\n\n // If not specified, use min version as default\n if (!version) {\n version = bestVersion\n\n // Check if the specified version can contain the data\n } else if (version < bestVersion) {\n throw new Error('\\n' +\n 'The chosen QR Code version cannot contain this amount of data.\\n' +\n 'Minimum version required to store current data is: ' + bestVersion + '.\\n'\n )\n }\n\n const dataBits = createData(version, errorCorrectionLevel, segments)\n\n // Allocate matrix buffer\n const moduleCount = Utils.getSymbolSize(version)\n const modules = new BitMatrix(moduleCount)\n\n // Add function modules\n setupFinderPattern(modules, version)\n setupTimingPattern(modules)\n setupAlignmentPattern(modules, version)\n\n // Add temporary dummy bits for format info just to set them as reserved.\n // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}\n // since the masking operation must be performed only on the encoding region.\n // These blocks will be replaced with correct values later in code.\n setupFormatInfo(modules, errorCorrectionLevel, 0)\n\n if (version >= 7) {\n setupVersionInfo(modules, version)\n }\n\n // Add data codewords\n setupData(modules, dataBits)\n\n if (isNaN(maskPattern)) {\n // Find best mask pattern\n maskPattern = MaskPattern.getBestMask(modules,\n setupFormatInfo.bind(null, modules, errorCorrectionLevel))\n }\n\n // Apply mask pattern\n MaskPattern.applyMask(maskPattern, modules)\n\n // Replace format info bits with correct values\n setupFormatInfo(modules, errorCorrectionLevel, maskPattern)\n\n return {\n modules: modules,\n version: version,\n errorCorrectionLevel: errorCorrectionLevel,\n maskPattern: maskPattern,\n segments: segments\n }\n}\n\n/**\n * QR Code\n *\n * @param {String | Array} data Input data\n * @param {Object} options Optional configurations\n * @param {Number} options.version QR Code version\n * @param {String} options.errorCorrectionLevel Error correction level\n * @param {Function} options.toSJISFunc Helper func to convert utf8 to sjis\n */\nexports.create = function create (data, options) {\n if (typeof data === 'undefined' || data === '') {\n throw new Error('No input text')\n }\n\n let errorCorrectionLevel = ECLevel.M\n let version\n let mask\n\n if (typeof options !== 'undefined') {\n // Use higher error correction level as default\n errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)\n version = Version.from(options.version)\n mask = MaskPattern.from(options.maskPattern)\n\n if (options.toSJISFunc) {\n Utils.setToSJISFunction(options.toSJISFunc)\n }\n }\n\n return createSymbol(data, version, errorCorrectionLevel, mask)\n}\n", "function hex2rgba (hex) {\n if (typeof hex === 'number') {\n hex = hex.toString()\n }\n\n if (typeof hex !== 'string') {\n throw new Error('Color should be defined as hex string')\n }\n\n let hexCode = hex.slice().replace('#', '').split('')\n if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\n throw new Error('Invalid hex color: ' + hex)\n }\n\n // Convert from short to long form (fff -> ffffff)\n if (hexCode.length === 3 || hexCode.length === 4) {\n hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\n return [c, c]\n }))\n }\n\n // Add default alpha value\n if (hexCode.length === 6) hexCode.push('F', 'F')\n\n const hexValue = parseInt(hexCode.join(''), 16)\n\n return {\n r: (hexValue >> 24) & 255,\n g: (hexValue >> 16) & 255,\n b: (hexValue >> 8) & 255,\n a: hexValue & 255,\n hex: '#' + hexCode.slice(0, 6).join('')\n }\n}\n\nexports.getOptions = function getOptions (options) {\n if (!options) options = {}\n if (!options.color) options.color = {}\n\n const margin = typeof options.margin === 'undefined' ||\n options.margin === null ||\n options.margin < 0\n ? 4\n : options.margin\n\n const width = options.width && options.width >= 21 ? options.width : undefined\n const scale = options.scale || 4\n\n return {\n width: width,\n scale: width ? 4 : scale,\n margin: margin,\n color: {\n dark: hex2rgba(options.color.dark || '#000000ff'),\n light: hex2rgba(options.color.light || '#ffffffff')\n },\n type: options.type,\n rendererOpts: options.rendererOpts || {}\n }\n}\n\nexports.getScale = function getScale (qrSize, opts) {\n return opts.width && opts.width >= qrSize + opts.margin * 2\n ? opts.width / (qrSize + opts.margin * 2)\n : opts.scale\n}\n\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\n const scale = exports.getScale(qrSize, opts)\n return Math.floor((qrSize + opts.margin * 2) * scale)\n}\n\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\n const size = qr.modules.size\n const data = qr.modules.data\n const scale = exports.getScale(size, opts)\n const symbolSize = Math.floor((size + opts.margin * 2) * scale)\n const scaledMargin = opts.margin * scale\n const palette = [opts.color.light, opts.color.dark]\n\n for (let i = 0; i < symbolSize; i++) {\n for (let j = 0; j < symbolSize; j++) {\n let posDst = (i * symbolSize + j) * 4\n let pxColor = opts.color.light\n\n if (i >= scaledMargin && j >= scaledMargin &&\n i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\n const iSrc = Math.floor((i - scaledMargin) / scale)\n const jSrc = Math.floor((j - scaledMargin) / scale)\n pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]\n }\n\n imgData[posDst++] = pxColor.r\n imgData[posDst++] = pxColor.g\n imgData[posDst++] = pxColor.b\n imgData[posDst] = pxColor.a\n }\n }\n}\n", "const Utils = require('./utils')\n\nfunction clearCanvas (ctx, canvas, size) {\n ctx.clearRect(0, 0, canvas.width, canvas.height)\n\n if (!canvas.style) canvas.style = {}\n canvas.height = size\n canvas.width = size\n canvas.style.height = size + 'px'\n canvas.style.width = size + 'px'\n}\n\nfunction getCanvasElement () {\n try {\n return document.createElement('canvas')\n } catch (e) {\n throw new Error('You need to specify a canvas element')\n }\n}\n\nexports.render = function render (qrData, canvas, options) {\n let opts = options\n let canvasEl = canvas\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas\n canvas = undefined\n }\n\n if (!canvas) {\n canvasEl = getCanvasElement()\n }\n\n opts = Utils.getOptions(opts)\n const size = Utils.getImageWidth(qrData.modules.size, opts)\n\n const ctx = canvasEl.getContext('2d')\n const image = ctx.createImageData(size, size)\n Utils.qrToImageData(image.data, qrData, opts)\n\n clearCanvas(ctx, canvasEl, size)\n ctx.putImageData(image, 0, 0)\n\n return canvasEl\n}\n\nexports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {\n let opts = options\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas\n canvas = undefined\n }\n\n if (!opts) opts = {}\n\n const canvasEl = exports.render(qrData, canvas, opts)\n\n const type = opts.type || 'image/png'\n const rendererOpts = opts.rendererOpts || {}\n\n return canvasEl.toDataURL(type, rendererOpts.quality)\n}\n", "const Utils = require('./utils')\n\nfunction getColorAttrib (color, attrib) {\n const alpha = color.a / 255\n const str = attrib + '=\"' + color.hex + '\"'\n\n return alpha < 1\n ? str + ' ' + attrib + '-opacity=\"' + alpha.toFixed(2).slice(1) + '\"'\n : str\n}\n\nfunction svgCmd (cmd, x, y) {\n let str = cmd + x\n if (typeof y !== 'undefined') str += ' ' + y\n\n return str\n}\n\nfunction qrToPath (data, size, margin) {\n let path = ''\n let moveBy = 0\n let newRow = false\n let lineLength = 0\n\n for (let i = 0; i < data.length; i++) {\n const col = Math.floor(i % size)\n const row = Math.floor(i / size)\n\n if (!col && !newRow) newRow = true\n\n if (data[i]) {\n lineLength++\n\n if (!(i > 0 && col > 0 && data[i - 1])) {\n path += newRow\n ? svgCmd('M', col + margin, 0.5 + row + margin)\n : svgCmd('m', moveBy, 0)\n\n moveBy = 0\n newRow = false\n }\n\n if (!(col + 1 < size && data[i + 1])) {\n path += svgCmd('h', lineLength)\n lineLength = 0\n }\n } else {\n moveBy++\n }\n }\n\n return path\n}\n\nexports.render = function render (qrData, options, cb) {\n const opts = Utils.getOptions(options)\n const size = qrData.modules.size\n const data = qrData.modules.data\n const qrcodesize = size + opts.margin * 2\n\n const bg = !opts.color.light.a\n ? ''\n : '<path ' + getColorAttrib(opts.color.light, 'fill') +\n ' d=\"M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z\"/>'\n\n const path =\n '<path ' + getColorAttrib(opts.color.dark, 'stroke') +\n ' d=\"' + qrToPath(data, size, opts.margin) + '\"/>'\n\n const viewBox = 'viewBox=\"' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '\"'\n\n const width = !opts.width ? '' : 'width=\"' + opts.width + '\" height=\"' + opts.width + '\" '\n\n const svgTag = '<svg xmlns=\"http://www.w3.org/2000/svg\" ' + width + viewBox + ' shape-rendering=\"crispEdges\">' + bg + path + '</svg>\\n'\n\n if (typeof cb === 'function') {\n cb(null, svgTag)\n }\n\n return svgTag\n}\n", "\nconst canPromise = require('./can-promise')\n\nconst QRCode = require('./core/qrcode')\nconst CanvasRenderer = require('./renderer/canvas')\nconst SvgRenderer = require('./renderer/svg-tag.js')\n\nfunction renderCanvas (renderFunc, canvas, text, opts, cb) {\n const args = [].slice.call(arguments, 1)\n const argsNum = args.length\n const isLastArgCb = typeof args[argsNum - 1] === 'function'\n\n if (!isLastArgCb && !canPromise()) {\n throw new Error('Callback required as last argument')\n }\n\n if (isLastArgCb) {\n if (argsNum < 2) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 2) {\n cb = text\n text = canvas\n canvas = opts = undefined\n } else if (argsNum === 3) {\n if (canvas.getContext && typeof cb === 'undefined') {\n cb = opts\n opts = undefined\n } else {\n cb = opts\n opts = text\n text = canvas\n canvas = undefined\n }\n }\n } else {\n if (argsNum < 1) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 1) {\n text = canvas\n canvas = opts = undefined\n } else if (argsNum === 2 && !canvas.getContext) {\n opts = text\n text = canvas\n canvas = undefined\n }\n\n return new Promise(function (resolve, reject) {\n try {\n const data = QRCode.create(text, opts)\n resolve(renderFunc(data, canvas, opts))\n } catch (e) {\n reject(e)\n }\n })\n }\n\n try {\n const data = QRCode.create(text, opts)\n cb(null, renderFunc(data, canvas, opts))\n } catch (e) {\n cb(e)\n }\n}\n\nexports.create = QRCode.create\nexports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)\nexports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)\n\n// only svg for now.\nexports.toString = renderCanvas.bind(null, function (data, _, opts) {\n return SvgRenderer.render(data, opts)\n})\n", "declare class PresentationRequest {\r\n constructor(url: string);\r\n getAvailability(): Promise<any>;\r\n}\r\n\r\nexport async function checkPermissions(): Promise<boolean> {\r\n// console.log(\"checkPermissions()\");\r\n try {\r\n const constraints: MediaStreamConstraints = {\r\n audio: true,\r\n video: true,\r\n };\r\n\r\n // Stream do v\u00EDdeo\r\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\r\n stream.getTracks().forEach((el) => {\r\n el.stop();\r\n });\r\n\r\n return true;\r\n } catch (error) {\r\n return false;\r\n }\r\n}\r\n\r\nexport async function checkIfhasMultipleMonitors(): Promise<boolean> {\r\n return new Promise((resolve, reject) => {\r\n // const checked = (window.screen as any).isExtended;\r\n // resolve(checked);\r\n // if (typeof PresentationRequest === \"undefined\") {\r\n // resolve(false);\r\n // }\r\n\r\n // const presentationRequest = new PresentationRequest(\"receiver.html\");\r\n // presentationRequest\r\n // .getAvailability()\r\n // .then((availability) => {\r\n // console.log(\"availability.value\");\r\n // console.log(availability);\r\n // let hasMultipleMonitors = availability.value;\r\n // availability.addEventListener(\"change\", function () {\r\n // console.log(\"availability.value\");\r\n // console.log(availability);\r\n // hasMultipleMonitors = availability.value;\r\n // });\r\n\r\n // setTimeout(() => {\r\n // resolve(hasMultipleMonitors);\r\n // }, 1000);\r\n // })\r\n // .catch((error) => reject(error));\r\n //detecting the screen using javascript\r\n\r\n const checked = (window.screen as any).isExtended;\r\n if(checked) {\r\n resolve(checked);\r\n } else {\r\n const isFirefox = navigator.userAgent.indexOf(\"Firefox\") > -1;\r\n if(!isFirefox){\r\n let totalScreens = [];\r\n (window as any).getScreenDetails()\r\n .then(function (details: any) {\r\n totalScreens = details;\r\n // console.log(totalScreens);\r\n // console.log(\"No. of Devices Connected: \" + totalScreens.screens.length);\r\n resolve(totalScreens.screens.length >= 2);\r\n });\r\n } else {\r\n resolve(false);\r\n }\r\n }\r\n });\r\n\r\n}\r\n", "import Devices from \"../interfaces/Devices\";\r\n\r\nexport default async function enumarateDevices() {\r\n// console.log(\"enumarateDevices()\");\r\n const virtualCameraSoftware = ['OBS', 'ManyCam', 'Snap Camera', 'Virtual'];\r\n\r\n const mediaDevices: MediaDeviceInfo[] =\r\n await navigator.mediaDevices.enumerateDevices();\r\n\r\n const defaultDevices = mediaDevices.filter((device) => !virtualCameraSoftware.some(keyword => device.deviceId.includes(keyword) || device.label.includes(keyword)));\r\n\r\n const devices: Devices = {\r\n cameras: defaultDevices\r\n .filter((el) => el.kind == \"videoinput\" && el.deviceId)\r\n .map((e) => {\r\n return { label: e.label || \"Generic Device\", id: e.deviceId };\r\n }),\r\n microphones: defaultDevices\r\n .filter((el) => el.kind == \"audioinput\" && el.deviceId)\r\n .map((e) => {\r\n return { label: e.label || \"Generic Device\", id: e.deviceId };\r\n }),\r\n };\r\n\r\n return devices;\r\n}\r\n", "var t=\"undefined\"!=typeof self?self:{};function e(){throw Error(\"Invalid UTF8\")}function n(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}let r,i;const s=\"undefined\"!=typeof TextDecoder;let o;const a=\"undefined\"!=typeof TextEncoder;function c(t){if(a)t=(o||=new TextEncoder).encode(t);else{let n=0;const r=new Uint8Array(3*t.length);for(let i=0;i<t.length;i++){var e=t.charCodeAt(i);if(e<128)r[n++]=e;else{if(e<2048)r[n++]=e>>6|192;else{if(e>=55296&&e<=57343){if(e<=56319&&i<t.length){const s=t.charCodeAt(++i);if(s>=56320&&s<=57343){e=1024*(e-55296)+s-56320+65536,r[n++]=e>>18|240,r[n++]=e>>12&63|128,r[n++]=e>>6&63|128,r[n++]=63&e|128;continue}i--}e=65533}r[n++]=e>>12|224,r[n++]=e>>6&63|128}r[n++]=63&e|128}}t=n===r.length?r:r.subarray(0,n)}return t}var h,u;t:{for(var l=[\"CLOSURE_FLAGS\"],d=t,f=0;f<l.length;f++)if(null==(d=d[l[f]])){u=null;break t}u=d}var p,g=u&&u[610401301];h=null!=g&&g;const m=t.navigator;function y(t){return!!h&&(!!p&&p.brands.some((({brand:e})=>e&&-1!=e.indexOf(t))))}function _(e){var n;return(n=t.navigator)&&(n=n.userAgent)||(n=\"\"),-1!=n.indexOf(e)}function v(){return!!h&&(!!p&&p.brands.length>0)}function E(){return v()?y(\"Chromium\"):(_(\"Chrome\")||_(\"CriOS\"))&&!(!v()&&_(\"Edge\"))||_(\"Silk\")}function w(t){return w[\" \"](t),t}p=m&&m.userAgentData||null,w[\" \"]=function(){};var T=!v()&&(_(\"Trident\")||_(\"MSIE\"));!_(\"Android\")||E(),E(),_(\"Safari\")&&(E()||!v()&&_(\"Coast\")||!v()&&_(\"Opera\")||!v()&&_(\"Edge\")||(v()?y(\"Microsoft Edge\"):_(\"Edg/\"))||v()&&y(\"Opera\"));var A={},b=null;function k(t){const e=t.length;let n=3*e/4;n%3?n=Math.floor(n):-1!=\"=.\".indexOf(t[e-1])&&(n=-1!=\"=.\".indexOf(t[e-2])?n-2:n-1);const r=new Uint8Array(n);let i=0;return function(t,e){function n(e){for(;r<t.length;){const e=t.charAt(r++),n=b[e];if(null!=n)return n;if(!/^[\\s\\xa0]*$/.test(e))throw Error(\"Unknown base64 encoding at char: \"+e)}return e}S();let r=0;for(;;){const t=n(-1),r=n(0),i=n(64),s=n(64);if(64===s&&-1===t)break;e(t<<2|r>>4),64!=i&&(e(r<<4&240|i>>2),64!=s&&e(i<<6&192|s))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function S(){if(!b){b={};var t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".split(\"\"),e=[\"+/=\",\"+/\",\"-_=\",\"-_.\",\"-_\"];for(let n=0;n<5;n++){const r=t.concat(e[n].split(\"\"));A[n]=r;for(let t=0;t<r.length;t++){const e=r[t];void 0===b[e]&&(b[e]=t)}}}}var x=\"undefined\"!=typeof Uint8Array,L=!T&&\"function\"==typeof btoa;function R(t){if(!L){var e;void 0===e&&(e=0),S(),e=A[e];var n=Array(Math.floor(t.length/3)),r=e[64]||\"\";let c=0,h=0;for(;c<t.length-2;c+=3){var i=t[c],s=t[c+1],o=t[c+2],a=e[i>>2];i=e[(3&i)<<4|s>>4],s=e[(15&s)<<2|o>>6],o=e[63&o],n[h++]=a+i+s+o}switch(a=0,o=r,t.length-c){case 2:o=e[(15&(a=t[c+1]))<<2]||r;case 1:t=t[c],n[h]=e[t>>2]+e[(3&t)<<4|a>>4]+o+r}return n.join(\"\")}for(e=\"\",n=0,r=t.length-10240;n<r;)e+=String.fromCharCode.apply(null,t.subarray(n,n+=10240));return e+=String.fromCharCode.apply(null,n?t.subarray(n):t),btoa(e)}const F=/[-_.]/g,I={\"-\":\"+\",_:\"/\",\".\":\"=\"};function M(t){return I[t]||\"\"}function P(t){if(!L)return k(t);F.test(t)&&(t=t.replace(F,M)),t=atob(t);const e=new Uint8Array(t.length);for(let n=0;n<t.length;n++)e[n]=t.charCodeAt(n);return e}function O(t){return x&&null!=t&&t instanceof Uint8Array}var C={};function U(){return B||=new N(null,C)}function D(t){j(C);var e=t.g;return null==(e=null==e||O(e)?e:\"string\"==typeof e?P(e):null)?e:t.g=e}var N=class{h(){return new Uint8Array(D(this)||0)}constructor(t,e){if(j(e),this.g=t,null!=t&&0===t.length)throw Error(\"ByteString should be constructed with non-empty values\")}};let B,G;function j(t){if(t!==C)throw Error(\"illegal external caller\")}function V(t,e){t.__closure__error__context__984382||(t.__closure__error__context__984382={}),t.__closure__error__context__984382.severity=e}function X(t){return V(t=Error(t),\"warning\"),t}var H=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol(),W=new Set;function z(t,e,n=!1,r=!1){return t=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol()?r&&Symbol.for&&t?Symbol.for(t):null!=t?Symbol(t):Symbol():e,n&&W.add(t),t}var K=z(\"jas\",void 0,!0,!0),Y=z(void 0,\"0di\"),$=z(void 0,\"2ex\"),q=z(void 0,\"1oa\",!0),J=z(void 0,Symbol(),!0);const Z=H?K:\"Ga\",Q={Ga:{value:0,configurable:!0,writable:!0,enumerable:!1}},tt=Object.defineProperties;function et(t,e){H||Z in t||tt(t,Q),t[Z]|=e}function nt(t,e){H||Z in t||tt(t,Q),t[Z]=e}function rt(t){return et(t,34),t}function it(t,e){nt(e,-30975&(0|t))}function st(t,e){nt(e,-30941&(34|t))}function ot(){return\"function\"==typeof BigInt}function at(t){return Array.prototype.slice.call(t)}var ct,ht={},ut={};function lt(t){return!(!t||\"object\"!=typeof t||t.Ia!==ut)}function dt(t){return null!==t&&\"object\"==typeof t&&!Array.isArray(t)&&t.constructor===Object}function ft(t,e){if(null!=t)if(\"string\"==typeof t)t=t?new N(t,C):U();else if(t.constructor!==N)if(O(t))t=t.length?new N(new Uint8Array(t),C):U();else{if(!e)throw Error();t=void 0}return t}function pt(t){return!(!Array.isArray(t)||t.length)&&!!(1&(0|t[Z]))}const gt=[];function mt(t){if(2&t)throw Error()}nt(gt,55),ct=Object.freeze(gt);class yt{constructor(t,e,n){this.l=0,this.g=t,this.h=e,this.m=n}next(){if(this.l<this.g.length){const t=this.g[this.l++];return{done:!1,value:this.h?this.h.call(this.m,t):t}}return{done:!0,value:void 0}}[Symbol.iterator](){return new yt(this.g,this.h,this.m)}}function _t(t){return J?t[J]:void 0}var vt=Object.freeze({});function Et(t){return t.Qa=!0,t}var wt=Et((t=>\"number\"==typeof t)),Tt=Et((t=>\"string\"==typeof t)),At=Et((t=>\"boolean\"==typeof t)),bt=\"function\"==typeof t.BigInt&&\"bigint\"==typeof t.BigInt(0),kt=Et((t=>bt?t>=xt&&t<=Rt:\"-\"===t[0]?Ft(t,St):Ft(t,Lt)));const St=Number.MIN_SAFE_INTEGER.toString(),xt=bt?BigInt(Number.MIN_SAFE_INTEGER):void 0,Lt=Number.MAX_SAFE_INTEGER.toString(),Rt=bt?BigInt(Number.MAX_SAFE_INTEGER):void 0;function Ft(t,e){if(t.length>e.length)return!1;if(t.length<e.length||t===e)return!0;for(let n=0;n<t.length;n++){const r=t[n],i=e[n];if(r>i)return!1;if(r<i)return!0}}const It=\"function\"==typeof Uint8Array.prototype.slice;let Mt,Pt=0,Ot=0;function Ct(t){const e=t>>>0;Pt=e,Ot=(t-e)/4294967296>>>0}function Ut(t){if(t<0){Ct(-t);const[e,n]=Xt(Pt,Ot);Pt=e>>>0,Ot=n>>>0}else Ct(t)}function Dt(t){const e=Mt||=new DataView(new ArrayBuffer(8));e.setFloat32(0,+t,!0),Ot=0,Pt=e.getUint32(0,!0)}function Nt(t,e){const n=4294967296*e+(t>>>0);return Number.isSafeInteger(n)?n:Gt(t,e)}function Bt(t,e){const n=2147483648&e;return n&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),\"number\"==typeof(t=Nt(t,e))?n?-t:t:n?\"-\"+t:t}function Gt(t,e){if(t>>>=0,(e>>>=0)<=2097151)var n=\"\"+(4294967296*e+t);else ot()?n=\"\"+(BigInt(e)<<BigInt(32)|BigInt(t)):(t=(16777215&t)+6777216*(n=16777215&(t>>>24|e<<8))+6710656*(e=e>>16&65535),n+=8147497*e,e*=2,t>=1e7&&(n+=t/1e7>>>0,t%=1e7),n>=1e7&&(e+=n/1e7>>>0,n%=1e7),n=e+jt(n)+jt(t));return n}function jt(t){return t=String(t),\"0000000\".slice(t.length)+t}function Vt(t){if(t.length<16)Ut(Number(t));else if(ot())t=BigInt(t),Pt=Number(t&BigInt(4294967295))>>>0,Ot=Number(t>>BigInt(32)&BigInt(4294967295));else{const e=+(\"-\"===t[0]);Ot=Pt=0;const n=t.length;for(let r=e,i=(n-e)%6+e;i<=n;r=i,i+=6){const e=Number(t.slice(r,i));Ot*=1e6,Pt=1e6*Pt+e,Pt>=4294967296&&(Ot+=Math.trunc(Pt/4294967296),Ot>>>=0,Pt>>>=0)}if(e){const[t,e]=Xt(Pt,Ot);Pt=t,Ot=e}}}function Xt(t,e){return e=~e,t?t=1+~t:e+=1,[t,e]}const Ht=\"function\"==typeof BigInt?BigInt.asIntN:void 0,Wt=\"function\"==typeof BigInt?BigInt.asUintN:void 0,zt=Number.isSafeInteger,Kt=Number.isFinite,Yt=Math.trunc;function $t(t){return null==t||\"number\"==typeof t?t:\"NaN\"===t||\"Infinity\"===t||\"-Infinity\"===t?Number(t):void 0}function qt(t){return null==t||\"boolean\"==typeof t?t:\"number\"==typeof t?!!t:void 0}const Jt=/^-?([1-9][0-9]*|0)(\\.[0-9]+)?$/;function Zt(t){switch(typeof t){case\"bigint\":return!0;case\"number\":return Kt(t);case\"string\":return Jt.test(t);default:return!1}}function Qt(t){if(null==t)return t;if(\"string\"==typeof t&&t)t=+t;else if(\"number\"!=typeof t)return;return Kt(t)?0|t:void 0}function te(t){if(null==t)return t;if(\"string\"==typeof t&&t)t=+t;else if(\"number\"!=typeof t)return;return Kt(t)?t>>>0:void 0}function ee(t){if(\"-\"===t[0])return!1;const e=t.length;return e<20||20===e&&Number(t.substring(0,6))<184467}function ne(t){return t=Yt(t),zt(t)||(Ut(t),t=Bt(Pt,Ot)),t}function re(t){var e=Yt(Number(t));if(zt(e))return String(e);if(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),e=t.length,!(\"-\"===t[0]?e<20||20===e&&Number(t.substring(0,7))>-922337:e<19||19===e&&Number(t.substring(0,6))<922337))if(Vt(t),t=Pt,2147483648&(e=Ot))if(ot())t=\"\"+(BigInt(0|e)<<BigInt(32)|BigInt(t>>>0));else{const[n,r]=Xt(t,e);t=\"-\"+Gt(n,r)}else t=Gt(t,e);return t}function ie(t){return null==t?t:\"bigint\"==typeof t?(kt(t)?t=Number(t):(t=Ht(64,t),t=kt(t)?Number(t):String(t)),t):Zt(t)?\"number\"==typeof t?ne(t):re(t):void 0}function se(t){if(null==t)return t;var e=typeof t;if(\"bigint\"===e)return String(Wt(64,t));if(Zt(t)){if(\"string\"===e)return e=Yt(Number(t)),zt(e)&&e>=0?t=String(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),ee(t)||(Vt(t),t=Gt(Pt,Ot))),t;if(\"number\"===e)return(t=Yt(t))>=0&&zt(t)?t:function(t){if(t<0){Ut(t);var e=Gt(Pt,Ot);return t=Number(e),zt(t)?t:e}return ee(e=String(t))?e:(Ut(t),Nt(Pt,Ot))}(t)}}function oe(t){if(\"string\"!=typeof t)throw Error();return t}function ae(t){if(null!=t&&\"string\"!=typeof t)throw Error();return t}function ce(t){return null==t||\"string\"==typeof t?t:void 0}function he(t,e,n,r){if(null!=t&&\"object\"==typeof t&&t.W===ht)return t;if(!Array.isArray(t))return n?2&r?((t=e[Y])||(rt((t=new e).u),t=e[Y]=t),e=t):e=new e:e=void 0,e;let i=n=0|t[Z];return 0===i&&(i|=32&r),i|=2&r,i!==n&&nt(t,i),new e(t)}function ue(t,e,n){if(e)t:{if(!Zt(e=t))throw X(\"int64\");switch(typeof e){case\"string\":e=re(e);break t;case\"bigint\":if(t=e=Ht(64,e),Tt(t)){if(!/^\\s*(?:-?[1-9]\\d*|0)?\\s*$/.test(t))throw Error(String(t))}else if(wt(t)&&!Number.isSafeInteger(t))throw Error(String(t));e=bt?BigInt(e):At(e)?e?\"1\":\"0\":Tt(e)?e.trim()||\"0\":String(e);break t;default:e=ne(e)}}else e=ie(t);return\"string\"==typeof(n=null==(t=e)?n?0:void 0:t)&&zt(e=+n)?e:n}const le={};let de=function(){try{return w(new class extends Map{constructor(){super()}}),!1}catch{return!0}}();class fe{constructor(){this.g=new Map}get(t){return this.g.get(t)}set(t,e){return this.g.set(t,e),this.size=this.g.size,this}delete(t){return t=this.g.delete(t),this.size=this.g.size,t}clear(){this.g.clear(),this.size=this.g.size}has(t){return this.g.has(t)}entries(){return this.g.entries()}keys(){return this.g.keys()}values(){return this.g.values()}forEach(t,e){return this.g.forEach(t,e)}[Symbol.iterator](){return this.entries()}}const pe=de?(Object.setPrototypeOf(fe.prototype,Map.prototype),Object.defineProperties(fe.prototype,{size:{value:0,configurable:!0,enumerable:!0,writable:!0}}),fe):class extends Map{constructor(){super()}};function ge(t){return t}function me(t){if(2&t.L)throw Error(\"Cannot mutate an immutable Map\")}var ye=class extends pe{constructor(t,e,n=ge,r=ge){super();let i=0|t[Z];i|=64,nt(t,i),this.L=i,this.S=e,this.R=n,this.Y=this.S?_e:r;for(let s=0;s<t.length;s++){const o=t[s],a=n(o[0],!1,!0);let c=o[1];e?void 0===c&&(c=null):c=r(o[1],!1,!0,void 0,void 0,i),super.set(a,c)}}na(t=ve){if(0!==this.size)return this.X(t)}X(t=ve){const e=[],n=super.entries();for(var r;!(r=n.next()).done;)(r=r.value)[0]=t(r[0]),r[1]=t(r[1]),e.push(r);return e}clear(){me(this),super.clear()}delete(t){return me(this),super.delete(this.R(t,!0,!1))}entries(){var t=this.ma();return new yt(t,Ee,this)}keys(){return this.Ha()}values(){var t=this.ma();return new yt(t,ye.prototype.get,this)}forEach(t,e){super.forEach(((n,r)=>{t.call(e,this.get(r),r,this)}))}set(t,e){return me(this),null==(t=this.R(t,!0,!1))?this:null==e?(super.delete(t),this):super.set(t,this.Y(e,!0,!0,this.S,!1,this.L))}Na(t){const e=this.R(t[0],!1,!0);t=t[1],t=this.S?void 0===t?null:t:this.Y(t,!1,!0,void 0,!1,this.L),super.set(e,t)}has(t){return super.has(this.R(t,!1,!1))}get(t){t=this.R(t,!1,!1);const e=super.get(t);if(void 0!==e){var n=this.S;return n?((n=this.Y(e,!1,!0,n,this.ra,this.L))!==e&&super.set(t,n),n):e}}ma(){return Array.from(super.keys())}Ha(){return super.keys()}[Symbol.iterator](){return this.entries()}};function _e(t,e,n,r,i,s){return t=he(t,r,n,s),i&&(t=Oe(t)),t}function ve(t){return t}function Ee(t){return[t,this.get(t)]}let we,Te,Ae;function be(){return we||=new ye(rt([]),void 0,void 0,void 0,le)}function ke(t,e,n,r,i){if(null!=t){if(Array.isArray(t))t=pt(t)?void 0:i&&2&(0|t[Z])?t:Se(t,e,n,void 0!==r,i);else if(dt(t)){const s={};for(let o in t)s[o]=ke(t[o],e,n,r,i);t=s}else t=e(t,r);return t}}function Se(t,e,n,r,i){const s=r||n?0|t[Z]:0,o=r?!!(32&s):void 0;r=at(t);for(let t=0;t<r.length;t++)r[t]=ke(r[t],e,n,o,i);return n&&((t=_t(t))&&(r[J]=at(t)),n(s,r)),r}function xe(t){return ke(t,Le,void 0,void 0,!1)}function Le(t){return t.W===ht?t.toJSON():t instanceof ye?t.na(xe):function(t){switch(typeof t){case\"number\":return isFinite(t)?t:String(t);case\"bigint\":return kt(t)?Number(t):String(t);case\"boolean\":return t?1:0;case\"object\":if(t)if(Array.isArray(t)){if(pt(t))return}else{if(O(t))return R(t);if(t instanceof N){const e=t.g;return null==e?\"\":\"string\"==typeof e?e:t.g=R(e)}if(t instanceof ye)return t.na()}}return t}(t)}function Re(t){return Se(t,Le,void 0,void 0,!1)}function Fe(t,e,n){return t=Ie(t,e[0],e[1],n?1:2),e!==Te&&n&&et(t,16384),t}function Ie(t,e,n,r){if(null==t){var i=96;n?(t=[n],i|=512):t=[],e&&(i=-33521665&i|(1023&e)<<15)}else{if(!Array.isArray(t))throw Error(\"narr\");if(2048&(i=0|t[Z]))throw Error(\"farr\");if(64&i)return t;if(1===r||2===r||(i|=64),n&&(i|=512,n!==t[0]))throw Error(\"mid\");t:{if(r=(n=t).length){const t=r-1;if(dt(n[t])){if((e=t-(512&(i|=256)?0:-1))>=1024)throw Error(\"pvtlmt\");i=-33521665&i|(1023&e)<<15;break t}}if(e){if((e=Math.max(e,r-(512&i?0:-1)))>1024)throw Error(\"spvt\");i=-33521665&i|(1023&e)<<15}}}return nt(t,i),t}function Me(t,e,n=st){if(null!=t){if(x&&t instanceof Uint8Array)return e?t:new Uint8Array(t);if(Array.isArray(t)){var r=0|t[Z];return 2&r?t:(e&&=0===r||!!(32&r)&&!(64&r||!(16&r)),e?(nt(t,-12293&(34|r)),t):Se(t,Me,4&r?st:n,!0,!0))}return t.W===ht?t=2&(r=0|(n=t.u)[Z])?t:new t.constructor(Pe(n,r,!0)):t instanceof ye&&!(2&t.L)&&(n=rt(t.X(Me)),t=new ye(n,t.S,t.R,t.Y)),t}}function Pe(t,e,n){const r=n||2&e?st:it,i=!!(32&e);return t=function(t,e,n){const r=at(t);var i=r.length;const s=256&e?r[i-1]:void 0;for(i+=s?-1:0,e=512&e?1:0;e<i;e++)r[e]=n(r[e]);if(s){e=r[e]={};for(const t in s)e[t]=n(s[t])}return(t=_t(t))&&(r[J]=at(t)),r}(t,e,(t=>Me(t,i,r))),et(t,32|(n?2:0)),t}function Oe(t){const e=t.u,n=0|e[Z];return 2&n?new t.constructor(Pe(e,n,!1)):t}function Ce(t,e){return Ue(t=t.u,0|t[Z],e)}function Ue(e,n,r,i){if(-1===r)return null;var s=r+(512&n?0:-1);const o=e.length-1;return s>=o&&256&n?e[o][r]:i&&256&n&&null!=(n=e[o][r])?(null!=e[s]&&null!=$&&((s=(e=G??={})[$]||0)>=4||(e[$]=s+1,V(e=Error(),\"incident\"),function(e){t.setTimeout((()=>{throw e}),0)}(e))),n):s<=o?e[s]:void 0}function De(t,e,n){const r=t.u;let i=0|r[Z];return mt(i),Ne(r,i,e,n),t}function Ne(t,e,n,r){const i=512&e?0:-1,s=n+i;var o=t.length-1;return s>=o&&256&e?(t[o][n]=r,e):s<=o?(t[s]=r,256&e&&(n in(t=t[o])&&delete t[n]),e):(void 0!==r&&(n>=(o=e>>15&1023||536870912)?null!=r&&(t[o+i]={[n]:r},nt(t,e|=256)):t[s]=r),e)}function Be(t,e){let n=0|(t=t.u)[Z];const r=Ue(t,n,e),i=$t(r);return null!=i&&i!==r&&Ne(t,n,e,i),i}function Ge(t){let e=0|(t=t.u)[Z];const n=Ue(t,e,1),r=ft(n,!0);return null!=r&&r!==n&&Ne(t,e,1,r),r}function je(){return void 0===vt?2:4}function Ve(t,e,n,r,i){const s=t.u,o=2&(t=0|s[Z])?1:r;i=!!i;let a=0|(r=Xe(s,t,e))[Z];if(!(4&a)){4&a&&(r=at(r),a=an(a,t),t=Ne(s,t,e,r));let i=0,o=0;for(;i<r.length;i++){const t=n(r[i]);null!=t&&(r[o++]=t)}o<i&&(r.length=o),a=He(a,t),n=-4097&(20|a),a=n&=-8193,nt(r,a),2&a&&Object.freeze(r)}return 1===o||4===o&&32&a?We(a)||(i=a,a|=2,a!==i&&nt(r,a),Object.freeze(r)):(2===o&&We(a)&&(r=at(r),a=an(a,t),a=cn(a,t,i),nt(r,a),t=Ne(s,t,e,r)),We(a)||(e=a,a=cn(a,t,i),a!==e&&nt(r,a))),r}function Xe(t,e,n,r){return t=Ue(t,e,n,r),Array.isArray(t)?t:ct}function He(t,e){return 0===t&&(t=an(t,e)),1|t}function We(t){return!!(2&t)&&!!(4&t)||!!(2048&t)}function ze(t){t=at(t);for(let e=0;e<t.length;e++){const n=t[e]=at(t[e]);Array.isArray(n[1])&&(n[1]=rt(n[1]))}return t}function Ke(t,e,n,r){let i=0|(t=t.u)[Z];mt(i),Ne(t,i,e,(\"0\"===r?0===Number(n):n===r)?void 0:n)}function Ye(t,e,n,r,i){mt(e);var s=!(!(64&e)&&16384&e);const o=(i=Xe(t,e,n,i))!==ct;if(s||!o){let a=s=o?0|i[Z]:0;(!o||2&a||We(a)||4&a&&!(32&a))&&(i=at(i),a=an(a,e),e=Ne(t,e,n,i)),a=-13&He(a,e),a=cn(r?-17&a:16|a,e,!0),a!==s&&nt(i,a)}return i}function $e(t,e){var n=vs;return Ze(qe(t=t.u),t,0|t[Z],n)===e?e:-1}function qe(t){if(H)return t[q]??(t[q]=new Map);if(q in t)return t[q];const e=new Map;return Object.defineProperty(t,q,{value:e}),e}function Je(t,e,n,r){const i=qe(t),s=Ze(i,t,e,n);return s!==r&&(s&&(e=Ne(t,e,s)),i.set(n,r)),e}function Ze(t,e,n,r){let i=t.get(r);if(null!=i)return i;i=0;for(let t=0;t<r.length;t++){const s=r[t];null!=Ue(e,n,s)&&(0!==i&&(n=Ne(e,n,i)),i=s)}return t.set(r,i),i}function Qe(t,e,n,r){let i,s=0|t[Z];if(null!=(r=Ue(t,s,n,r))&&r.W===ht)return(e=Oe(r))!==r&&Ne(t,s,n,e),e.u;if(Array.isArray(r)){const t=0|r[Z];i=2&t?Fe(Pe(r,t,!1),e,!0):64&t?r:Fe(i,e,!0)}else i=Fe(void 0,e,!0);return i!==r&&Ne(t,s,n,i),i}function tn(t,e,n,r){let i=0|(t=t.u)[Z];return(e=he(r=Ue(t,i,n,r),e,!1,i))!==r&&null!=e&&Ne(t,i,n,e),e}function en(t,e,n,r=!1){if(null==(e=tn(t,e,n,r)))return e;if(!(2&(r=0|(t=t.u)[Z]))){const i=Oe(e);i!==e&&Ne(t,r,n,e=i)}return e}function nn(t,e,n,r,i,s,o){t=t.u;var a=!!(2&e);const c=a?1:i;s=!!s,o&&=!a;var h=0|(i=Xe(t,e,r))[Z];if(!(a=!!(4&h))){var u=i,l=e;const t=!!(2&(h=He(h,e)));t&&(l|=2);let r=!t,s=!0,o=0,a=0;for(;o<u.length;o++){const e=he(u[o],n,!1,l);if(e instanceof n){if(!t){const t=!!(2&(0|e.u[Z]));r&&=!t,s&&=t}u[a++]=e}}a<o&&(u.length=a),h|=4,h=s?16|h:-17&h,nt(u,h=r?8|h:-9&h),t&&Object.freeze(u)}if(o&&!(8&h||!i.length&&(1===c||4===c&&32&h))){for(We(h)&&(i=at(i),h=an(h,e),e=Ne(t,e,r,i)),n=i,o=h,u=0;u<n.length;u++)(h=n[u])!==(l=Oe(h))&&(n[u]=l);o|=8,nt(n,o=n.length?-17&o:16|o),h=o}return 1===c||4===c&&32&h?We(h)||(e=h,(h|=!i.length||16&h&&(!a||32&h)?2:2048)!==e&&nt(i,h),Object.freeze(i)):(2===c&&We(h)&&(nt(i=at(i),h=cn(h=an(h,e),e,s)),e=Ne(t,e,r,i)),We(h)||(r=h,(h=cn(h,e,s))!==r&&nt(i,h))),i}function rn(t,e,n){const r=0|t.u[Z];return nn(t,r,e,n,je(),!1,!(2&r))}function sn(t,e,n,r){return null==r&&(r=void 0),De(t,n,r)}function on(t,e,n,r){null==r&&(r=void 0);t:{let i=0|(t=t.u)[Z];if(mt(i),null==r){const r=qe(t);if(Ze(r,t,i,n)!==e)break t;r.set(n,0)}else i=Je(t,i,n,e);Ne(t,i,e,r)}}function an(t,e){return-2049&(t=32|(2&e?2|t:-3&t))}function cn(t,e,n){return 32&e&&n||(t&=-33),t}function hn(t,e,n,r){const i=0|t.u[Z];mt(i),t=nn(t,i,n,e,2,!0),r=null!=r?r:new n,t.push(r),t[Z]=2&(0|r.u[Z])?-9&t[Z]:-17&t[Z]}function un(t,e){return Qt(Ce(t,e))}function ln(t,e){return ce(Ce(t,e))}function dn(t,e){return Be(t,e)??0}function fn(t,e,n){if(null!=n&&\"boolean\"!=typeof n)throw t=typeof n,Error(`Expected boolean but got ${\"object\"!=t?t:n?Array.isArray(n)?\"array\":t:\"null\"}: ${n}`);De(t,e,n)}function pn(t,e,n){if(null!=n){if(\"number\"!=typeof n)throw X(\"int32\");if(!Kt(n))throw X(\"int32\");n|=0}De(t,e,n)}function gn(t,e,n){if(null!=n&&\"number\"!=typeof n)throw Error(`Value of float/double field must be a number, found ${typeof n}: ${n}`);De(t,e,n)}function mn(t,e,n){{const o=t.u;let a=0|o[Z];if(mt(a),null==n)Ne(o,a,e);else{var r=t=0|n[Z],i=We(t),s=i||Object.isFrozen(n);for(i||(t=0),s||(n=at(n),r=0,t=cn(t=an(t,a),a,!0),s=!1),t|=21,i=0;i<n.length;i++){const e=n[i],o=oe(e);Object.is(e,o)||(s&&(n=at(n),r=0,t=cn(t=an(t,a),a,!0),s=!1),n[i]=o)}t!==r&&(s&&(n=at(n),t=cn(t=an(t,a),a,!0)),nt(n,t)),Ne(o,a,e,n)}}}function yn(t,e,n){mt(0|t.u[Z]),Ve(t,e,ce,2,!0).push(oe(n))}function _n(t,e){return Error(`Invalid wire type: ${t} (at position ${e})`)}function vn(){return Error(\"Failed to read varint, encoding is invalid.\")}function En(t,e){return Error(`Tried to read past the end of the data ${e} > ${t}`)}function wn(t){if(\"string\"==typeof t)return{buffer:P(t),N:!1};if(Array.isArray(t))return{buffer:new Uint8Array(t),N:!1};if(t.constructor===Uint8Array)return{buffer:t,N:!1};if(t.constructor===ArrayBuffer)return{buffer:new Uint8Array(t),N:!1};if(t.constructor===N)return{buffer:D(t)||new Uint8Array(0),N:!0};if(t instanceof Uint8Array)return{buffer:new Uint8Array(t.buffer,t.byteOffset,t.byteLength),N:!1};throw Error(\"Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, a ByteString or an Array of numbers\")}function Tn(t,e){let n,r=0,i=0,s=0;const o=t.h;let a=t.g;do{n=o[a++],r|=(127&n)<<s,s+=7}while(s<32&&128&n);for(s>32&&(i|=(127&n)>>4),s=3;s<32&&128&n;s+=7)n=o[a++],i|=(127&n)<<s;if(Fn(t,a),n<128)return e(r>>>0,i>>>0);throw vn()}function An(t){let e=0,n=t.g;const r=n+10,i=t.h;for(;n<r;){const r=i[n++];if(e|=r,0==(128&r))return Fn(t,n),!!(127&e)}throw vn()}function bn(t){const e=t.h;let n=t.g,r=e[n++],i=127&r;if(128&r&&(r=e[n++],i|=(127&r)<<7,128&r&&(r=e[n++],i|=(127&r)<<14,128&r&&(r=e[n++],i|=(127&r)<<21,128&r&&(r=e[n++],i|=r<<28,128&r&&128&e[n++]&&128&e[n++]&&128&e[n++]&&128&e[n++]&&128&e[n++])))))throw vn();return Fn(t,n),i}function kn(t){return bn(t)>>>0}function Sn(t){var e=t.h;const n=t.g,r=e[n],i=e[n+1],s=e[n+2];return e=e[n+3],Fn(t,t.g+4),(r<<0|i<<8|s<<16|e<<24)>>>0}function xn(t){var e=Sn(t);t=2*(e>>31)+1;const n=e>>>23&255;return e&=8388607,255==n?e?NaN:t*(1/0):0==n?1401298464324817e-60*t*e:t*Math.pow(2,n-150)*(e+8388608)}function Ln(t){return bn(t)}function Rn(t,e,{ba:n=!1}={}){t.ba=n,e&&(e=wn(e),t.h=e.buffer,t.m=e.N,t.j=0,t.l=t.h.length,t.g=t.j)}function Fn(t,e){if(t.g=e,e>t.l)throw En(t.l,e)}function In(t,e){if(e<0)throw Error(`Tried to read a negative byte length: ${e}`);const n=t.g,r=n+e;if(r>t.l)throw En(e,t.l-n);return t.g=r,n}function Mn(t,e){if(0==e)return U();var n=In(t,e);return t.ba&&t.m?n=t.h.subarray(n,n+e):(t=t.h,n=n===(e=n+e)?new Uint8Array(0):It?t.slice(n,e):new Uint8Array(t.subarray(n,e))),0==n.length?U():new N(n,C)}ye.prototype.toJSON=void 0,ye.prototype.Ia=ut;var Pn=[];function On(t){var e=t.g;if(e.g==e.l)return!1;t.l=t.g.g;var n=kn(t.g);if(e=n>>>3,!((n&=7)>=0&&n<=5))throw _n(n,t.l);if(e<1)throw Error(`Invalid field number: ${e} (at position ${t.l})`);return t.m=e,t.h=n,!0}function Cn(t){switch(t.h){case 0:0!=t.h?Cn(t):An(t.g);break;case 1:Fn(t=t.g,t.g+8);break;case 2:if(2!=t.h)Cn(t);else{var e=kn(t.g);Fn(t=t.g,t.g+e)}break;case 5:Fn(t=t.g,t.g+4);break;case 3:for(e=t.m;;){if(!On(t))throw Error(\"Unmatched start-group tag: stream EOF\");if(4==t.h){if(t.m!=e)throw Error(\"Unmatched end-group tag\");break}Cn(t)}break;default:throw _n(t.h,t.l)}}function Un(t,e,n){const r=t.g.l,i=kn(t.g),s=t.g.g+i;let o=s-r;if(o<=0&&(t.g.l=s,n(e,t,void 0,void 0,void 0),o=s-t.g.g),o)throw Error(`Message parsing ended unexpectedly. Expected to read ${i} bytes, instead read ${i-o} bytes, either the data ended unexpectedly or the message misreported its own length`);return t.g.g=s,t.g.l=r,e}function Dn(t){var o=kn(t.g),a=In(t=t.g,o);if(t=t.h,s){var c,h=t;(c=i)||(c=i=new TextDecoder(\"utf-8\",{fatal:!0})),o=a+o,h=0===a&&o===h.length?h:h.subarray(a,o);try{var u=c.decode(h)}catch(t){if(void 0===r){try{c.decode(new Uint8Array([128]))}catch(t){}try{c.decode(new Uint8Array([97])),r=!0}catch(t){r=!1}}throw!r&&(i=void 0),t}}else{o=(u=a)+o,a=[];let r,i=null;for(;u<o;){var l=t[u++];l<128?a.push(l):l<224?u>=o?e():(r=t[u++],l<194||128!=(192&r)?(u--,e()):a.push((31&l)<<6|63&r)):l<240?u>=o-1?e():(r=t[u++],128!=(192&r)||224===l&&r<160||237===l&&r>=160||128!=(192&(c=t[u++]))?(u--,e()):a.push((15&l)<<12|(63&r)<<6|63&c)):l<=244?u>=o-2?e():(r=t[u++],128!=(192&r)||r-144+(l<<28)>>30!=0||128!=(192&(c=t[u++]))||128!=(192&(h=t[u++]))?(u--,e()):(l=(7&l)<<18|(63&r)<<12|(63&c)<<6|63&h,l-=65536,a.push(55296+(l>>10&1023),56320+(1023&l)))):e(),a.length>=8192&&(i=n(i,a),a.length=0)}u=n(i,a)}return u}function Nn(t){const e=kn(t.g);return Mn(t.g,e)}function Bn(t,e,n){var r=kn(t.g);for(r=t.g.g+r;t.g.g<r;)n.push(e(t.g))}var Gn=[];function jn(t){return t}let Vn;function Xn(t,e,n){e.g?e.m(t,e.g,e.h,n):e.m(t,e.h,n)}var Hn=class{constructor(t,e){this.u=Ie(t,e)}toJSON(){const t=!Vn;try{return t&&(Vn=Re),Wn(this)}finally{t&&(Vn=void 0)}}l(){var t=go;return t.g?t.l(this,t.g,t.h,!0):t.l(this,t.h,t.defaultValue,!0)}clone(){const t=this.u;return new this.constructor(Pe(t,0|t[Z],!1))}N(){return!!(2&(0|this.u[Z]))}};function Wn(t){var e=t.u;{e=(t=Vn(e))!==e;let h=t.length;if(h){var n=t[h-1],r=dt(n);r?h--:n=void 0;var i=t;if(r){t:{var s,o=n,a=!1;if(o)for(let t in o)isNaN(+t)?(s??={})[t]=o[t]:(r=o[t],Array.isArray(r)&&(pt(r)||lt(r)&&0===r.size)&&(r=null),null==r&&(a=!0),null!=r&&((s??={})[t]=r));if(a||(s=o),s)for(let t in s){a=s;break t}a=null}o=null==a?null!=n:a!==n}for(;h>0&&(null==(s=i[h-1])||pt(s)||lt(s)&&0===s.size);h--)var c=!0;(i!==t||o||c)&&(e?(c||o||a)&&(i.length=h):i=Array.prototype.slice.call(i,0,h),a&&i.push(a)),c=i}else c=t}return c}function zn(t){return t?/^\\d+$/.test(t)?(Vt(t),new Kn(Pt,Ot)):null:Yn||=new Kn(0,0)}Hn.prototype.W=ht,Hn.prototype.toString=function(){try{return Vn=jn,Wn(this).toString()}finally{Vn=void 0}};var Kn=class{constructor(t,e){this.h=t>>>0,this.g=e>>>0}};let Yn;function $n(t){return t?/^-?\\d+$/.test(t)?(Vt(t),new qn(Pt,Ot)):null:Jn||=new qn(0,0)}var qn=class{constructor(t,e){this.h=t>>>0,this.g=e>>>0}};let Jn;function Zn(t,e,n){for(;n>0||e>127;)t.g.push(127&e|128),e=(e>>>7|n<<25)>>>0,n>>>=7;t.g.push(e)}function Qn(t,e){for(;e>127;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function tr(t,e){if(e>=0)Qn(t,e);else{for(let n=0;n<9;n++)t.g.push(127&e|128),e>>=7;t.g.push(1)}}function er(t,e){t.g.push(e>>>0&255),t.g.push(e>>>8&255),t.g.push(e>>>16&255),t.g.push(e>>>24&255)}function nr(t,e){0!==e.length&&(t.l.push(e),t.h+=e.length)}function rr(t,e,n){Qn(t.g,8*e+n)}function ir(t,e){return rr(t,e,2),e=t.g.end(),nr(t,e),e.push(t.h),e}function sr(t,e){var n=e.pop();for(n=t.h+t.g.length()-n;n>127;)e.push(127&n|128),n>>>=7,t.h++;e.push(n),t.h++}function or(t,e,n){rr(t,e,2),Qn(t.g,n.length),nr(t,t.g.end()),nr(t,n)}function ar(t,e,n,r){null!=n&&(e=ir(t,e),r(n,t),sr(t,e))}function cr(){const t=class{constructor(){throw Error()}};return Object.setPrototypeOf(t,t.prototype),t}var hr=cr(),ur=cr(),lr=cr(),dr=cr(),fr=cr(),pr=cr(),gr=cr(),mr=cr(),yr=cr(),_r=class{constructor(t,e,n){this.g=t,this.h=e,t=hr,this.l=!!t&&n===t||!1}};function vr(t,e){return new _r(t,e,hr)}function Er(t,e,n,r,i){ar(t,n,Ir(e,r),i)}const wr=vr((function(t,e,n,r,i){return 2===t.h&&(Un(t,Qe(e,r,n),i),!0)}),Er),Tr=vr((function(t,e,n,r,i){return 2===t.h&&(Un(t,Qe(e,r,n,!0),i),!0)}),Er);var Ar=Symbol(),br=Symbol(),kr=Symbol(),Sr=Symbol();let xr,Lr;function Rr(t,e,n,r){var i=r[t];if(i)return i;(i={}).Pa=r,i.V=function(t){switch(typeof t){case\"boolean\":return Te||=[0,void 0,!0];case\"number\":return t>0?void 0:0===t?Ae||=[0,void 0]:[-t,void 0];case\"string\":return[0,t];case\"object\":return t}}(r[0]);var s=r[1];let o=1;s&&s.constructor===Object&&(i.ga=s,\"function\"==typeof(s=r[++o])&&(i.la=!0,xr??=s,Lr??=r[o+1],s=r[o+=2]));const a={};for(;s&&Array.isArray(s)&&s.length&&\"number\"==typeof s[0]&&s[0]>0;){for(var c=0;c<s.length;c++)a[s[c]]=s;s=r[++o]}for(c=1;void 0!==s;){let t;\"number\"==typeof s&&(c+=s,s=r[++o]);var h=void 0;if(s instanceof _r?t=s:(t=wr,o--),t?.l){s=r[++o],h=r;var u=o;\"function\"==typeof s&&(s=s(),h[u]=s),h=s}for(u=c+1,\"number\"==typeof(s=r[++o])&&s<0&&(u-=s,s=r[++o]);c<u;c++){const r=a[c];h?n(i,c,t,h,r):e(i,c,t,r)}}return r[t]=i}function Fr(t){return Array.isArray(t)?t[0]instanceof _r?t:[Tr,t]:[t,void 0]}function Ir(t,e){return t instanceof Hn?t.u:Array.isArray(t)?Fe(t,e,!1):void 0}function Mr(t,e,n,r){const i=n.g;t[e]=r?(t,e,n)=>i(t,e,n,r):i}function Pr(t,e,n,r,i){const s=n.g;let o,a;t[e]=(t,e,n)=>s(t,e,n,a||=Rr(br,Mr,Pr,r).V,o||=Or(r),i)}function Or(t){let e=t[kr];if(null!=e)return e;const n=Rr(br,Mr,Pr,t);return e=n.la?(t,e)=>xr(t,e,n):(t,e)=>{const r=0|t[Z];for(;On(e)&&4!=e.h;){var i=e.m,s=n[i];if(null==s){var o=n.ga;o&&(o=o[i])&&(null!=(o=Cr(o))&&(s=n[i]=o))}null!=s&&s(e,t,i)||(i=(s=e).l,Cn(s),s.fa?s=void 0:(o=s.g.g-i,s.g.g=i,s=Mn(s.g,o)),i=t,s&&((o=i[J])?o.push(s):i[J]=[s]))}return 16384&r&&rt(t),!0},t[kr]=e}function Cr(t){const e=(t=Fr(t))[0].g;if(t=t[1]){const n=Or(t),r=Rr(br,Mr,Pr,t).V;return(t,i,s)=>e(t,i,s,r,n)}return e}function Ur(t,e,n){t[e]=n.h}function Dr(t,e,n,r){let i,s;const o=n.h;t[e]=(t,e,n)=>o(t,e,n,s||=Rr(Ar,Ur,Dr,r).V,i||=Nr(r))}function Nr(t){let e=t[Sr];if(!e){const n=Rr(Ar,Ur,Dr,t);e=(t,e)=>Br(t,e,n),t[Sr]=e}return e}function Br(t,e,n){for(var r=0|t[Z],i=512&r?0:-1,s=t.length,o=512&r?1:0,a=s+(256&r?-1:0);o<a;o++){const r=t[o];if(null==r)continue;const s=o-i,a=Gr(n,s);a&&a(e,r,s)}if(256&r){r=t[s-1];for(const t in r)i=+t,Number.isNaN(i)||null!=(s=r[i])&&(a=Gr(n,i))&&a(e,s,i)}if(t=_t(t))for(nr(e,e.g.end()),n=0;n<t.length;n++)nr(e,D(t[n])||new Uint8Array(0))}function Gr(t,e){var n=t[e];if(n)return n;if((n=t.ga)&&(n=n[e])){var r=(n=Fr(n))[0].h;if(n=n[1]){const e=Nr(n),i=Rr(Ar,Ur,Dr,n).V;n=t.la?Lr(i,e):(t,n,s)=>r(t,n,s,i,e)}else n=r;return t[e]=n}}function jr(t,e){if(Array.isArray(e)){var n=0|e[Z];if(4&n)return e;for(var r=0,i=0;r<e.length;r++){const n=t(e[r]);null!=n&&(e[i++]=n)}return i<r&&(e.length=i),nt(e,-12289&(5|n)),2&n&&Object.freeze(e),e}}function Vr(t,e,n){return new _r(t,e,n)}function Xr(t,e,n){return new _r(t,e,n)}function Hr(t,e,n){Ne(t,0|t[Z],e,n)}var Wr=vr((function(t,e,n,r,i){return 2===t.h&&(t=Un(t,Fe([void 0,void 0],r,!0),i),mt(r=0|e[Z]),(i=Ue(e,r,n))instanceof ye?0!=(2&i.L)?((i=i.X()).push(t),Ne(e,r,n,i)):i.Na(t):Array.isArray(i)?(2&(0|i[Z])&&Ne(e,r,n,i=ze(i)),i.push(t)):Ne(e,r,n,[t]),!0)}),(function(t,e,n,r,i){if(e instanceof ye)e.forEach(((e,s)=>{ar(t,n,Fe([s,e],r,!1),i)}));else if(Array.isArray(e))for(let s=0;s<e.length;s++){const o=e[s];Array.isArray(o)&&ar(t,n,Fe(o,r,!1),i)}}));function zr(t,e,n){if(e=function(t){if(null==t)return t;const e=typeof t;if(\"bigint\"===e)return String(Ht(64,t));if(Zt(t)){if(\"string\"===e)return re(t);if(\"number\"===e)return ne(t)}}(e),null!=e){if(\"string\"==typeof e)$n(e);if(null!=e)switch(rr(t,n,0),typeof e){case\"number\":t=t.g,Ut(e),Zn(t,Pt,Ot);break;case\"bigint\":n=BigInt.asUintN(64,e),n=new qn(Number(n&BigInt(4294967295)),Number(n>>BigInt(32))),Zn(t.g,n.h,n.g);break;default:n=$n(e),Zn(t.g,n.h,n.g)}}}function Kr(t,e,n){null!=(e=Qt(e))&&null!=e&&(rr(t,n,0),tr(t.g,e))}function Yr(t,e,n){null!=(e=qt(e))&&(rr(t,n,0),t.g.g.push(e?1:0))}function $r(t,e,n){null!=(e=ce(e))&&or(t,n,c(e))}function qr(t,e,n,r,i){ar(t,n,Ir(e,r),i)}function Jr(t,e,n){null!=(e=null==e||\"string\"==typeof e||O(e)||e instanceof N?e:void 0)&&or(t,n,wn(e).buffer)}function Zr(t,e,n){return(5===t.h||2===t.h)&&(e=Ye(e,0|e[Z],n,!1,!1),2==t.h?Bn(t,xn,e):e.push(xn(t.g)),!0)}var Qr=Vr((function(t,e,n){if(1!==t.h)return!1;var r=t.g;t=Sn(r);const i=Sn(r);r=2*(i>>31)+1;const s=i>>>20&2047;return t=4294967296*(1048575&i)+t,Hr(e,n,2047==s?t?NaN:r*(1/0):0==s?5e-324*r*t:r*Math.pow(2,s-1075)*(t+4503599627370496)),!0}),(function(t,e,n){null!=(e=$t(e))&&(rr(t,n,1),t=t.g,(n=Mt||=new DataView(new ArrayBuffer(8))).setFloat64(0,+e,!0),Pt=n.getUint32(0,!0),Ot=n.getUint32(4,!0),er(t,Pt),er(t,Ot))}),cr()),ti=Vr((function(t,e,n){return 5===t.h&&(Hr(e,n,xn(t.g)),!0)}),(function(t,e,n){null!=(e=$t(e))&&(rr(t,n,5),t=t.g,Dt(e),er(t,Pt))}),gr),ei=Xr(Zr,(function(t,e,n){if(null!=(e=jr($t,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&(rr(r,i,5),r=r.g,Dt(s),er(r,Pt))}}),gr),ni=Xr(Zr,(function(t,e,n){if(null!=(e=jr($t,e))&&e.length){rr(t,n,2),Qn(t.g,4*e.length);for(let r=0;r<e.length;r++)n=t.g,Dt(e[r]),er(n,Pt)}}),gr),ri=Vr((function(t,e,n){return 0===t.h&&(Hr(e,n,Tn(t.g,Bt)),!0)}),zr,pr),ii=Vr((function(t,e,n){return 0===t.h&&(Hr(e,n,0===(t=Tn(t.g,Bt))?void 0:t),!0)}),zr,pr),si=Vr((function(t,e,n){return 0===t.h&&(Hr(e,n,Tn(t.g,Nt)),!0)}),(function(t,e,n){if(null!=(e=se(e))){if(\"string\"==typeof e)zn(e);if(null!=e)switch(rr(t,n,0),typeof e){case\"number\":t=t.g,Ut(e),Zn(t,Pt,Ot);break;case\"bigint\":n=BigInt.asUintN(64,e),n=new Kn(Number(n&BigInt(4294967295)),Number(n>>BigInt(32))),Zn(t.g,n.h,n.g);break;default:n=zn(e),Zn(t.g,n.h,n.g)}}}),cr()),oi=Vr((function(t,e,n){return 0===t.h&&(Hr(e,n,bn(t.g)),!0)}),Kr,dr),ai=Xr((function(t,e,n){return(0===t.h||2===t.h)&&(e=Ye(e,0|e[Z],n,!1,!1),2==t.h?Bn(t,bn,e):e.push(bn(t.g)),!0)}),(function(t,e,n){if(null!=(e=jr(Qt,e))&&e.length){n=ir(t,n);for(let n=0;n<e.length;n++)tr(t.g,e[n]);sr(t,n)}}),dr),ci=Vr((function(t,e,n){return 0===t.h&&(Hr(e,n,0===(t=bn(t.g))?void 0:t),!0)}),Kr,dr),hi=Vr((function(t,e,n){return 0===t.h&&(Hr(e,n,An(t.g)),!0)}),Yr,ur),ui=Vr((function(t,e,n){return 0===t.h&&(Hr(e,n,!1===(t=An(t.g))?void 0:t),!0)}),Yr,ur),li=Xr((function(t,e,n){return 2===t.h&&(t=Dn(t),Ye(e,0|e[Z],n,!1).push(t),!0)}),(function(t,e,n){if(null!=(e=jr(ce,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&or(r,i,c(s))}}),lr),di=Vr((function(t,e,n){return 2===t.h&&(Hr(e,n,\"\"===(t=Dn(t))?void 0:t),!0)}),$r,lr),fi=Vr((function(t,e,n){return 2===t.h&&(Hr(e,n,Dn(t)),!0)}),$r,lr),pi=function(t,e,n=hr){return new _r(t,e,n)}((function(t,e,n,r,i){return 2===t.h&&(r=Fe(void 0,r,!0),Ye(e,0|e[Z],n,!0).push(r),Un(t,r,i),!0)}),(function(t,e,n,r,i){if(Array.isArray(e))for(let s=0;s<e.length;s++)qr(t,e[s],n,r,i)})),gi=vr((function(t,e,n,r,i,s){return 2===t.h&&(Je(e,0|e[Z],s,n),Un(t,e=Qe(e,r,n),i),!0)}),qr),mi=Vr((function(t,e,n){return 2===t.h&&(Hr(e,n,Nn(t)),!0)}),Jr,mr),yi=Xr((function(t,e,n){return(0===t.h||2===t.h)&&(e=Ye(e,0|e[Z],n,!1,!1),2==t.h?Bn(t,kn,e):e.push(kn(t.g)),!0)}),(function(t,e,n){if(null!=(e=jr(te,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&(rr(r,i,0),Qn(r.g,s))}}),fr),_i=Vr((function(t,e,n){return 0===t.h&&(Hr(e,n,0===(t=kn(t.g))?void 0:t),!0)}),(function(t,e,n){null!=(e=te(e))&&null!=e&&(rr(t,n,0),Qn(t.g,e))}),fr),vi=Vr((function(t,e,n){return 0===t.h&&(Hr(e,n,bn(t.g)),!0)}),(function(t,e,n){null!=(e=Qt(e))&&(e=parseInt(e,10),rr(t,n,0),tr(t.g,e))}),yr);class Ei{constructor(t,e){this.h=t,this.g=e,this.l=en,this.m=sn,this.defaultValue=void 0}}function wi(t,e){return new Ei(t,e)}function Ti(t,e){return(n,r)=>{if(Gn.length){const t=Gn.pop();t.o(r),Rn(t.g,n,r),n=t}else n=new class{constructor(t,e){if(Pn.length){const n=Pn.pop();Rn(n,t,e),t=n}else t=new class{constructor(t,e){this.h=null,this.m=!1,this.g=this.l=this.j=0,Rn(this,t,e)}clear(){this.h=null,this.m=!1,this.g=this.l=this.j=0,this.ba=!1}}(t,e);this.g=t,this.l=this.g.g,this.h=this.m=-1,this.o(e)}o({fa:t=!1}={}){this.fa=t}}(n,r);try{const r=new t,s=r.u;Or(e)(s,n);var i=r}finally{n.g.clear(),n.m=-1,n.h=-1,Gn.length<100&&Gn.push(n)}return i}}function Ai(t){return function(){const e=new class{constructor(){this.l=[],this.h=0,this.g=new class{constructor(){this.g=[]}length(){return this.g.length}end(){const t=this.g;return this.g=[],t}}}};Br(this.u,e,Rr(Ar,Ur,Dr,t)),nr(e,e.g.end());const n=new Uint8Array(e.h),r=e.l,i=r.length;let s=0;for(let t=0;t<i;t++){const e=r[t];n.set(e,s),s+=e.length}return e.l=[n],n}}var bi=class extends Hn{constructor(t){super(t)}},ki=[0,di,Vr((function(t,e,n){return 2===t.h&&(Hr(e,n,(t=Nn(t))===U()?void 0:t),!0)}),(function(t,e,n){if(null!=e){if(e instanceof Hn){const r=e.Ra;return void(r&&(e=r(e),null!=e&&or(t,n,wn(e).buffer)))}if(Array.isArray(e))return}Jr(t,e,n)}),mr)];let Si,xi=globalThis.trustedTypes;function Li(t){void 0===Si&&(Si=function(){let t=null;if(!xi)return t;try{const e=t=>t;t=xi.createPolicy(\"goog#html\",{createHTML:e,createScript:e,createScriptURL:e})}catch(t){}return t}());var e=Si;return new class{constructor(t){this.g=t}toString(){return this.g+\"\"}}(e?e.createScriptURL(t):t)}function Ri(t,...e){if(0===e.length)return Li(t[0]);let n=t[0];for(let r=0;r<e.length;r++)n+=encodeURIComponent(e[r])+t[r+1];return Li(n)}var Fi=[0,oi,vi,hi,-1,ai,vi,-1],Ii=class extends Hn{constructor(t){super(t)}},Mi=[0,hi,fi,hi,vi,-1,Xr((function(t,e,n){return(0===t.h||2===t.h)&&(e=Ye(e,0|e[Z],n,!1,!1),2==t.h?Bn(t,Ln,e):e.push(bn(t.g)),!0)}),(function(t,e,n){if(null!=(e=jr(Qt,e))&&e.length){n=ir(t,n);for(let n=0;n<e.length;n++)tr(t.g,e[n]);sr(t,n)}}),yr),fi,-1,[0,hi,-1],vi,hi,-1],Pi=[0,fi,-2],Oi=class extends Hn{constructor(t){super(t)}},Ci=[0],Ui=[0,oi,hi,1,hi,-3],Di=class extends Hn{constructor(t){super(t,2)}},Ni={};Ni[336783863]=[0,fi,hi,-1,oi,[0,[1,2,3,4,5,6,7,8],gi,Ci,gi,Mi,gi,Pi,gi,Ui,gi,Fi,gi,[0,fi,-2],gi,[0,fi,vi],gi,[0,vi,fi]],[0,fi],hi,[0,[1,3],[2,4],gi,[0,ai],-1,gi,[0,li],-1,pi,[0,fi,-1]],fi];var Bi=[0,ii,-1,ui,-3,ii,ai,di,ci,ii,-1,ui,ci,ui,-2,di];function Gi(t,e){Ke(t,2,ae(e),\"\")}function ji(t,e){yn(t,3,e)}function Vi(t,e){yn(t,4,e)}var Xi=class extends Hn{constructor(t){super(t,500)}o(t){return sn(this,0,7,t)}},Hi=[-1,{}],Wi=[0,fi,1,Hi],zi=[0,fi,li,Hi];function Ki(t,e){hn(t,1,Xi,e)}function Yi(t,e){yn(t,10,e)}function $i(t,e){yn(t,15,e)}var qi=class extends Hn{constructor(t){super(t,500)}o(t){return sn(this,0,1001,t)}},Ji=[-500,pi,[-500,di,-1,li,-3,[-2,Ni,hi],pi,ki,ci,-1,Wi,zi,pi,[0,di,ui],di,Bi,ci,li,987,li],4,pi,[-500,fi,-1,[-1,{}],998,fi],pi,[-500,fi,li,-1,[-2,{},hi],997,li,-1],ci,pi,[-500,fi,li,Hi,998,li],li,ci,Wi,zi,pi,[0,di,-1,Hi],li,-2,Bi,di,-1,ui,[0,ui,_i],978,Hi,pi,ki];qi.prototype.g=Ai(Ji);var Zi=Ti(qi,Ji),Qi=class extends Hn{constructor(t){super(t)}},ts=class extends Hn{constructor(t){super(t)}g(){return rn(this,Qi,1)}},es=[0,pi,[0,oi,ti,fi,-1]],ns=Ti(ts,es),rs=class extends Hn{constructor(t){super(t)}},is=class extends Hn{constructor(t){super(t)}},ss=class extends Hn{constructor(t){super(t)}h(){return en(this,rs,2)}g(){return rn(this,is,5)}},os=Ti(class extends Hn{constructor(t){super(t)}},[0,li,ai,ni,[0,vi,[0,oi,-3],[0,ti,-3],[0,oi,-1,[0,pi,[0,oi,-2]]],pi,[0,ti,-1,fi,ti]],fi,-1,ri,pi,[0,oi,ti],li,ri]),as=class extends Hn{constructor(t){super(t)}},cs=Ti(class extends Hn{constructor(t){super(t)}},[0,pi,[0,ti,-4]]),hs=class extends Hn{constructor(t){super(t)}},us=Ti(class extends Hn{constructor(t){super(t)}},[0,pi,[0,ti,-4]]),ls=class extends Hn{constructor(t){super(t)}},ds=[0,oi,-1,ni,vi],fs=class extends Hn{constructor(t){super(t)}};fs.prototype.g=Ai([0,ti,-4,ri]);var ps=class extends Hn{constructor(t){super(t)}},gs=Ti(class extends Hn{constructor(t){super(t)}},[0,pi,[0,1,oi,fi,es],ri]),ms=class extends Hn{constructor(t){super(t)}},ys=class extends Hn{constructor(t){super(t)}oa(){const t=Ge(this);return null==t?U():t}},_s=class extends Hn{constructor(t){super(t)}},vs=[1,2],Es=Ti(class extends Hn{constructor(t){super(t)}},[0,pi,[0,vs,gi,[0,ni],gi,[0,mi],oi,fi],ri]),ws=class extends Hn{constructor(t){super(t)}},Ts=[0,fi,oi,ti,li,-1],As=class extends Hn{constructor(t){super(t)}},bs=[0,hi,-1],ks=class extends Hn{constructor(t){super(t)}},Ss=[1,2,3,4,5],xs=class extends Hn{constructor(t){super(t)}g(){return null!=Ge(this)}h(){return null!=ln(this,2)}},Ls=class extends Hn{constructor(t){super(t)}g(){return qt(Ce(this,2))??!1}},Rs=[0,mi,fi,[0,oi,ri,-1],[0,si,ri]],Fs=[0,Rs,hi,[0,Ss,gi,Ui,gi,Mi,gi,Fi,gi,Ci,gi,Pi],vi],Is=class extends Hn{constructor(t){super(t)}},Ms=[0,Fs,ti,-1,oi],Ps=wi(502141897,Is);Ni[502141897]=Ms;var Os=Ti(class extends Hn{constructor(t){super(t)}},[0,[0,vi,-1,ei,yi],ds]),Cs=class extends Hn{constructor(t){super(t)}},Us=class extends Hn{constructor(t){super(t)}},Ds=[0,Fs,ti,[0,Fs],hi],Ns=[0,Fs,Ms,Ds,ti,[0,[0,Rs]]],Bs=wi(508968150,Us);Ni[508968150]=Ns,Ni[508968149]=Ds;var Gs=class extends Hn{constructor(t){super(t)}},js=wi(513916220,Gs);Ni[513916220]=[0,Fs,Ns,oi];var Vs=class extends Hn{constructor(t){super(t)}h(){return en(this,ws,2)}g(){De(this,2)}},Xs=[0,Fs,Ts];Ni[478825465]=Xs;var Hs=class extends Hn{constructor(t){super(t)}},Ws=class extends Hn{constructor(t){super(t)}},zs=class extends Hn{constructor(t){super(t)}},Ks=class extends Hn{constructor(t){super(t)}},Ys=class extends Hn{constructor(t){super(t)}},$s=[0,Fs,[0,Fs],Xs,-1],qs=[0,Fs,ti,oi],Js=[0,Fs,ti],Zs=[0,Fs,qs,Js,ti],Qs=wi(479097054,Ys);Ni[479097054]=[0,Fs,Zs,$s],Ni[463370452]=$s,Ni[464864288]=qs;var to=wi(462713202,Ks);Ni[462713202]=Zs,Ni[474472470]=Js;var eo=class extends Hn{constructor(t){super(t)}},no=class extends Hn{constructor(t){super(t)}},ro=class extends Hn{constructor(t){super(t)}},io=class extends Hn{constructor(t){super(t)}},so=[0,Fs,ti,-1,oi],oo=[0,Fs,ti,hi];io.prototype.g=Ai([0,Fs,Js,[0,Fs],Ms,Ds,so,oo]);var ao=class extends Hn{constructor(t){super(t)}},co=wi(456383383,ao);Ni[456383383]=[0,Fs,Ts];var ho=class extends Hn{constructor(t){super(t)}},uo=wi(476348187,ho);Ni[476348187]=[0,Fs,bs];var lo=class extends Hn{constructor(t){super(t)}},fo=class extends Hn{constructor(t){super(t)}},po=[0,vi,-1],go=wi(458105876,class extends Hn{constructor(t){super(t)}g(){var t=this.u;const e=0|t[Z];const n=2&e;return t=function(t,e,n){var r=fo;const i=2&e;let s=!1;if(null==n){if(i)return be();n=[]}else if(n.constructor===ye){if(0==(2&n.L)||i)return n;n=n.X()}else Array.isArray(n)?s=!!(2&(0|n[Z])):n=[];if(i){if(!n.length)return be();s||(s=!0,rt(n))}else s&&(s=!1,n=ze(n));return s||(64&(0|n[Z])?n[Z]&=-33:32&e&&et(n,32)),Ne(t,e,2,r=new ye(n,r,ue,void 0)),r}(t,e,Ue(t,e,2)),!n&&fo&&(t.ra=!0),t}});Ni[458105876]=[0,po,Wr,[!0,ri,[0,fi,-1,li]]];var mo=class extends Hn{constructor(t){super(t)}},yo=wi(458105758,mo);Ni[458105758]=[0,Fs,fi,po];var _o=class extends Hn{constructor(t){super(t)}},vo=wi(443442058,_o);Ni[443442058]=[0,Fs,fi,oi,ti,li,-1,hi,ti],Ni[514774813]=so;var Eo=class extends Hn{constructor(t){super(t)}},wo=wi(516587230,Eo);function To(t,e){return e=e?e.clone():new ws,void 0!==t.displayNamesLocale?De(e,1,ae(t.displayNamesLocale)):void 0===t.displayNamesLocale&&De(e,1),void 0!==t.maxResults?pn(e,2,t.maxResults):\"maxResults\"in t&&De(e,2),void 0!==t.scoreThreshold?gn(e,3,t.scoreThreshold):\"scoreThreshold\"in t&&De(e,3),void 0!==t.categoryAllowlist?mn(e,4,t.categoryAllowlist):\"categoryAllowlist\"in t&&De(e,4),void 0!==t.categoryDenylist?mn(e,5,t.categoryDenylist):\"categoryDenylist\"in t&&De(e,5),e}function Ao(t,e=-1,n=\"\"){return{categories:t.map((t=>({index:un(t,1)??0??-1,score:dn(t,2)??0,categoryName:ln(t,3)??\"\"??\"\",displayName:ln(t,4)??\"\"??\"\"}))),headIndex:e,headName:n}}function bo(t){var e=Ve(t,3,$t,je()),n=Ve(t,2,Qt,je()),r=Ve(t,1,ce,je()),i=Ve(t,9,ce,je());const s={categories:[],keypoints:[]};for(let t=0;t<e.length;t++)s.categories.push({score:e[t],index:n[t]??-1,categoryName:r[t]??\"\",displayName:i[t]??\"\"});if((e=en(t,ss,4)?.h())&&(s.boundingBox={originX:un(e,1)??0,originY:un(e,2)??0,width:un(e,3)??0,height:un(e,4)??0,angle:0}),en(t,ss,4)?.g().length)for(const e of en(t,ss,4).g())s.keypoints.push({x:Be(e,1)??0,y:Be(e,2)??0,score:Be(e,4)??0,label:ln(e,3)??\"\"});return s}function ko(t){const e=[];for(const n of rn(t,hs,1))e.push({x:dn(n,1)??0,y:dn(n,2)??0,z:dn(n,3)??0,visibility:dn(n,4)??0});return e}function So(t){const e=[];for(const n of rn(t,as,1))e.push({x:dn(n,1)??0,y:dn(n,2)??0,z:dn(n,3)??0,visibility:dn(n,4)??0});return e}function xo(t){return Array.from(t,(t=>t>127?t-256:t))}function Lo(t,e){if(t.length!==e.length)throw Error(`Cannot compute cosine similarity between embeddings of different sizes (${t.length} vs. ${e.length}).`);let n=0,r=0,i=0;for(let s=0;s<t.length;s++)n+=t[s]*e[s],r+=t[s]*t[s],i+=e[s]*e[s];if(r<=0||i<=0)throw Error(\"Cannot compute cosine similarity on embedding with 0 norm.\");return n/Math.sqrt(r*i)}let Ro;Ni[516587230]=[0,Fs,so,oo,ti],Ni[518928384]=oo;const Fo=new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]);async function Io(){if(void 0===Ro)try{await WebAssembly.instantiate(Fo),Ro=!0}catch{Ro=!1}return Ro}async function Mo(t,e=Ri``){const n=await Io()?\"wasm_internal\":\"wasm_nosimd_internal\";return{wasmLoaderPath:`${e}/${t}_${n}.js`,wasmBinaryPath:`${e}/${t}_${n}.wasm`}}var Po=class{};function Oo(){var t=navigator;return\"undefined\"!=typeof OffscreenCanvas&&(!function(t=navigator){return(t=t.userAgent).includes(\"Safari\")&&!t.includes(\"Chrome\")}(t)||!!((t=t.userAgent.match(/Version\\/([\\d]+).*Safari/))&&t.length>=1&&Number(t[1])>=17))}async function Co(t){if(\"function\"!=typeof importScripts){const e=document.createElement(\"script\");return e.src=t.toString(),e.crossOrigin=\"anonymous\",new Promise(((t,n)=>{e.addEventListener(\"load\",(()=>{t()}),!1),e.addEventListener(\"error\",(t=>{n(t)}),!1),document.body.appendChild(e)}))}importScripts(t.toString())}function Uo(t){return void 0!==t.videoWidth?[t.videoWidth,t.videoHeight]:void 0!==t.naturalWidth?[t.naturalWidth,t.naturalHeight]:void 0!==t.displayWidth?[t.displayWidth,t.displayHeight]:[t.width,t.height]}function Do(t,e,n){t.m||console.error(\"No wasm multistream support detected: ensure dependency inclusion of :gl_graph_runner_internal_multi_input target\"),n(e=t.i.stringToNewUTF8(e)),t.i._free(e)}function No(t,e,n){if(!t.i.canvas)throw Error(\"No OpenGL canvas configured.\");if(n?t.i._bindTextureToStream(n):t.i._bindTextureToCanvas(),!(n=t.i.canvas.getContext(\"webgl2\")||t.i.canvas.getContext(\"webgl\")))throw Error(\"Failed to obtain WebGL context from the provided canvas. `getContext()` should only be invoked with `webgl` or `webgl2`.\");t.i.gpuOriginForWebTexturesIsBottomLeft&&n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,!0),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,e),t.i.gpuOriginForWebTexturesIsBottomLeft&&n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,!1);const[r,i]=Uo(e);return!t.l||r===t.i.canvas.width&&i===t.i.canvas.height||(t.i.canvas.width=r,t.i.canvas.height=i),[r,i]}function Bo(t,e,n){t.m||console.error(\"No wasm multistream support detected: ensure dependency inclusion of :gl_graph_runner_internal_multi_input target\");const r=new Uint32Array(e.length);for(let n=0;n<e.length;n++)r[n]=t.i.stringToNewUTF8(e[n]);e=t.i._malloc(4*r.length),t.i.HEAPU32.set(r,e>>2),n(e);for(const e of r)t.i._free(e);t.i._free(e)}function Go(t,e,n){t.i.simpleListeners=t.i.simpleListeners||{},t.i.simpleListeners[e]=n}function jo(t,e,n){let r=[];t.i.simpleListeners=t.i.simpleListeners||{},t.i.simpleListeners[e]=(t,e,i)=>{e?(n(r,i),r=[]):r.push(t)}}Po.forVisionTasks=function(t){return Mo(\"vision\",t)},Po.forTextTasks=function(t){return Mo(\"text\",t)},Po.forGenAiExperimentalTasks=function(t){return Mo(\"genai_experimental\",t)},Po.forGenAiTasks=function(t){return Mo(\"genai\",t)},Po.forAudioTasks=function(t){return Mo(\"audio\",t)},Po.isSimdSupported=function(){return Io()};async function Vo(t,e,n,r){return t=await(async(t,e,n,r,i)=>{if(e&&await Co(e),!self.ModuleFactory)throw Error(\"ModuleFactory not set.\");if(n&&(await Co(n),!self.ModuleFactory))throw Error(\"ModuleFactory not set.\");return self.Module&&i&&((e=self.Module).locateFile=i.locateFile,i.mainScriptUrlOrBlob&&(e.mainScriptUrlOrBlob=i.mainScriptUrlOrBlob)),i=await self.ModuleFactory(self.Module||i),self.ModuleFactory=self.Module=void 0,new t(i,r)})(t,n.wasmLoaderPath,n.assetLoaderPath,e,{locateFile:t=>t.endsWith(\".wasm\")?n.wasmBinaryPath.toString():n.assetBinaryPath&&t.endsWith(\".data\")?n.assetBinaryPath.toString():t}),await t.o(r),t}function Xo(t,e){const n=en(t.baseOptions,xs,1)||new xs;\"string\"==typeof e?(De(n,2,ae(e)),De(n,1)):e instanceof Uint8Array&&(De(n,1,ft(e,!1)),De(n,2)),sn(t.baseOptions,0,1,n)}function Ho(t){try{const e=t.G.length;if(1===e)throw Error(t.G[0].message);if(e>1)throw Error(\"Encountered multiple errors: \"+t.G.map((t=>t.message)).join(\", \"))}finally{t.G=[]}}function Wo(t,e){t.B=Math.max(t.B,e)}function zo(t,e){t.A=new Xi,Gi(t.A,\"PassThroughCalculator\"),ji(t.A,\"free_memory\"),Vi(t.A,\"free_memory_unused_out\"),Yi(e,\"free_memory\"),Ki(e,t.A)}function Ko(t,e){ji(t.A,e),Vi(t.A,e+\"_unused_out\")}function Yo(t){t.g.addBoolToStream(!0,\"free_memory\",t.B)}var $o=class{constructor(t){this.g=t,this.G=[],this.B=0,this.g.setAutoRenderToScreen(!1)}l(t,e=!0){if(e){const e=t.baseOptions||{};if(t.baseOptions?.modelAssetBuffer&&t.baseOptions?.modelAssetPath)throw Error(\"Cannot set both baseOptions.modelAssetPath and baseOptions.modelAssetBuffer\");if(!(en(this.baseOptions,xs,1)?.g()||en(this.baseOptions,xs,1)?.h()||t.baseOptions?.modelAssetBuffer||t.baseOptions?.modelAssetPath))throw Error(\"Either baseOptions.modelAssetPath or baseOptions.modelAssetBuffer must be set\");if(function(t,e){let n=en(t.baseOptions,ks,3);if(!n){var r=n=new ks,i=new Oi;on(r,4,Ss,i)}\"delegate\"in e&&(\"GPU\"===e.delegate?(e=n,r=new Ii,on(e,2,Ss,r)):(e=n,r=new Oi,on(e,4,Ss,r))),sn(t.baseOptions,0,3,n)}(this,e),e.modelAssetPath)return fetch(e.modelAssetPath.toString()).then((t=>{if(t.ok)return t.arrayBuffer();throw Error(`Failed to fetch model: ${e.modelAssetPath} (${t.status})`)})).then((t=>{try{this.g.i.FS_unlink(\"/model.dat\")}catch{}this.g.i.FS_createDataFile(\"/\",\"model.dat\",new Uint8Array(t),!0,!1,!1),Xo(this,\"/model.dat\"),this.m(),this.I()}));if(e.modelAssetBuffer instanceof Uint8Array)Xo(this,e.modelAssetBuffer);else if(e.modelAssetBuffer)return async function(t){const e=[];for(var n=0;;){const{done:r,value:i}=await t.read();if(r)break;e.push(i),n+=i.length}if(0===e.length)return new Uint8Array(0);if(1===e.length)return e[0];t=new Uint8Array(n),n=0;for(const r of e)t.set(r,n),n+=r.length;return t}(e.modelAssetBuffer).then((t=>{Xo(this,t),this.m(),this.I()}))}return this.m(),this.I(),Promise.resolve()}I(){}da(){let t;if(this.g.da((e=>{t=Zi(e)})),!t)throw Error(\"Failed to retrieve CalculatorGraphConfig\");return t}setGraph(t,e){this.g.attachErrorListener(((t,e)=>{this.G.push(Error(e))})),this.g.La(),this.g.setGraph(t,e),this.A=void 0,Ho(this)}finishProcessing(){this.g.finishProcessing(),Ho(this)}close(){this.A=void 0,this.g.closeGraph()}};function qo(t,e){if(!t)throw Error(`Unable to obtain required WebGL resource: ${e}`);return t}$o.prototype.close=$o.prototype.close,function(e,n){e=e.split(\".\");var r,i=t;e[0]in i||void 0===i.execScript||i.execScript(\"var \"+e[0]);for(;e.length&&(r=e.shift());)e.length||void 0===n?i=i[r]&&i[r]!==Object.prototype[r]?i[r]:i[r]={}:i[r]=n}(\"TaskRunner\",$o);class Jo{constructor(t,e,n,r){this.g=t,this.h=e,this.m=n,this.l=r}bind(){this.g.bindVertexArray(this.h)}close(){this.g.deleteVertexArray(this.h),this.g.deleteBuffer(this.m),this.g.deleteBuffer(this.l)}}function Zo(t,e,n){const r=t.g;if(n=qo(r.createShader(n),\"Failed to create WebGL shader\"),r.shaderSource(n,e),r.compileShader(n),!r.getShaderParameter(n,r.COMPILE_STATUS))throw Error(`Could not compile WebGL shader: ${r.getShaderInfoLog(n)}`);return r.attachShader(t.h,n),n}function Qo(t,e){const n=t.g,r=qo(n.createVertexArray(),\"Failed to create vertex array\");n.bindVertexArray(r);const i=qo(n.createBuffer(),\"Failed to create buffer\");n.bindBuffer(n.ARRAY_BUFFER,i),n.enableVertexAttribArray(t.O),n.vertexAttribPointer(t.O,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW);const s=qo(n.createBuffer(),\"Failed to create buffer\");return n.bindBuffer(n.ARRAY_BUFFER,s),n.enableVertexAttribArray(t.I),n.vertexAttribPointer(t.I,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array(e?[0,1,0,0,1,0,1,1]:[0,0,0,1,1,1,1,0]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.bindVertexArray(null),new Jo(n,r,i,s)}function ta(t,e){if(t.g){if(e!==t.g)throw Error(\"Cannot change GL context once initialized\")}else t.g=e}function ea(t,e,n,r){return ta(t,e),t.h||(t.m(),t.C()),n?(t.s||(t.s=Qo(t,!0)),n=t.s):(t.v||(t.v=Qo(t,!1)),n=t.v),e.useProgram(t.h),n.bind(),t.l(),t=r(),n.g.bindVertexArray(null),t}function na(t,e,n){return ta(t,e),t=qo(e.createTexture(),\"Failed to create texture\"),e.bindTexture(e.TEXTURE_2D,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,n??e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,n??e.LINEAR),e.bindTexture(e.TEXTURE_2D,null),t}function ra(t,e,n){ta(t,e),t.A||(t.A=qo(e.createFramebuffer(),\"Failed to create framebuffe.\")),e.bindFramebuffer(e.FRAMEBUFFER,t.A),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0)}function ia(t){t.g?.bindFramebuffer(t.g.FRAMEBUFFER,null)}var sa=class{G(){return\"\\n precision mediump float;\\n varying vec2 vTex;\\n uniform sampler2D inputTexture;\\n void main() {\\n gl_FragColor = texture2D(inputTexture, vTex);\\n }\\n \"}m(){const t=this.g;if(this.h=qo(t.createProgram(),\"Failed to create WebGL program\"),this.aa=Zo(this,\"\\n attribute vec2 aVertex;\\n attribute vec2 aTex;\\n varying vec2 vTex;\\n void main(void) {\\n gl_Position = vec4(aVertex, 0.0, 1.0);\\n vTex = aTex;\\n }\",t.VERTEX_SHADER),this.Z=Zo(this,this.G(),t.FRAGMENT_SHADER),t.linkProgram(this.h),!t.getProgramParameter(this.h,t.LINK_STATUS))throw Error(`Error during program linking: ${t.getProgramInfoLog(this.h)}`);this.O=t.getAttribLocation(this.h,\"aVertex\"),this.I=t.getAttribLocation(this.h,\"aTex\")}C(){}l(){}close(){if(this.h){const t=this.g;t.deleteProgram(this.h),t.deleteShader(this.aa),t.deleteShader(this.Z)}this.A&&this.g.deleteFramebuffer(this.A),this.v&&this.v.close(),this.s&&this.s.close()}};var oa=class extends sa{G(){return\"\\n precision mediump float;\\n uniform sampler2D backgroundTexture;\\n uniform sampler2D maskTexture;\\n uniform sampler2D colorMappingTexture;\\n varying vec2 vTex;\\n void main() {\\n vec4 backgroundColor = texture2D(backgroundTexture, vTex);\\n float category = texture2D(maskTexture, vTex).r;\\n vec4 categoryColor = texture2D(colorMappingTexture, vec2(category, 0.0));\\n gl_FragColor = mix(backgroundColor, categoryColor, categoryColor.a);\\n }\\n \"}C(){const t=this.g;t.activeTexture(t.TEXTURE1),this.B=na(this,t,t.LINEAR),t.activeTexture(t.TEXTURE2),this.j=na(this,t,t.NEAREST)}m(){super.m();const t=this.g;this.K=qo(t.getUniformLocation(this.h,\"backgroundTexture\"),\"Uniform location\"),this.T=qo(t.getUniformLocation(this.h,\"colorMappingTexture\"),\"Uniform location\"),this.J=qo(t.getUniformLocation(this.h,\"maskTexture\"),\"Uniform location\")}l(){super.l();const t=this.g;t.uniform1i(this.J,0),t.uniform1i(this.K,1),t.uniform1i(this.T,2)}close(){this.B&&this.g.deleteTexture(this.B),this.j&&this.g.deleteTexture(this.j),super.close()}},aa=class extends sa{G(){return\"\\n precision mediump float;\\n uniform sampler2D maskTexture;\\n uniform sampler2D defaultTexture;\\n uniform sampler2D overlayTexture;\\n varying vec2 vTex;\\n void main() {\\n float confidence = texture2D(maskTexture, vTex).r;\\n vec4 defaultColor = texture2D(defaultTexture, vTex);\\n vec4 overlayColor = texture2D(overlayTexture, vTex);\\n // Apply the alpha from the overlay and merge in the default color\\n overlayColor = mix(defaultColor, overlayColor, overlayColor.a);\\n gl_FragColor = mix(defaultColor, overlayColor, confidence);\\n }\\n \"}C(){const t=this.g;t.activeTexture(t.TEXTURE1),this.j=na(this,t),t.activeTexture(t.TEXTURE2),this.B=na(this,t)}m(){super.m();const t=this.g;this.J=qo(t.getUniformLocation(this.h,\"defaultTexture\"),\"Uniform location\"),this.K=qo(t.getUniformLocation(this.h,\"overlayTexture\"),\"Uniform location\"),this.H=qo(t.getUniformLocation(this.h,\"maskTexture\"),\"Uniform location\")}l(){super.l();const t=this.g;t.uniform1i(this.H,0),t.uniform1i(this.J,1),t.uniform1i(this.K,2)}close(){this.j&&this.g.deleteTexture(this.j),this.B&&this.g.deleteTexture(this.B),super.close()}};function ca(t,e){switch(e){case 0:return t.g.find((t=>t instanceof Uint8Array));case 1:return t.g.find((t=>t instanceof Float32Array));case 2:return t.g.find((t=>\"undefined\"!=typeof WebGLTexture&&t instanceof WebGLTexture));default:throw Error(`Type is not supported: ${e}`)}}function ha(t){var e=ca(t,1);if(!e){if(e=ca(t,0))e=new Float32Array(e).map((t=>t/255));else{e=new Float32Array(t.width*t.height);const r=la(t);var n=fa(t);if(ra(n,r,ua(t)),\"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod\".split(\";\").includes(navigator.platform)||navigator.userAgent.includes(\"Mac\")&&\"document\"in self&&\"ontouchend\"in self.document){n=new Float32Array(t.width*t.height*4),r.readPixels(0,0,t.width,t.height,r.RGBA,r.FLOAT,n);for(let t=0,r=0;t<e.length;++t,r+=4)e[t]=n[r]}else r.readPixels(0,0,t.width,t.height,r.RED,r.FLOAT,e)}t.g.push(e)}return e}function ua(t){let e=ca(t,2);if(!e){const n=la(t);e=pa(t);const r=ha(t),i=da(t);n.texImage2D(n.TEXTURE_2D,0,i,t.width,t.height,0,n.RED,n.FLOAT,r),ga(t)}return e}function la(t){if(!t.canvas)throw Error(\"Conversion to different image formats require that a canvas is passed when initializing the image.\");return t.h||(t.h=qo(t.canvas.getContext(\"webgl2\"),\"You cannot use a canvas that is already bound to a different type of rendering context.\")),t.h}function da(t){if(t=la(t),!ma)if(t.getExtension(\"EXT_color_buffer_float\")&&t.getExtension(\"OES_texture_float_linear\")&&t.getExtension(\"EXT_float_blend\"))ma=t.R32F;else{if(!t.getExtension(\"EXT_color_buffer_half_float\"))throw Error(\"GPU does not fully support 4-channel float32 or float16 formats\");ma=t.R16F}return ma}function fa(t){return t.l||(t.l=new sa),t.l}function pa(t){const e=la(t);e.viewport(0,0,t.width,t.height),e.activeTexture(e.TEXTURE0);let n=ca(t,2);return n||(n=na(fa(t),e,t.m?e.LINEAR:e.NEAREST),t.g.push(n),t.j=!0),e.bindTexture(e.TEXTURE_2D,n),n}function ga(t){t.h.bindTexture(t.h.TEXTURE_2D,null)}var ma,ya=class{constructor(t,e,n,r,i,s,o){this.g=t,this.m=e,this.j=n,this.canvas=r,this.l=i,this.width=s,this.height=o,this.j&&(0===--_a&&console.error(\"You seem to be creating MPMask instances without invoking .close(). This leaks resources.\"))}Fa(){return!!ca(this,0)}ja(){return!!ca(this,1)}P(){return!!ca(this,2)}ia(){return(e=ca(t=this,0))||(e=ha(t),e=new Uint8Array(e.map((t=>255*t))),t.g.push(e)),e;var t,e}ha(){return ha(this)}M(){return ua(this)}clone(){const t=[];for(const e of this.g){let n;if(e instanceof Uint8Array)n=new Uint8Array(e);else if(e instanceof Float32Array)n=new Float32Array(e);else{if(!(e instanceof WebGLTexture))throw Error(`Type is not supported: ${e}`);{const t=la(this),e=fa(this);t.activeTexture(t.TEXTURE1),n=na(e,t,this.m?t.LINEAR:t.NEAREST),t.bindTexture(t.TEXTURE_2D,n);const r=da(this);t.texImage2D(t.TEXTURE_2D,0,r,this.width,this.height,0,t.RED,t.FLOAT,null),t.bindTexture(t.TEXTURE_2D,null),ra(e,t,n),ea(e,t,!1,(()=>{pa(this),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.drawArrays(t.TRIANGLE_FAN,0,4),ga(this)})),ia(e),ga(this)}}t.push(n)}return new ya(t,this.m,this.P(),this.canvas,this.l,this.width,this.height)}close(){this.j&&la(this).deleteTexture(ca(this,2)),_a=-1}};ya.prototype.close=ya.prototype.close,ya.prototype.clone=ya.prototype.clone,ya.prototype.getAsWebGLTexture=ya.prototype.M,ya.prototype.getAsFloat32Array=ya.prototype.ha,ya.prototype.getAsUint8Array=ya.prototype.ia,ya.prototype.hasWebGLTexture=ya.prototype.P,ya.prototype.hasFloat32Array=ya.prototype.ja,ya.prototype.hasUint8Array=ya.prototype.Fa;var _a=250;const va={color:\"white\",lineWidth:4,radius:6};function Ea(t){return{...va,fillColor:(t=t||{}).color,...t}}function wa(t,e){return t instanceof Function?t(e):t}function Ta(t,e,n){return Math.max(Math.min(e,n),Math.min(Math.max(e,n),t))}function Aa(t){if(!t.l)throw Error(\"CPU rendering requested but CanvasRenderingContext2D not provided.\");return t.l}function ba(t){if(!t.j)throw Error(\"GPU rendering requested but WebGL2RenderingContext not provided.\");return t.j}function ka(t,e,n){if(e.P())n(e.M());else{const r=e.ja()?e.ha():e.ia();t.m=t.m??new sa;const i=ba(t);n((t=new ya([r],e.m,!1,i.canvas,t.m,e.width,e.height)).M()),t.close()}}function Sa(t,e,n,r){const i=function(t){return t.g||(t.g=new oa),t.g}(t),s=ba(t),o=Array.isArray(n)?new ImageData(new Uint8ClampedArray(n),1,1):n;ea(i,s,!0,(()=>{!function(t,e,n,r){const i=t.g;if(i.activeTexture(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,e),i.activeTexture(i.TEXTURE1),i.bindTexture(i.TEXTURE_2D,t.B),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,n),t.H&&function(t,e){if(t!==e)return!1;t=t.entries(),e=e.entries();for(const[r,i]of t){t=r;const s=i;var n=e.next();if(n.done)return!1;const[o,a]=n.value;if(n=a,t!==o||s[0]!==n[0]||s[1]!==n[1]||s[2]!==n[2]||s[3]!==n[3])return!1}return!!e.next().done}(t.H,r))i.activeTexture(i.TEXTURE2),i.bindTexture(i.TEXTURE_2D,t.j);else{t.H=r;const e=Array(1024).fill(0);r.forEach(((t,n)=>{if(4!==t.length)throw Error(`Color at index ${n} is not a four-channel value.`);e[4*n]=t[0],e[4*n+1]=t[1],e[4*n+2]=t[2],e[4*n+3]=t[3]})),i.activeTexture(i.TEXTURE2),i.bindTexture(i.TEXTURE_2D,t.j),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,256,1,0,i.RGBA,i.UNSIGNED_BYTE,new Uint8Array(e))}}(i,e,o,r),s.clearColor(0,0,0,0),s.clear(s.COLOR_BUFFER_BIT),s.drawArrays(s.TRIANGLE_FAN,0,4);const t=i.g;t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,null)}))}function xa(t,e,n,r){const i=ba(t),s=function(t){return t.h||(t.h=new aa),t.h}(t),o=Array.isArray(n)?new ImageData(new Uint8ClampedArray(n),1,1):n,a=Array.isArray(r)?new ImageData(new Uint8ClampedArray(r),1,1):r;ea(s,i,!0,(()=>{var t=s.g;t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,e),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,s.j),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,o),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,s.B),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,a),i.clearColor(0,0,0,0),i.clear(i.COLOR_BUFFER_BIT),i.drawArrays(i.TRIANGLE_FAN,0,4),i.bindTexture(i.TEXTURE_2D,null),(t=s.g).activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,null)}))}var La=class{constructor(t,e){t instanceof CanvasRenderingContext2D||t instanceof OffscreenCanvasRenderingContext2D?(this.l=t,this.j=e):this.j=t}ya(t,e){if(t){var n=Aa(this);e=Ea(e),n.save();var r=n.canvas,i=0;for(const s of t)n.fillStyle=wa(e.fillColor,{index:i,from:s}),n.strokeStyle=wa(e.color,{index:i,from:s}),n.lineWidth=wa(e.lineWidth,{index:i,from:s}),(t=new Path2D).arc(s.x*r.width,s.y*r.height,wa(e.radius,{index:i,from:s}),0,2*Math.PI),n.fill(t),n.stroke(t),++i;n.restore()}}xa(t,e,n){if(t&&e){var r=Aa(this);n=Ea(n),r.save();var i=r.canvas,s=0;for(const o of e){r.beginPath(),e=t[o.start];const a=t[o.end];e&&a&&(r.strokeStyle=wa(n.color,{index:s,from:e,to:a}),r.lineWidth=wa(n.lineWidth,{index:s,from:e,to:a}),r.moveTo(e.x*i.width,e.y*i.height),r.lineTo(a.x*i.width,a.y*i.height)),++s,r.stroke()}r.restore()}}ua(t,e){const n=Aa(this);e=Ea(e),n.save(),n.beginPath(),n.lineWidth=wa(e.lineWidth,{}),n.strokeStyle=wa(e.color,{}),n.fillStyle=wa(e.fillColor,{}),n.moveTo(t.originX,t.originY),n.lineTo(t.originX+t.width,t.originY),n.lineTo(t.originX+t.width,t.originY+t.height),n.lineTo(t.originX,t.originY+t.height),n.lineTo(t.originX,t.originY),n.stroke(),n.fill(),n.restore()}va(t,e,n=[0,0,0,255]){this.l?function(t,e,n,r){const i=ba(t);ka(t,e,(e=>{Sa(t,e,n,r),(e=Aa(t)).drawImage(i.canvas,0,0,e.canvas.width,e.canvas.height)}))}(this,t,n,e):Sa(this,t.M(),n,e)}wa(t,e,n){this.l?function(t,e,n,r){const i=ba(t);ka(t,e,(e=>{xa(t,e,n,r),(e=Aa(t)).drawImage(i.canvas,0,0,e.canvas.width,e.canvas.height)}))}(this,t,e,n):xa(this,t.M(),e,n)}close(){this.g?.close(),this.g=void 0,this.h?.close(),this.h=void 0,this.m?.close(),this.m=void 0}};function Ra(t,e){switch(e){case 0:return t.g.find((t=>t instanceof ImageData));case 1:return t.g.find((t=>\"undefined\"!=typeof ImageBitmap&&t instanceof ImageBitmap));case 2:return t.g.find((t=>\"undefined\"!=typeof WebGLTexture&&t instanceof WebGLTexture));default:throw Error(`Type is not supported: ${e}`)}}function Fa(t){var e=Ra(t,0);if(!e){e=Ma(t);const n=Pa(t),r=new Uint8Array(t.width*t.height*4);ra(n,e,Ia(t)),e.readPixels(0,0,t.width,t.height,e.RGBA,e.UNSIGNED_BYTE,r),ia(n),e=new ImageData(new Uint8ClampedArray(r.buffer),t.width,t.height),t.g.push(e)}return e}function Ia(t){let e=Ra(t,2);if(!e){const n=Ma(t);e=Oa(t);const r=Ra(t,1)||Fa(t);n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,r),Ca(t)}return e}function Ma(t){if(!t.canvas)throw Error(\"Conversion to different image formats require that a canvas is passed when initializing the image.\");return t.h||(t.h=qo(t.canvas.getContext(\"webgl2\"),\"You cannot use a canvas that is already bound to a different type of rendering context.\")),t.h}function Pa(t){return t.l||(t.l=new sa),t.l}function Oa(t){const e=Ma(t);e.viewport(0,0,t.width,t.height),e.activeTexture(e.TEXTURE0);let n=Ra(t,2);return n||(n=na(Pa(t),e),t.g.push(n),t.m=!0),e.bindTexture(e.TEXTURE_2D,n),n}function Ca(t){t.h.bindTexture(t.h.TEXTURE_2D,null)}function Ua(t){const e=Ma(t);return ea(Pa(t),e,!0,(()=>function(t,e){const n=t.canvas;if(n.width===t.width&&n.height===t.height)return e();const r=n.width,i=n.height;return n.width=t.width,n.height=t.height,t=e(),n.width=r,n.height=i,t}(t,(()=>{if(e.bindFramebuffer(e.FRAMEBUFFER,null),e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT),e.drawArrays(e.TRIANGLE_FAN,0,4),!(t.canvas instanceof OffscreenCanvas))throw Error(\"Conversion to ImageBitmap requires that the MediaPipe Tasks is initialized with an OffscreenCanvas\");return t.canvas.transferToImageBitmap()}))))}La.prototype.close=La.prototype.close,La.prototype.drawConfidenceMask=La.prototype.wa,La.prototype.drawCategoryMask=La.prototype.va,La.prototype.drawBoundingBox=La.prototype.ua,La.prototype.drawConnectors=La.prototype.xa,La.prototype.drawLandmarks=La.prototype.ya,La.lerp=function(t,e,n,r,i){return Ta(r*(1-(t-e)/(n-e))+i*(1-(n-t)/(n-e)),r,i)},La.clamp=Ta;var Da=class{constructor(t,e,n,r,i,s,o){this.g=t,this.j=e,this.m=n,this.canvas=r,this.l=i,this.width=s,this.height=o,(this.j||this.m)&&(0===--Na&&console.error(\"You seem to be creating MPImage instances without invoking .close(). This leaks resources.\"))}Ea(){return!!Ra(this,0)}ka(){return!!Ra(this,1)}P(){return!!Ra(this,2)}Ca(){return Fa(this)}Ba(){var t=Ra(this,1);return t||(Ia(this),Oa(this),t=Ua(this),Ca(this),this.g.push(t),this.j=!0),t}M(){return Ia(this)}clone(){const t=[];for(const e of this.g){let n;if(e instanceof ImageData)n=new ImageData(e.data,this.width,this.height);else if(e instanceof WebGLTexture){const t=Ma(this),e=Pa(this);t.activeTexture(t.TEXTURE1),n=na(e,t),t.bindTexture(t.TEXTURE_2D,n),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,this.width,this.height,0,t.RGBA,t.UNSIGNED_BYTE,null),t.bindTexture(t.TEXTURE_2D,null),ra(e,t,n),ea(e,t,!1,(()=>{Oa(this),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.drawArrays(t.TRIANGLE_FAN,0,4),Ca(this)})),ia(e),Ca(this)}else{if(!(e instanceof ImageBitmap))throw Error(`Type is not supported: ${e}`);Ia(this),Oa(this),n=Ua(this),Ca(this)}t.push(n)}return new Da(t,this.ka(),this.P(),this.canvas,this.l,this.width,this.height)}close(){this.j&&Ra(this,1).close(),this.m&&Ma(this).deleteTexture(Ra(this,2)),Na=-1}};Da.prototype.close=Da.prototype.close,Da.prototype.clone=Da.prototype.clone,Da.prototype.getAsWebGLTexture=Da.prototype.M,Da.prototype.getAsImageBitmap=Da.prototype.Ba,Da.prototype.getAsImageData=Da.prototype.Ca,Da.prototype.hasWebGLTexture=Da.prototype.P,Da.prototype.hasImageBitmap=Da.prototype.ka,Da.prototype.hasImageData=Da.prototype.Ea;var Na=250;function Ba(...t){return t.map((([t,e])=>({start:t,end:e})))}const Ga=function(t){return class extends t{La(){this.i._registerModelResourcesGraphService()}}}((ja=class{constructor(t,e){this.l=!0,this.i=t,this.g=null,this.h=0,this.m=\"function\"==typeof this.i._addIntToInputStream,void 0!==e?this.i.canvas=e:Oo()?this.i.canvas=new OffscreenCanvas(1,1):(console.warn(\"OffscreenCanvas not supported and GraphRunner constructor glCanvas parameter is undefined. Creating backup canvas.\"),this.i.canvas=document.createElement(\"canvas\"))}async initializeGraph(t){const e=await(await fetch(t)).arrayBuffer();t=!(t.endsWith(\".pbtxt\")||t.endsWith(\".textproto\")),this.setGraph(new Uint8Array(e),t)}setGraphFromString(t){this.setGraph((new TextEncoder).encode(t),!1)}setGraph(t,e){const n=t.length,r=this.i._malloc(n);this.i.HEAPU8.set(t,r),e?this.i._changeBinaryGraph(n,r):this.i._changeTextGraph(n,r),this.i._free(r)}configureAudio(t,e,n,r,i){this.i._configureAudio||console.warn('Attempting to use configureAudio without support for input audio. Is build dep \":gl_graph_runner_audio\" missing?'),Do(this,r||\"input_audio\",(r=>{Do(this,i=i||\"audio_header\",(i=>{this.i._configureAudio(r,i,t,e??0,n)}))}))}setAutoResizeCanvas(t){this.l=t}setAutoRenderToScreen(t){this.i._setAutoRenderToScreen(t)}setGpuBufferVerticalFlip(t){this.i.gpuOriginForWebTexturesIsBottomLeft=t}da(t){Go(this,\"__graph_config__\",(e=>{t(e)})),Do(this,\"__graph_config__\",(t=>{this.i._getGraphConfig(t,void 0)})),delete this.i.simpleListeners.__graph_config__}attachErrorListener(t){this.i.errorListener=t}attachEmptyPacketListener(t,e){this.i.emptyPacketListeners=this.i.emptyPacketListeners||{},this.i.emptyPacketListeners[t]=e}addAudioToStream(t,e,n){this.addAudioToStreamWithShape(t,0,0,e,n)}addAudioToStreamWithShape(t,e,n,r,i){const s=4*t.length;this.h!==s&&(this.g&&this.i._free(this.g),this.g=this.i._malloc(s),this.h=s),this.i.HEAPF32.set(t,this.g/4),Do(this,r,(t=>{this.i._addAudioToInputStream(this.g,e,n,t,i)}))}addGpuBufferToStream(t,e,n){Do(this,e,(e=>{const[r,i]=No(this,t,e);this.i._addBoundTextureToStream(e,r,i,n)}))}addBoolToStream(t,e,n){Do(this,e,(e=>{this.i._addBoolToInputStream(t,e,n)}))}addDoubleToStream(t,e,n){Do(this,e,(e=>{this.i._addDoubleToInputStream(t,e,n)}))}addFloatToStream(t,e,n){Do(this,e,(e=>{this.i._addFloatToInputStream(t,e,n)}))}addIntToStream(t,e,n){Do(this,e,(e=>{this.i._addIntToInputStream(t,e,n)}))}addUintToStream(t,e,n){Do(this,e,(e=>{this.i._addUintToInputStream(t,e,n)}))}addStringToStream(t,e,n){Do(this,e,(e=>{Do(this,t,(t=>{this.i._addStringToInputStream(t,e,n)}))}))}addStringRecordToStream(t,e,n){Do(this,e,(e=>{Bo(this,Object.keys(t),(r=>{Bo(this,Object.values(t),(i=>{this.i._addFlatHashMapToInputStream(r,i,Object.keys(t).length,e,n)}))}))}))}addProtoToStream(t,e,n,r){Do(this,n,(n=>{Do(this,e,(e=>{const i=this.i._malloc(t.length);this.i.HEAPU8.set(t,i),this.i._addProtoToInputStream(i,t.length,e,n,r),this.i._free(i)}))}))}addEmptyPacketToStream(t,e){Do(this,t,(t=>{this.i._addEmptyPacketToInputStream(t,e)}))}addBoolVectorToStream(t,e,n){Do(this,e,(e=>{const r=this.i._allocateBoolVector(t.length);if(!r)throw Error(\"Unable to allocate new bool vector on heap.\");for(const e of t)this.i._addBoolVectorEntry(r,e);this.i._addBoolVectorToInputStream(r,e,n)}))}addDoubleVectorToStream(t,e,n){Do(this,e,(e=>{const r=this.i._allocateDoubleVector(t.length);if(!r)throw Error(\"Unable to allocate new double vector on heap.\");for(const e of t)this.i._addDoubleVectorEntry(r,e);this.i._addDoubleVectorToInputStream(r,e,n)}))}addFloatVectorToStream(t,e,n){Do(this,e,(e=>{const r=this.i._allocateFloatVector(t.length);if(!r)throw Error(\"Unable to allocate new float vector on heap.\");for(const e of t)this.i._addFloatVectorEntry(r,e);this.i._addFloatVectorToInputStream(r,e,n)}))}addIntVectorToStream(t,e,n){Do(this,e,(e=>{const r=this.i._allocateIntVector(t.length);if(!r)throw Error(\"Unable to allocate new int vector on heap.\");for(const e of t)this.i._addIntVectorEntry(r,e);this.i._addIntVectorToInputStream(r,e,n)}))}addUintVectorToStream(t,e,n){Do(this,e,(e=>{const r=this.i._allocateUintVector(t.length);if(!r)throw Error(\"Unable to allocate new unsigned int vector on heap.\");for(const e of t)this.i._addUintVectorEntry(r,e);this.i._addUintVectorToInputStream(r,e,n)}))}addStringVectorToStream(t,e,n){Do(this,e,(e=>{const r=this.i._allocateStringVector(t.length);if(!r)throw Error(\"Unable to allocate new string vector on heap.\");for(const e of t)Do(this,e,(t=>{this.i._addStringVectorEntry(r,t)}));this.i._addStringVectorToInputStream(r,e,n)}))}addBoolToInputSidePacket(t,e){Do(this,e,(e=>{this.i._addBoolToInputSidePacket(t,e)}))}addDoubleToInputSidePacket(t,e){Do(this,e,(e=>{this.i._addDoubleToInputSidePacket(t,e)}))}addFloatToInputSidePacket(t,e){Do(this,e,(e=>{this.i._addFloatToInputSidePacket(t,e)}))}addIntToInputSidePacket(t,e){Do(this,e,(e=>{this.i._addIntToInputSidePacket(t,e)}))}addUintToInputSidePacket(t,e){Do(this,e,(e=>{this.i._addUintToInputSidePacket(t,e)}))}addStringToInputSidePacket(t,e){Do(this,e,(e=>{Do(this,t,(t=>{this.i._addStringToInputSidePacket(t,e)}))}))}addProtoToInputSidePacket(t,e,n){Do(this,n,(n=>{Do(this,e,(e=>{const r=this.i._malloc(t.length);this.i.HEAPU8.set(t,r),this.i._addProtoToInputSidePacket(r,t.length,e,n),this.i._free(r)}))}))}addBoolVectorToInputSidePacket(t,e){Do(this,e,(e=>{const n=this.i._allocateBoolVector(t.length);if(!n)throw Error(\"Unable to allocate new bool vector on heap.\");for(const e of t)this.i._addBoolVectorEntry(n,e);this.i._addBoolVectorToInputSidePacket(n,e)}))}addDoubleVectorToInputSidePacket(t,e){Do(this,e,(e=>{const n=this.i._allocateDoubleVector(t.length);if(!n)throw Error(\"Unable to allocate new double vector on heap.\");for(const e of t)this.i._addDoubleVectorEntry(n,e);this.i._addDoubleVectorToInputSidePacket(n,e)}))}addFloatVectorToInputSidePacket(t,e){Do(this,e,(e=>{const n=this.i._allocateFloatVector(t.length);if(!n)throw Error(\"Unable to allocate new float vector on heap.\");for(const e of t)this.i._addFloatVectorEntry(n,e);this.i._addFloatVectorToInputSidePacket(n,e)}))}addIntVectorToInputSidePacket(t,e){Do(this,e,(e=>{const n=this.i._allocateIntVector(t.length);if(!n)throw Error(\"Unable to allocate new int vector on heap.\");for(const e of t)this.i._addIntVectorEntry(n,e);this.i._addIntVectorToInputSidePacket(n,e)}))}addUintVectorToInputSidePacket(t,e){Do(this,e,(e=>{const n=this.i._allocateUintVector(t.length);if(!n)throw Error(\"Unable to allocate new unsigned int vector on heap.\");for(const e of t)this.i._addUintVectorEntry(n,e);this.i._addUintVectorToInputSidePacket(n,e)}))}addStringVectorToInputSidePacket(t,e){Do(this,e,(e=>{const n=this.i._allocateStringVector(t.length);if(!n)throw Error(\"Unable to allocate new string vector on heap.\");for(const e of t)Do(this,e,(t=>{this.i._addStringVectorEntry(n,t)}));this.i._addStringVectorToInputSidePacket(n,e)}))}attachBoolListener(t,e){Go(this,t,e),Do(this,t,(t=>{this.i._attachBoolListener(t)}))}attachBoolVectorListener(t,e){jo(this,t,e),Do(this,t,(t=>{this.i._attachBoolVectorListener(t)}))}attachIntListener(t,e){Go(this,t,e),Do(this,t,(t=>{this.i._attachIntListener(t)}))}attachIntVectorListener(t,e){jo(this,t,e),Do(this,t,(t=>{this.i._attachIntVectorListener(t)}))}attachUintListener(t,e){Go(this,t,e),Do(this,t,(t=>{this.i._attachUintListener(t)}))}attachUintVectorListener(t,e){jo(this,t,e),Do(this,t,(t=>{this.i._attachUintVectorListener(t)}))}attachDoubleListener(t,e){Go(this,t,e),Do(this,t,(t=>{this.i._attachDoubleListener(t)}))}attachDoubleVectorListener(t,e){jo(this,t,e),Do(this,t,(t=>{this.i._attachDoubleVectorListener(t)}))}attachFloatListener(t,e){Go(this,t,e),Do(this,t,(t=>{this.i._attachFloatListener(t)}))}attachFloatVectorListener(t,e){jo(this,t,e),Do(this,t,(t=>{this.i._attachFloatVectorListener(t)}))}attachStringListener(t,e){Go(this,t,e),Do(this,t,(t=>{this.i._attachStringListener(t)}))}attachStringVectorListener(t,e){jo(this,t,e),Do(this,t,(t=>{this.i._attachStringVectorListener(t)}))}attachProtoListener(t,e,n){Go(this,t,e),Do(this,t,(t=>{this.i._attachProtoListener(t,n||!1)}))}attachProtoVectorListener(t,e,n){jo(this,t,e),Do(this,t,(t=>{this.i._attachProtoVectorListener(t,n||!1)}))}attachAudioListener(t,e,n){this.i._attachAudioListener||console.warn('Attempting to use attachAudioListener without support for output audio. Is build dep \":gl_graph_runner_audio_out\" missing?'),Go(this,t,((t,n)=>{t=new Float32Array(t.buffer,t.byteOffset,t.length/4),e(t,n)})),Do(this,t,(t=>{this.i._attachAudioListener(t,n||!1)}))}finishProcessing(){this.i._waitUntilIdle()}closeGraph(){this.i._closeGraph(),this.i.simpleListeners=void 0,this.i.emptyPacketListeners=void 0}},class extends ja{get ea(){return this.i}qa(t,e,n){Do(this,e,(e=>{const[r,i]=No(this,t,e);this.ea._addBoundTextureAsImageToStream(e,r,i,n)}))}U(t,e){Go(this,t,e),Do(this,t,(t=>{this.ea._attachImageListener(t)}))}ca(t,e){jo(this,t,e),Do(this,t,(t=>{this.ea._attachImageVectorListener(t)}))}}));var ja,Va=class extends Ga{};async function Xa(t,e,n){return async function(t,e,n,r){return Vo(t,e,n,r)}(t,n.canvas??(Oo()?void 0:document.createElement(\"canvas\")),e,n)}function Ha(t,e,n,r){if(t.T){const s=new fs;if(n?.regionOfInterest){if(!t.pa)throw Error(\"This task doesn't support region-of-interest.\");var i=n.regionOfInterest;if(i.left>=i.right||i.top>=i.bottom)throw Error(\"Expected RectF with left < right and top < bottom.\");if(i.left<0||i.top<0||i.right>1||i.bottom>1)throw Error(\"Expected RectF values to be in [0,1].\");gn(s,1,(i.left+i.right)/2),gn(s,2,(i.top+i.bottom)/2),gn(s,4,i.right-i.left),gn(s,3,i.bottom-i.top)}else gn(s,1,.5),gn(s,2,.5),gn(s,4,1),gn(s,3,1);if(n?.rotationDegrees){if(n?.rotationDegrees%90!=0)throw Error(\"Expected rotation to be a multiple of 90\u00B0.\");if(gn(s,5,-Math.PI*n.rotationDegrees/180),n?.rotationDegrees%180!=0){const[t,r]=Uo(e);n=dn(s,3)*r/t,i=dn(s,4)*t/r,gn(s,4,n),gn(s,3,i)}}t.g.addProtoToStream(s.g(),\"mediapipe.NormalizedRect\",t.T,r)}t.g.qa(e,t.aa,r??performance.now()),t.finishProcessing()}function Wa(t,e,n){if(t.baseOptions?.g())throw Error(\"Task is not initialized with image mode. 'runningMode' must be set to 'IMAGE'.\");Ha(t,e,n,t.B+1)}function za(t,e,n,r){if(!t.baseOptions?.g())throw Error(\"Task is not initialized with video mode. 'runningMode' must be set to 'VIDEO'.\");Ha(t,e,n,r)}function Ka(t,e,n,r){var i=e.data;const s=e.width,o=s*(e=e.height);if((i instanceof Uint8Array||i instanceof Float32Array)&&i.length!==o)throw Error(\"Unsupported channel count: \"+i.length/o);return t=new ya([i],n,!1,t.g.i.canvas,t.O,s,e),r?t.clone():t}var Ya=class extends $o{constructor(t,e,n,r){super(t),this.g=t,this.aa=e,this.T=n,this.pa=r,this.O=new sa}l(t,e=!0){if(\"runningMode\"in t&&fn(this.baseOptions,2,!!t.runningMode&&\"IMAGE\"!==t.runningMode),void 0!==t.canvas&&this.g.i.canvas!==t.canvas)throw Error(\"You must create a new task to reset the canvas.\");return super.l(t,e)}close(){this.O.close(),super.close()}};Ya.prototype.close=Ya.prototype.close;var $a=class extends Ya{constructor(t,e){super(new Va(t,e),\"image_in\",\"norm_rect_in\",!1),this.j={detections:[]},sn(t=this.h=new Is,0,1,e=new Ls),gn(this.h,2,.5),gn(this.h,3,.3)}get baseOptions(){return en(this.h,Ls,1)}set baseOptions(t){sn(this.h,0,1,t)}o(t){return\"minDetectionConfidence\"in t&&gn(this.h,2,t.minDetectionConfidence??.5),\"minSuppressionThreshold\"in t&&gn(this.h,3,t.minSuppressionThreshold??.3),this.l(t)}D(t,e){return this.j={detections:[]},Wa(this,t,e),this.j}F(t,e,n){return this.j={detections:[]},za(this,t,n,e),this.j}m(){var t=new qi;Yi(t,\"image_in\"),Yi(t,\"norm_rect_in\"),$i(t,\"detections\");const e=new Di;Xn(e,Ps,this.h);const n=new Xi;Gi(n,\"mediapipe.tasks.vision.face_detector.FaceDetectorGraph\"),ji(n,\"IMAGE:image_in\"),ji(n,\"NORM_RECT:norm_rect_in\"),Vi(n,\"DETECTIONS:detections\"),n.o(e),Ki(t,n),this.g.attachProtoVectorListener(\"detections\",((t,e)=>{for(const e of t)t=os(e),this.j.detections.push(bo(t));Wo(this,e)})),this.g.attachEmptyPacketListener(\"detections\",(t=>{Wo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};$a.prototype.detectForVideo=$a.prototype.F,$a.prototype.detect=$a.prototype.D,$a.prototype.setOptions=$a.prototype.o,$a.createFromModelPath=async function(t,e){return Xa($a,t,{baseOptions:{modelAssetPath:e}})},$a.createFromModelBuffer=function(t,e){return Xa($a,t,{baseOptions:{modelAssetBuffer:e}})},$a.createFromOptions=function(t,e){return Xa($a,t,e)};var qa=Ba([61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]),Ja=Ba([263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]),Za=Ba([276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]),Qa=Ba([474,475],[475,476],[476,477],[477,474]),tc=Ba([33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]),ec=Ba([46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]),nc=Ba([469,470],[470,471],[471,472],[472,469]),rc=Ba([10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]),ic=[...qa,...Ja,...Za,...tc,...ec,...rc],sc=Ba([127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]);function oc(t){t.j={faceLandmarks:[],faceBlendshapes:[],facialTransformationMatrixes:[]}}var ac=class extends Ya{constructor(t,e){super(new Va(t,e),\"image_in\",\"norm_rect\",!1),this.j={faceLandmarks:[],faceBlendshapes:[],facialTransformationMatrixes:[]},this.outputFacialTransformationMatrixes=this.outputFaceBlendshapes=!1,sn(t=this.h=new Us,0,1,e=new Ls),this.v=new Cs,sn(this.h,0,3,this.v),this.s=new Is,sn(this.h,0,2,this.s),pn(this.s,4,1),gn(this.s,2,.5),gn(this.v,2,.5),gn(this.h,4,.5)}get baseOptions(){return en(this.h,Ls,1)}set baseOptions(t){sn(this.h,0,1,t)}o(t){return\"numFaces\"in t&&pn(this.s,4,t.numFaces??1),\"minFaceDetectionConfidence\"in t&&gn(this.s,2,t.minFaceDetectionConfidence??.5),\"minTrackingConfidence\"in t&&gn(this.h,4,t.minTrackingConfidence??.5),\"minFacePresenceConfidence\"in t&&gn(this.v,2,t.minFacePresenceConfidence??.5),\"outputFaceBlendshapes\"in t&&(this.outputFaceBlendshapes=!!t.outputFaceBlendshapes),\"outputFacialTransformationMatrixes\"in t&&(this.outputFacialTransformationMatrixes=!!t.outputFacialTransformationMatrixes),this.l(t)}D(t,e){return oc(this),Wa(this,t,e),this.j}F(t,e,n){return oc(this),za(this,t,n,e),this.j}m(){var t=new qi;Yi(t,\"image_in\"),Yi(t,\"norm_rect\"),$i(t,\"face_landmarks\");const e=new Di;Xn(e,Bs,this.h);const n=new Xi;Gi(n,\"mediapipe.tasks.vision.face_landmarker.FaceLandmarkerGraph\"),ji(n,\"IMAGE:image_in\"),ji(n,\"NORM_RECT:norm_rect\"),Vi(n,\"NORM_LANDMARKS:face_landmarks\"),n.o(e),Ki(t,n),this.g.attachProtoVectorListener(\"face_landmarks\",((t,e)=>{for(const e of t)t=us(e),this.j.faceLandmarks.push(ko(t));Wo(this,e)})),this.g.attachEmptyPacketListener(\"face_landmarks\",(t=>{Wo(this,t)})),this.outputFaceBlendshapes&&($i(t,\"blendshapes\"),Vi(n,\"BLENDSHAPES:blendshapes\"),this.g.attachProtoVectorListener(\"blendshapes\",((t,e)=>{if(this.outputFaceBlendshapes)for(const e of t)t=ns(e),this.j.faceBlendshapes.push(Ao(t.g()??[]));Wo(this,e)})),this.g.attachEmptyPacketListener(\"blendshapes\",(t=>{Wo(this,t)}))),this.outputFacialTransformationMatrixes&&($i(t,\"face_geometry\"),Vi(n,\"FACE_GEOMETRY:face_geometry\"),this.g.attachProtoVectorListener(\"face_geometry\",((t,e)=>{if(this.outputFacialTransformationMatrixes)for(const e of t)(t=en(Os(e),ls,2))&&this.j.facialTransformationMatrixes.push({rows:un(t,1)??0??0,columns:un(t,2)??0??0,data:Ve(t,3,$t,je()).slice()??[]});Wo(this,e)})),this.g.attachEmptyPacketListener(\"face_geometry\",(t=>{Wo(this,t)}))),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};ac.prototype.detectForVideo=ac.prototype.F,ac.prototype.detect=ac.prototype.D,ac.prototype.setOptions=ac.prototype.o,ac.createFromModelPath=function(t,e){return Xa(ac,t,{baseOptions:{modelAssetPath:e}})},ac.createFromModelBuffer=function(t,e){return Xa(ac,t,{baseOptions:{modelAssetBuffer:e}})},ac.createFromOptions=function(t,e){return Xa(ac,t,e)},ac.FACE_LANDMARKS_LIPS=qa,ac.FACE_LANDMARKS_LEFT_EYE=Ja,ac.FACE_LANDMARKS_LEFT_EYEBROW=Za,ac.FACE_LANDMARKS_LEFT_IRIS=Qa,ac.FACE_LANDMARKS_RIGHT_EYE=tc,ac.FACE_LANDMARKS_RIGHT_EYEBROW=ec,ac.FACE_LANDMARKS_RIGHT_IRIS=nc,ac.FACE_LANDMARKS_FACE_OVAL=rc,ac.FACE_LANDMARKS_CONTOURS=ic,ac.FACE_LANDMARKS_TESSELATION=sc;var cc=class extends Ya{constructor(t,e){super(new Va(t,e),\"image_in\",\"norm_rect\",!0),sn(t=this.j=new Gs,0,1,e=new Ls)}get baseOptions(){return en(this.j,Ls,1)}set baseOptions(t){sn(this.j,0,1,t)}o(t){return super.l(t)}Oa(t,e,n){const r=\"function\"!=typeof e?e:{};if(this.h=\"function\"==typeof e?e:n,Wa(this,t,r??{}),!this.h)return this.s}m(){var t=new qi;Yi(t,\"image_in\"),Yi(t,\"norm_rect\"),$i(t,\"stylized_image\");const e=new Di;Xn(e,js,this.j);const n=new Xi;Gi(n,\"mediapipe.tasks.vision.face_stylizer.FaceStylizerGraph\"),ji(n,\"IMAGE:image_in\"),ji(n,\"NORM_RECT:norm_rect\"),Vi(n,\"STYLIZED_IMAGE:stylized_image\"),n.o(e),Ki(t,n),this.g.U(\"stylized_image\",((t,e)=>{var n=!this.h,r=t.data,i=t.width;const s=i*(t=t.height);if(r instanceof Uint8Array)if(r.length===3*s){const e=new Uint8ClampedArray(4*s);for(let t=0;t<s;++t)e[4*t]=r[3*t],e[4*t+1]=r[3*t+1],e[4*t+2]=r[3*t+2],e[4*t+3]=255;r=new ImageData(e,i,t)}else{if(r.length!==4*s)throw Error(\"Unsupported channel count: \"+r.length/s);r=new ImageData(new Uint8ClampedArray(r.buffer,r.byteOffset,r.length),i,t)}else if(!(r instanceof WebGLTexture))throw Error(`Unsupported format: ${r.constructor.name}`);i=new Da([r],!1,!1,this.g.i.canvas,this.O,i,t),this.s=n=n?i.clone():i,this.h&&this.h(n),Wo(this,e)})),this.g.attachEmptyPacketListener(\"stylized_image\",(t=>{this.s=null,this.h&&this.h(null),Wo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};cc.prototype.stylize=cc.prototype.Oa,cc.prototype.setOptions=cc.prototype.o,cc.createFromModelPath=function(t,e){return Xa(cc,t,{baseOptions:{modelAssetPath:e}})},cc.createFromModelBuffer=function(t,e){return Xa(cc,t,{baseOptions:{modelAssetBuffer:e}})},cc.createFromOptions=function(t,e){return Xa(cc,t,e)};var hc=Ba([0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]);function uc(t){t.gestures=[],t.landmarks=[],t.worldLandmarks=[],t.handedness=[]}function lc(t){return 0===t.gestures.length?{gestures:[],landmarks:[],worldLandmarks:[],handedness:[],handednesses:[]}:{gestures:t.gestures,landmarks:t.landmarks,worldLandmarks:t.worldLandmarks,handedness:t.handedness,handednesses:t.handedness}}function dc(t,e=!0){const n=[];for(const i of t){var r=ns(i);t=[];for(const n of r.g())r=e&&null!=un(n,1)?un(n,1)??0:-1,t.push({score:dn(n,2)??0,index:r,categoryName:ln(n,3)??\"\"??\"\",displayName:ln(n,4)??\"\"??\"\"});n.push(t)}return n}var fc=class extends Ya{constructor(t,e){super(new Va(t,e),\"image_in\",\"norm_rect\",!1),this.gestures=[],this.landmarks=[],this.worldLandmarks=[],this.handedness=[],sn(t=this.j=new Ys,0,1,e=new Ls),this.s=new Ks,sn(this.j,0,2,this.s),this.C=new zs,sn(this.s,0,3,this.C),this.v=new Ws,sn(this.s,0,2,this.v),this.h=new Hs,sn(this.j,0,3,this.h),gn(this.v,2,.5),gn(this.s,4,.5),gn(this.C,2,.5)}get baseOptions(){return en(this.j,Ls,1)}set baseOptions(t){sn(this.j,0,1,t)}o(t){if(pn(this.v,3,t.numHands??1),\"minHandDetectionConfidence\"in t&&gn(this.v,2,t.minHandDetectionConfidence??.5),\"minTrackingConfidence\"in t&&gn(this.s,4,t.minTrackingConfidence??.5),\"minHandPresenceConfidence\"in t&&gn(this.C,2,t.minHandPresenceConfidence??.5),t.cannedGesturesClassifierOptions){var e=new Vs,n=e,r=To(t.cannedGesturesClassifierOptions,en(this.h,Vs,3)?.h());sn(n,0,2,r),sn(this.h,0,3,e)}else void 0===t.cannedGesturesClassifierOptions&&en(this.h,Vs,3)?.g();return t.customGesturesClassifierOptions?(sn(n=e=new Vs,0,2,r=To(t.customGesturesClassifierOptions,en(this.h,Vs,4)?.h())),sn(this.h,0,4,e)):void 0===t.customGesturesClassifierOptions&&en(this.h,Vs,4)?.g(),this.l(t)}Ja(t,e){return uc(this),Wa(this,t,e),lc(this)}Ka(t,e,n){return uc(this),za(this,t,n,e),lc(this)}m(){var t=new qi;Yi(t,\"image_in\"),Yi(t,\"norm_rect\"),$i(t,\"hand_gestures\"),$i(t,\"hand_landmarks\"),$i(t,\"world_hand_landmarks\"),$i(t,\"handedness\");const e=new Di;Xn(e,Qs,this.j);const n=new Xi;Gi(n,\"mediapipe.tasks.vision.gesture_recognizer.GestureRecognizerGraph\"),ji(n,\"IMAGE:image_in\"),ji(n,\"NORM_RECT:norm_rect\"),Vi(n,\"HAND_GESTURES:hand_gestures\"),Vi(n,\"LANDMARKS:hand_landmarks\"),Vi(n,\"WORLD_LANDMARKS:world_hand_landmarks\"),Vi(n,\"HANDEDNESS:handedness\"),n.o(e),Ki(t,n),this.g.attachProtoVectorListener(\"hand_landmarks\",((t,e)=>{for(const e of t){t=us(e);const n=[];for(const e of rn(t,hs,1))n.push({x:dn(e,1)??0,y:dn(e,2)??0,z:dn(e,3)??0,visibility:dn(e,4)??0});this.landmarks.push(n)}Wo(this,e)})),this.g.attachEmptyPacketListener(\"hand_landmarks\",(t=>{Wo(this,t)})),this.g.attachProtoVectorListener(\"world_hand_landmarks\",((t,e)=>{for(const e of t){t=cs(e);const n=[];for(const e of rn(t,as,1))n.push({x:dn(e,1)??0,y:dn(e,2)??0,z:dn(e,3)??0,visibility:dn(e,4)??0});this.worldLandmarks.push(n)}Wo(this,e)})),this.g.attachEmptyPacketListener(\"world_hand_landmarks\",(t=>{Wo(this,t)})),this.g.attachProtoVectorListener(\"hand_gestures\",((t,e)=>{this.gestures.push(...dc(t,!1)),Wo(this,e)})),this.g.attachEmptyPacketListener(\"hand_gestures\",(t=>{Wo(this,t)})),this.g.attachProtoVectorListener(\"handedness\",((t,e)=>{this.handedness.push(...dc(t)),Wo(this,e)})),this.g.attachEmptyPacketListener(\"handedness\",(t=>{Wo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};function pc(t){return{landmarks:t.landmarks,worldLandmarks:t.worldLandmarks,handednesses:t.handedness,handedness:t.handedness}}fc.prototype.recognizeForVideo=fc.prototype.Ka,fc.prototype.recognize=fc.prototype.Ja,fc.prototype.setOptions=fc.prototype.o,fc.createFromModelPath=function(t,e){return Xa(fc,t,{baseOptions:{modelAssetPath:e}})},fc.createFromModelBuffer=function(t,e){return Xa(fc,t,{baseOptions:{modelAssetBuffer:e}})},fc.createFromOptions=function(t,e){return Xa(fc,t,e)},fc.HAND_CONNECTIONS=hc;var gc=class extends Ya{constructor(t,e){super(new Va(t,e),\"image_in\",\"norm_rect\",!1),this.landmarks=[],this.worldLandmarks=[],this.handedness=[],sn(t=this.h=new Ks,0,1,e=new Ls),this.s=new zs,sn(this.h,0,3,this.s),this.j=new Ws,sn(this.h,0,2,this.j),pn(this.j,3,1),gn(this.j,2,.5),gn(this.s,2,.5),gn(this.h,4,.5)}get baseOptions(){return en(this.h,Ls,1)}set baseOptions(t){sn(this.h,0,1,t)}o(t){return\"numHands\"in t&&pn(this.j,3,t.numHands??1),\"minHandDetectionConfidence\"in t&&gn(this.j,2,t.minHandDetectionConfidence??.5),\"minTrackingConfidence\"in t&&gn(this.h,4,t.minTrackingConfidence??.5),\"minHandPresenceConfidence\"in t&&gn(this.s,2,t.minHandPresenceConfidence??.5),this.l(t)}D(t,e){return this.landmarks=[],this.worldLandmarks=[],this.handedness=[],Wa(this,t,e),pc(this)}F(t,e,n){return this.landmarks=[],this.worldLandmarks=[],this.handedness=[],za(this,t,n,e),pc(this)}m(){var t=new qi;Yi(t,\"image_in\"),Yi(t,\"norm_rect\"),$i(t,\"hand_landmarks\"),$i(t,\"world_hand_landmarks\"),$i(t,\"handedness\");const e=new Di;Xn(e,to,this.h);const n=new Xi;Gi(n,\"mediapipe.tasks.vision.hand_landmarker.HandLandmarkerGraph\"),ji(n,\"IMAGE:image_in\"),ji(n,\"NORM_RECT:norm_rect\"),Vi(n,\"LANDMARKS:hand_landmarks\"),Vi(n,\"WORLD_LANDMARKS:world_hand_landmarks\"),Vi(n,\"HANDEDNESS:handedness\"),n.o(e),Ki(t,n),this.g.attachProtoVectorListener(\"hand_landmarks\",((t,e)=>{for(const e of t)t=us(e),this.landmarks.push(ko(t));Wo(this,e)})),this.g.attachEmptyPacketListener(\"hand_landmarks\",(t=>{Wo(this,t)})),this.g.attachProtoVectorListener(\"world_hand_landmarks\",((t,e)=>{for(const e of t)t=cs(e),this.worldLandmarks.push(So(t));Wo(this,e)})),this.g.attachEmptyPacketListener(\"world_hand_landmarks\",(t=>{Wo(this,t)})),this.g.attachProtoVectorListener(\"handedness\",((t,e)=>{var n=this.handedness,r=n.push;const i=[];for(const e of t){t=ns(e);const n=[];for(const e of t.g())n.push({score:dn(e,2)??0,index:un(e,1)??0??-1,categoryName:ln(e,3)??\"\"??\"\",displayName:ln(e,4)??\"\"??\"\"});i.push(n)}r.call(n,...i),Wo(this,e)})),this.g.attachEmptyPacketListener(\"handedness\",(t=>{Wo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};gc.prototype.detectForVideo=gc.prototype.F,gc.prototype.detect=gc.prototype.D,gc.prototype.setOptions=gc.prototype.o,gc.createFromModelPath=function(t,e){return Xa(gc,t,{baseOptions:{modelAssetPath:e}})},gc.createFromModelBuffer=function(t,e){return Xa(gc,t,{baseOptions:{modelAssetBuffer:e}})},gc.createFromOptions=function(t,e){return Xa(gc,t,e)},gc.HAND_CONNECTIONS=hc;var mc=Ba([0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]);function yc(t){t.h={faceLandmarks:[],faceBlendshapes:[],poseLandmarks:[],poseWorldLandmarks:[],poseSegmentationMasks:[],leftHandLandmarks:[],leftHandWorldLandmarks:[],rightHandLandmarks:[],rightHandWorldLandmarks:[]}}function _c(t){try{if(!t.C)return t.h;t.C(t.h)}finally{Yo(t)}}function vc(t,e){t=us(t),e.push(ko(t))}var Ec=class extends Ya{constructor(t,e){super(new Va(t,e),\"input_frames_image\",null,!1),this.h={faceLandmarks:[],faceBlendshapes:[],poseLandmarks:[],poseWorldLandmarks:[],poseSegmentationMasks:[],leftHandLandmarks:[],leftHandWorldLandmarks:[],rightHandLandmarks:[],rightHandWorldLandmarks:[]},this.outputPoseSegmentationMasks=this.outputFaceBlendshapes=!1,sn(t=this.j=new io,0,1,e=new Ls),this.J=new zs,sn(this.j,0,2,this.J),this.Z=new eo,sn(this.j,0,3,this.Z),this.s=new Is,sn(this.j,0,4,this.s),this.H=new Cs,sn(this.j,0,5,this.H),this.v=new no,sn(this.j,0,6,this.v),this.K=new ro,sn(this.j,0,7,this.K),gn(this.s,2,.5),gn(this.s,3,.3),gn(this.H,2,.5),gn(this.v,2,.5),gn(this.v,3,.3),gn(this.K,2,.5),gn(this.J,2,.5)}get baseOptions(){return en(this.j,Ls,1)}set baseOptions(t){sn(this.j,0,1,t)}o(t){return\"minFaceDetectionConfidence\"in t&&gn(this.s,2,t.minFaceDetectionConfidence??.5),\"minFaceSuppressionThreshold\"in t&&gn(this.s,3,t.minFaceSuppressionThreshold??.3),\"minFacePresenceConfidence\"in t&&gn(this.H,2,t.minFacePresenceConfidence??.5),\"outputFaceBlendshapes\"in t&&(this.outputFaceBlendshapes=!!t.outputFaceBlendshapes),\"minPoseDetectionConfidence\"in t&&gn(this.v,2,t.minPoseDetectionConfidence??.5),\"minPoseSuppressionThreshold\"in t&&gn(this.v,3,t.minPoseSuppressionThreshold??.3),\"minPosePresenceConfidence\"in t&&gn(this.K,2,t.minPosePresenceConfidence??.5),\"outputPoseSegmentationMasks\"in t&&(this.outputPoseSegmentationMasks=!!t.outputPoseSegmentationMasks),\"minHandLandmarksConfidence\"in t&&gn(this.J,2,t.minHandLandmarksConfidence??.5),this.l(t)}D(t,e,n){const r=\"function\"!=typeof e?e:{};return this.C=\"function\"==typeof e?e:n,yc(this),Wa(this,t,r),_c(this)}F(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.C=\"function\"==typeof n?n:r,yc(this),za(this,t,i,e),_c(this)}m(){var t=new qi;Yi(t,\"input_frames_image\"),$i(t,\"pose_landmarks\"),$i(t,\"pose_world_landmarks\"),$i(t,\"face_landmarks\"),$i(t,\"left_hand_landmarks\"),$i(t,\"left_hand_world_landmarks\"),$i(t,\"right_hand_landmarks\"),$i(t,\"right_hand_world_landmarks\");const e=new Di,n=new bi;Ke(n,1,ae(\"type.googleapis.com/mediapipe.tasks.vision.holistic_landmarker.proto.HolisticLandmarkerGraphOptions\"),\"\"),function(t,e){if(null!=e)if(Array.isArray(e))De(t,2,Re(e));else{if(!(\"string\"==typeof e||e instanceof N||O(e)))throw Error(\"invalid value in Any.value field: \"+e+\" expected a ByteString, a base64 encoded string, a Uint8Array or a jspb array\");Ke(t,2,ft(e,!1),U())}}(n,this.j.g());const r=new Xi;Gi(r,\"mediapipe.tasks.vision.holistic_landmarker.HolisticLandmarkerGraph\"),hn(r,8,bi,n),ji(r,\"IMAGE:input_frames_image\"),Vi(r,\"POSE_LANDMARKS:pose_landmarks\"),Vi(r,\"POSE_WORLD_LANDMARKS:pose_world_landmarks\"),Vi(r,\"FACE_LANDMARKS:face_landmarks\"),Vi(r,\"LEFT_HAND_LANDMARKS:left_hand_landmarks\"),Vi(r,\"LEFT_HAND_WORLD_LANDMARKS:left_hand_world_landmarks\"),Vi(r,\"RIGHT_HAND_LANDMARKS:right_hand_landmarks\"),Vi(r,\"RIGHT_HAND_WORLD_LANDMARKS:right_hand_world_landmarks\"),r.o(e),Ki(t,r),zo(this,t),this.g.attachProtoListener(\"pose_landmarks\",((t,e)=>{vc(t,this.h.poseLandmarks),Wo(this,e)})),this.g.attachEmptyPacketListener(\"pose_landmarks\",(t=>{Wo(this,t)})),this.g.attachProtoListener(\"pose_world_landmarks\",((t,e)=>{var n=this.h.poseWorldLandmarks;t=cs(t),n.push(So(t)),Wo(this,e)})),this.g.attachEmptyPacketListener(\"pose_world_landmarks\",(t=>{Wo(this,t)})),this.outputPoseSegmentationMasks&&(Vi(r,\"POSE_SEGMENTATION_MASK:pose_segmentation_mask\"),Ko(this,\"pose_segmentation_mask\"),this.g.U(\"pose_segmentation_mask\",((t,e)=>{this.h.poseSegmentationMasks=[Ka(this,t,!0,!this.C)],Wo(this,e)})),this.g.attachEmptyPacketListener(\"pose_segmentation_mask\",(t=>{this.h.poseSegmentationMasks=[],Wo(this,t)}))),this.g.attachProtoListener(\"face_landmarks\",((t,e)=>{vc(t,this.h.faceLandmarks),Wo(this,e)})),this.g.attachEmptyPacketListener(\"face_landmarks\",(t=>{Wo(this,t)})),this.outputFaceBlendshapes&&($i(t,\"extra_blendshapes\"),Vi(r,\"FACE_BLENDSHAPES:extra_blendshapes\"),this.g.attachProtoListener(\"extra_blendshapes\",((t,e)=>{var n=this.h.faceBlendshapes;this.outputFaceBlendshapes&&(t=ns(t),n.push(Ao(t.g()??[]))),Wo(this,e)})),this.g.attachEmptyPacketListener(\"extra_blendshapes\",(t=>{Wo(this,t)}))),this.g.attachProtoListener(\"left_hand_landmarks\",((t,e)=>{vc(t,this.h.leftHandLandmarks),Wo(this,e)})),this.g.attachEmptyPacketListener(\"left_hand_landmarks\",(t=>{Wo(this,t)})),this.g.attachProtoListener(\"left_hand_world_landmarks\",((t,e)=>{var n=this.h.leftHandWorldLandmarks;t=cs(t),n.push(So(t)),Wo(this,e)})),this.g.attachEmptyPacketListener(\"left_hand_world_landmarks\",(t=>{Wo(this,t)})),this.g.attachProtoListener(\"right_hand_landmarks\",((t,e)=>{vc(t,this.h.rightHandLandmarks),Wo(this,e)})),this.g.attachEmptyPacketListener(\"right_hand_landmarks\",(t=>{Wo(this,t)})),this.g.attachProtoListener(\"right_hand_world_landmarks\",((t,e)=>{var n=this.h.rightHandWorldLandmarks;t=cs(t),n.push(So(t)),Wo(this,e)})),this.g.attachEmptyPacketListener(\"right_hand_world_landmarks\",(t=>{Wo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Ec.prototype.detectForVideo=Ec.prototype.F,Ec.prototype.detect=Ec.prototype.D,Ec.prototype.setOptions=Ec.prototype.o,Ec.createFromModelPath=function(t,e){return Xa(Ec,t,{baseOptions:{modelAssetPath:e}})},Ec.createFromModelBuffer=function(t,e){return Xa(Ec,t,{baseOptions:{modelAssetBuffer:e}})},Ec.createFromOptions=function(t,e){return Xa(Ec,t,e)},Ec.HAND_CONNECTIONS=hc,Ec.POSE_CONNECTIONS=mc,Ec.FACE_LANDMARKS_LIPS=qa,Ec.FACE_LANDMARKS_LEFT_EYE=Ja,Ec.FACE_LANDMARKS_LEFT_EYEBROW=Za,Ec.FACE_LANDMARKS_LEFT_IRIS=Qa,Ec.FACE_LANDMARKS_RIGHT_EYE=tc,Ec.FACE_LANDMARKS_RIGHT_EYEBROW=ec,Ec.FACE_LANDMARKS_RIGHT_IRIS=nc,Ec.FACE_LANDMARKS_FACE_OVAL=rc,Ec.FACE_LANDMARKS_CONTOURS=ic,Ec.FACE_LANDMARKS_TESSELATION=sc;var wc=class extends Ya{constructor(t,e){super(new Va(t,e),\"input_image\",\"norm_rect\",!0),this.j={classifications:[]},sn(t=this.h=new ao,0,1,e=new Ls)}get baseOptions(){return en(this.h,Ls,1)}set baseOptions(t){sn(this.h,0,1,t)}o(t){return sn(this.h,0,2,To(t,en(this.h,ws,2))),this.l(t)}sa(t,e){return this.j={classifications:[]},Wa(this,t,e),this.j}ta(t,e,n){return this.j={classifications:[]},za(this,t,n,e),this.j}m(){var t=new qi;Yi(t,\"input_image\"),Yi(t,\"norm_rect\"),$i(t,\"classifications\");const e=new Di;Xn(e,co,this.h);const n=new Xi;Gi(n,\"mediapipe.tasks.vision.image_classifier.ImageClassifierGraph\"),ji(n,\"IMAGE:input_image\"),ji(n,\"NORM_RECT:norm_rect\"),Vi(n,\"CLASSIFICATIONS:classifications\"),n.o(e),Ki(t,n),this.g.attachProtoListener(\"classifications\",((t,e)=>{this.j=function(t){const e={classifications:rn(t,ps,1).map((t=>Ao(en(t,ts,4)?.g()??[],un(t,2)??0,ln(t,3)??\"\")))};return null!=ie(Ce(t,2))&&(e.timestampMs=ie(Ce(t,2))??0),e}(gs(t)),Wo(this,e)})),this.g.attachEmptyPacketListener(\"classifications\",(t=>{Wo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};wc.prototype.classifyForVideo=wc.prototype.ta,wc.prototype.classify=wc.prototype.sa,wc.prototype.setOptions=wc.prototype.o,wc.createFromModelPath=function(t,e){return Xa(wc,t,{baseOptions:{modelAssetPath:e}})},wc.createFromModelBuffer=function(t,e){return Xa(wc,t,{baseOptions:{modelAssetBuffer:e}})},wc.createFromOptions=function(t,e){return Xa(wc,t,e)};var Tc=class extends Ya{constructor(t,e){super(new Va(t,e),\"image_in\",\"norm_rect\",!0),this.h=new ho,this.embeddings={embeddings:[]},sn(t=this.h,0,1,e=new Ls)}get baseOptions(){return en(this.h,Ls,1)}set baseOptions(t){sn(this.h,0,1,t)}o(t){var e=this.h,n=en(this.h,As,2);return n=n?n.clone():new As,void 0!==t.l2Normalize?fn(n,1,t.l2Normalize):\"l2Normalize\"in t&&De(n,1),void 0!==t.quantize?fn(n,2,t.quantize):\"quantize\"in t&&De(n,2),sn(e,0,2,n),this.l(t)}za(t,e){return Wa(this,t,e),this.embeddings}Aa(t,e,n){return za(this,t,n,e),this.embeddings}m(){var t=new qi;Yi(t,\"image_in\"),Yi(t,\"norm_rect\"),$i(t,\"embeddings_out\");const e=new Di;Xn(e,uo,this.h);const n=new Xi;Gi(n,\"mediapipe.tasks.vision.image_embedder.ImageEmbedderGraph\"),ji(n,\"IMAGE:image_in\"),ji(n,\"NORM_RECT:norm_rect\"),Vi(n,\"EMBEDDINGS:embeddings_out\"),n.o(e),Ki(t,n),this.g.attachProtoListener(\"embeddings_out\",((t,e)=>{t=Es(t),this.embeddings=function(t){return{embeddings:rn(t,_s,1).map((t=>{const e={headIndex:un(t,3)??0??-1,headName:ln(t,4)??\"\"??\"\"};if(void 0!==tn(t,ms,$e(t,1)))t=Ve(t=en(t,ms,$e(t,1)),1,$t,je()),e.floatEmbedding=t.slice();else{const n=new Uint8Array(0);e.quantizedEmbedding=en(t,ys,$e(t,2))?.oa()?.h()??n}return e})),timestampMs:ie(Ce(t,2))??0}}(t),Wo(this,e)})),this.g.attachEmptyPacketListener(\"embeddings_out\",(t=>{Wo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Tc.cosineSimilarity=function(t,e){if(t.floatEmbedding&&e.floatEmbedding)t=Lo(t.floatEmbedding,e.floatEmbedding);else{if(!t.quantizedEmbedding||!e.quantizedEmbedding)throw Error(\"Cannot compute cosine similarity between quantized and float embeddings.\");t=Lo(xo(t.quantizedEmbedding),xo(e.quantizedEmbedding))}return t},Tc.prototype.embedForVideo=Tc.prototype.Aa,Tc.prototype.embed=Tc.prototype.za,Tc.prototype.setOptions=Tc.prototype.o,Tc.createFromModelPath=function(t,e){return Xa(Tc,t,{baseOptions:{modelAssetPath:e}})},Tc.createFromModelBuffer=function(t,e){return Xa(Tc,t,{baseOptions:{modelAssetBuffer:e}})},Tc.createFromOptions=function(t,e){return Xa(Tc,t,e)};var Ac=class{constructor(t,e,n){this.confidenceMasks=t,this.categoryMask=e,this.qualityScores=n}close(){this.confidenceMasks?.forEach((t=>{t.close()})),this.categoryMask?.close()}};function bc(t){t.categoryMask=void 0,t.confidenceMasks=void 0,t.qualityScores=void 0}function kc(t){try{const e=new Ac(t.confidenceMasks,t.categoryMask,t.qualityScores);if(!t.j)return e;t.j(e)}finally{Yo(t)}}Ac.prototype.close=Ac.prototype.close;var Sc=class extends Ya{constructor(t,e){super(new Va(t,e),\"image_in\",\"norm_rect\",!1),this.s=[],this.outputCategoryMask=!1,this.outputConfidenceMasks=!0,this.h=new mo,this.v=new lo,sn(this.h,0,3,this.v),sn(t=this.h,0,1,e=new Ls)}get baseOptions(){return en(this.h,Ls,1)}set baseOptions(t){sn(this.h,0,1,t)}o(t){return void 0!==t.displayNamesLocale?De(this.h,2,ae(t.displayNamesLocale)):\"displayNamesLocale\"in t&&De(this.h,2),\"outputCategoryMask\"in t&&(this.outputCategoryMask=t.outputCategoryMask??!1),\"outputConfidenceMasks\"in t&&(this.outputConfidenceMasks=t.outputConfidenceMasks??!0),super.l(t)}I(){!function(t){const e=rn(t.da(),Xi,1).filter((t=>(ln(t,1)??\"\").includes(\"mediapipe.tasks.TensorsToSegmentationCalculator\")));if(t.s=[],e.length>1)throw Error(\"The graph has more than one mediapipe.tasks.TensorsToSegmentationCalculator.\");1===e.length&&(en(e[0],Di,7)?.l()?.g()??new Map).forEach(((e,n)=>{t.s[Number(n)]=ln(e,1)??\"\"}))}(this)}segment(t,e,n){const r=\"function\"!=typeof e?e:{};return this.j=\"function\"==typeof e?e:n,bc(this),Wa(this,t,r),kc(this)}Ma(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.j=\"function\"==typeof n?n:r,bc(this),za(this,t,i,e),kc(this)}Da(){return this.s}m(){var t=new qi;Yi(t,\"image_in\"),Yi(t,\"norm_rect\");const e=new Di;Xn(e,yo,this.h);const n=new Xi;Gi(n,\"mediapipe.tasks.vision.image_segmenter.ImageSegmenterGraph\"),ji(n,\"IMAGE:image_in\"),ji(n,\"NORM_RECT:norm_rect\"),n.o(e),Ki(t,n),zo(this,t),this.outputConfidenceMasks&&($i(t,\"confidence_masks\"),Vi(n,\"CONFIDENCE_MASKS:confidence_masks\"),Ko(this,\"confidence_masks\"),this.g.ca(\"confidence_masks\",((t,e)=>{this.confidenceMasks=t.map((t=>Ka(this,t,!0,!this.j))),Wo(this,e)})),this.g.attachEmptyPacketListener(\"confidence_masks\",(t=>{this.confidenceMasks=[],Wo(this,t)}))),this.outputCategoryMask&&($i(t,\"category_mask\"),Vi(n,\"CATEGORY_MASK:category_mask\"),Ko(this,\"category_mask\"),this.g.U(\"category_mask\",((t,e)=>{this.categoryMask=Ka(this,t,!1,!this.j),Wo(this,e)})),this.g.attachEmptyPacketListener(\"category_mask\",(t=>{this.categoryMask=void 0,Wo(this,t)}))),$i(t,\"quality_scores\"),Vi(n,\"QUALITY_SCORES:quality_scores\"),this.g.attachFloatVectorListener(\"quality_scores\",((t,e)=>{this.qualityScores=t,Wo(this,e)})),this.g.attachEmptyPacketListener(\"quality_scores\",(t=>{this.categoryMask=void 0,Wo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Sc.prototype.getLabels=Sc.prototype.Da,Sc.prototype.segmentForVideo=Sc.prototype.Ma,Sc.prototype.segment=Sc.prototype.segment,Sc.prototype.setOptions=Sc.prototype.o,Sc.createFromModelPath=function(t,e){return Xa(Sc,t,{baseOptions:{modelAssetPath:e}})},Sc.createFromModelBuffer=function(t,e){return Xa(Sc,t,{baseOptions:{modelAssetBuffer:e}})},Sc.createFromOptions=function(t,e){return Xa(Sc,t,e)};var xc=class{constructor(t,e,n){this.confidenceMasks=t,this.categoryMask=e,this.qualityScores=n}close(){this.confidenceMasks?.forEach((t=>{t.close()})),this.categoryMask?.close()}};xc.prototype.close=xc.prototype.close;var Lc=class extends Hn{constructor(t){super(t)}},Rc=[0,oi,-2],Fc=[0,Qr,-3,hi,Qr,-1],Ic=[0,Fc],Mc=[0,Fc,oi,-1],Pc=class extends Hn{constructor(t){super(t)}},Oc=[0,Qr,-1,hi],Cc=class extends Hn{constructor(t){super(t)}},Uc=class extends Hn{constructor(t){super(t)}},Dc=[1,2,3,4,5,6,7,8,9,10,14,15],Nc=class extends Hn{constructor(t){super(t)}};Nc.prototype.g=Ai([0,pi,[0,Dc,gi,Fc,gi,[0,Fc,Rc],gi,Ic,gi,[0,Ic,Rc],gi,Oc,gi,[0,Qr,-3,hi,vi],gi,[0,Qr,-3,hi],gi,[0,fi,Qr,-2,hi,oi,hi,-1,2,Qr,Rc],gi,Mc,gi,[0,Mc,Rc],Qr,Rc,fi,gi,[0,Qr,-3,hi,Rc,-1],gi,[0,pi,Oc]],fi,[0,fi,oi,-1,hi]]);var Bc=class extends Ya{constructor(t,e){super(new Va(t,e),\"image_in\",\"norm_rect_in\",!1),this.outputCategoryMask=!1,this.outputConfidenceMasks=!0,this.h=new mo,this.s=new lo,sn(this.h,0,3,this.s),sn(t=this.h,0,1,e=new Ls)}get baseOptions(){return en(this.h,Ls,1)}set baseOptions(t){sn(this.h,0,1,t)}o(t){return\"outputCategoryMask\"in t&&(this.outputCategoryMask=t.outputCategoryMask??!1),\"outputConfidenceMasks\"in t&&(this.outputConfidenceMasks=t.outputConfidenceMasks??!0),super.l(t)}segment(t,e,n,r){const i=\"function\"!=typeof n?n:{};this.j=\"function\"==typeof n?n:r,this.qualityScores=this.categoryMask=this.confidenceMasks=void 0,n=this.B+1,r=new Nc;const s=new Uc;var o=new Lc;if(pn(o,1,255),sn(s,0,12,o),e.keypoint&&e.scribble)throw Error(\"Cannot provide both keypoint and scribble.\");if(e.keypoint){var a=new Pc;fn(a,3,!0),gn(a,1,e.keypoint.x),gn(a,2,e.keypoint.y),on(s,5,Dc,a)}else{if(!e.scribble)throw Error(\"Must provide either a keypoint or a scribble.\");for(a of(o=new Cc,e.scribble))fn(e=new Pc,3,!0),gn(e,1,a.x),gn(e,2,a.y),hn(o,1,Pc,e);on(s,15,Dc,o)}hn(r,1,Uc,s),this.g.addProtoToStream(r.g(),\"drishti.RenderData\",\"roi_in\",n),Wa(this,t,i);t:{try{const t=new xc(this.confidenceMasks,this.categoryMask,this.qualityScores);if(!this.j){var c=t;break t}this.j(t)}finally{Yo(this)}c=void 0}return c}m(){var t=new qi;Yi(t,\"image_in\"),Yi(t,\"roi_in\"),Yi(t,\"norm_rect_in\");const e=new Di;Xn(e,yo,this.h);const n=new Xi;Gi(n,\"mediapipe.tasks.vision.interactive_segmenter.InteractiveSegmenterGraph\"),ji(n,\"IMAGE:image_in\"),ji(n,\"ROI:roi_in\"),ji(n,\"NORM_RECT:norm_rect_in\"),n.o(e),Ki(t,n),zo(this,t),this.outputConfidenceMasks&&($i(t,\"confidence_masks\"),Vi(n,\"CONFIDENCE_MASKS:confidence_masks\"),Ko(this,\"confidence_masks\"),this.g.ca(\"confidence_masks\",((t,e)=>{this.confidenceMasks=t.map((t=>Ka(this,t,!0,!this.j))),Wo(this,e)})),this.g.attachEmptyPacketListener(\"confidence_masks\",(t=>{this.confidenceMasks=[],Wo(this,t)}))),this.outputCategoryMask&&($i(t,\"category_mask\"),Vi(n,\"CATEGORY_MASK:category_mask\"),Ko(this,\"category_mask\"),this.g.U(\"category_mask\",((t,e)=>{this.categoryMask=Ka(this,t,!1,!this.j),Wo(this,e)})),this.g.attachEmptyPacketListener(\"category_mask\",(t=>{this.categoryMask=void 0,Wo(this,t)}))),$i(t,\"quality_scores\"),Vi(n,\"QUALITY_SCORES:quality_scores\"),this.g.attachFloatVectorListener(\"quality_scores\",((t,e)=>{this.qualityScores=t,Wo(this,e)})),this.g.attachEmptyPacketListener(\"quality_scores\",(t=>{this.categoryMask=void 0,Wo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Bc.prototype.segment=Bc.prototype.segment,Bc.prototype.setOptions=Bc.prototype.o,Bc.createFromModelPath=function(t,e){return Xa(Bc,t,{baseOptions:{modelAssetPath:e}})},Bc.createFromModelBuffer=function(t,e){return Xa(Bc,t,{baseOptions:{modelAssetBuffer:e}})},Bc.createFromOptions=function(t,e){return Xa(Bc,t,e)};var Gc=class extends Ya{constructor(t,e){super(new Va(t,e),\"input_frame_gpu\",\"norm_rect\",!1),this.j={detections:[]},sn(t=this.h=new _o,0,1,e=new Ls)}get baseOptions(){return en(this.h,Ls,1)}set baseOptions(t){sn(this.h,0,1,t)}o(t){return void 0!==t.displayNamesLocale?De(this.h,2,ae(t.displayNamesLocale)):\"displayNamesLocale\"in t&&De(this.h,2),void 0!==t.maxResults?pn(this.h,3,t.maxResults):\"maxResults\"in t&&De(this.h,3),void 0!==t.scoreThreshold?gn(this.h,4,t.scoreThreshold):\"scoreThreshold\"in t&&De(this.h,4),void 0!==t.categoryAllowlist?mn(this.h,5,t.categoryAllowlist):\"categoryAllowlist\"in t&&De(this.h,5),void 0!==t.categoryDenylist?mn(this.h,6,t.categoryDenylist):\"categoryDenylist\"in t&&De(this.h,6),this.l(t)}D(t,e){return this.j={detections:[]},Wa(this,t,e),this.j}F(t,e,n){return this.j={detections:[]},za(this,t,n,e),this.j}m(){var t=new qi;Yi(t,\"input_frame_gpu\"),Yi(t,\"norm_rect\"),$i(t,\"detections\");const e=new Di;Xn(e,vo,this.h);const n=new Xi;Gi(n,\"mediapipe.tasks.vision.ObjectDetectorGraph\"),ji(n,\"IMAGE:input_frame_gpu\"),ji(n,\"NORM_RECT:norm_rect\"),Vi(n,\"DETECTIONS:detections\"),n.o(e),Ki(t,n),this.g.attachProtoVectorListener(\"detections\",((t,e)=>{for(const e of t)t=os(e),this.j.detections.push(bo(t));Wo(this,e)})),this.g.attachEmptyPacketListener(\"detections\",(t=>{Wo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Gc.prototype.detectForVideo=Gc.prototype.F,Gc.prototype.detect=Gc.prototype.D,Gc.prototype.setOptions=Gc.prototype.o,Gc.createFromModelPath=async function(t,e){return Xa(Gc,t,{baseOptions:{modelAssetPath:e}})},Gc.createFromModelBuffer=function(t,e){return Xa(Gc,t,{baseOptions:{modelAssetBuffer:e}})},Gc.createFromOptions=function(t,e){return Xa(Gc,t,e)};var jc=class{constructor(t,e,n){this.landmarks=t,this.worldLandmarks=e,this.segmentationMasks=n}close(){this.segmentationMasks?.forEach((t=>{t.close()}))}};function Vc(t){t.landmarks=[],t.worldLandmarks=[],t.segmentationMasks=void 0}function Xc(t){try{const e=new jc(t.landmarks,t.worldLandmarks,t.segmentationMasks);if(!t.s)return e;t.s(e)}finally{Yo(t)}}jc.prototype.close=jc.prototype.close;var Hc=class extends Ya{constructor(t,e){super(new Va(t,e),\"image_in\",\"norm_rect\",!1),this.landmarks=[],this.worldLandmarks=[],this.outputSegmentationMasks=!1,sn(t=this.h=new Eo,0,1,e=new Ls),this.v=new ro,sn(this.h,0,3,this.v),this.j=new no,sn(this.h,0,2,this.j),pn(this.j,4,1),gn(this.j,2,.5),gn(this.v,2,.5),gn(this.h,4,.5)}get baseOptions(){return en(this.h,Ls,1)}set baseOptions(t){sn(this.h,0,1,t)}o(t){return\"numPoses\"in t&&pn(this.j,4,t.numPoses??1),\"minPoseDetectionConfidence\"in t&&gn(this.j,2,t.minPoseDetectionConfidence??.5),\"minTrackingConfidence\"in t&&gn(this.h,4,t.minTrackingConfidence??.5),\"minPosePresenceConfidence\"in t&&gn(this.v,2,t.minPosePresenceConfidence??.5),\"outputSegmentationMasks\"in t&&(this.outputSegmentationMasks=t.outputSegmentationMasks??!1),this.l(t)}D(t,e,n){const r=\"function\"!=typeof e?e:{};return this.s=\"function\"==typeof e?e:n,Vc(this),Wa(this,t,r),Xc(this)}F(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.s=\"function\"==typeof n?n:r,Vc(this),za(this,t,i,e),Xc(this)}m(){var t=new qi;Yi(t,\"image_in\"),Yi(t,\"norm_rect\"),$i(t,\"normalized_landmarks\"),$i(t,\"world_landmarks\"),$i(t,\"segmentation_masks\");const e=new Di;Xn(e,wo,this.h);const n=new Xi;Gi(n,\"mediapipe.tasks.vision.pose_landmarker.PoseLandmarkerGraph\"),ji(n,\"IMAGE:image_in\"),ji(n,\"NORM_RECT:norm_rect\"),Vi(n,\"NORM_LANDMARKS:normalized_landmarks\"),Vi(n,\"WORLD_LANDMARKS:world_landmarks\"),n.o(e),Ki(t,n),zo(this,t),this.g.attachProtoVectorListener(\"normalized_landmarks\",((t,e)=>{this.landmarks=[];for(const e of t)t=us(e),this.landmarks.push(ko(t));Wo(this,e)})),this.g.attachEmptyPacketListener(\"normalized_landmarks\",(t=>{this.landmarks=[],Wo(this,t)})),this.g.attachProtoVectorListener(\"world_landmarks\",((t,e)=>{this.worldLandmarks=[];for(const e of t)t=cs(e),this.worldLandmarks.push(So(t));Wo(this,e)})),this.g.attachEmptyPacketListener(\"world_landmarks\",(t=>{this.worldLandmarks=[],Wo(this,t)})),this.outputSegmentationMasks&&(Vi(n,\"SEGMENTATION_MASK:segmentation_masks\"),Ko(this,\"segmentation_masks\"),this.g.ca(\"segmentation_masks\",((t,e)=>{this.segmentationMasks=t.map((t=>Ka(this,t,!0,!this.s))),Wo(this,e)})),this.g.attachEmptyPacketListener(\"segmentation_masks\",(t=>{this.segmentationMasks=[],Wo(this,t)}))),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Hc.prototype.detectForVideo=Hc.prototype.F,Hc.prototype.detect=Hc.prototype.D,Hc.prototype.setOptions=Hc.prototype.o,Hc.createFromModelPath=function(t,e){return Xa(Hc,t,{baseOptions:{modelAssetPath:e}})},Hc.createFromModelBuffer=function(t,e){return Xa(Hc,t,{baseOptions:{modelAssetBuffer:e}})},Hc.createFromOptions=function(t,e){return Xa(Hc,t,e)},Hc.POSE_CONNECTIONS=mc;export{La as DrawingUtils,$a as FaceDetector,ac as FaceLandmarker,cc as FaceStylizer,Po as FilesetResolver,fc as GestureRecognizer,gc as HandLandmarker,Ec as HolisticLandmarker,wc as ImageClassifier,Tc as ImageEmbedder,Sc as ImageSegmenter,Ac as ImageSegmenterResult,Bc as InteractiveSegmenter,xc as InteractiveSegmenterResult,Da as MPImage,ya as MPMask,Gc as ObjectDetector,Hc as PoseLandmarker,Ya as VisionTaskRunner};\n//# sourceMappingURL=vision_bundle_mjs.js.map\n", "import { FilesetResolver, FaceDetector, ObjectDetector } from \"@mediapipe/tasks-vision\";\r\nimport IParamsConfig from \"../interfaces/ParamsConfig\";\r\n\r\nexport class BaseDetection {\r\n options: { onRealtimeAlertsCallback?: (response: any) => void } = {\r\n onRealtimeAlertsCallback: (response: any) => {},\r\n };\r\n error: any;\r\n video: HTMLMediaElement | null;\r\n liveView: HTMLElement | null;\r\n children: any = [];\r\n detector: any;\r\n runningMode: any | undefined = \"VIDEO\";\r\n animationFrameId: any;\r\n classVideo: string;\r\n classDiv: string;\r\n detecting: boolean = false;\r\n paramsConfig: IParamsConfig;\r\n detectorType: string;\r\n modelAssetPath: string;\r\n createdVideo: boolean = false;\r\n startTime: Date | undefined;\r\n\r\n constructor(\r\n detectorType: any,\r\n modelAssetPath: string,\r\n options?: { onRealtimeAlertsCallback?: (response: any) => void },\r\n paramsConfig?: IParamsConfig,\r\n classVideo: string = 'videoPreviewFrameDetection',\r\n classDiv: string = \"liveViewFrameDetection\"\r\n ) {\r\n // this.initializeDetector(detectorType, modelAssetPath);\r\n\r\n this.detectorType = detectorType;\r\n this.modelAssetPath = modelAssetPath;\r\n\r\n this.classVideo = classVideo;\r\n this.classDiv = classDiv;\r\n\r\n paramsConfig && (this.paramsConfig = paramsConfig);\r\n options && (this.options = options);\r\n }\r\n\r\n async initializeDetector() {\r\n const vision = await FilesetResolver.forVisionTasks(\"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.2/wasm\");\r\n this.detector = await (this.detectorType === \"FaceDetector\" ? FaceDetector : ObjectDetector).createFromOptions(vision, {\r\n baseOptions: {\r\n modelAssetPath: this.modelAssetPath,\r\n delegate: \"CPU\"\r\n },\r\n scoreThreshold: this.detectorType === \"ObjectDetector\" ? 0.5 : 0, // objectDetection\r\n runningMode: this.runningMode\r\n });\r\n }\r\n\r\n stopDetection() {\r\n // window.cancelAnimationFrame(this.animationFrameId);\r\n this.animationFrameId && clearTimeout(this.animationFrameId);\r\n this.detecting = false;\r\n\r\n this.liveView = document.getElementById(this.classDiv);\r\n this.liveView && this.classDiv === \"liveViewFrameDetection\" && document.body.removeChild(this.liveView);\r\n\r\n this.createdVideo && this.video && document.body.removeChild(this.video);\r\n this.createdVideo = false;\r\n }\r\n\r\n enableCam(cameraStream?: MediaProvider | null | undefined) {\r\n if (!this.detector) {\r\n console.log(\"Wait! Detector not loaded yet.\");\r\n return;\r\n }\r\n\r\n this.detecting = true;\r\n\r\n this.error = document.getElementById(\"errorFrameDetection\") as HTMLMediaElement;\r\n this.video = document.getElementById(this.classVideo) as HTMLMediaElement;\r\n this.liveView = document.getElementById(this.classDiv);\r\n\r\n if (!this.video) {\r\n this.video = document.createElement(\"video\");\r\n this.video.setAttribute(\"id\", this.classVideo);\r\n this.video.setAttribute(\"style\", `\r\n width: 20rem; \r\n border-radius: 10px;\r\n position: absolute;\r\n top: 0;\r\n display: none;\r\n `);\r\n this.video.muted = true;\r\n document.body.appendChild(this.video);\r\n this.createdVideo = true;\r\n }\r\n\r\n cameraStream && !this.video!.srcObject && (this.video!.srcObject = cameraStream);\r\n this.video!.play();\r\n this.startTime = new Date(Date.now());\r\n\r\n const that = this;\r\n this.video?.addEventListener(\"loadeddata\", () => that.predictWebcam());\r\n\r\n // Add style\r\n const style = document.createElement('style');\r\n style.type = 'text/css';\r\n style.innerHTML = `\r\n .key-point { \r\n position: absolute;\r\n z-index: 1;\r\n width: 3px;\r\n height: 3px;\r\n background-color: #ff0000;\r\n /* border: 1px solid #ffffff; */\r\n border-radius: 50%;\r\n display: block; \r\n }\r\n `;\r\n document.getElementsByTagName('head')[0].appendChild(style);\r\n }\r\n\r\n lastVideoTime = -1;\r\n lastExecutionDate = Date.now();\r\n async predictWebcam() {\r\n if (this.lastVideoTime === -1) {\r\n await this.detector.setOptions({ runningMode: \"VIDEO\" });\r\n }\r\n // de 1 em 1 segundo\r\n const millis = Date.now() - this.lastExecutionDate;\r\n if(millis >= 1000) {\r\n const startTimeMs = Date.now();\r\n this.lastExecutionDate = startTimeMs;\r\n // console.log(startTimeMs);\r\n\r\n if (this.video!.currentTime !== this.lastVideoTime) {\r\n this.lastVideoTime = this.video!.currentTime;\r\n const detections = this.detector.detectForVideo(this.video, startTimeMs);\r\n \r\n // Mostrar no v\u00EDdeo marca\u00E7\u00F5es\r\n // TODO: Comentar para n\u00E3o aparecer marca\u00E7\u00F5es no v\u00EDdeo\r\n // this.displayVideoDetections(detections);\r\n \r\n // Verificar alertas\r\n this.verify(detections);\r\n }\r\n }\r\n // this.animationFrameId = window.requestAnimationFrame(() => this.predictWebcam());\r\n this.animationFrameId = setTimeout(() => {\r\n this.predictWebcam();\r\n }, 0);\r\n }\r\n\r\n handleAlert(description: string, type: string) {\r\n // console.log({\r\n // status: 'ALERT',\r\n // description: this.alertTranslate(description),\r\n // type\r\n // });\r\n this.options.onRealtimeAlertsCallback && this.options.onRealtimeAlertsCallback({\r\n status: 'ALERT',\r\n description: this.alertTranslate(description),\r\n type,\r\n category: description,\r\n begin: Date.now() - this.startTime!.getTime(),\r\n end: Date.now() - this.startTime!.getTime()\r\n });\r\n if(this.options.onRealtimeAlertsCallback == null)\r\n this.error && (this.error.innerText = description);\r\n }\r\n\r\n handleOk(description: string, type: string) {\r\n // console.log({\r\n // status: 'OK',\r\n // type\r\n // });\r\n this.options.onRealtimeAlertsCallback && this.options.onRealtimeAlertsCallback({\r\n status: 'OK',\r\n description: this.alertTranslate(description),\r\n type,\r\n category: description,\r\n begin: Date.now() - this.startTime!.getTime(),\r\n end: Date.now() - this.startTime!.getTime()\r\n });\r\n this.error && (this.error.innerText = '');\r\n }\r\n\r\n displayVideoDetections(result: { detections: any; }) {\r\n // Implementation specific to each type of detector (Face or Object)\r\n // Override this method in the subclasses.\r\n }\r\n\r\n verify(result: { detections: any; }) {\r\n // Implementation specific to each type of detector (Face or Object)\r\n // Override this method in the subclasses.\r\n }\r\n\r\n alertTranslate(description: string) {\r\n switch(description) {\r\n case 'multiple_faces_detected':\r\n return 'M\u00FAltiplas faces detectadas';\r\n case 'no_face_detected':\r\n return 'Nenhuma face encontrada';\r\n case 'multiple_persons_detected':\r\n return 'M\u00FAltiplas pessoas detectadas';\r\n case 'no_person_detected':\r\n return 'Nenhuma pessoa encontrada';\r\n case 'cellphone_detected':\r\n return 'Celular detectado';\r\n case 'wrong_position_face_detected':\r\n return 'Face na posi\u00E7\u00E3o errada';\r\n case 'person_ok':\r\n return 'Pessoa detectada';\r\n case 'cellphone_ok':\r\n return 'Nenhum celular detectadoa';\r\n case 'face_ok':\r\n return 'Face detectada';\r\n case 'ok_position_face_detected':\r\n return 'Face na posi\u00E7\u00E3o correta';\r\n case 'wrong_face_size_detected':\r\n return 'Face muito perto da c\u00E2mera, afaste-se um pouco mais';\r\n case 'wrong_face_position_edge_detected':\r\n return 'Face muito pr\u00F3xima da borda, mova-se para o centro da tela';\r\n case 'wrong_face_position_move_right_detected':\r\n return 'Face n\u00E3o centralizada, mova-se para a direita';\r\n case 'wrong_face_position_move_left_detected':\r\n return 'Face n\u00E3o centralizada, mova-se para a esquerda';\r\n case 'wrong_face_position_move_top_detected':\r\n return 'Face n\u00E3o centralizada, mova-se para cima';\r\n case 'wrong_face_position_move_bottom_detected':\r\n return 'Face n\u00E3o centralizada, mova-se para baixo';\r\n case 'face_turned_left_detected':\r\n return 'Face virada para a esquerda, centralize-a';\r\n case 'face_turned_right_detected':\r\n return 'Face virada para a direita, centralize-a';\r\n case 'face_turned_up_detected':\r\n return 'Face virada para cima, centralize-a';\r\n case 'face_turned_down_detected':\r\n return 'Face virada para baixo, centralize-a';\r\n default:\r\n return description;\r\n }\r\n }\r\n}\r\n\r\nexport function buildVideoPreview() {\r\n // Create video tag and div for detectors\r\n const liveView = document.createElement(\"div\");\r\n liveView.setAttribute(\"id\", \"liveViewFrameDetection\");\r\n const error = document.createElement(\"erro\");\r\n error.setAttribute(\"id\", \"errorFrameDetection\");\r\n const video = document.createElement(\"video\");\r\n video.setAttribute(\"id\", \"videoPreviewFrameDetection\");\r\n video.muted = true;\r\n\r\n liveView.style.width = \"320px\";\r\n liveView.style.height = \"180px\";\r\n liveView.style.position = \"fixed\";\r\n liveView.style.bottom = \"30px\";\r\n liveView.style.right = \"30px\";\r\n liveView.style.display = \"none\";\r\n\r\n video.style.width = \"100%\";\r\n video.style.height = \"100%\";\r\n video.style.background = \"#000\";\r\n\r\n liveView.appendChild(error);\r\n liveView.appendChild(video);\r\n document.body.appendChild(liveView);\r\n}", "import {\r\n FaceDetector,\r\n FilesetResolver,\r\n Detection,\r\n} from \"@mediapipe/tasks-vision\";\r\nimport IParamsConfig from \"../interfaces/ParamsConfig\";\r\nimport { BaseDetection } from \"./BaseDetection\";\r\n\r\nexport class FaceDetection extends BaseDetection {\r\n constructor(\r\n options?: { onRealtimeAlertsCallback?: (response: any) => void },\r\n paramsConfig?: IParamsConfig,\r\n classVideo: string = \"videoPreviewFrameDetection\",\r\n classDiv: string = \"liveViewFrameDetection\",\r\n ) {\r\n super(\r\n \"FaceDetector\",\r\n `https://storage.googleapis.com/mediapipe-models/face_detector/blaze_face_short_range/float16/1/blaze_face_short_range.tflite`,\r\n options,\r\n paramsConfig,\r\n classVideo,\r\n classDiv,\r\n );\r\n }\r\n\r\n stopDetection(): void {\r\n super.stopDetection();\r\n\r\n // verificar se tem algum alerta ativo e chamar o 'OK'\r\n if (this.emmitedFaceAlert) {\r\n this.handleOk(\"face_ok\", \"face_detection_on_stream\");\r\n }\r\n }\r\n\r\n // displayVideoDetections(result: { detections: any; }) {\r\n // // console.log(result);\r\n // // Remove any highlighting from previous frame.\r\n // for (const child of this.children) {\r\n // this.liveView!.removeChild(child);\r\n // }\r\n // this.children.splice(0);\r\n // // Iterate through predictions and draw them to the live view\r\n // for (const detection of result.detections) {\r\n // // Dimens\u00F5es do monitor\r\n // const monitorWidth = window.innerWidth; // Obt\u00E9m a largura do monitor\r\n // const monitorHeight = window.innerHeight; // Obt\u00E9m a altura do monitor\r\n\r\n // // Dimens\u00F5es do elemento this.video!\r\n // const desiredWidth = this.video!.offsetWidth;\r\n // const desiredHeight = this.video!.offsetHeight;\r\n\r\n // // Fatores de escala\r\n // const widthScaleFactor = desiredWidth / monitorWidth;\r\n // const heightScaleFactor = desiredHeight / monitorHeight;\r\n\r\n // // Ajuste dos valores proporcionais\r\n // const adjustedLeft = (desiredWidth - detection.boundingBox.width * widthScaleFactor - detection.boundingBox.originX * widthScaleFactor);\r\n // const adjustedTop = detection.boundingBox.originY * heightScaleFactor;\r\n // const adjustedWidth = (detection.boundingBox.width - 10) * widthScaleFactor;\r\n // const adjustedHeight = detection.boundingBox.height * heightScaleFactor;\r\n\r\n // const p = document.createElement(\"p\");\r\n // p.innerText =\r\n // \"Confidence: \" +\r\n // Math.round(parseFloat(detection.categories[0].score) * 100) +\r\n // \"% .\";\r\n\r\n // p.style.right = adjustedLeft + \"px\";\r\n // p.style.top = adjustedTop - 50 + \"px\";\r\n // p.style.width = adjustedWidth +\"px\";\r\n\r\n // const commonStyle = {\r\n // zIndex: \"2\",\r\n // position: \"absolute\",\r\n // border: \"1px dashed #fff\",\r\n // transform: \"scaleX(-1)\",\r\n // };\r\n\r\n // Object.assign(p.style, {\r\n // ...commonStyle,\r\n // margin: \"0\",\r\n // fontSize: \"9px\",\r\n // paddingBottom: \"5px\",\r\n // paddingTop: \"5px\",\r\n // color: \"#fff\",\r\n // backgroundColor: \"#007f8b\",\r\n // });\r\n\r\n // const highlighter = document.createElement(\"div\");\r\n // highlighter.setAttribute(\"class\", \"highlighter\");\r\n\r\n // highlighter.style.right = adjustedLeft+ \"px\";\r\n // highlighter.style.top = adjustedTop + \"px\";\r\n // highlighter.style.width = adjustedWidth + \"px\";\r\n // highlighter.style.height = adjustedHeight - 10 + \"px\";\r\n\r\n // Object.assign(highlighter.style, {\r\n // ...commonStyle,\r\n // zIndex: \"1\",\r\n // background: \"rgba(0, 255, 0, 0.25)\",\r\n // });\r\n\r\n // // Mostrar Marca\u00E7\u00F5es na tela\r\n // this.liveView!.appendChild(highlighter);\r\n // this.liveView!.appendChild(p);\r\n // this.children.push(highlighter);\r\n // this.children.push(p);\r\n\r\n // // Mostrar Marca\u00E7\u00F5es no rosto\r\n // for (const keypoint of detection.keypoints) {\r\n // // for (const [index, keypoint] of detection.keypoints.entries()) {\r\n // const keypointEl = document.createElement(\"span\");\r\n // // keypointEl.innerText = index;\r\n // keypointEl.className = \"key-point\";\r\n // keypointEl.style.top = `${keypoint.y * this.video!.offsetHeight - 3}px`;\r\n // keypointEl.style.right = `${\r\n // this.video!.offsetWidth - keypoint.x * this.video!.offsetWidth - 3\r\n // }px`;\r\n // this.liveView!.appendChild(keypointEl);\r\n // this.children.push(keypointEl);\r\n // }\r\n // }\r\n // }\r\n\r\n displayVideoDetections(result: { detections: any }) {\r\n // 1. Limpa desenhos anteriores\r\n for (const child of this.children) {\r\n this.liveView!.removeChild(child);\r\n }\r\n this.children.splice(0);\r\n\r\n // --- PREPARA\u00C7\u00C3O DA MATEM\u00C1TICA ---\r\n // Precisamos tratar o elemento como Video para pegar a resolu\u00E7\u00E3o real da c\u00E2mera\r\n const videoElement = this.video as HTMLVideoElement;\r\n\r\n if (videoElement.videoWidth === 0 || videoElement.videoHeight === 0) return;\r\n\r\n const scaleX = videoElement.offsetWidth / videoElement.videoWidth;\r\n const scaleY = videoElement.offsetHeight / videoElement.videoHeight;\r\n\r\n for (const detection of result.detections) {\r\n const box = detection.boundingBox;\r\n\r\n // --- C\u00C1LCULO DE POSI\u00C7\u00C3O (ESPELHAMENTO MANUAL) ---\r\n // Como a webcam \u00E9 espelhada visualmente, precisamos inverter o eixo X matematicamente.\r\n // F\u00F3rmula: (LarguraTotal - Posi\u00E7\u00E3oX - LarguraBox) * Escala\r\n\r\n const mirroredX = videoElement.videoWidth - box.originX - box.width;\r\n\r\n // Posi\u00E7\u00F5es finais convertidas para a tela\r\n const finalLeft = mirroredX * scaleX;\r\n const finalTop = box.originY * scaleY;\r\n const finalWidth = (box.width - 10) * scaleX; // Mantive seu ajuste de -10\r\n const finalHeight = box.height * scaleY;\r\n\r\n // --- 1. CONFIGURA\u00C7\u00C3O DA CAIXA (HIGHLIGHTER) ---\r\n const highlighter = document.createElement(\"div\");\r\n highlighter.setAttribute(\"class\", \"highlighter\");\r\n\r\n Object.assign(highlighter.style, {\r\n right: `${finalLeft + 20}px`, // Usamos LEFT, \u00E9 mais f\u00E1cil calcular que RIGHT\r\n top: `${finalTop}px`,\r\n width: `${finalWidth}px`,\r\n height: `${finalHeight - 10}px`,\r\n zIndex: \"1\",\r\n position: \"absolute\",\r\n border: \"1px dashed #fff\",\r\n background: \"rgba(0, 255, 0, 0.25)\",\r\n transform: \"scaleX(-1)\", // Espelhamento horizontal para compensar o espelhamento da c\u00E2mera\r\n });\r\n\r\n // --- 2. CONFIGURA\u00C7\u00C3O DO TEXTO ---\r\n const p = document.createElement(\"p\");\r\n const score = detection.categories[0].score\r\n ? Math.round(parseFloat(detection.categories[0].score) * 100)\r\n : 0;\r\n\r\n p.innerText = `Confidence: ${score}%`;\r\n\r\n Object.assign(p.style, {\r\n right: `${finalLeft + 20}px`,\r\n top: `${finalTop - 50}px`, // Ajuste para ficar acima da caixa\r\n width: `${finalWidth}px`,\r\n zIndex: \"2\",\r\n position: \"absolute\",\r\n margin: \"0\",\r\n fontSize: \"12px\", // Aumentei um pouco para leitura\r\n padding: \"5px\",\r\n color: \"#fff\",\r\n backgroundColor: \"#007f8b\",\r\n textAlign: \"center\", // Centraliza o texto na caixa\r\n transform: \"scaleX(-1)\",\r\n });\r\n\r\n this.liveView!.appendChild(highlighter);\r\n this.liveView!.appendChild(p);\r\n this.children.push(highlighter);\r\n this.children.push(p);\r\n\r\n // --- 3. CONFIGURA\u00C7\u00C3O DOS PONTOS (KEYPOINTS) ---\r\n if (detection.keypoints) {\r\n for (const keypoint of detection.keypoints) {\r\n const keypointEl = document.createElement(\"span\");\r\n keypointEl.className = \"key-point\";\r\n\r\n // Normaliza\u00E7\u00E3o segura: Se o valor for < 2, \u00E9 normalizado (0 a 1). Se for maior, \u00E9 pixel.\r\n const kpX =\r\n keypoint.x < 2 ? keypoint.x * videoElement.videoWidth : keypoint.x;\r\n const kpY =\r\n keypoint.y < 2 ? keypoint.y * videoElement.videoHeight : keypoint.y;\r\n\r\n // Espelhamento do ponto: Largura - X\r\n const mirroredKpX = videoElement.videoWidth - kpX;\r\n\r\n // Aplica a escala para a tela\r\n const screenX = mirroredKpX * scaleX;\r\n const screenY = kpY * scaleY;\r\n\r\n Object.assign(keypointEl.style, {\r\n right: `${screenX + 20}px`, // -3 para centralizar o ponto\r\n top: `${screenY - 3}px`,\r\n position: \"absolute\",\r\n width: \"6px\",\r\n height: \"6px\",\r\n borderRadius: \"50%\",\r\n backgroundColor: \"red\",\r\n zIndex: \"3\",\r\n });\r\n\r\n this.liveView!.appendChild(keypointEl);\r\n this.children.push(keypointEl);\r\n }\r\n }\r\n }\r\n }\r\n\r\n numFacesSent: number;\r\n emmitedPositionAlert: boolean = false;\r\n emmitedFaceAlert: boolean = false;\r\n verify(result: { detections: any }) {\r\n if (\r\n this.paramsConfig.videoBehaviourParameters?.detectFace &&\r\n result.detections.length !== this.numFacesSent\r\n ) {\r\n this.numFacesSent = result.detections.length;\r\n\r\n if (result.detections.length === 0) {\r\n this.handleAlert(\"no_face_detected\", \"face_detection_on_stream\");\r\n this.emmitedFaceAlert = true;\r\n return;\r\n } else if (result.detections.length > 1) {\r\n this.handleAlert(\"multiple_faces_detected\", \"face_detection_on_stream\");\r\n this.emmitedFaceAlert = true;\r\n return;\r\n } else {\r\n this.handleOk(\"face_ok\", \"face_detection_on_stream\");\r\n this.emmitedFaceAlert = false;\r\n }\r\n }\r\n\r\n // for (let detection of result.detections) {\r\n // console.log(detection.boundingBox.width, detection.boundingBox.height);\r\n // console.log(detection.boundingBox.originX, detection.boundingBox.originY);\r\n // }\r\n\r\n if (result.detections.length === 0) return;\r\n\r\n let failedFacePosition = false;\r\n\r\n // Dimens\u00F5es do elemento this.video!\r\n const video = document.getElementById(this.classVideo) as HTMLVideoElement;\r\n const imageWidth = video!.videoWidth;\r\n const imageHeight = video!.videoHeight;\r\n\r\n const detection = result.detections[0];\r\n const face = detection.boundingBox;\r\n const keypoints = detection.keypoints;\r\n\r\n // KEYPOINTS INDEX (Padr\u00E3o MediaPipe Face Detection):\r\n // 0: Right Eye, 1: Left Eye, 2: Nose Tip, 3: Mouth Center\r\n // 4: Right Ear (Tragus), 5: Left Ear (Tragus)\r\n\r\n const rightEye = keypoints[0];\r\n const leftEye = keypoints[1];\r\n const mouth = keypoints[3];\r\n const rightEar = keypoints[4];\r\n const leftEar = keypoints[5];\r\n const nose = keypoints[2];\r\n\r\n // console.log(imageWidth, imageHeight);\r\n // console.log(face.width, face.height);\r\n\r\n // Verifica\u00E7\u00E3o do tamanho da face\r\n if (imageWidth > imageHeight)\r\n if (face.height / imageHeight > 0.7) {\r\n !this.emmitedPositionAlert &&\r\n this.handleAlert(\r\n \"wrong_face_size_detected\",\r\n \"position_detection_on_stream\",\r\n );\r\n failedFacePosition = true;\r\n this.emmitedPositionAlert = true;\r\n } else if (face.width / imageWidth > 0.7) {\r\n !this.emmitedPositionAlert &&\r\n this.handleAlert(\r\n \"wrong_face_size_detected\",\r\n \"position_detection_on_stream\",\r\n );\r\n this.emmitedPositionAlert = true;\r\n failedFacePosition = true;\r\n }\r\n\r\n // Verifica\u00E7\u00E3o de proximidade da borda\r\n const start = [face.originX, face.originY];\r\n const end = [face.originX + face.width, face.originY + face.height];\r\n if (\r\n start[0] < 0.1 * face.width ||\r\n start[1] < 0.2 * face.height ||\r\n end[0] > imageWidth - 0.1 * face.width ||\r\n end[1] > imageHeight - 5\r\n ) {\r\n !this.emmitedPositionAlert &&\r\n this.handleAlert(\r\n \"wrong_face_position_edge_detected\",\r\n \"position_detection_on_stream\",\r\n );\r\n this.emmitedPositionAlert = true;\r\n failedFacePosition = true;\r\n }\r\n\r\n // Verifica\u00E7\u00E3o de centraliza\u00E7\u00E3o da face\r\n const leftGap = start[0];\r\n const rightGap = imageWidth - end[0];\r\n const topGap = start[1];\r\n const bottomGap = imageHeight - end[1];\r\n\r\n if (leftGap > 2 * rightGap) {\r\n !this.emmitedPositionAlert &&\r\n this.handleAlert(\r\n \"wrong_face_position_move_right_detected\",\r\n \"position_detection_on_stream\",\r\n );\r\n this.emmitedPositionAlert = true;\r\n failedFacePosition = true;\r\n }\r\n if (topGap > 4 * bottomGap) {\r\n !this.emmitedPositionAlert &&\r\n this.handleAlert(\r\n \"wrong_face_position_move_top_detected\",\r\n \"position_detection_on_stream\",\r\n );\r\n this.emmitedPositionAlert = true;\r\n failedFacePosition = true;\r\n }\r\n if (rightGap > 2 * leftGap) {\r\n !this.emmitedPositionAlert &&\r\n this.handleAlert(\r\n \"wrong_face_position_move_left_detected\",\r\n \"position_detection_on_stream\",\r\n );\r\n this.emmitedPositionAlert = true;\r\n failedFacePosition = true;\r\n }\r\n if (bottomGap > 3 * topGap) {\r\n !this.emmitedPositionAlert &&\r\n this.handleAlert(\r\n \"wrong_face_position_move_bottom_detected\",\r\n \"position_detection_on_stream\",\r\n );\r\n this.emmitedPositionAlert = true;\r\n failedFacePosition = true;\r\n }\r\n\r\n // // Verifica\u00E7\u00E3o de orienta\u00E7\u00E3o da face (olhar para os lados, cima ou baixo)\r\n // if (rightEar && leftEar && nose && rightEye && leftEye && mouth) {\r\n // let isLookingAway = false; // Vari\u00E1vel renomeada para ser mais gen\u00E9rica (lados ou cima/baixo)\r\n\r\n // // 1. C\u00C1LCULO HORIZONTAL (YAW) - Olhar para os lados\r\n // const distNoseRightEar = Math.abs(nose.x - rightEar.x);\r\n // const distNoseLeftEar = Math.abs(nose.x - leftEar.x);\r\n // const yawRatio = distNoseRightEar / distNoseLeftEar;\r\n\r\n // if (yawRatio > 3.0) {\r\n // !this.emmitedPositionAlert &&\r\n // this.handleAlert(\"face_turned_left_detected\", \"position_detection_on_stream\");\r\n // this.emmitedPositionAlert = true;\r\n // failedFacePosition = true;\r\n // isLookingAway = true;\r\n // } else if (yawRatio < 0.33) {\r\n // !this.emmitedPositionAlert &&\r\n // this.handleAlert(\"face_turned_right_detected\", \"position_detection_on_stream\");\r\n // this.emmitedPositionAlert = true;\r\n // failedFacePosition = true;\r\n // isLookingAway = true;\r\n // }\r\n\r\n // // 2. C\u00C1LCULO VERTICAL (PITCH) - Olhar para Cima/Baixo\r\n // if (!isLookingAway) {\r\n // // Ponto m\u00E9dio Y entre os olhos\r\n // const eyeMidY = (rightEye.y + leftEye.y) / 2;\r\n\r\n // // Dist\u00E2ncia vertical: Olhos at\u00E9 Nariz\r\n // const distEyesToNose = Math.abs(nose.y - eyeMidY);\r\n\r\n // // Dist\u00E2ncia vertical: Nariz at\u00E9 Boca\r\n // const distNoseToMouth = Math.abs(mouth.y - nose.y);\r\n\r\n // // Ratio Vertical\r\n // // Se olhar para CIMA: Nariz sobe, distEyesToNose diminui -> Ratio cai (< 0.5)\r\n // // Se olhar para BAIXO: Nariz desce, distNoseToMouth diminui -> Ratio sobe (> 2.0)\r\n // const pitchRatio = distEyesToNose / distNoseToMouth;\r\n\r\n // // console.log(\"Pitch Ratio:\", pitchRatio.toFixed(2)); // Descomente para calibrar\r\n\r\n // // Ajuste esses valores (thresholds) testando na sua c\u00E2mera\r\n // if (pitchRatio < 0.5) {\r\n // !this.emmitedPositionAlert &&\r\n // this.handleAlert(\"face_turned_up_detected\", \"position_detection_on_stream\");\r\n // this.emmitedPositionAlert = true;\r\n // failedFacePosition = true;\r\n // isLookingAway = true;\r\n // } \r\n // else if (pitchRatio > 2.0) { // Pode precisar aumentar para 2.5 dependendo da calibra\u00E7\u00E3o\r\n // !this.emmitedPositionAlert &&\r\n // this.handleAlert(\"face_turned_down_detected\", \"position_detection_on_stream\");\r\n // this.emmitedPositionAlert = true;\r\n // failedFacePosition = true;\r\n // isLookingAway = true;\r\n // }\r\n // }\r\n\r\n // // Se estiver olhando para qualquer dire\u00E7\u00E3o errada, interrompe\r\n // if (isLookingAway) return;\r\n // }\r\n\r\n if (failedFacePosition == false) {\r\n this.emmitedPositionAlert &&\r\n this.handleOk(\r\n \"ok_position_face_detected\",\r\n \"position_detection_on_stream\",\r\n );\r\n this.emmitedPositionAlert = false;\r\n }\r\n }\r\n}\r\n", "'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n", "'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap\n};\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n", "// eslint-disable-next-line strict\nexport default null;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n", "'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n", "'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n", "'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n", "'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n", "'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n", "'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n", "import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n", "const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n", "import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n", "'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n", "'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isHeaders(header)) {\n for (const [key, value] of header.entries()) {\n setHeader(value, key, rewrite);\n }\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n", "'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n", "'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n", "'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n", "'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n", "'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n", "'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n", "/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n", "import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n", "import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n", "import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n", "'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n", "'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n", "'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n", "import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n", "import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n", "import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n", "\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n", "import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n", "import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n", "'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n", "export const VERSION = \"1.8.4\";", "'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n", "'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n", "'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n", "'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n", "'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n", "const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n", "'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n", "import axios from \"axios\";\r\nimport StartProctoringResponse from \"../../dtos/StartProctoringResponse\";\r\nimport {\r\n ProctoringSession,\r\n RecordingOrigin,\r\n} from \"../proctoring/ProctoringSession\";\r\nimport { ProctoringContext } from \"../../proctoring/proctoring\";\r\nimport IParamsConfig from \"../../interfaces/ParamsConfig\";\r\nimport { ProctoringSessionOptions } from \"../../proctoring/options/ProctoringOptions\";\r\n\r\nconst DEV_BASE_URL = \"https://proctoring-api-dev.easyproctor.tech/api\";\r\n// const DEV_BASE_URL = \"https://localhost:5001/api\";\r\nconst HOMOL_BASE_URL = \"https://proctoring-api-hml.easyproctor.tech/api\";\r\nconst PROD_BASE_URL = \"https://proctoring-api.easyproctor.tech/api\";\r\n\r\nexport class BackendService {\r\n private readonly baseUrl: string;\r\n public token: string;\r\n\r\n constructor(private readonly options: { type: string, token?: string }) {\r\n this.baseUrl = this.selectBaseUrl(options.type);\r\n this.token = options.token!;\r\n }\r\n\r\n selectBaseUrl(type: string) {\r\n if(type === \"dev\") {\r\n return DEV_BASE_URL;\r\n } else if(type === \"homol\") {\r\n return HOMOL_BASE_URL;\r\n } else if(type === \"prod\") {\r\n return PROD_BASE_URL;\r\n } else {\r\n return PROD_BASE_URL;\r\n }\r\n }\r\n\r\n getSocketUrl(){\r\n //return \"https://localhost:5001/hub/sockethub\";\r\n return this.baseUrl.replace(\"/api\", \"/hub/sockethub\");\r\n }\r\n \r\n async loginAuth( cpf: string, base64: string ): Promise<any> {\r\n return await this.makeRequest<any>({\r\n path: `/Auth`,\r\n method: \"POST\",\r\n body: {\r\n emailOrCpf: cpf,\r\n key: base64,\r\n },\r\n });\r\n }\r\n\r\n async externalCameraRegister( body: any ): Promise<any> {\r\n return await this.makeRequest<any>({\r\n path: `/ExternalCamera/register`,\r\n method: \"POST\",\r\n body,\r\n jwt: this.token,\r\n });\r\n }\r\n \r\n async externalCameraCheckTransmission( externalSessionId: string): Promise<any> {\r\n return await this.makeRequest<any>({\r\n path: `/ExternalCamera/send-action/${externalSessionId}`,\r\n method: \"POST\",\r\n body: {\r\n command: \"Check_Transmission\",\r\n },\r\n jwt: this.token,\r\n });\r\n }\r\n\r\n async externalCameraStartTransmission( externalSessionId: string, proctoringId: string ): Promise<any> {\r\n return await this.makeRequest<any>({\r\n path: `/ExternalCamera/start-transmission/${externalSessionId}`,\r\n method: \"POST\",\r\n body: {\r\n proctoringId: proctoringId\r\n },\r\n jwt: this.token,\r\n });\r\n }\r\n\r\n async externalCameraStartSession(): Promise<any> {\r\n return await this.makeRequest<any>({\r\n path: `/ExternalCamera/start-session`,\r\n method: \"POST\",\r\n body: {},\r\n jwt: this.token,\r\n });\r\n }\r\n\r\n async goToExternalCameraPositionStep( externalSessionId: string ): Promise<any> {\r\n return await this.makeRequest<any>({\r\n path: `/ExternalCamera/go-to-position-step/${externalSessionId}`,\r\n method: \"POST\",\r\n body: {},\r\n jwt: this.token,\r\n });\r\n }\r\n\r\n async externalCameraFinish( externalSessionId: string ): Promise<any> {\r\n return await this.makeRequest<any>({\r\n path: `/ExternalCamera/finish/${externalSessionId}`,\r\n method: \"POST\",\r\n body: {},\r\n jwt: this.token,\r\n });\r\n }\r\n\r\n async confirmStart(\r\n proctoringOptions: { examId: any; clientId: any; token: any },\r\n sessionOptions: ProctoringSessionOptions,\r\n latitude?: number,\r\n longitude?: number,\r\n ): Promise<StartProctoringResponse> {\r\n return await this.makeRequest<StartProctoringResponse>({\r\n path: `/proctoring/start/${proctoringOptions.examId}`,\r\n method: \"POST\",\r\n body: {\r\n clientId: proctoringOptions.clientId,\r\n proctoringType: sessionOptions.proctoringType,\r\n latitude: latitude,\r\n longitude: longitude,\r\n captureScreen: sessionOptions.captureScreen\r\n },\r\n jwt: proctoringOptions.token,\r\n });\r\n }\r\n\r\n async getParamsConfig(proctoringOptions: ProctoringContext): Promise<IParamsConfig> {\r\n const paramsConfig = await this.makeRequestAxios<any>({\r\n path: `/Client/params`,\r\n method: \"GET\",\r\n jwt: proctoringOptions.token!,\r\n })\r\n .catch((error) => {\r\n throw \"N\u00E3o foi poss\u00EDvel realizar a requisi\u00E7\u00E3o, tente novamente mais tarde\";\r\n });\r\n\r\n return paramsConfig.data;\r\n }\r\n\r\n async getSignedUrlImage(token: string, body: any): Promise<string[]> {\r\n const url = await this.makeRequestAxios<any>({\r\n path: `/upload/signed-url-batch`,\r\n method: \"POST\",\r\n jwt: token,\r\n body: body,\r\n });\r\n return url.data;\r\n }\r\n\r\n async getSignedUrl(token: string, file: File, proctoringId?: string): Promise<string> {\r\n const url = await this.makeRequestAxios<any>({\r\n path: `/upload/signed-url`,\r\n method: \"POST\",\r\n jwt: token,\r\n body: {\r\n objectName: `${proctoringId}/${file.name}`,\r\n contentType: file.type,\r\n },\r\n });\r\n return url.data;\r\n }\r\n\r\n \r\n async saveAlerts(\r\n proctoringOptions: ProctoringContext,\r\n proctoringSession: ProctoringSession\r\n ) {\r\n await this.makeRequest({\r\n path: \"/proctoring/save-alerts\",\r\n method: \"POST\",\r\n jwt: proctoringOptions.token!,\r\n body: {\r\n proctoringId: proctoringSession.id,\r\n alerts: proctoringSession.alerts,\r\n },\r\n });\r\n }\r\n\r\n async finishAndSendUrls(\r\n proctoringOptions: ProctoringContext,\r\n ): Promise<any> {\r\n return await this.makeRequest<any>({\r\n path: `/proctoring/finish/${proctoringOptions.examId}`,\r\n method: \"POST\",\r\n body: {\r\n endDate: new Date().toISOString(),\r\n videoCameraUrl: \"\",\r\n audioCameraUrl: \"\",\r\n videoScreenUrl: \"\"\r\n },\r\n jwt: proctoringOptions.token!,\r\n });\r\n }\r\n\r\n async log(eventName: string, properties?: {[key: string]: any}): Promise<string> {\r\n let entryType;\r\n\r\n if(properties?.success !== null && properties?.success !== undefined) {\r\n entryType = properties.success ? '4' : '1';\r\n } else {\r\n entryType = '4';\r\n }\r\n\r\n \r\n return await this.makeRequest<string>({\r\n path: `/Log`,\r\n method: \"POST\",\r\n body: {\r\n entryType: entryType,\r\n eventName: eventName, \r\n message: properties,\r\n },\r\n jwt: this.token,\r\n });\r\n }\r\n\r\n async signTerm(): Promise<string> {\r\n return await this.makeRequest<string>({\r\n path: `/User/sign-terms`,\r\n method: \"PATCH\",\r\n body: {},\r\n jwt: this.token,\r\n });\r\n }\r\n\r\n async signTermUrl(): Promise<string> {\r\n const result = await this.makeRequestAxios<any>({\r\n path: `/User/sign-terms-url`,\r\n method: \"GET\",\r\n jwt: this.token,\r\n });\r\n\r\n return result.data;\r\n }\r\n\r\n async startChallenge(body: any): Promise<any> {\r\n const result = await this.makeRequestAxios<any>({\r\n path: `/Challenge/start`,\r\n method: \"POST\",\r\n jwt: this.token,\r\n body\r\n });\r\n\r\n return result.data;\r\n }\r\n\r\n async stopChallenge(challengeId: string, body: any): Promise<any> {\r\n const result = await this.makeRequestAxios<any>({\r\n path: `/Challenge/stop/${challengeId}`,\r\n method: \"POST\",\r\n jwt: this.token,\r\n body\r\n });\r\n\r\n return result.data;\r\n }\r\n\r\n async startRealtimeAlert(body: any): Promise<any> {\r\n const result = await this.makeRequestAxios<any>({\r\n path: `/Realtime/start-warning`,\r\n method: \"POST\",\r\n jwt: this.token,\r\n body\r\n });\r\n return result.data;\r\n }\r\n\r\n async stopRealtimeAlert(body: any): Promise<any> {\r\n const result = await this.makeRequestAxios<any>({\r\n path: `/Realtime/stop-warning`,\r\n method: \"POST\",\r\n jwt: this.token,\r\n body\r\n });\r\n return result.data;\r\n }\r\n\r\n async verifyFace(proctoringId: any, faceImage: any, retry:boolean): Promise<any> {\r\n const result = await this.makeRequestAxios<any>({\r\n path: `/Realtime/verify-face`,\r\n method: \"POST\",\r\n jwt: this.token,\r\n body: { \"proctoringId\": proctoringId, \"base64\": faceImage, \"retry\": retry }\r\n });\r\n return result.data;\r\n }\r\n\r\n async getServerHour(token: string): Promise<string> {\r\n return await this.makeRequest<string>({\r\n path: `/Proctoring/server-hour`,\r\n method: \"GET\",\r\n jwt: token,\r\n });\r\n }\r\n\r\n private async makeRequest<R>(data: {\r\n path: string;\r\n method: \"GET\" | \"POST\" | \"PATCH\" | \"DELETE\" | \"PUT\";\r\n body?: any;\r\n jwt?: string;\r\n }) {\r\n // console.log(\"MAKE REQUEST\", data.method, data.path);\r\n const { path, method, body, jwt } = data;\r\n\r\n // console.log('jwt -> ', jwt);\r\n const resp = await fetch(this.baseUrl + path, {\r\n method: method,\r\n body: body != null ? JSON.stringify(body) : undefined,\r\n headers: {\r\n Authorization: `Bearer ${jwt}`,\r\n \"Content-Type\": \"application/json\",\r\n \"Access-Control-Allow-Origin\": \"*\",\r\n },\r\n });\r\n\r\n if (resp.status >= 400) {\r\n throw \"N\u00E3o foi poss\u00EDvel realizar a requisi\u00E7\u00E3o, tente novamente mais tarde\";\r\n }\r\n\r\n const content = resp.headers.get(\"content-type\");\r\n const isJson = content ? content.includes(\"application/json\") : false;\r\n\r\n const responseData = isJson ? await resp.json() : null;\r\n return responseData as R;\r\n }\r\n\r\n async makeRequestAxios<R>(data: {\r\n path: string;\r\n method: \"GET\" | \"POST\" | \"PUT\";\r\n body?: any;\r\n jwt: string;\r\n }) {\r\n const { path, method, body, jwt } = data;\r\n const resp = await axios.request({\r\n url: this.baseUrl + path,\r\n method: method,\r\n headers: {\r\n Authorization: `Bearer ${jwt}`,\r\n \"Access-Control-Allow-Origin\": \"*\",\r\n },\r\n data: body,\r\n });\r\n\r\n if (resp.status >= 400) {\r\n throw \"N\u00E3o foi poss\u00EDvel realizar a requisi\u00E7\u00E3o, tente novamente mais tarde\";\r\n }\r\n\r\n return resp as R;\r\n }\r\n\r\n async makeRequestPUT<R>(data: {\r\n url: string;\r\n method: \"PUT\";\r\n body?: any;\r\n jwt: string;\r\n }) {\r\n const { url, method, body, jwt } = data;\r\n const resp = await fetch(url, {\r\n method: method,\r\n body: body != null ? JSON.stringify(body) : undefined,\r\n headers: {\r\n // Authorization: `Bearer ${jwt}`,\r\n Accept: \"*/*\",\r\n \"Accept-Encoding\": \"gzip, deflate, br\",\r\n Connection: \"keep-alive\",\r\n \"aeg-event-type\": \"Notification\",\r\n \"Content-Type\": \"application/json\",\r\n \"Cache-Control\": \"no-cache\",\r\n \"x-ms-blob-type\": \"BlockBlob\",\r\n },\r\n });\r\n\r\n if (resp.status >= 400) {\r\n throw \"N\u00E3o foi poss\u00EDvel realizar a requisi\u00E7\u00E3o, tente novamente mais tarde\";\r\n }\r\n\r\n const content = resp.headers.get(\"content-type\");\r\n const isJson = content ? content.includes(\"application/json\") : false;\r\n\r\n const responseData = isJson ? await resp.json() : null;\r\n return responseData as R;\r\n }\r\n}\r\n", "import axios from \"axios\";\r\nimport type { SpyCamDevice } from \"../../modules/SpyCam\";\r\n\r\n// 'UNKNOWN' | 'ROUTER' | 'CLIENT_DEVICE' | 'POTENCIAL_CAMERA'\r\nexport enum DeviceTypeEnum {\r\n UNKNOWN = 0,\r\n ROUTER = 1,\r\n CLIENT_DEVICE = 2,\r\n POTENCIAL_CAMERA = 3,\r\n}\r\n\r\nexport interface DevicesInterface {\r\n deviceType?: DeviceTypeEnum;\r\n rssiThreshold?: number;\r\n packageRateThreshold?: number;\r\n}\r\n\r\nexport class SpyCamBackendService {\r\n private readonly baseUrl: string = \"https://localhost:5080\";\r\n public token: string;\r\n\r\n constructor() {}\r\n\r\n \r\n async isAlive(): Promise<boolean> {\r\n const paramsConfig = await this.makeRequestAxios<any>({\r\n path: `/api/usb-device-manager/is-alive`,\r\n method: \"GET\",\r\n jwt: this.token,\r\n }).catch((error) => {\r\n throw \"N\u00E3o foi poss\u00EDvel realizar a requisi\u00E7\u00E3o, tente novamente mais tarde\";\r\n });\r\n\r\n return paramsConfig.data;\r\n }\r\n\r\n async isPluggedIn(): Promise<boolean> {\r\n const paramsConfig = await this.makeRequestAxios<any>({\r\n path: `/api/usb-device-manager/is-plugged-in`,\r\n method: \"GET\",\r\n jwt: this.token,\r\n }).catch((error) => {\r\n throw \"N\u00E3o foi poss\u00EDvel realizar a requisi\u00E7\u00E3o, tente novamente mais tarde\";\r\n });\r\n\r\n return paramsConfig.data;\r\n }\r\n\r\n async ConnectAndScan(): Promise<any> {\r\n const paramsConfig = await this.makeRequestAxios<any>({\r\n path: `/api/usb-device-manager/connect-and-scan`,\r\n method: \"GET\",\r\n jwt: this.token,\r\n }).catch((error) => {\r\n throw \"N\u00E3o foi poss\u00EDvel realizar a requisi\u00E7\u00E3o, tente novamente mais tarde\";\r\n });\r\n\r\n return paramsConfig.data;\r\n }\r\n\r\n async Devices({\r\n deviceType,\r\n rssiThreshold,\r\n packageRateThreshold,\r\n }: DevicesInterface): Promise<SpyCamDevice[]> {\r\n const queryParams = [];\r\n\r\n deviceType && queryParams.push(`deviceType=${deviceType}`);\r\n rssiThreshold && queryParams.push(`rssiThreshold=${rssiThreshold}`);\r\n packageRateThreshold &&\r\n queryParams.push(`packageRateThreshold=${packageRateThreshold}`);\r\n\r\n const paramsConfig = await this.makeRequestAxios<any>({\r\n path: `/api/usb-device-manager/devices?${queryParams.join(\"&\")}`,\r\n method: \"GET\",\r\n jwt: this.token,\r\n }).catch((error) => {\r\n throw \"N\u00E3o foi poss\u00EDvel realizar a requisi\u00E7\u00E3o, tente novamente mais tarde\";\r\n });\r\n\r\n return paramsConfig.data;\r\n }\r\n\r\n async makeRequestAxios<R>(data: {\r\n path: string;\r\n method: \"GET\" | \"POST\" | \"PUT\";\r\n body?: any;\r\n jwt: string;\r\n }) {\r\n const { path, method, body, jwt } = data;\r\n const resp = await axios.request({\r\n url: this.baseUrl + path,\r\n method: method,\r\n headers: {\r\n Authorization: `Bearer ${jwt}`,\r\n \"Access-Control-Allow-Origin\": \"*\",\r\n },\r\n data: body,\r\n });\r\n\r\n if (resp.status >= 400) {\r\n throw \"N\u00E3o foi poss\u00EDvel realizar a requisi\u00E7\u00E3o, tente novamente mais tarde\";\r\n }\r\n\r\n return resp as R;\r\n }\r\n}", "export enum SessionState {\r\n Created = \"Created\",\r\n Recording = \"Recording\",\r\n Paused = \"Paused\",\r\n Ended = \"Ended\",\r\n EndConfirmed = \"EndConfirmed\",\r\n Uploaded = \"Uploaded\",\r\n UploadConfirmed = \"UploadConfirmed\",\r\n}\r\n\r\nexport enum StorageService {\r\n none = \"upload\",\r\n}\r\n\r\nexport enum RecordingOrigin {\r\n Screen = \"Screen\",\r\n Mic = \"Mic\",\r\n Camera = \"Camera\",\r\n}\r\n\r\nexport enum AlertCategory {\r\n NoFace = 1, // Nenhuma face encontrada\r\n MultipleFaces = 2, // M\u00FAltiplas faces encontradas\r\n FocusOff = 25,\r\n EnvironmentMultiplePeople = 28, // Multiplas pessoas encontradas no ambiente\r\n EnvironmentNoPeople = 29,// Nenhuma pessoa encontrada no ambiente \r\n PotentialCamera = 32,\r\n SpyDeviceDisconnected = 33,\r\n StopSharingScreen = 34,\r\n ChangeDevices = 39,\r\n ClipBoardUse = 42, // copiar/colar/recortar\r\n SplitScreen = 43, // Split Screen detectado\r\n System = 200,\r\n}\r\n\r\nexport enum FinishRealtimeWarningCategory {\r\n Face = 0,\r\n People = 1,\r\n LostFocus = 2,\r\n}\r\n\r\nexport enum AlertType {\r\n Audio = 1,\r\n Video = 2,\r\n Screen = 3,\r\n Image = 4,\r\n Environment = 5\r\n}\r\n\r\nexport interface Alert {\r\n begin: number;\r\n end: number;\r\n alert: AlertCategory;\r\n type: AlertType;\r\n}\r\n\r\nexport interface Recording {\r\n origin: RecordingOrigin;\r\n file: File;\r\n device: string;\r\n upload?: {\r\n storage: StorageService;\r\n azureUrl: string;\r\n awsUrl: string;\r\n };\r\n}\r\n\r\nexport class ProctoringSession {\r\n id: string;\r\n state: SessionState;\r\n startedAt: Date;\r\n sessionDuration: number = 0; //seconds? ms?\r\n alerts: Alert[];\r\n recordings: Recording[];\r\n\r\n get hasSomethingToUpload(): boolean {\r\n for (const rec of this.recordings) {\r\n if (!rec.upload) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n constructor() {\r\n this.state = SessionState.Created;\r\n this.startedAt = new Date();\r\n this.alerts = [];\r\n this.recordings = [];\r\n }\r\n\r\n start() {\r\n this.state = SessionState.Recording;\r\n this.startedAt = new Date(Date.now());\r\n }\r\n pause() {\r\n this.state = SessionState.Paused;\r\n // this.startedAt = new Date(Date.now());\r\n }\r\n resume() {\r\n this.state = SessionState.Recording;\r\n // this.startedAt = new Date(Date.now());\r\n }\r\n stop() {\r\n this.state = SessionState.Ended;\r\n this.sessionDuration = Date.now() - this.startedAt.getTime();\r\n }\r\n\r\n setProctoringId(proctoringId: string) {\r\n this.id = proctoringId;\r\n }\r\n setEndConfirmed() {\r\n this.state = SessionState.EndConfirmed;\r\n }\r\n setUploaded() {\r\n this.state = SessionState.Uploaded;\r\n }\r\n setUploadConfirmed() {\r\n this.state = SessionState.UploadConfirmed;\r\n }\r\n\r\n addAlert(alert: Alert) {\r\n this.alerts.push(alert);\r\n }\r\n addRecording(rec: Recording) {\r\n this.recordings.push(rec);\r\n }\r\n}\r\n", "import { BackendService } from \"../new-flow/backend/BackendService\";\r\nimport { DevicesInterface, SpyCamBackendService } from \"../new-flow/backend/SpyCamBackendService\";\r\nimport { AlertCategory, AlertType, ProctoringSession } from \"../new-flow/proctoring/ProctoringSession\";\r\nimport { ProctoringContext } from \"../proctoring/proctoring\";\r\n\r\nexport interface SpyCamDevice {\r\n macAddress: string;\r\n destinationsCount: number;\r\n totalPackages: number;\r\n packageRate: number;\r\n rssi: number;\r\n deviceType: number;\r\n}\r\n\r\nexport class SpyCam {\r\n private backendService: SpyCamBackendService = new SpyCamBackendService();\r\n private readonly context: ProctoringContext;\r\n private readonly backend: BackendService;\r\n private proctoringId: string;\r\n private scanInterval: number = 5;\r\n private startTime: Date;\r\n private checkSpyCam: any;\r\n private currentIsPlugged: boolean;\r\n private options: { onRealtimeAlertsCallback?: (response: any) => void } = {};\r\n\r\n constructor(context: ProctoringContext, options: { onRealtimeAlertsCallback?: (response: any) => void }) {\r\n this.options = options;\r\n this.context = context;\r\n this.backend = new BackendService({\r\n type: context?.type || \"prod\",\r\n token: context.token!,\r\n });\r\n this.currentIsPlugged = true;\r\n }\r\n\r\n setProctoringId(proctoringId: string) {\r\n this.proctoringId = proctoringId;\r\n }\r\n\r\n async isPluggedIn(sendEvent: boolean = false) {\r\n try {\r\n const isPlugged = await this.backendService.isPluggedIn();\r\n\r\n // se tiver proctoring id, dispara o evento de desconectado\r\n if(this.proctoringId && sendEvent)\r\n {\r\n if(isPlugged) {\r\n\r\n if(!this.currentIsPlugged){\r\n // envia evento para o callback\r\n this.options.onRealtimeAlertsCallback?.({\r\n type: \"spycam\",\r\n message: \"Spycam disconnected\",\r\n description: \"Dispositivo de varredura conectado.\",\r\n status: \"OK\",\r\n });\r\n }\r\n }\r\n else{\r\n\r\n // envia alerta para o backend\r\n const session: ProctoringSession = new ProctoringSession();\r\n session.setProctoringId(this.proctoringId);\r\n session.addAlert({ \r\n begin: Date.now() - this.startTime.getTime(),\r\n end: 0,\r\n alert: AlertCategory.SpyDeviceDisconnected,\r\n type: AlertType.Environment \r\n });\r\n await this.backend.saveAlerts(this.context,session);\r\n\r\n // envia evento para o callback\r\n this.options.onRealtimeAlertsCallback?.({\r\n type: \"spycam\",\r\n message: \"Spycam disconnected\",\r\n description: \"Nenhum dispositivo de varredura conectado.\",\r\n status: \"ALERT\",\r\n });\r\n }\r\n }\r\n this.currentIsPlugged = isPlugged;\r\n return this.currentIsPlugged;\r\n } catch (error: any) {\r\n throw error as Error;\r\n }\r\n }\r\n\r\n async isAlive() {\r\n try {\r\n return await this.backendService.isAlive();\r\n } catch (error: any) {\r\n throw error as Error;\r\n }\r\n }\r\n\r\n connectAndScan() {\r\n return this.backendService.ConnectAndScan();\r\n }\r\n\r\n async devices({\r\n deviceType,\r\n rssiThreshold,\r\n packageRateThreshold\r\n }: DevicesInterface) {\r\n const devices = await this.backendService.Devices(\r\n {\r\n deviceType,\r\n rssiThreshold,\r\n packageRateThreshold\r\n }\r\n );\r\n if (devices.length > 0) {\r\n\r\n this.options.onRealtimeAlertsCallback?.({\r\n type: \"spycam\",\r\n message: \"Spycam detected\",\r\n description: \"Dispositivo espi\u00E3o detectado.\",\r\n data: devices,\r\n });\r\n\r\n // Chamar backend do proctoring save alerts\r\n if(this.proctoringId)\r\n {\r\n const session: ProctoringSession = new ProctoringSession();\r\n session.setProctoringId(this.proctoringId);\r\n session.addAlert({ \r\n begin: Date.now() - this.startTime.getTime(),\r\n end: 0,\r\n alert: AlertCategory.PotentialCamera,\r\n type: AlertType.Environment });\r\n\r\n await this.backend.saveAlerts(this.context,session);\r\n }\r\n }\r\n\r\n return devices;\r\n }\r\n\r\n async startCheckSpyCam(spyScanInterval: number, {\r\n deviceType,\r\n rssiThreshold,\r\n packageRateThreshold }:DevicesInterface) {\r\n \r\n this.scanInterval = spyScanInterval;\r\n \r\n this.startTime = new Date(Date.now());\r\n\r\n await this.isPluggedIn(true);\r\n \r\n \r\n this.checkSpyCam = setInterval(async() => {\r\n\r\n const isPlugged = await this.isPluggedIn(true);\r\n \r\n if (isPlugged)\r\n {\r\n await this.devices({ deviceType,\r\n rssiThreshold,\r\n packageRateThreshold });\r\n }\r\n\r\n }, this.scanInterval * 60000);\r\n }\r\n\r\n stopCheckSpyCam() {\r\n clearInterval(this.checkSpyCam);\r\n }\r\n}", "export interface ProctoringSessionOptions {\r\n cameraId?: string;\r\n microphoneId?: string;\r\n allowMultipleMonitors?: boolean;\r\n allowOnlyFirstMonitor?: boolean;\r\n captureScreen?: boolean;\r\n noiseLimit?: number; // deprecated\r\n proctoringType: \"VIDEO\" | \"IMAGE\" | \"REALTIME\";\r\n insights: string;\r\n onBufferSizeError?: boolean;\r\n useGeolocation?: boolean;\r\n useSpyScan?: boolean;\r\n useExternalCamera?: boolean;\r\n useChallenge?: boolean;\r\n screenRecorderOptions?: { width: number, height: number };\r\n}\r\n\r\n// export function getDefaultProctoringOptions(): ProctoringSessionOptions {\r\n// return {\r\n// cameraId: undefined,\r\n// microphoneId: undefined,\r\n// allowMultipleMonitors: false,\r\n// allowOnlyFirstMonitor: true,\r\n// captureScreen: true,\r\n// noiseLimit: 40,\r\n// proctoringType: \"IMAGE\",\r\n// insights: \"\",\r\n// };\r\n// }\r\n\r\nexport const getDefaultProctoringOptions: ProctoringSessionOptions = {\r\n cameraId: undefined,\r\n microphoneId: undefined,\r\n allowMultipleMonitors: false,\r\n allowOnlyFirstMonitor: true,\r\n captureScreen: true,\r\n noiseLimit: 40, // deprecated\r\n proctoringType: \"IMAGE\",\r\n insights: \"\",\r\n onBufferSizeError: false,\r\n useGeolocation: false,\r\n useSpyScan: false,\r\n useExternalCamera: false,\r\n useChallenge: false,\r\n screenRecorderOptions: { width: 1280, height: 720 }\r\n};\r\n", "export interface ProctoringVideoOptions {\r\n width: number;\r\n height: number;\r\n minWidth?: number; \r\n minHeight?: number;\r\n timeSlice?: number;\r\n videoBitsPerSecond?: number;\r\n mimeType?: string;\r\n}\r\n\r\nexport function validatePartialVideoOptions(\r\n options: Partial<ProctoringVideoOptions>\r\n): ProctoringVideoOptions {\r\n if (!!options.width && !!options.height) {\r\n return {\r\n width: options.width,\r\n height: options.height,\r\n minWidth: options.minWidth,\r\n minHeight: options.minHeight,\r\n timeSlice: options.timeSlice,\r\n videoBitsPerSecond: options.videoBitsPerSecond,\r\n mimeType: options.mimeType,\r\n };\r\n } else {\r\n return { width: 640, height: 480 };\r\n }\r\n}\r\n\r\nexport const getDefaultProctoringVideoOptions: ProctoringVideoOptions = { \r\n width: 1280, \r\n height: 720, \r\n minWidth: 640, \r\n minHeight: 480 \r\n};\r\n\r\n", "export function fnBrowserDetect(){\r\n \r\n const userAgent = navigator.userAgent;\r\n let browserName;\r\n \r\n if(userAgent.match(/chrome|chromium|crios/i)){\r\n browserName = \"chrome\";\r\n }else if(userAgent.match(/firefox|fxios/i)){\r\n browserName = \"firefox\";\r\n } else if(userAgent.match(/safari/i)){\r\n browserName = \"safari\";\r\n }else if(userAgent.match(/opr\\//i)){\r\n browserName = \"opera\";\r\n } else if(userAgent.match(/edg/i)){\r\n browserName = \"edge\";\r\n }else{\r\n browserName=\"No browser detection\";\r\n }\r\n \r\n return browserName; \r\n}\r\n\r\nexport function isMobileDevice(): boolean {\r\n // Verifica se userAgentData existe no navigator\r\n if (\"userAgentData\" in navigator) {\r\n const navUAData = (navigator as any).userAgentData;\r\n const mobile = navUAData.mobile || false;\r\n const platform = navUAData.platform || \"\";\r\n return mobile || /Android|iOS/i.test(platform);\r\n }\r\n // Fallback para navegadores antigos\r\n return /Android|iPhone|iPad|iPod/i.test(navigator.userAgent);\r\n}\r\n", "import { DevicesChanged } from '../interfaces/Devices';\r\nimport { ServiceType } from '../proctoring/proctoring';\r\nimport { BackendService } from '../new-flow/backend/BackendService';\r\n\r\nlet backendService: BackendService;\r\n\r\nconst init = (backend: BackendService) => {\r\n backendService = backend;\r\n return backendService;\r\n};\r\n\r\nconst eventNames = {\r\n DEVICES_CHECKED: \"devices_checked\",\r\n START: \"start\",\r\n FINISH: \"finish\",\r\n ERROR: \"error\",\r\n UPLOAD: \"upload\",\r\n UPLOAD_FILE: \"upload_file\",\r\n DOWNLOAD_VIDEO: \"download_video\",\r\n BUFFER_SIZE: \"buffer_size\",\r\n ANOTHER_STREAM: \"another_stream\",\r\n CHANGE_DEVICE: \"change_device\",\r\n STOP_SHARING_SCREEN: \"stop_sharing_screen\",\r\n ERROR_RECORDER_RTC: \"error_recorder_rtc\",\r\n BROWSER_NOT_SUPPORTED: \"browser_not_supported\",\r\n SAVE_ON_SESSION: \"save_on_session\"\r\n};\r\n\r\nconst log = (eventName: string, properties?: {[key: string]: any}) => backendService && backendService.log(eventName, properties);\r\n\r\nconst trackers = {\r\n registerDevicesChecked: (proctoringId: string, success: boolean, description: string ) => log(eventNames.DEVICES_CHECKED, { proctoringId, success, description }),\r\n registerStart: (proctoringId: string, success: boolean, description: string ) => log(eventNames.START, { proctoringId, success, description }),\r\n registerFinish: (proctoringId: string, success: boolean, description: string) => log(eventNames.FINISH, { proctoringId, success, description }),\r\n registerError: (proctoringId: string, description: string) => log(eventNames.ERROR, { proctoringId, description }),\r\n registerBrowserNotSupported: (proctoringId: string, description: string) => log(eventNames.BROWSER_NOT_SUPPORTED, { proctoringId, description }),\r\n registerUpload: (proctoringId: string, success: boolean, description: string, serviceType: ServiceType, uploadTime?: number) => log(eventNames.UPLOAD, { proctoringId, success, description, serviceType, uploadTime }),\r\n registerUploadFile: (proctoringId: string, description: string, fileType: string) => log(eventNames.UPLOAD_FILE, { proctoringId, description, fileType }),\r\n registerChangeDevice: (proctoringId: string, inOrOut: string, description: string) => log(eventNames.CHANGE_DEVICE, { proctoringId, inOrOut, description }),\r\n registerStopSharingScreen: (proctoringId: string, description: string) => log(eventNames.STOP_SHARING_SCREEN, { proctoringId, description }),\r\n registerErrorRecorderRTC: (proctoringId: string, description: string) => log(eventNames.ERROR_RECORDER_RTC, { proctoringId, description }), registerDownloadFile: (proctoringId: string, description: string) => log(eventNames.DOWNLOAD_VIDEO, { proctoringId, description }),\r\n registerOnBufferSizeError: (proctoringId: string, description: string) => log(eventNames.BUFFER_SIZE, { proctoringId, description }),\r\n registerAnotherStream: (proctoringId: string, description: string) => log(eventNames.ANOTHER_STREAM, { proctoringId, description }),\r\n registerSaveOnSession: (proctoringId: string, description: string) => log(eventNames.SAVE_ON_SESSION, { proctoringId, description }),\r\n};\r\n\r\nexport { trackers, init };", "import { DownloadService } from \"../new-flow/download/downloadService\";\r\nimport { ProctoringVideoOptions } from \"../proctoring/options/ProctoringVideoOptions\";\r\nimport { trackers } from \"./insights\";\r\n\r\nlet proctoringId: string;\r\n\r\nexport function setRecorderProctoringId(id: string) {\r\n proctoringId = id;\r\n}\r\n\r\nexport default function recorder(\r\n stream: MediaStream,\r\n buffer: Blob[],\r\n videoOptions: ProctoringVideoOptions | null,\r\n onBufferSizeError: boolean = false,\r\n onBufferSizeErrorCallback?: (e?: any) => void,\r\n audio: boolean = false,\r\n) {\r\n // Fun\u00E7\u00E3o resolve da promise de STOP\r\n let resolvePromise: () => void;\r\n let stopped: boolean = false;\r\n let onBufferSizeInterval: any;\r\n let lastEvent: any;\r\n let bufferSize: number;\r\n bufferSize = 0;\r\n // Op\u00E7\u00F5es da grava\u00E7\u00E3o do arquivo\r\n let recorderOptions: MediaRecorderOptions = {\r\n // eslint-disable-next-line no-useless-escape\r\n mimeType: \"video/webm\",\r\n videoBitsPerSecond: 128000,\r\n audioBitsPerSecond: 64 * 1000,\r\n };\r\n\r\n // Verifica se o vp9 \u00E9 suportado e ajusta o mimeType conforme o suporte\r\n if (MediaRecorder.isTypeSupported(\"video/webm;codecs=vp9\")) {\r\n recorderOptions.mimeType = \"video/webm;codecs=vp9\";\r\n } else {\r\n console.warn(\r\n \"vp9 codec not supported. Using default mimeType without vp9.\"\r\n );\r\n }\r\n\r\n if(videoOptions?.mimeType) {\r\n recorderOptions.mimeType = videoOptions?.mimeType;\r\n }\r\n\r\n if(videoOptions?.videoBitsPerSecond != undefined) {\r\n recorderOptions.videoBitsPerSecond = videoOptions?.videoBitsPerSecond;\r\n }\r\n\r\n if (audio) {\r\n // Op\u00E7\u00F5es da grava\u00E7\u00E3o do arquivo\r\n recorderOptions = {\r\n mimeType: \"audio/webm\",\r\n audioBitsPerSecond: 64 * 1000,\r\n };\r\n }\r\n\r\n \r\n console.log('recorderOptions bitsPerSecond', recorderOptions.videoBitsPerSecond);\r\n\r\n\r\n // ===========================================================\r\n // funcao de construcao do mediaRecorder\r\n function buildMediaRecorder(stream: MediaStream, recorderOptions: MediaRecorderOptions): MediaRecorder {\r\n \r\n // valida tracks\r\n const tracks = stream.getTracks();\r\n if(tracks.length == 0) {\r\n throw new Error(\"No tracks found\");\r\n }\r\n const invalidTracks = tracks.find(t => t.readyState != \"live\" );\r\n if(invalidTracks){\r\n throw new Error(\"Track not live: \" + invalidTracks.label);\r\n }\r\n \r\n console.log('buildMediaRecorder tracks OK');\r\n\r\n // Recorder\r\n let mediaRecorder = new MediaRecorder(stream, recorderOptions);\r\n console.log('buildMediaRecorder mediaRecorder OK');\r\n \r\n // Evento que observa quando existe dados novos, verifica se o evento de stop est\u00E1 setado e encerra a promise.\r\n mediaRecorder.ondataavailable = (e) => {\r\n \r\n bufferSize = bufferSize + e.data.size;\r\n\r\n console.log('video tracks length > 0', stream.getVideoTracks().length > 0);\r\n if(stream.getVideoTracks().length > 0) {\r\n const videoTrack = stream.getVideoTracks()[0];\r\n console.log(videoTrack.readyState); // precisa ser \"live\"\r\n console.log(videoTrack.enabled); // precisa ser true\r\n }\r\n\r\n // Salvar todas as inst\u00E2ncias da grava\u00E7\u00E3o\r\n if (e.data.size > 0) {\r\n buffer.push(e.data);\r\n }\r\n\r\n if (!stopped) {\r\n\r\n // simulando onbuffer size error \r\n // lastEvent = e\r\n if (\r\n (lastEvent && e.data.size === lastEvent.data.size) ||\r\n e.data.size === 0\r\n ) {\r\n proctoringId &&\r\n lastEvent &&\r\n e.data.size === lastEvent.data.size &&\r\n trackers.registerOnBufferSizeError(\r\n proctoringId,\r\n `onBufferSizeError: Recorder size freezed: ${e.data.size} Mb`\r\n );\r\n proctoringId &&\r\n e.data.size === 0 &&\r\n trackers.registerOnBufferSizeError(\r\n proctoringId,\r\n `onBufferSizeError: Recorder size equal 0 Mb`\r\n );\r\n\r\n console.log('onbuffer size error' + e.data.size);\r\n \r\n \r\n onBufferSizeErrorCallback && onBufferSizeErrorCallback();\r\n }\r\n lastEvent = e;\r\n // Teste Retry\r\n // const mockEvent = new Blob([], { type: e.data.type });\r\n // lastEvent = { data: mockEvent };\r\n } else {\r\n // if(e.data.size > 0) {\r\n // buffer.push(e.data);\r\n // }\r\n\r\n resolvePromise && resolvePromise();\r\n }\r\n };\r\n\r\n return mediaRecorder;\r\n }\r\n\r\n // Recorder\r\n let mediaRecorder = buildMediaRecorder(stream, recorderOptions);\r\n\r\n async function startRecorder(recorder: MediaRecorder): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n let started = false;\r\n\r\n recorder.onstart = () => {\r\n started = true;\r\n resolve();\r\n };\r\n\r\n recorder.onerror = (e) => {\r\n console.error(\"Recorder on error event:\", e);\r\n console.error(\"Recorder on error name:\", e?.error?.name);\r\n console.error(\"Recorder on error message:\", e?.error?.message);\r\n stream.getTracks().forEach(t => console.log(t.readyState));\r\n console.error(e);\r\n reject(e?.error || e);\r\n }\r\n \r\n try{\r\n console.log(\"State antes do start:\", recorder.state);\r\n console.log(\"MimeType:\", recorder.mimeType);\r\n recorder.start(10000);\r\n } catch (e:any) {\r\n console.error(\"Recorder erro ao chamar start event:\", e);\r\n console.error(\"Erro real:\", e, e?.error, e?.error?.name, e?.error?.message);\r\n console.error(\"Erro real 2:\", e, e?.message, e?.name);\r\n stream.getTracks().forEach(t => console.log(t.readyState));\r\n return reject(e);\r\n }\r\n \r\n //watch dog\r\n setTimeout(() => {\r\n if(!started) {\r\n console.error(\"Timeout ao iniciar o recorder\");\r\n reject(new Error(\"Timeout ao iniciar o recorder\"));\r\n }\r\n }, 2000);\r\n });\r\n }\r\n async function startWithRetry(recorder: MediaRecorder): Promise<void> {\r\n for(let i = 0; i < 3; i++) {\r\n try {\r\n console.log('startWithRetry try', i);\r\n await startRecorder(recorder);\r\n \r\n \r\n if(recorder.state === \"recording\") {\r\n bufferSize = 0;\r\n stopped = false;\r\n return;\r\n }\r\n } catch (e:any) {\r\n console.error(\"Erro ao iniciar o recorder:\", e);\r\n }\r\n\r\n await new Promise(r => setTimeout(r, 300));\r\n\r\n //recria o recorder\r\n if (recorder) {\r\n try {\r\n if (recorder.state !== \"inactive\") {\r\n recorder.stop();\r\n console.log(\"Recorder antigo parado\");\r\n }\r\n } catch (e) {\r\n console.warn(\"Erro ao parar recorder antigo:\", e);\r\n }\r\n }\r\n \r\n recorder = buildMediaRecorder(stream, recorderOptions);\r\n \r\n }\r\n throw new Error(\"Falha ao iniciar o recorder\");\r\n }\r\n\r\n // Fun\u00E7\u00E3o de in\u00EDcio\r\n async function startRecording(): Promise<void> {\r\n try{\r\n\r\n await startWithRetry(mediaRecorder);\r\n }catch(e:any)\r\n {\r\n throw e;\r\n }\r\n return;\r\n return new Promise((resolve, reject) => {\r\n var timeSlice = 10000;\r\n if(videoOptions?.timeSlice != undefined) {\r\n timeSlice = videoOptions?.timeSlice;\r\n }\r\n console.log('startRecording', timeSlice);\r\n\r\n try {\r\n mediaRecorder.onstart = () => {\r\n console.log(\"Grava\u00E7\u00E3o iniciada com sucesso!\");\r\n resolve();\r\n };\r\n mediaRecorder.onerror = (e) => {\r\n console.error(\"Erro no MediaRecorder:\", e);\r\n reject(e);\r\n };\r\n console.log('mediaRecorder.state', mediaRecorder.state);\r\n console.log(stream.active); \r\n console.log(stream.getTracks().map(t => t.readyState));\r\n\r\n \r\n mediaRecorder.start(timeSlice);\r\n } catch (e) {\r\n console.error(\"Falha ao iniciar:\", e);\r\n reject(e);\r\n }\r\n\r\n bufferSize = 0;\r\n\r\n stopped = false;\r\n // if (onBufferSizeError) {\r\n // onBufferSizeInterval = setInterval(async () => {\r\n // await mediaRecorder.requestData();\r\n // }, 30000);\r\n // }\r\n setTimeout(async () => {\r\n if(mediaRecorder.state == \"recording\") return;+ \r\n console.log('onstart Timeout');\r\n reject(new Error(\"onstart Timeout\"));\r\n }, 2000);\r\n });\r\n }\r\n\r\n // Fun\u00E7\u00E3o de cancelamento\r\n function stopRecording(): Promise<void> {\r\n return new Promise((resolve) => {\r\n if (mediaRecorder.state == \"recording\") {\r\n resolvePromise = resolve;\r\n\r\n mediaRecorder.requestData();\r\n\r\n mediaRecorder.stop();\r\n stopped = true;\r\n\r\n // clearInterval(onBufferSizeInterval);\r\n\r\n // Finalizar a stream\r\n stream.getTracks().forEach((el) => {\r\n el.stop();\r\n });\r\n } else {\r\n resolve();\r\n }\r\n });\r\n }\r\n\r\n // Fun\u00E7\u00E3o de pause\r\n function pauseRecording(): Promise<void> {\r\n return new Promise((resolve) => {\r\n if (mediaRecorder.state == \"recording\") {\r\n mediaRecorder.pause();\r\n resolve();\r\n } else {\r\n resolve();\r\n }\r\n });\r\n }\r\n\r\n // Fun\u00E7\u00E3o de resume\r\n function resumeRecording(): Promise<void> {\r\n return new Promise((resolve) => {\r\n // console.log(\"Resumindo...\");\r\n if (mediaRecorder.state == \"paused\") {\r\n mediaRecorder.resume();\r\n resolve();\r\n } else {\r\n resolve();\r\n }\r\n });\r\n }\r\n\r\n function getBufferSize(): number {\r\n return bufferSize;\r\n }\r\n\r\n return {\r\n startRecording,\r\n startWithRetry,\r\n stopRecording,\r\n pauseRecording,\r\n resumeRecording,\r\n recorderOptions,\r\n getBufferSize,\r\n };\r\n}\r\n", "import axios, { AxiosProgressEvent } from \"axios\";\r\nimport UploadDataDTO from \"../../dtos/UploadDataDTO\";\r\nimport { trackers } from \"../../plugins/insights\";\r\nimport { BackendService } from \"../backend/BackendService\";\r\nimport { StorageService } from \"../proctoring/ProctoringSession\";\r\nimport { IUploadService, UploadResult } from \"./IUploadService\";\r\n\r\nexport class UploadService implements IUploadService {\r\n private readonly proctoringId: string;\r\n private imageUrlPackage: string[] = [];\r\n private imageBatchNum: number = 0;\r\n private contImages: number = 0;\r\n\r\n constructor(proctoringId: string, private readonly backend: BackendService) {\r\n this.proctoringId = proctoringId;\r\n }\r\n\r\n async uploadPackage(data: UploadDataDTO, token: string): Promise<any> {\r\n const { file, onProgress } = data;\r\n try {\r\n const progressCallback = (e: { loadedBytes: number }) => {\r\n const progress = (e.loadedBytes / file.size) * 100;\r\n onProgress && onProgress(Math.round(progress));\r\n };\r\n\r\n const uploadUrl = await this.backend.getSignedUrl(token, file, this.proctoringId);\r\n const uploaded = await axios\r\n .request({\r\n url: uploadUrl,\r\n method: \"PUT\",\r\n headers: {\r\n \"Content-Type\": file.type,\r\n \"x-ms-blob-type\": \"BlockBlob\",\r\n },\r\n data: file,\r\n onUploadProgress: (p: AxiosProgressEvent) => {\r\n progressCallback({ loadedBytes: p.loaded });\r\n },\r\n })\r\n .then(() => true)\r\n .catch(() => false);\r\n return {\r\n storage: StorageService.none,\r\n url: uploadUrl,\r\n uploaded: uploaded,\r\n };\r\n }\r\n catch (err) {\r\n trackers.registerError(this.proctoringId, `Failed to upload to AWS\\n\\tFile name: ${file.name}\\n\\tFile type: ${file.type}\\n\\tFile size: ${file.size}`);\r\n throw new Error(\"Failed to upload to AWS\");\r\n }\r\n }\r\n\r\n async uploadImages(data: UploadDataDTO, token: string, packSize: number): Promise<UploadResult> {\r\n const { file, onProgress } = data;\r\n try {\r\n\r\n const progressCallback = (e: { loadedBytes: number }) => {\r\n const progress = (e.loadedBytes / file.size) * 100;\r\n onProgress && onProgress(Math.round(progress));\r\n };\r\n\r\n let uploadUrl;\r\n\r\n // pega as urls de 1 em 1 minuto\r\n if(this.imageBatchNum === this.contImages){\r\n const batchArray = []; \r\n for (let i = this.imageBatchNum; i < this.imageBatchNum+60; i++) {\r\n let imageName = `${this.proctoringId}/${this.proctoringId}_${i+1}.jpg`;\r\n if((i+1) % packSize == 0)\r\n imageName = `${this.proctoringId}/${this.proctoringId}_${i+1}_realtime.jpg`;\r\n\r\n batchArray.push({\r\n objectName: imageName,\r\n contentType: \"image/jpeg\",\r\n });\r\n }\r\n \r\n const batchUrls = await this.backend.getSignedUrlImage(token, batchArray);\r\n batchUrls.map((item) => {\r\n this.imageUrlPackage.push(item);\r\n });\r\n this.imageBatchNum += 60;\r\n }\r\n \r\n // Faz o upload \r\n let uploaded: boolean = false;\r\n uploaded = await axios\r\n .request({\r\n url: this.imageUrlPackage[this.contImages],\r\n method: \"PUT\",\r\n headers: {\r\n \"Content-Type\": file.type,\r\n \"x-ms-blob-type\": \"BlockBlob\",\r\n },\r\n data: file,\r\n onUploadProgress: (p: AxiosProgressEvent) => {\r\n progressCallback({ loadedBytes: p.loaded });\r\n },\r\n })\r\n .then((response) => {\r\n if(response.status == 200 || response.status == 201){\r\n this.contImages++;\r\n return true;\r\n }\r\n else return false;\r\n })\r\n .catch(() => false)\r\n .finally(() => {\r\n // this.contImages++;\r\n });\r\n \r\n\r\n\r\n return {\r\n storage: StorageService.none,\r\n url: uploadUrl,\r\n uploaded: uploaded,\r\n };\r\n } catch (err) {\r\n // TODO: Tipo do arquivo e Tamanho do aquivo\r\n trackers.registerError(this.proctoringId, `Failed to upload to AWS\\n\\tFile name: ${file.name}\\n\\tFile type: ${file.type}\\n\\tFile size: ${file.size}`);\r\n throw new Error(\"Failed to upload to AWS\");\r\n }\r\n }\r\n\r\n async upload(data: UploadDataDTO, token: string, image?: boolean): Promise<UploadResult> {\r\n const { file, onProgress } = data;\r\n \r\n try {\r\n\r\n const progressCallback = (e: { loadedBytes: number }) => {\r\n const progress = (e.loadedBytes / file.size) * 100;\r\n onProgress && onProgress(Math.round(progress));\r\n };\r\n\r\n let uploadUrl;\r\n if(image) {\r\n if(this.imageBatchNum === this.contImages){\r\n const batchArray = []; \r\n for (let i = this.imageBatchNum; i < this.imageBatchNum+20; i++) {\r\n batchArray.push({\r\n objectName: `${this.proctoringId}/${this.proctoringId}_${i+1}.jpg`,\r\n contentType: \"image/jpeg\",\r\n });\r\n }\r\n \r\n const batchUrls = await this.backend.getSignedUrlImage(token, batchArray);\r\n batchUrls.map((item) => {\r\n this.imageUrlPackage.push(item);\r\n });\r\n this.imageBatchNum += 20;\r\n }\r\n } else {\r\n uploadUrl = await this.backend.getSignedUrl(token, file, this.proctoringId);\r\n }\r\n\r\n let uploaded: boolean = false;\r\n if (image) {\r\n uploaded = await axios\r\n .request({\r\n url: this.imageUrlPackage[this.contImages],\r\n method: \"PUT\",\r\n headers: {\r\n \"Content-Type\": file.type,\r\n \"x-ms-blob-type\": \"BlockBlob\",\r\n },\r\n data: file,\r\n onUploadProgress: (p: AxiosProgressEvent) => {\r\n progressCallback({ loadedBytes: p.loaded });\r\n },\r\n })\r\n .then(() => true)\r\n .catch(() => false)\r\n .finally(() => {\r\n this.contImages++;\r\n });\r\n } else {\r\n uploaded = await axios\r\n .request({\r\n url: uploadUrl,\r\n method: \"PUT\",\r\n headers: {\r\n \"Content-Type\": file.type,\r\n \"x-ms-blob-type\": \"BlockBlob\",\r\n },\r\n data: file,\r\n onUploadProgress: (p: AxiosProgressEvent) => {\r\n progressCallback({ loadedBytes: p.loaded });\r\n },\r\n })\r\n .then(() => true)\r\n .catch(() => false);\r\n } \r\n\r\n\r\n return {\r\n storage: StorageService.none,\r\n url: uploadUrl,\r\n uploaded: uploaded,\r\n };\r\n } catch (err) {\r\n // TODO: Tipo do arquivo e Tamanho do aquivo\r\n trackers.registerError(this.proctoringId, `Failed to upload to AWS\\n\\tFile name: ${file.name}\\n\\tFile type: ${file.type}\\n\\tFile size: ${file.size}`);\r\n throw new Error(\"Failed to upload to AWS\");\r\n }\r\n }\r\n}\r\n", "export const SCRIPT_NOT_CALLED_INSIDE_BODY = \"script_not_called_inside_body\";\r\nexport const INCOMPATIBLE_NAVIGATOR = \"incompatible_navigator\";\r\nexport const REQUIRED_FIELD_NOT_PROVIDED = \"required_field_not_provided\";\r\nexport const NOT_SHARED_FIRST_SCREEN = 'not_shared_first_screen';\r\nexport const NOT_SHARED_SCREEN = 'not_shared_screen';\r\nexport const MULTIPLE_MONITORS_DETECTED = \"multiple_monitors_detected\";\r\nexport const PROCTORING_ALREADY_STARTED = \"proctoring_already_started\";\r\nexport const PROCTORING_NOT_STARTED = \"proctoring_not_started\";\r\nexport const PROCTORING_RUNNING = \"proctoring_running\";\r\nexport const NO_VIDEOS_RECORDED = \"no_videos_recorded\";\r\nexport const PERMISSIONS_NOT_GRANTED = \"permissions_not_granted\";\r\nexport const ANOTHER_STREAM_ACTIVE = \"another_stream_active\";\r\nexport const STREAM_UNDER_MINIMUM_PERMITTED = \"stream_under_minimum_permitted\";\r\nexport const BROWSER_NOT_SUPPORTED = \"browser_not_supported\";\r\nexport const TOKEN_MISSING = \"token_missing\";\r\nexport const CREDENTIALS_MISSING = \"credentials_missing\";\r\nexport const CAMERA_BLOCKED = \"camera_blocked\";\r\nexport const SPY_SCAN_API_NOT_FOUND = \"spy_scan_api_not_found\";\r\nexport const ERROR_ON_MOBILE_APP_NOT_FOUND = \"error_on_mobile_app_not_found\";\r\nexport const EXTERNAL_CAMERA_NOT_STARTED = \"external_camera_not_started\";\r\nexport const EXTERNAL_CAMERA_CHECK_TRANSMISSION = \"external_camera_timed_out\";", "import { ObjectDetector, FilesetResolver } from \"@mediapipe/tasks-vision\";\r\nimport IParamsConfig from \"../interfaces/ParamsConfig\";\r\nimport { BaseDetection } from \"./BaseDetection\";\r\n\r\nexport class ObjectDetection extends BaseDetection {\r\n constructor(options?: { onRealtimeAlertsCallback?: (response: any) => void }, paramsConfig?: IParamsConfig, classVideo: string = 'videoPreviewFrameDetection', classDiv: string = \"liveViewFrameDetection\") {\r\n super(\"ObjectDetector\", `https://storage.googleapis.com/mediapipe-models/object_detector/efficientdet_lite0/float16/1/efficientdet_lite0.tflite`, options, paramsConfig, classVideo, classDiv);\r\n }\r\n\r\n stopDetection(): void {\r\n super.stopDetection();\r\n\r\n // verificar se tem algum alerta ativo e chamar o 'OK'\r\n if(this.numPersonsSent > 0) {\r\n this.handleOk('person_ok','person_detection_on_stream');\r\n }\r\n \r\n }\r\n\r\n displayVideoDetections(result: { detections: any; }) {\r\n // Remove any highlighting from previous frame.\r\n for (const child of this.children) {\r\n this.liveView!.removeChild(child);\r\n }\r\n this.children.splice(0);\r\n // Iterate through predictions and draw them to the live view\r\n for (const detection of result.detections) {\r\n // Dimens\u00F5es do monitor\r\n const monitorWidth = window.innerWidth; // Obt\u00E9m a largura do monitor\r\n const monitorHeight = window.innerHeight; // Obt\u00E9m a altura do monitor\r\n\r\n // Dimens\u00F5es do elemento this.video!\r\n const desiredWidth = this.video!.offsetWidth;\r\n const desiredHeight = this.video!.offsetHeight;\r\n\r\n // Fatores de escala\r\n const widthScaleFactor = desiredWidth / monitorWidth;\r\n const heightScaleFactor = desiredHeight / monitorHeight;\r\n\r\n // Ajuste dos valores proporcionais\r\n const adjustedLeft = (desiredWidth - detection.boundingBox.width * widthScaleFactor - detection.boundingBox.originX * widthScaleFactor);\r\n const adjustedTop = detection.boundingBox.originY * heightScaleFactor;\r\n const adjustedWidth = (detection.boundingBox.width - 10) * widthScaleFactor;\r\n const adjustedHeight = detection.boundingBox.height * heightScaleFactor;\r\n\r\n const p = document.createElement(\"p\");\r\n p.innerText =\r\n detection.categories[0].categoryName +\r\n \" - with \" +\r\n Math.round(parseFloat(detection.categories[0].score) * 100) +\r\n \"% confidence.\";\r\n\r\n p.style.right = adjustedLeft - 20 + \"px\";\r\n p.style.top = adjustedTop + \"px\";\r\n p.style.width = adjustedWidth +\"px\";\r\n\r\n const commonStyle = {\r\n zIndex: \"2\",\r\n position: \"absolute\",\r\n border: \"1px dashed #fff\",\r\n };\r\n \r\n Object.assign(p.style, {\r\n ...commonStyle,\r\n margin: \"0\",\r\n fontSize: \"9px\",\r\n paddingBottom: \"5px\",\r\n paddingTop: \"5px\",\r\n color: \"#fff\",\r\n backgroundColor: \"#007f8b\",\r\n });\r\n \r\n const highlighter = document.createElement(\"div\");\r\n highlighter.setAttribute(\"class\", \"highlighter\");\r\n\r\n // console.log(\"this.video!.offsetWidth: \", this.video!.offsetWidth);\r\n\r\n highlighter.style.right = adjustedLeft - 20 + \"px\";\r\n highlighter.style.top = adjustedTop + \"px\";\r\n highlighter.style.width = adjustedWidth + \"px\";\r\n highlighter.style.height = adjustedHeight - 20 + \"px\";\r\n \r\n Object.assign(highlighter.style, {\r\n ...commonStyle,\r\n zIndex: \"1\",\r\n background: \"rgba(0, 255, 0, 0.25)\",\r\n });\r\n\r\n // Mostrar marca\u00E7\u00F5es na tela\r\n this.liveView!.appendChild(highlighter);\r\n this.liveView!.appendChild(p);\r\n this.children.push(highlighter);\r\n this.children.push(p);\r\n }\r\n }\r\n\r\n numPersonsSent: number;\r\n numCellphoneSent: number;\r\n verify(result: { detections: any; }) {\r\n const numPersons = result.detections.filter((d: { categories: any[]; }) => d.categories.some((c: { categoryName: string; }) => c.categoryName === 'person')).length;\r\n const numCellphones = result.detections.filter((d: { categories: any[]; }) => d.categories.some((c: { categoryName: string; }) => c.categoryName === 'cell phone')).length;\r\n\r\n if(this.paramsConfig.videoBehaviourParameters?.detectPerson && numPersons !== this.numPersonsSent) {\r\n if (numPersons === 0) {\r\n this.handleAlert('no_person_detected', 'person_detection_on_stream');\r\n this.numPersonsSent = numPersons;\r\n } else if (numPersons > 1) {\r\n this.handleAlert('multiple_persons_detected', 'person_detection_on_stream');\r\n this.numPersonsSent = numPersons;\r\n } else {\r\n this.handleOk('person_ok','person_detection_on_stream');\r\n this.numPersonsSent = numPersons;\r\n }\r\n }\r\n\r\n if(this.paramsConfig.videoBehaviourParameters?.detectCellPhone && numCellphones !== this.numCellphoneSent) {\r\n if (numCellphones > 0) {\r\n this.handleAlert('cellphone_detected', 'mobile_detection_on_stream');\r\n this.numCellphoneSent = numCellphones;\r\n } \r\n else {\r\n this.handleOk('cellphone_ok', 'mobile_detection_on_stream');\r\n this.numCellphoneSent = numCellphones;\r\n }\r\n }\r\n } \r\n}", "export interface VolumeMeterOptions { \r\n setVolume?: (volume: number) => void; \r\n}\r\n\r\nexport class VolumeMeter {\r\n private volume: number | null = null;\r\n private stream: MediaStream;\r\n private analyser: AnalyserNode;\r\n private animationFrameId: number | null = null;\r\n private microphone: MediaStreamAudioSourceNode;\r\n private audioContext: AudioContext;\r\n\r\n constructor(stream: MediaStream) {\r\n this.stream = stream;\r\n }\r\n\r\n public async start(options: VolumeMeterOptions = {}): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n // this.audioContext = new AudioContext();\r\n // this.analyser = this.audioContext.createAnalyser();\r\n // this.microphone = this.audioContext.createMediaStreamSource(this.stream);\r\n \r\n // this.analyser.smoothingTimeConstant = 0.8;\r\n // this.analyser.fftSize = 1024;\r\n \r\n // this.microphone.connect(this.analyser);\r\n\r\n // const processAudio = () => {\r\n // const array = new Uint8Array(this.analyser.frequencyBinCount);\r\n // this.analyser.getByteFrequencyData(array);\r\n // const arraySum = array.reduce((a, value) => a + value, 0);\r\n // const average = arraySum / array.length;\r\n\r\n // this.setVolume(average);\r\n // options.setVolume && options.setVolume(average);\r\n\r\n // this.animationFrameId = requestAnimationFrame(processAudio);\r\n // };\r\n\r\n // this.animationFrameId = requestAnimationFrame(processAudio);\r\n resolve(true); \r\n } catch(error) {\r\n this.stop();\r\n reject(`Error: ${error}`);\r\n }\r\n });\r\n }\r\n\r\n public stop() {\r\n if (this.animationFrameId !== null) {\r\n cancelAnimationFrame(this.animationFrameId);\r\n } \r\n // this.audioContext.close();\r\n // this.microphone.disconnect();\r\n // this.analyser.disconnect();\r\n }\r\n\r\n public getVolume() {\r\n return this.volume;\r\n }\r\n\r\n private setVolume(value: number) {\r\n this.volume = value;\r\n }\r\n}", "import { RecordRTCPromisesHandler } from \"recordrtc\";\r\nimport {\r\n ProctoringSession,\r\n RecordingOrigin,\r\n} from \"../proctoring/ProctoringSession\";\r\nimport { IRecorder } from \"./IRecorder\";\r\nimport recorder, { setRecorderProctoringId } from \"../../plugins/recorder\";\r\nimport { BackendService } from \"../backend/BackendService\";\r\nimport { UploadService } from \"../upload/UploadService\";\r\nimport { trackers } from \"../../plugins/insights\";\r\nimport {\r\n ANOTHER_STREAM_ACTIVE,\r\n CAMERA_BLOCKED,\r\n STREAM_UNDER_MINIMUM_PERMITTED,\r\n} from \"../../errors/errors\";\r\nimport IParamsConfig from \"../../interfaces/ParamsConfig\";\r\nimport { ProctoringVideoOptions } from \"../../proctoring/options/ProctoringVideoOptions\";\r\nimport { DevicesChanged } from \"../../interfaces/Devices\";\r\nimport enumarateDevices from \"../../modules/enumarateDevices\";\r\n// Take off Mediapipe\r\nimport { ObjectDetection } from \"../../modules/objectDetection\";\r\nimport { FaceDetection } from \"../../modules/faceDetection\";\r\nimport { buildVideoPreview } from \"../../modules/BaseDetection\";\r\nimport { VolumeMeter } from \"./VolumeMeter\";\r\nimport { isMobileDevice } from \"../../utils/browserInformations\";\r\n// @ts-ignore\r\nimport JSZip from \"jszip/dist/jszip.min.js\";\r\n\r\nexport class CameraRecorder implements IRecorder {\r\n private blobs: Blob[] = [];\r\n private paramsConfig: IParamsConfig = {\r\n audioBehaviourParameters: {\r\n recordingBitrate: 128,\r\n noiseLimit: 40,\r\n },\r\n imageBehaviourParameters: {\r\n useUploadImage: true,\r\n uploadInterval: 20,\r\n saveVideo: true,\r\n },\r\n videoBehaviourParameters: {\r\n detectPerson: false,\r\n detectFace: false,\r\n detectCellPhone: false,\r\n },\r\n };\r\n // private imageParams: ImageParameters = {\r\n // useUploadImage: true,\r\n // uploadInterval: 20,\r\n // saveVideo: true\r\n // };\r\n private options: {\r\n cameraId?: string;\r\n microphoneId?: string;\r\n onBufferSizeError?: boolean;\r\n onBufferSizeErrorCallback?: (cameraStream?: any) => void;\r\n proctoringType?: \"VIDEO\" | \"IMAGE\" | \"REALTIME\";\r\n onChangeDevicesCallback?: (devices: DevicesChanged) => void;\r\n onRealtimeAlertsCallback?: (response: any) => void;\r\n } = {\r\n cameraId: undefined,\r\n microphoneId: undefined,\r\n onBufferSizeError: false,\r\n onBufferSizeErrorCallback: (cameraStream?: any) => {},\r\n proctoringType: \"IMAGE\",\r\n onChangeDevicesCallback: (devices: DevicesChanged) => {},\r\n onRealtimeAlertsCallback: (response: any) => {},\r\n };\r\n private videoOptions: ProctoringVideoOptions = {\r\n width: 640,\r\n height: 480,\r\n minWidth: 0,\r\n minHeight: 0,\r\n };\r\n\r\n private blobsRTC: Blob[] = [];\r\n public recorder: RecordRTCPromisesHandler;\r\n public cameraStream: MediaStream;\r\n\r\n public imageCount: number = 0;\r\n public imageCapture: any;\r\n public imageInterval: any;\r\n public sendFrameInterval: any;\r\n public backend: BackendService | undefined;\r\n public backendToken: string | undefined;\r\n public proctoringId: string | undefined;\r\n private recorderOptions: MediaRecorderOptions | undefined;\r\n\r\n public upload: UploadService | undefined;\r\n\r\n public video: HTMLVideoElement;\r\n public canvas: HTMLCanvasElement;\r\n\r\n // Take off Mediapipe\r\n public faceDetection: FaceDetection;\r\n public objectDetection: ObjectDetection;\r\n public filesToUpload: File[] = [];\r\n\r\n // NoiseDetection\r\n private intervalNoiseDetection: any;\r\n private volumeMeter: VolumeMeter | undefined;\r\n\r\n private animationFrameId: number | null = null;\r\n private isCanvasLoopActive: boolean = false;\r\n private hardwareStream: MediaStream | null = null;\r\n private internalClonedStream: MediaStream | null = null;\r\n\r\n private videoElement: HTMLVideoElement | null = null;\r\n\r\n constructor(\r\n options: {\r\n cameraId?: string;\r\n microphoneId?: string;\r\n onBufferSizeError?: boolean;\r\n onBufferSizeErrorCallback: (cameraStream?: any) => void;\r\n proctoringType?: \"VIDEO\" | \"IMAGE\" | \"REALTIME\";\r\n onChangeDevicesCallback?: (devices: DevicesChanged) => void;\r\n onRealtimeAlertsCallback?: (response: any) => void;\r\n },\r\n videoOptions: ProctoringVideoOptions,\r\n paramsConfig?: IParamsConfig,\r\n backend?: BackendService,\r\n backendToken?: string\r\n ) {\r\n this.options = options;\r\n this.videoOptions = videoOptions;\r\n this.backend = backend;\r\n this.backendToken = backendToken;\r\n\r\n paramsConfig && (this.paramsConfig = paramsConfig);\r\n // imageParams && (this.imageParams = imageParams);\r\n }\r\n\r\n file?: File;\r\n public recordingStart: () => Promise<void>;\r\n public recordingStop: () => any;\r\n public recordingPause: () => any;\r\n public recordingResume: () => any;\r\n public getBufferSize: () => any;\r\n \r\n\r\n public setProctoringId(proctoringId: string) {\r\n this.proctoringId = proctoringId;\r\n this.proctoringId &&\r\n this.backend &&\r\n (this.upload = new UploadService(this.proctoringId, this.backend));\r\n setRecorderProctoringId(proctoringId);\r\n }\r\n\r\n async initializeDetectors() {\r\n buildVideoPreview();\r\n\r\n if (\r\n this.paramsConfig.videoBehaviourParameters?.detectPerson ||\r\n this.paramsConfig.videoBehaviourParameters?.detectCellPhone\r\n ) {\r\n this.objectDetection = new ObjectDetection(\r\n {\r\n onRealtimeAlertsCallback: (response: any) =>\r\n this.options.onRealtimeAlertsCallback!(response),\r\n },\r\n this.paramsConfig\r\n );\r\n await this.objectDetection.initializeDetector();\r\n }\r\n if (this.paramsConfig.videoBehaviourParameters?.detectFace) {\r\n this.faceDetection = new FaceDetection(\r\n {\r\n onRealtimeAlertsCallback: (response: any) =>\r\n this.options.onRealtimeAlertsCallback!(response),\r\n },\r\n this.paramsConfig\r\n );\r\n await this.faceDetection.initializeDetector();\r\n }\r\n }\r\n\r\n configImageCapture(): void {\r\n this.video = document.createElement(\"video\");\r\n this.canvas = document.createElement(\"canvas\");\r\n\r\n this.video.srcObject = this.cameraStream;\r\n this.video.play();\r\n this.video.muted = true;\r\n\r\n const isPortrait =\r\n screen.orientation?.type.includes(\"portrait\");\r\n \r\n if (isPortrait && isMobileDevice()) {\r\n console.log(\"configurando canvas em portrait\");\r\n this.canvas.width = this.videoOptions.height/2;\r\n this.canvas.height = this.videoOptions.width/2;\r\n }\r\n else {\r\n this.canvas.width = this.videoOptions.width/2;\r\n this.canvas.height = this.videoOptions.height/2;\r\n }\r\n\r\n }\r\n\r\n currentRetries = 0;\r\n async bufferError(e: any) {\r\n console.log('buffer error Camera Recorder params ' + this.paramsConfig.videoBehaviourParameters)\r\n const retryEnabled =\r\n this.paramsConfig.videoBehaviourParameters?.retryEnabled || false;\r\n const maxRetries =\r\n this.paramsConfig.videoBehaviourParameters?.maxRetries || 3;\r\n\r\n if (retryEnabled && this.currentRetries < maxRetries) {\r\n\r\n console.log('buffer error Camera Recorder retry');\r\n // Stop current recording\r\n await this.recordingStop();\r\n\r\n // Create new recorder instance and start\r\n await this.startRecording({\r\n retry: true,\r\n });\r\n\r\n this.currentRetries++;\r\n this.options.onBufferSizeErrorCallback &&\r\n this.options.onBufferSizeErrorCallback(this.cameraStream);\r\n } else {\r\n this.options.onBufferSizeErrorCallback &&\r\n this.options.onBufferSizeErrorCallback();\r\n }\r\n }\r\n\r\n async startStream(options?: { retry?: boolean }): Promise<void> {\r\n const { cameraId, microphoneId, onBufferSizeErrorCallback } = this.options;\r\n\r\n // Op\u00E7\u00F5es da grava\u00E7\u00E3o do v\u00EDdeo\r\n const constraints: MediaStreamConstraints = {\r\n audio: { deviceId: microphoneId },\r\n video: {\r\n deviceId: cameraId,\r\n width: this.videoOptions.width,\r\n height: this.videoOptions.height,\r\n frameRate: 15,\r\n },\r\n };\r\n\r\n // Stream do v\u00EDdeo\r\n try {\r\n this.hardwareStream = await navigator.mediaDevices.getUserMedia(\r\n constraints\r\n );\r\n } catch (error: any) {\r\n if (error.toString() == \"NotReadableError: Could not start video source\")\r\n throw \"N\u00E3o foi poss\u00EDvel conectar a camera, ela pode estar sendo utilizada por outro programa\";\r\n throw error;\r\n }\r\n\r\n this.cameraStream = this.hardwareStream;\r\n\r\n const track = this.cameraStream.getVideoTracks()[0];\r\n const settings = track.getSettings();\r\n let { width = 0, height = 0 } = settings;\r\n\r\n const isPortrait =\r\n screen.orientation?.type.includes(\"portrait\");\r\n\r\n if (isPortrait && isMobileDevice()) {\r\n if(this.videoOptions.width == height && this.videoOptions.height == width) {\r\n [width, height] = [height, width];\r\n }\r\n }\r\n\r\n if (\r\n this.videoOptions.minWidth! > width! ||\r\n this.videoOptions.minHeight! > height!\r\n ) {\r\n throw STREAM_UNDER_MINIMUM_PERMITTED;\r\n } else if (\r\n this.videoOptions.width !== width ||\r\n this.videoOptions.height !== height\r\n ) {\r\n trackers.registerAnotherStream(\r\n this.proctoringId!,\r\n `Maybe have another stream active\\nVideo Options: ${JSON.stringify(\r\n this.videoOptions,\r\n null,\r\n 2\r\n )}\\nSetting: ${JSON.stringify(settings, null, 2)}`\r\n );\r\n throw ANOTHER_STREAM_ACTIVE;\r\n }\r\n\r\n }\r\n\r\n async stopStream(): Promise<void> {\r\n if (this.cameraStream) {\r\n this.cameraStream.getTracks().forEach(track => track.stop());\r\n }\r\n\r\n if (this.internalClonedStream) {\r\n this.internalClonedStream.getTracks().forEach(track => track.stop());\r\n this.internalClonedStream = null;\r\n }\r\n\r\n // Limpeza extra para garantir (caso tenha sobrado hardwareStream solto)\r\n if (this.hardwareStream) {\r\n this.hardwareStream.getTracks().forEach(track => track.stop());\r\n this.hardwareStream = null;\r\n }\r\n }\r\n\r\n async waitForVideoFlow(): Promise<void> {\r\n return new Promise<void>(resolve => \r\n {\r\n const check = () => {\r\n if(this.videoElement && this.videoElement?.readyState >= 3) return resolve();\r\n else requestAnimationFrame(check);\r\n };\r\n check();\r\n });\r\n }\r\n\r\n async attachAndWarmup(stream: MediaStream): Promise<void> {\r\n\r\n \r\n this.videoElement = document.createElement(\"video\");\r\n\r\n this.videoElement.srcObject = stream;\r\nthis.videoElement.muted = true;\r\n await this.videoElement.play().catch(e => {});\r\n\r\n console.log('cameraStream.getVideoTracks() length:', this.cameraStream.getVideoTracks().length);\r\n // espera metadata \r\n await new Promise<void>(resolve => \r\n {\r\n if(this.videoElement && this.videoElement?.readyState >= 1) return resolve();\r\n if(this.videoElement)\r\n this.videoElement.onloadedmetadata = () => resolve();\r\n });\r\n\r\n console.log('metadata ok');\r\n // espera frames reais\r\n await this.waitForVideoFlow();\r\n console.log('waitForVideoFlow ok');\r\n\r\n // Delay defensivo para garantir que o video esta fluindo\r\n await new Promise(r => setTimeout(r, 300));\r\n }\r\n\r\nasync startRecording(options?: { retry?: boolean }): Promise<void> {\r\n\r\n console.log('startRecording Camera Recorder');\r\n if (\r\n (this.paramsConfig.videoBehaviourParameters?.detectPerson ||\r\n this.paramsConfig.videoBehaviourParameters?.detectCellPhone ||\r\n this.paramsConfig.videoBehaviourParameters?.detectFace) &&\r\n !options?.retry\r\n ) {\r\n console.log('startRecording Camera Recorder initializeDetectors');\r\n\r\n await this.initializeDetectors();\r\n }\r\n\r\n const { cameraId, microphoneId } = this.options;\r\n // Op\u00E7\u00F5es da grava\u00E7\u00E3o do v\u00EDdeo\r\n const constraints: MediaStreamConstraints = {\r\n audio: { deviceId: microphoneId },\r\n video: {\r\n deviceId: cameraId,\r\n width: this.videoOptions.width,\r\n height: this.videoOptions.height,\r\n frameRate: 15,\r\n },\r\n };\r\n\r\n // Stream do v\u00EDdeo\r\n try {\r\n this.hardwareStream = await navigator.mediaDevices.getUserMedia(\r\n constraints\r\n );\r\n this.cameraStream = this.hardwareStream;\r\n\r\n } catch (error: any) {\r\n console.log('startRecording Camera Recorder error', error);\r\n\r\n if (error.toString() == \"NotReadableError: Could not start video source\")\r\n throw \"N\u00E3o foi poss\u00EDvel conectar a camera, ela pode estar sendo utilizada por outro programa\";\r\n throw error;\r\n }\r\n\r\n // attach and Warmup\r\nawait this.attachAndWarmup(this.cameraStream);\r\n\r\n// creating recorder\r\nconst {\r\n startRecording,\r\n stopRecording,\r\n pauseRecording,\r\n resumeRecording,\r\n recorderOptions,\r\n getBufferSize,\r\n} = recorder(\r\n this.cameraStream,\r\n // streamToRecord,\r\n this.blobs,\r\n this.videoOptions,\r\n this.options.onBufferSizeError,\r\n (e) => this.bufferError(e),\r\n false\r\n);\r\n\r\nthis.recordingStart = startRecording;\r\nthis.recordingStop = stopRecording;\r\nthis.recordingPause = pauseRecording;\r\nthis.recordingResume = resumeRecording;\r\nthis.recorderOptions = recorderOptions;\r\nthis.getBufferSize = getBufferSize;\r\n\r\ntry\r\n {\r\n await new Promise(r => setTimeout(r, 500));\r\n await this.recordingStart();\r\n }\r\n catch(error: any)\r\n {\r\n console.log('startRecording Camera Recorder error', error);\r\n throw error;\r\n }\r\n\r\n const track = this.cameraStream.getVideoTracks()[0];\r\n const settings = track.getSettings();\r\n let { width = 0, height = 0 } = settings;\r\n const isPortrait =\r\n screen.orientation?.type.includes(\"portrait\");\r\n\r\n if (isPortrait && isMobileDevice()) {\r\n if(this.videoOptions.width == height && this.videoOptions.height == width) {\r\n [width, height] = [height, width];\r\n }\r\n }\r\n\r\n if (\r\n this.videoOptions.minWidth! > width! ||\r\n this.videoOptions.minHeight! > height!\r\n ) {\r\n throw STREAM_UNDER_MINIMUM_PERMITTED;\r\n } else if (\r\n this.videoOptions.width !== width ||\r\n this.videoOptions.height !== height\r\n ) {\r\n trackers.registerAnotherStream(\r\n this.proctoringId!,\r\n `Maybe have another stream active\\nVideo Options: ${JSON.stringify(\r\n this.videoOptions,\r\n null,\r\n 2\r\n )}\\nSetting: ${JSON.stringify(settings, null, 2)}`\r\n );\r\n throw ANOTHER_STREAM_ACTIVE;\r\n }\r\n\r\n // Take off Mediapipe\r\n if (this.paramsConfig.videoBehaviourParameters?.detectFace) {\r\n await this.faceDetection.enableCam(this.cameraStream);\r\n }\r\n if (\r\n this.paramsConfig.videoBehaviourParameters?.detectPerson ||\r\n this.paramsConfig.videoBehaviourParameters?.detectCellPhone\r\n ) {\r\n await this.objectDetection.enableCam(this.cameraStream);\r\n }\r\n\r\n this.filesToUpload = [];\r\n if (this.options.proctoringType == \"REALTIME\") {\r\n this.captureFrame(); // captura um frame imediatamente\r\n // this.sendFrameInterval = setInterval(() => this.captureFrame(), 1000 * this.paramsConfig.videoBehaviourParameters?.realtimeCaptureInterval!); // de 30 em 30 segundos captura um frame\r\n }\r\n\r\n // Noise Detected\r\n // if(this.paramsConfig.videoBehaviourParameters?.detectNoise)\r\n // this.intervalNoiseDetection = setInterval(() => this.onNoiseDetected(), 500);\r\n\r\n this.packageCount = 0;\r\n\r\n console.log('startRecording Camera Recorder OK');\r\n}\r\n\r\n\r\n async startRecordingOld(options?: { retry?: boolean }): Promise<void> {\r\n\r\n console.log('startRecording Camera Recorder');\r\n if (\r\n (this.paramsConfig.videoBehaviourParameters?.detectPerson ||\r\n this.paramsConfig.videoBehaviourParameters?.detectCellPhone ||\r\n this.paramsConfig.videoBehaviourParameters?.detectFace) &&\r\n !options?.retry\r\n ) {\r\n console.log('startRecording Camera Recorder initializeDetectors');\r\n\r\n await this.initializeDetectors();\r\n }\r\n\r\n // console.log(\"Starting...\");\r\n const { cameraId, microphoneId, onBufferSizeErrorCallback } = this.options;\r\n\r\n // Op\u00E7\u00F5es da grava\u00E7\u00E3o do v\u00EDdeo\r\n const constraints: MediaStreamConstraints = {\r\n audio: { deviceId: microphoneId },\r\n video: {\r\n deviceId: cameraId,\r\n width: this.videoOptions.width,\r\n height: this.videoOptions.height,\r\n frameRate: 15,\r\n },\r\n };\r\n\r\n // Stream do v\u00EDdeo\r\n try {\r\n this.hardwareStream = await navigator.mediaDevices.getUserMedia(\r\n constraints\r\n );\r\n } catch (error: any) {\r\n console.log('startRecording Camera Recorder error', error);\r\n\r\n if (error.toString() == \"NotReadableError: Could not start video source\")\r\n throw \"N\u00E3o foi poss\u00EDvel conectar a camera, ela pode estar sendo utilizada por outro programa\";\r\n throw error;\r\n }\r\n\r\n // ### RecordRTC\r\n // try {\r\n // this.recorder = new RecordRTCPromisesHandler(this.cameraStream, {\r\n // type: \"video\",\r\n // });\r\n\r\n // // Come\u00E7ar a grava\u00E7\u00E3o da camera\r\n // this.recorder.startRecording();\r\n // } catch (error) {\r\n // trackers.registerErrorRecorderRTC(this.proctoringId!, `Error on start Recorder RTC: ${error}`);\r\n // }\r\n // ### Finish RecordRTC\r\n\r\n this.cameraStream = this.hardwareStream;\r\n\r\n const track = this.cameraStream.getVideoTracks()[0];\r\n const settings = track.getSettings();\r\n let { width = 0, height = 0 } = settings;\r\n // const needsRotationFix = isMobileDevice() && width > height;\r\n\r\n // this.isCanvasLoopActive = true;\r\n\r\n // if (needsRotationFix) {\r\n // console.log(\"Aplicando corre\u00E7\u00E3o e substituindo stream p\u00FAblico...\");\r\n // // O hardware alimenta o canvas, e o canvas vira o stream p\u00FAblico\r\n // this.cameraStream = this.createRotatedStream(this.hardwareStream!);\r\n // }\r\n\r\n console.log('cameraStream.getVideoTracks() length:', this.cameraStream.getVideoTracks().length);\r\n // espera a track 'fluir'\r\n await new Promise<void>(resolve => \r\n {\r\n const interval = setInterval(() => {\r\n console.log('cameraStream.getVideoTracks()[0].readyState', this.cameraStream.getVideoTracks()[0].readyState);\r\n if(this.cameraStream.getVideoTracks()[0].readyState == \"live\") {\r\n clearInterval(interval);\r\n resolve();\r\n }\r\n }, 100);\r\n });\r\n\r\n // espera 500ms para garantir que a track 'fluiu'\r\n await new Promise(r => setTimeout(r, 300));\r\n\r\n const {\r\n startRecording,\r\n stopRecording,\r\n pauseRecording,\r\n resumeRecording,\r\n recorderOptions,\r\n getBufferSize,\r\n } = recorder(\r\n this.cameraStream,\r\n // streamToRecord,\r\n this.blobs,\r\n this.videoOptions,\r\n this.options.onBufferSizeError,\r\n (e) => this.bufferError(e),\r\n false\r\n );\r\n\r\n this.recordingStart = startRecording;\r\n this.recordingStop = stopRecording;\r\n this.recordingPause = pauseRecording;\r\n this.recordingResume = resumeRecording;\r\n this.recorderOptions = recorderOptions;\r\n this.getBufferSize = getBufferSize;\r\n\r\n console.log('startRecording Camera Recorder recordingStart');\r\n\r\n try\r\n {\r\n await new Promise(r => setTimeout(r, 500));\r\n await this.recordingStart();\r\n }\r\n catch(error: any)\r\n {\r\n console.log('startRecording Camera Recorder error', error);\r\n throw error;\r\n }\r\n\r\n // const tracks = this.cameraStream.getVideoTracks();\r\n\r\n // Gerar alerta quando a camera for bloqueada no browser\r\n // tracks[0].onended = (() => {\r\n // this.options.onChangeDevicesCallback && this.options.onChangeDevicesCallback({\r\n // cameras: [],\r\n // microphones: [],\r\n // status: \"block\"\r\n // });\r\n // this.stopRecording();\r\n\r\n // throw CAMERA_BLOCKED;\r\n // });\r\n\r\n // const settings = tracks[0].getSettings();\r\n \r\n // conferindo se a camera est\u00E1 em modo portrait\r\n // let { width = 0, height = 0 } = settings;\r\n\r\n const isPortrait =\r\n screen.orientation?.type.includes(\"portrait\");\r\n\r\n if (isPortrait && isMobileDevice()) {\r\n if(this.videoOptions.width == height && this.videoOptions.height == width) {\r\n [width, height] = [height, width];\r\n }\r\n }\r\n\r\n if (\r\n this.videoOptions.minWidth! > width! ||\r\n this.videoOptions.minHeight! > height!\r\n ) {\r\n throw STREAM_UNDER_MINIMUM_PERMITTED;\r\n } else if (\r\n this.videoOptions.width !== width ||\r\n this.videoOptions.height !== height\r\n ) {\r\n trackers.registerAnotherStream(\r\n this.proctoringId!,\r\n `Maybe have another stream active\\nVideo Options: ${JSON.stringify(\r\n this.videoOptions,\r\n null,\r\n 2\r\n )}\\nSetting: ${JSON.stringify(settings, null, 2)}`\r\n );\r\n throw ANOTHER_STREAM_ACTIVE;\r\n }\r\n\r\n // Take off Mediapipe\r\n if (this.paramsConfig.videoBehaviourParameters?.detectFace) {\r\n await this.faceDetection.enableCam(this.cameraStream);\r\n }\r\n if (\r\n this.paramsConfig.videoBehaviourParameters?.detectPerson ||\r\n this.paramsConfig.videoBehaviourParameters?.detectCellPhone\r\n ) {\r\n await this.objectDetection.enableCam(this.cameraStream);\r\n }\r\n\r\n this.filesToUpload = [];\r\n if (this.options.proctoringType == \"REALTIME\") {\r\n this.captureFrame(); // captura um frame imediatamente\r\n // this.sendFrameInterval = setInterval(() => this.captureFrame(), 1000 * this.paramsConfig.videoBehaviourParameters?.realtimeCaptureInterval!); // de 30 em 30 segundos captura um frame\r\n }\r\n\r\n // Noise Detected\r\n // if(this.paramsConfig.videoBehaviourParameters?.detectNoise)\r\n // this.intervalNoiseDetection = setInterval(() => this.onNoiseDetected(), 500);\r\n\r\n this.packageCount = 0;\r\n\r\n console.log('startRecording Camera Recorder finished');\r\n\r\n }\r\n\r\n async stopRecording(): Promise<void> {\r\n console.log(\"Stopping Camera Recorder...\");\r\n\r\n this.isCanvasLoopActive = false;\r\n\r\n this.recordingStop && (await this.recordingStop());\r\n\r\n try {\r\n \r\n\r\n // 2. Cancelar frame pendente se existir\r\n if (this.animationFrameId) {\r\n cancelAnimationFrame(this.animationFrameId);\r\n this.animationFrameId = null;\r\n }\r\n\r\n if (this.cameraStream) {\r\n this.cameraStream.getTracks().forEach(track => track.stop());\r\n }\r\n\r\n if (this.internalClonedStream) {\r\n this.internalClonedStream.getTracks().forEach(track => track.stop());\r\n this.internalClonedStream = null;\r\n }\r\n\r\n // Limpeza extra para garantir (caso tenha sobrado hardwareStream solto)\r\n if (this.hardwareStream) {\r\n this.hardwareStream.getTracks().forEach(track => track.stop());\r\n this.hardwareStream = null;\r\n }\r\n\r\n if(this.videoElement) {\r\n this.videoElement?.remove();\r\n this.videoElement = null;\r\n }\r\n\r\n if(this.video) {\r\n this.video?.remove();\r\n }\r\n\r\n if(this.canvas) {\r\n this.canvas?.remove();\r\n }\r\n } catch(error: any) {\r\n console.error(\"Erro ao parar os streams de m\u00EDdia.\", error);\r\n }\r\n\r\n // Take off Mediapipe\r\n this.faceDetection &&\r\n this.faceDetection.detecting &&\r\n this.faceDetection.stopDetection();\r\n this.objectDetection &&\r\n this.objectDetection.detecting &&\r\n this.objectDetection.stopDetection();\r\n\r\n clearInterval(this.imageInterval);\r\n clearInterval(this.sendFrameInterval);\r\n\r\n // Se tiver faltando algo para subir\r\n if (\r\n this.options.proctoringType == \"REALTIME\" &&\r\n this.upload &&\r\n this.backendToken\r\n ) {\r\n \r\n await this.sendPackage(this.filesToUpload);\r\n await this.filesToUpload.splice(0, this.filesToUpload.length);\r\n }\r\n\r\n // NoiseDetected\r\n this.volumeMeter && this.volumeMeter!.stop();\r\n this.intervalNoiseDetection && clearInterval(this.intervalNoiseDetection);\r\n\r\n // ### RecordRTC\r\n // try {\r\n // await this.recorder.stopRecording();\r\n // const blob = await this.recorder.getBlob();\r\n\r\n // let finished = false;\r\n\r\n // getSeekableBlob(blob, (seekableBlob) => {\r\n // // recorder.stream?.stop();\r\n // this.recorder.destroy();\r\n\r\n // this.blobsRTC.push(seekableBlob);\r\n // console.log(this.blobsRTC);\r\n // // invokeSaveAsDialog(seekableBlob, 'seekable-recordrtc.webm');\r\n\r\n // this.cameraStream.getTracks().forEach((el) => {\r\n // el.stop();\r\n // });\r\n\r\n // finished = true;\r\n // });\r\n\r\n // await waitUntil(() => finished);\r\n // } catch (error) {\r\n // trackers.registerErrorRecorderRTC(this.proctoringId!, `Error on finish Recorder RTC: ${error}`);\r\n // }\r\n // ### Finish RecordRTC\r\n\r\n // console.log(\"Stoped\");\r\n }\r\n\r\n async pauseRecording(): Promise<void> {\r\n // console.log(\"Pausing...\");\r\n\r\n await this.recordingPause();\r\n\r\n // console.log(\"Paused\");\r\n }\r\n\r\n async resumeRecording(): Promise<void> {\r\n // console.log(\"Resuming...\");\r\n\r\n await this.recordingResume();\r\n\r\n // console.log(\"Resumed\");\r\n }\r\n\r\n async getCurrentImageBase64(): Promise<string> {\r\n // Reuse existing video/canvas if already set up, otherwise create new ones\r\n if (!this.video || !this.canvas) {\r\n this.configImageCapture();\r\n } else {\r\n // Ensure video is still connected to the stream\r\n if (this.video.srcObject !== this.cameraStream) {\r\n this.video.srcObject = this.cameraStream;\r\n await this.video.play();\r\n }\r\n }\r\n\r\n // Ensure video is playing\r\n if (this.video.paused) {\r\n await this.video.play();\r\n }\r\n\r\n // Wait for video to have a frame ready before capturing\r\n await new Promise<void>((resolve) => {\r\n // If video already has current data, resolve immediately\r\n if (this.video.readyState >= 2) {\r\n // HAVE_CURRENT_DATA or higher - frame is available\r\n resolve();\r\n return;\r\n }\r\n\r\n // Wait for loadedmetadata event to ensure video has metadata\r\n const onLoadedMetadata = () => {\r\n this.video.removeEventListener(\"loadedmetadata\", onLoadedMetadata);\r\n // Give a small delay to ensure frame is rendered\r\n setTimeout(() => resolve(), 50);\r\n };\r\n \r\n this.video.addEventListener(\"loadedmetadata\", onLoadedMetadata);\r\n \r\n // Fallback timeout in case event doesn't fire\r\n setTimeout(() => {\r\n this.video.removeEventListener(\"loadedmetadata\", onLoadedMetadata);\r\n resolve();\r\n }, 500);\r\n });\r\n\r\n this.canvas\r\n .getContext(\"2d\")!\r\n .drawImage(this.video, 0, 0, this.canvas.width, this.canvas.height);\r\n return this.canvas.toDataURL(\"image/jpeg\");\r\n }\r\n\r\n public packageCount: number = 0;\r\n\r\n // captura um frame a cada intervalo de tempo definido no paramsConfig.videoBehaviourParameters?.realtimeCaptureInterval!\r\n captureFrame() {\r\n let imageFile: File;\r\n this.configImageCapture();\r\n\r\n // // baixa a qualidade\r\n // let newCanvasWidth = this.videoOptions.width / 2;\r\n // let newCanvasHeight = this.videoOptions.height / 2;\r\n // // Tratamento para min 180p\r\n // if (newCanvasWidth < 320) newCanvasWidth = 320;\r\n // if (newCanvasHeight < 180) newCanvasHeight = 180;\r\n\r\n // this.canvas.width = newCanvasWidth;\r\n // this.canvas.height = newCanvasHeight;\r\n\r\n const packSize = this.paramsConfig.videoBehaviourParameters?.realtimePackageSize!;\r\n this.imageCount = 0;\r\n this.imageInterval = setInterval(async () => {\r\n // console.log(\"capturando frame \" + this.imageCount);\r\n this.canvas\r\n .getContext(\"2d\")!\r\n .drawImage(this.video, 0, 0, this.canvas.width, this.canvas.height);\r\n const image_data_url = this.canvas.toDataURL(\"image/jpeg\");\r\n\r\n if (this.proctoringId == undefined) return;\r\n if (packSize == this.imageCount) {\r\n this.imageCount = 0;\r\n const framesToSend = [... this.filesToUpload];\r\n this.sendPackage(framesToSend);\r\n await this.filesToUpload.splice(0, this.filesToUpload.length);\r\n }\r\n\r\n let imageName = `${this.proctoringId}_${this.imageCount + 1}.jpg`;\r\n\r\n imageFile = await this.getFile(image_data_url, imageName, \"image/jpeg\");\r\n\r\n if (imageFile && imageFile.size > 10 && packSize > 0) {\r\n this.filesToUpload.push(imageFile);\r\n this.imageCount++;\r\n }\r\n }, this.paramsConfig.videoBehaviourParameters?.realtimeCaptureInterval! * 1000);\r\n }\r\n\r\n // envia pacote de imagens\r\n async sendPackage(framesToSend: File[]) {\r\n let pending = false;\r\n let undeliveredPackagesCount = 0;\r\n const packSize = this.paramsConfig.videoBehaviourParameters?.realtimePackageSize!;\r\n const packCaptureInterval = this.paramsConfig.videoBehaviourParameters?.realtimeCaptureInterval!+1;\r\n \r\n // Enviar pack\r\n if (this.upload && this.backendToken && !pending && this.filesToUpload.length > 0) {\r\n undeliveredPackagesCount = 0;\r\n\r\n pending = true;\r\n const zip = new JSZip();\r\n for (const file of framesToSend) {\r\n zip.file(file.name, file);\r\n }\r\n const blob = await zip.generateAsync({ type: \"blob\" });\r\n let packageName = \"realtime_package_\" + (packSize * packCaptureInterval) * this.packageCount + \".zip\";\r\n const myPackage = new File(\r\n [blob],\r\n packageName,\r\n { type: \"application/zip\" }\r\n );\r\n\r\n const uploadResult = await this.upload.uploadPackage(\r\n {\r\n file: myPackage,\r\n },\r\n this.backendToken\r\n );\r\n if (uploadResult.uploaded == true) {\r\n this.packageCount++;\r\n } else {\r\n console.log(\"erro no upload do pacote\");\r\n }\r\n pending = false;\r\n } else if (pending) {\r\n undeliveredPackagesCount++;\r\n if (undeliveredPackagesCount == 3) {\r\n // se acumulou 3 pacotes, reduz a qualidade\r\n undeliveredPackagesCount = 0;\r\n // console.log(\"Alterando canvas\");\r\n // Se passou o tempo e nao conseguiu enviar o pacote antigo, baixa a qualidade automaticamente\r\n let newCanvasWidth = this.videoOptions.width / 2;\r\n let newCanvasHeight = this.videoOptions.height / 2;\r\n // Tratamento para min 180p\r\n if (newCanvasWidth < 320) newCanvasWidth = 320;\r\n if (newCanvasHeight < 180) newCanvasHeight = 180;\r\n\r\n this.canvas.width = newCanvasWidth;\r\n this.canvas.height = newCanvasHeight;\r\n // console.log(\"this.canvas.width:\" + this.canvas.width);\r\n // console.log(\"this.canvas.height:\" + this.canvas.height);\r\n }\r\n }\r\n }\r\n\r\n download(file: File) {\r\n const url = URL.createObjectURL(file);\r\n const a = document.createElement(\"a\");\r\n document.body.appendChild(a);\r\n a.style.display = \"none\";\r\n a.href = url;\r\n a.download = file.name;\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n }\r\n\r\n async saveOnSession(session: ProctoringSession): Promise<void> {\r\n //salva camera\r\n // console.log(\"video buffer\", this.blobs);\r\n if (this.blobs != null)\r\n trackers.registerSaveOnSession(\r\n this.proctoringId!,\r\n `Blobs Length: ${\r\n this.blobs.length\r\n } Buffer Size: ${this.getBufferSize()} `\r\n );\r\n const settings = this.cameraStream.getVideoTracks()[0].getSettings();\r\n const settingsAudio = this.cameraStream.getAudioTracks()[0].getSettings();\r\n\r\n if (\r\n this.options.proctoringType == \"VIDEO\" ||\r\n this.options.proctoringType == \"REALTIME\" ||\r\n (this.options.proctoringType == \"IMAGE\" &&\r\n this.paramsConfig.imageBehaviourParameters?.saveVideo)\r\n ) {\r\n session.addRecording({\r\n device: `Audio\\n\\tSample Rate: ${\r\n settingsAudio.sampleRate\r\n }\\n\\tSample Size: ${\r\n settingsAudio.sampleSize\r\n }\\n\\n\\tVideo:\\n\\t${JSON.stringify(this.recorderOptions)}`,\r\n file: new File(this.blobs, `EP_${session.id}_camera_0.webm`, {\r\n type: this.recorderOptions?.mimeType || \"video/webm\",\r\n }),\r\n origin: RecordingOrigin.Camera,\r\n });\r\n }\r\n\r\n // session.addRecording({\r\n // device: ``,\r\n // file: new File(this.blobsRTC, `EP_${session.id}_camera_0_seekable.webm`, {\r\n // type: \"video/webm\",\r\n // }),\r\n // origin: RecordingOrigin.Camera,\r\n // });\r\n }\r\n\r\n async getFile(file: string, name: string, type: string): Promise<File> {\r\n return new Promise((resolve, reject) => {\r\n file.length > 5 &&\r\n fetch(file)\r\n .then((res) => res.blob())\r\n .then((blob) => {\r\n const file = new File([blob], name, { type: type });\r\n resolve(file);\r\n })\r\n .catch((e) => {\r\n reject(e);\r\n });\r\n });\r\n }\r\n\r\n noiseWait = 20;\r\n private onNoiseDetected() {\r\n // Quando for do tipo REALTIME ele ir\u00E1 utilizar o NoiseRecorder para captar barulhos\r\n if (this.options.proctoringType === \"REALTIME\") return;\r\n\r\n if (!this.volumeMeter && this.cameraStream) {\r\n this.volumeMeter = new VolumeMeter(this.cameraStream);\r\n\r\n this.volumeMeter.start().catch((e: any) => {\r\n console.log(e);\r\n this.volumeMeter = undefined;\r\n });\r\n }\r\n\r\n const volume = this.volumeMeter?.getVolume() ?? 0;\r\n\r\n if (\r\n volume >= (this.paramsConfig.audioBehaviourParameters?.noiseLimit || 40)\r\n ) {\r\n console.log(\"entrou\" + this.noiseWait);\r\n if (this.noiseWait >= 20) {\r\n this.options.onRealtimeAlertsCallback!({\r\n status: \"ALERT\",\r\n description: \"Barulho detectado\",\r\n type: \"audio_detection_on_stream\",\r\n });\r\n this.noiseWait = 0;\r\n }\r\n }\r\n\r\n this.noiseWait++;\r\n }\r\n\r\n}\r\n", "import enumarateDevices from \"../../modules/enumarateDevices\";\r\nimport { getDefaultProctoringOptions, ProctoringSessionOptions } from \"../../proctoring/options/ProctoringOptions\";\r\nimport { ProctoringVideoOptions } from \"../../proctoring/options/ProctoringVideoOptions\";\r\nimport { CameraRecorder } from \"../recorders/CameraRecorder\";\r\nimport { VolumeMeter } from \"../recorders/VolumeMeter\";\r\n\r\nexport interface checkDevicesInterfaceReturn {\r\n cameraId: string, \r\n microphoneId: string,\r\n result: boolean,\r\n}\r\n\r\nexport class DeviceCheckerUI {\r\n public options: ProctoringSessionOptions;\r\n public videoOptions: ProctoringVideoOptions = { width: 1080, height: 720, minWidth: 0, minHeight: 0 };\r\n public cameraRecorder: CameraRecorder;\r\n public volumeMeter: VolumeMeter | undefined;\r\n\r\n constructor(\r\n options: ProctoringSessionOptions = getDefaultProctoringOptions,\r\n _videoOptions: ProctoringVideoOptions\r\n ) {\r\n this.options = { \r\n ...getDefaultProctoringOptions, \r\n ...options, \r\n captureScreen: false, \r\n allowMultipleMonitors: true,\r\n allowOnlyFirstMonitor: false \r\n };\r\n this.videoOptions = { ...this.videoOptions, ..._videoOptions };\r\n }\r\n\r\n public checkDevicesInterface() {\r\n this.addStyleMask();\r\n\r\n const style = document.createElement(\"style\");\r\n style.type = \"text/css\";\r\n style.innerHTML = `\r\n .alert-div { \r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 5px;\r\n }\r\n \r\n .checkmark {\r\n display: inline-block;\r\n width: 22px;\r\n height: 22px;\r\n min-width: 22px;\r\n max-width: 22px;\r\n min-height: 22px;\r\n max-height: 22px;\r\n flex-shrink: 0;\r\n -ms-transform: rotate(45deg); /* IE 9 */\r\n -webkit-transform: rotate(45deg); /* Chrome, Safari, Opera */\r\n transform: rotate(45deg);\r\n border: 1px solid #16A34A;\r\n border-radius: 22px;\r\n box-sizing: border-box;\r\n }\r\n \r\n .checkmark_stem {\r\n position: absolute;\r\n width: 3px;\r\n height: 9px;\r\n background-color: #16A34A;\r\n left: 9px;\r\n top: 5px;\r\n }\r\n \r\n .checkmark_kick {\r\n position: absolute;\r\n width: 3px;\r\n height: 3px;\r\n background-color: #16A34A;\r\n left: 6px;\r\n top: 11px;\r\n }\r\n \r\n .checkmark_error {\r\n display: inline-block;\r\n width: 22px;\r\n height: 22px;\r\n min-width: 22px;\r\n max-width: 22px;\r\n min-height: 22px;\r\n max-height: 22px;\r\n flex-shrink: 0;\r\n -ms-transform: rotate(45deg); /* IE 9 */\r\n -webkit-transform: rotate(45deg); /* Chrome, Safari, Opera */\r\n transform: rotate(45deg);\r\n border: 1px solid #FF0000;\r\n border-radius: 22px;\r\n box-sizing: border-box;\r\n }\r\n \r\n .checkmark_stem_error {\r\n position: absolute;\r\n width: 3px;\r\n height: 11px;\r\n background-color: #FF0000;\r\n left: 8px;\r\n top: 4px;\r\n }\r\n \r\n .checkmark_kick_error {\r\n position: absolute;\r\n width: 11px;\r\n height: 3px;\r\n background-color: #FF0000;\r\n left: 4px;\r\n top: 8px;\r\n }\r\n \r\n .info {\r\n display: inline-block;\r\n width: 14px;\r\n height: 14px;\r\n -ms-transform: rotate(0deg);\r\n /* IE 9 */\r\n -webkit-transform: rotate(0deg);\r\n /* Chrome, Safari, Opera */\r\n transform: rotate(0deg);\r\n border: 1px solid #ccc;\r\n border-radius: 22px;\r\n }\r\n \r\n .info_stem {\r\n position: absolute;\r\n width: 2px;\r\n height: 6px;\r\n background-color: #ccc;\r\n left: 5px;\r\n top: 5px;\r\n }\r\n \r\n .info_kick {\r\n position: absolute;\r\n width: 2px;\r\n height: 2px;\r\n background-color: #ccc;\r\n left: 5px;\r\n top: 2px;\r\n }\r\n\r\n /* Responsive styles */\r\n #checkDevices .modal-responsive {\r\n box-sizing: border-box !important;\r\n }\r\n\r\n #checkDevices .modal-responsive * {\r\n box-sizing: border-box;\r\n }\r\n\r\n /* Desktop screens - maintain gap between checks and camera */\r\n @media (min-width: 769px) {\r\n #checkDevices .modal-responsive .camera-container-responsive {\r\n gap: 20px !important;\r\n }\r\n }\r\n\r\n @media (max-width: 768px) {\r\n #checkDevices .modal-responsive {\r\n width: 95% !important;\r\n max-width: 95% !important;\r\n margin: 10px !important;\r\n }\r\n\r\n #checkDevices .modal-responsive h3 {\r\n font-size: 18px !important;\r\n padding: 15px 0px !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .camera-header-responsive,\r\n #checkDevices .modal-responsive .mic-header-responsive {\r\n flex-direction: column !important;\r\n gap: 10px !important;\r\n align-items: flex-start !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .camera-header-responsive select,\r\n #checkDevices .modal-responsive .mic-header-responsive select {\r\n max-width: 100% !important;\r\n width: 100% !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .camera-container-responsive {\r\n flex-direction: row !important;\r\n align-items: flex-start !important;\r\n gap: 15px !important;\r\n padding-left: 10px !important;\r\n padding-right: 10px !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .video-responsive {\r\n width: auto !important;\r\n max-width: 320px !important;\r\n flex-shrink: 0 !important;\r\n max-height: 240px !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .video-responsive video {\r\n width: 100% !important;\r\n max-width: 320px !important;\r\n max-height: 200px !important;\r\n height: auto !important;\r\n object-fit: contain !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .mic-container-responsive {\r\n flex-direction: column !important;\r\n padding: 0px 20px !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .mic-meter-responsive {\r\n width: 100% !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .range-responsive {\r\n width: 100% !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .pronounce-responsive {\r\n margin-left: 10px !important;\r\n margin-right: 10px !important;\r\n width: calc(100% - 20px) !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .button-responsive {\r\n height: 60px !important;\r\n font-size: 14px !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .divider-responsive {\r\n height: 60px !important;\r\n }\r\n }\r\n\r\n @media (max-width: 480px) {\r\n #checkDevices .modal-responsive {\r\n width: 98% !important;\r\n max-width: 98% !important;\r\n border-radius: 8px !important;\r\n margin: 5px !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .camera-header-responsive,\r\n #checkDevices .modal-responsive .mic-header-responsive {\r\n gap: 0px !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .camera-header-responsive h3,\r\n #checkDevices .modal-responsive .mic-header-responsive h3 {\r\n margin: 0 !important;\r\n margin-top: 0 !important;\r\n margin-bottom: 0 !important;\r\n margin-left: 0 !important;\r\n margin-right: 0 !important;\r\n padding: 0 !important;\r\n padding-top: 0 !important;\r\n padding-bottom: 0 !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .camera-header-responsive select,\r\n #checkDevices .modal-responsive .mic-header-responsive select {\r\n margin: 0 !important;\r\n margin-top: 0 !important;\r\n margin-bottom: 0 !important;\r\n margin-left: 0 !important;\r\n margin-right: 0 !important;\r\n padding-top: 0 !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .camera-container-responsive {\r\n flex-direction: row !important;\r\n gap: 10px !important;\r\n padding-left: 5px !important;\r\n padding-right: 5px !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .video-responsive {\r\n max-width: 200px !important;\r\n max-height: 150px !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .video-responsive video {\r\n max-width: 200px !important;\r\n max-height: 150px !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .pronounce-responsive {\r\n margin-left: 5px !important;\r\n margin-right: 5px !important;\r\n width: calc(100% - 10px) !important;\r\n padding: 0 5px !important;\r\n }\r\n\r\n #checkDevices .modal-responsive h3 {\r\n font-size: 16px !important;\r\n padding: 12px 0px !important;\r\n margin-bottom: 10px !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .camera-header-responsive h3,\r\n #checkDevices .modal-responsive .mic-header-responsive h3 {\r\n font-size: 14px !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .button-responsive {\r\n height: 50px !important;\r\n font-size: 13px !important;\r\n }\r\n\r\n #checkDevices .modal-responsive .divider-responsive {\r\n height: 50px !important;\r\n }\r\n }\r\n `;\r\n document.getElementsByTagName(\"head\")[0].appendChild(style);\r\n\r\n // ################################ Background Blur ################################\r\n const fullBg = document.createElement(\"div\");\r\n fullBg.setAttribute(\"id\", \"checkDevices\");\r\n\r\n const fullBgStyles = {\r\n backgroundColor: \"rgba(0,0,0,0.4)\",\r\n zIndex: \"1000\",\r\n position: \"fixed\",\r\n top: \"0\",\r\n left: \"0\",\r\n height: \"100vh\",\r\n width: \"100%\",\r\n maxWidth: \"100vw\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n overflow: \"auto\",\r\n boxSizing: \"border-box\",\r\n };\r\n this.applyStyles(fullBg, fullBgStyles);\r\n\r\n // ################################ Modal Check Devices ################################\r\n const modal = document.createElement(\"div\");\r\n modal.setAttribute(\"class\", \"modal-responsive\");\r\n\r\n const modalStyles = {\r\n backgroundColor: \"#fff\",\r\n zIndex: \"1001\",\r\n width: \"90%\",\r\n maxWidth: \"600px\",\r\n borderRadius: \"10px\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n boxSizing: \"border-box\",\r\n overflow: \"hidden\",\r\n };\r\n this.applyStyles(modal, modalStyles);\r\n\r\n // ################################ Modal Title ################################\r\n const h3 = document.createElement(\"h3\");\r\n\r\n h3.innerText = \"Checagem de dispositivos\";\r\n\r\n const h3Styles = {\r\n color: \"rgba(0, 0, 0, .7)\",\r\n fontWeight: \"bold\",\r\n fontSize: \"20px\",\r\n marginBottom: \"15px\",\r\n padding: \"20px 0px\",\r\n borderBottom: \"2px solid rgba(0, 0, 0, .1)\",\r\n width: \"100%\",\r\n textAlign: \"center\",\r\n };\r\n this.applyStyles(h3, h3Styles);\r\n\r\n modal.appendChild(h3);\r\n\r\n // ################################ Camera Title ################################\r\n\r\n const divCameraHeader = document.createElement(\"div\");\r\n divCameraHeader.setAttribute(\"class\", \"camera-header-responsive\");\r\n const h3Camera = document.createElement(\"h3\");\r\n const selectCamera = document.createElement(\"select\");\r\n selectCamera.setAttribute(\"id\", \"cameraSelect\");\r\n\r\n const divCameraHeaderStyles = {\r\n padding: \"0 20px\",\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n marginBottom: \"15px\",\r\n };\r\n this.applyStyles(divCameraHeader, divCameraHeaderStyles);\r\n\r\n h3Camera.innerText = \"C\u00E2mera\";\r\n const h3CameraStyles = {\r\n color: \"rgba(0, 0, 0, .75)\",\r\n fontWeight: \"bold\",\r\n fontSize: \"16px\",\r\n };\r\n this.applyStyles(h3Camera, h3CameraStyles);\r\n\r\n selectCamera.style.maxWidth = \"400px\";\r\n selectCamera.style.minWidth = \"150px\";\r\n selectCamera.style.width = \"100%\";\r\n selectCamera.style.boxSizing = \"border-box\";\r\n\r\n divCameraHeader.appendChild(h3Camera);\r\n divCameraHeader.appendChild(selectCamera);\r\n modal.appendChild(divCameraHeader);\r\n\r\n // ################################ Camera Stream ################################\r\n\r\n // const divCameraError = document.createElement(\"div\");\r\n // const error = document.createElement(\"error\");\r\n // error.setAttribute(\"id\", \"cameraError\");\r\n\r\n // const divCameraErrorStyles = {\r\n // width: \"calc(100% - 40px)\",\r\n // marginBottom: \"5px\",\r\n // };\r\n // this.applyStyles(divCameraError, divCameraErrorStyles);\r\n\r\n // const errorStyles = {\r\n // color: \"#FF0000\",\r\n // textAlign: \"left\",\r\n // };\r\n // this.applyStyles(error, errorStyles);\r\n\r\n // divCameraError.appendChild(error);\r\n // modal.appendChild(divCameraError);\r\n\r\n const divCamera = document.createElement(\"div\");\r\n divCamera.setAttribute(\"id\", \"liveCheckDevices\");\r\n divCamera.setAttribute(\"class\", \"camera-container-responsive\");\r\n const videoDiv = document.createElement(\"div\");\r\n videoDiv.setAttribute(\"class\", \"video-responsive\");\r\n const video = document.createElement(\"video\");\r\n const center = document.createElement(\"div\");\r\n video.setAttribute(\"id\", \"cameraStream\");\r\n video.muted = true;\r\n\r\n // IOS Problem: open camera in fullscreen mode\r\n // video.setAttribute(\"playsinline\", \"true\"); // Impede fullscreen autom\u00E1tico\r\n // video.setAttribute(\"webkit-playsinline\", \"true\"); // Compatibilidade WebKit\r\n // video.autoplay = true; \r\n\r\n const divCameraStyles = {\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n gap: \"20px\",\r\n borderBottom: \"2px solid rgba(0, 0, 0, .1)\",\r\n paddingBottom: \"15px\",\r\n paddingLeft: \"20px\",\r\n paddingRight: \"20px\",\r\n boxSizing: \"border-box\",\r\n transform: \"rotateY(180deg)\",\r\n };\r\n this.applyStyles(divCamera, divCameraStyles);\r\n\r\n const videoStyles = {\r\n width: \"100%\",\r\n maxWidth: \"320px\",\r\n height: \"auto\",\r\n maxHeight: \"240px\",\r\n objectFit: \"contain\",\r\n backgroundColor: \"#000\",\r\n borderRadius: \"10px\",\r\n marginBottom: \"15px\",\r\n };\r\n this.applyStyles(video, videoStyles);\r\n this.applyStyles(videoDiv, { position: \"relative\", width: \"100%\", maxWidth: \"320px\", maxHeight: \"240px\", boxSizing: \"border-box\" });\r\n\r\n // Alert Resolution\r\n const alertDivResolution = document.createElement(\"div\");\r\n alertDivResolution.setAttribute(\"class\", \"alert-div\");\r\n alertDivResolution.setAttribute(\"id\", \"alertDivResolution\");\r\n const resolutionAlert = document.createElement(\"error\");\r\n resolutionAlert.setAttribute(\"id\", \"resolutionAlert\");\r\n resolutionAlert.innerText = \"Resolu\u00E7\u00E3o m\u00EDnima\";\r\n resolutionAlert.style.marginLeft = \"10px\";\r\n resolutionAlert.style.marginRight = \"5px\";\r\n\r\n const checkmark_resolution = document.createElement(\"span\");\r\n const checkmark_stem_resolution = document.createElement(\"div\");\r\n const checkmark_kick_resolution = document.createElement(\"div\");\r\n\r\n checkmark_resolution.setAttribute(\"id\", \"checkmark_resolution\");\r\n checkmark_stem_resolution.setAttribute(\"id\", \"checkmark_stem_resolution\");\r\n checkmark_kick_resolution.setAttribute(\"id\", \"checkmark_kick_resolution\");\r\n\r\n checkmark_resolution.appendChild(checkmark_stem_resolution);\r\n checkmark_resolution.appendChild(checkmark_kick_resolution);\r\n\r\n const info_resolution = document.createElement(\"span\");\r\n const info_stem_resolution = document.createElement(\"div\");\r\n const info_kick_resolution = document.createElement(\"div\");\r\n\r\n info_resolution.setAttribute(\"class\", \"info\");\r\n info_resolution.setAttribute(\"id\", \"info_resolution\");\r\n info_stem_resolution.setAttribute(\"class\", \"info_stem\");\r\n info_kick_resolution.setAttribute(\"class\", \"info_kick\");\r\n\r\n info_resolution.appendChild(info_stem_resolution);\r\n info_resolution.appendChild(info_kick_resolution);\r\n\r\n alertDivResolution.appendChild(checkmark_resolution);\r\n alertDivResolution.appendChild(resolutionAlert);\r\n alertDivResolution.appendChild(info_resolution);\r\n\r\n // Alert Face Position\r\n const alertDivFacePosition = document.createElement(\"div\");\r\n alertDivFacePosition.setAttribute(\"class\", \"alert-div\");\r\n alertDivFacePosition.setAttribute(\"id\", \"alertDivFacePosition\");\r\n const facePositionAlert = document.createElement(\"error\");\r\n facePositionAlert.setAttribute(\"id\", \"facePositionAlert\");\r\n facePositionAlert.innerText = \"Posicionamento da face\";\r\n facePositionAlert.style.marginLeft = \"10px\";\r\n\r\n const checkmark_FacePosition = document.createElement(\"span\");\r\n const checkmark_stem_FacePosition = document.createElement(\"div\");\r\n const checkmark_kick_FacePosition = document.createElement(\"div\");\r\n\r\n checkmark_FacePosition.setAttribute(\"id\", \"checkmark_FacePosition\");\r\n checkmark_stem_FacePosition.setAttribute(\r\n \"id\",\r\n \"checkmark_stem_FacePosition\"\r\n );\r\n checkmark_kick_FacePosition.setAttribute(\r\n \"id\",\r\n \"checkmark_kick_FacePosition\"\r\n );\r\n\r\n checkmark_FacePosition.appendChild(checkmark_stem_FacePosition);\r\n checkmark_FacePosition.appendChild(checkmark_kick_FacePosition);\r\n\r\n const info_FacePosition = document.createElement(\"span\");\r\n const info_stem_FacePosition = document.createElement(\"div\");\r\n const info_kick_FacePosition = document.createElement(\"div\");\r\n info_FacePosition.style.marginLeft = \"10px\";\r\n\r\n info_FacePosition.setAttribute(\"class\", \"info\");\r\n info_FacePosition.setAttribute(\"id\", \"info_FacePosition\");\r\n // Come\u00E7a invis\u00EDvel\r\n info_FacePosition.style.display = \"none\"; \r\n \r\n info_stem_FacePosition.setAttribute(\"class\", \"info_stem\");\r\n info_kick_FacePosition.setAttribute(\"class\", \"info_kick\");\r\n\r\n info_FacePosition.appendChild(info_stem_FacePosition);\r\n info_FacePosition.appendChild(info_kick_FacePosition);\r\n\r\n alertDivFacePosition.appendChild(checkmark_FacePosition);\r\n // Take off Mediapipe\r\n alertDivFacePosition.appendChild(facePositionAlert);\r\n\r\n alertDivFacePosition.appendChild(info_FacePosition);\r\n\r\n // Alert Ambient Verify\r\n const alertDivAmbientVerify = document.createElement(\"div\");\r\n alertDivAmbientVerify.setAttribute(\"class\", \"alert-div\");\r\n alertDivAmbientVerify.setAttribute(\"id\", \"alertDivAmbientVerify\");\r\n const ambientVerifyAlert = document.createElement(\"error\");\r\n ambientVerifyAlert.setAttribute(\"id\", \"ambientVerifyAlert\");\r\n ambientVerifyAlert.innerText = \"Verifica\u00E7\u00E3o do ambiente\";\r\n ambientVerifyAlert.style.marginLeft = \"10px\";\r\n\r\n const checkmark_AmbientVerify = document.createElement(\"span\");\r\n const checkmark_stem_AmbientVerify = document.createElement(\"div\");\r\n const checkmark_kick_AmbientVerify = document.createElement(\"div\");\r\n\r\n checkmark_AmbientVerify.setAttribute(\"id\", \"checkmark_AmbientVerify\");\r\n checkmark_stem_AmbientVerify.setAttribute(\r\n \"id\",\r\n \"checkmark_stem_AmbientVerify\"\r\n );\r\n checkmark_kick_AmbientVerify.setAttribute(\r\n \"id\",\r\n \"checkmark_kick_AmbientVerify\"\r\n );\r\n\r\n checkmark_AmbientVerify.appendChild(checkmark_stem_AmbientVerify);\r\n checkmark_AmbientVerify.appendChild(checkmark_kick_AmbientVerify);\r\n\r\n alertDivAmbientVerify.appendChild(checkmark_AmbientVerify);\r\n alertDivAmbientVerify.appendChild(ambientVerifyAlert);\r\n\r\n // Spy Cam Verify\r\n const alertDivSpyCam = document.createElement(\"div\");\r\n alertDivSpyCam.setAttribute(\"class\", \"alert-div\");\r\n alertDivSpyCam.setAttribute(\"id\", \"alertDivSpyCam\");\r\n alertDivSpyCam.style.display = \"none\";\r\n const SpyCamAlert = document.createElement(\"error\");\r\n SpyCamAlert.setAttribute(\"id\", \"SpyCamAlert\");\r\n SpyCamAlert.innerText = \"Verifica\u00E7\u00E3o de Spy Cam\";\r\n SpyCamAlert.style.marginLeft = \"10px\";\r\n\r\n const checkmark_SpyCam = document.createElement(\"span\");\r\n const checkmark_stem_SpyCam = document.createElement(\"div\");\r\n const checkmark_kick_SpyCam = document.createElement(\"div\");\r\n\r\n checkmark_SpyCam.setAttribute(\"id\", \"checkmark_SpyCam\");\r\n checkmark_stem_SpyCam.setAttribute(\"id\", \"checkmark_stem_SpyCam\");\r\n checkmark_kick_SpyCam.setAttribute(\"id\", \"checkmark_kick_SpyCam\");\r\n\r\n checkmark_SpyCam.appendChild(checkmark_stem_SpyCam);\r\n checkmark_SpyCam.appendChild(checkmark_kick_SpyCam);\r\n\r\n alertDivSpyCam.appendChild(checkmark_SpyCam);\r\n alertDivSpyCam.appendChild(SpyCamAlert);\r\n\r\n center.style.transform = \"rotateY(180deg)\";\r\n center.style.display = \"flex\";\r\n center.style.flexDirection = \"column\";\r\n center.style.flex = \"1\";\r\n center.style.minWidth = \"0\";\r\n center.appendChild(alertDivResolution);\r\n center.appendChild(alertDivFacePosition);\r\n center.appendChild(alertDivAmbientVerify);\r\n center.appendChild(alertDivSpyCam);\r\n\r\n divCamera.appendChild(center);\r\n videoDiv.appendChild(video);\r\n videoDiv.style.flexShrink = \"0\";\r\n divCamera.appendChild(videoDiv);\r\n \r\n\r\n // Add mask\r\n const mask = document.createElement(\"div\");\r\n mask.setAttribute(\"class\", \"facial-biometry__mask\");\r\n mask.style.width = \"100%\";\r\n mask.style.height = \"100%\";\r\n mask.style.position = \"absolute\";\r\n mask.style.top = \"0px\";\r\n mask.style.left = \"0px\";\r\n mask.style.backgroundColor = \"#fff\";\r\n mask.style.opacity = \"0.6\";\r\n\r\n const frame = document.createElement(\"div\");\r\n frame.setAttribute(\"class\", \"biometry__frame\");\r\n frame.style.width = \"100%\";\r\n frame.style.height = \"100%\";\r\n frame.style.position = \"absolute\";\r\n frame.style.top = \"0px\";\r\n frame.style.left = \"0px\";\r\n frame.style.zIndex = \"10\";\r\n\r\n videoDiv.appendChild(mask);\r\n videoDiv.appendChild(frame);\r\n\r\n modal.appendChild(divCamera);\r\n\r\n // ################################ Microphone Title ################################\r\n\r\n const divMicHeader = document.createElement(\"div\");\r\n divMicHeader.setAttribute(\"class\", \"mic-header-responsive\");\r\n const h3Mic = document.createElement(\"h3\");\r\n const selectMic = document.createElement(\"select\");\r\n selectMic.setAttribute(\"id\", \"micSelect\");\r\n\r\n const divMicHeaderStyles = {\r\n padding: \"0 20px\",\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n margin: \"15px 0\",\r\n };\r\n this.applyStyles(divMicHeader, divMicHeaderStyles);\r\n\r\n h3Mic.innerText = \"Microfone\";\r\n const h3MicStyles = {\r\n color: \"rgba(0, 0, 0, .7)\",\r\n fontWeight: \"bold\",\r\n fontSize: \"16px\",\r\n };\r\n this.applyStyles(h3Mic, h3MicStyles);\r\n\r\n selectMic.style.maxWidth = \"400px\";\r\n selectMic.style.minWidth = \"150px\";\r\n selectMic.style.width = \"100%\";\r\n selectMic.style.boxSizing = \"border-box\";\r\n\r\n divMicHeader.appendChild(h3Mic);\r\n divMicHeader.appendChild(selectMic);\r\n modal.appendChild(divMicHeader);\r\n\r\n // ################################ Microphone Stream ################################\r\n\r\n const divMic = document.createElement(\"div\");\r\n divMic.setAttribute(\"class\", \"mic-container-responsive\");\r\n const divMicStyles = {\r\n width: \"100%\",\r\n padding: \"0px 20px\",\r\n display: \"flex\",\r\n boxSizing: \"border-box\",\r\n // justifyContent: \"space-between\",\r\n };\r\n this.applyStyles(divMic, divMicStyles);\r\n\r\n const divMicMeter = document.createElement(\"div\");\r\n divMicMeter.setAttribute(\"class\", \"mic-meter-responsive\");\r\n const divMicMeterStyles = {\r\n // width: \"calc(100% - 40px)\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"space-between\",\r\n paddingBottom: \"15px\",\r\n };\r\n this.applyStyles(divMicMeter, divMicMeterStyles);\r\n\r\n const divMeter = document.createElement(\"div\");\r\n divMeter.setAttribute(\"id\", \"audioStream\");\r\n\r\n const divMeterStyles = {\r\n display: \"flex\",\r\n marginBottom: \"15px\",\r\n };\r\n this.applyStyles(divMeter, divMeterStyles);\r\n\r\n const pillStyles = {\r\n height: \"16px\",\r\n width: \"5px\",\r\n marginRight: \"5px\",\r\n borderRadius: \"10px\",\r\n backgroundColor: \"rgba(0, 0, 0, .3)\",\r\n };\r\n\r\n for (let i = 0; i < 25; i++) {\r\n const pill = document.createElement(\"div\");\r\n this.applyStyles(pill, pillStyles);\r\n divMeter.appendChild(pill);\r\n }\r\n\r\n // const pMeter = document.createElement(\"p\");\r\n // pMeter.setAttribute(\"id\", \"audioText\");\r\n\r\n // pMeter.innerText = \"0\";\r\n // pMeter.style.marginLeft = \"10px\";\r\n // pMeter.style.textAlign = \"center\";\r\n\r\n const divRange = document.createElement(\"div\");\r\n divRange.setAttribute(\"class\", \"range-responsive\");\r\n const pRange0 = document.createElement(\"p\");\r\n const pRange50 = document.createElement(\"p\");\r\n const pRange100 = document.createElement(\"p\");\r\n\r\n const divRangeStyles = {\r\n width: \"100%\",\r\n maxWidth: \"250px\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n boxSizing: \"border-box\",\r\n };\r\n this.applyStyles(divRange, divRangeStyles);\r\n\r\n pRange0.innerText = \"0\";\r\n pRange50.innerText = \"50\";\r\n pRange100.innerText = \"100\";\r\n\r\n divRange.appendChild(pRange0);\r\n divRange.appendChild(pRange50);\r\n divRange.appendChild(pRange100);\r\n\r\n // Alert Microphone\r\n const alertDivMicrophone = document.createElement(\"div\");\r\n alertDivMicrophone.setAttribute(\"class\", \"alert-div\");\r\n alertDivMicrophone.setAttribute(\"id\", \"alertDivMicrophone\");\r\n const alertDivMicrophoneStyles = {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n width: \"100%\",\r\n };\r\n this.applyStyles(alertDivMicrophone, alertDivMicrophoneStyles);\r\n const microphoneAlert = document.createElement(\"error\");\r\n microphoneAlert.setAttribute(\"id\", \"microphoneAlert\");\r\n microphoneAlert.innerText = \"Teste de funcionamento\";\r\n microphoneAlert.style.marginLeft = \"10px\";\r\n\r\n const checkmark_microphone = document.createElement(\"span\");\r\n const checkmark_stem_microphone = document.createElement(\"div\");\r\n const checkmark_kick_microphone = document.createElement(\"div\");\r\n\r\n checkmark_microphone.setAttribute(\"id\", \"checkmark_microphone\");\r\n checkmark_stem_microphone.setAttribute(\"id\", \"checkmark_stem_microphone\");\r\n checkmark_kick_microphone.setAttribute(\"id\", \"checkmark_kick_microphone\");\r\n\r\n checkmark_microphone.appendChild(checkmark_stem_microphone);\r\n checkmark_microphone.appendChild(checkmark_kick_microphone);\r\n\r\n alertDivMicrophone.appendChild(checkmark_microphone);\r\n alertDivMicrophone.appendChild(microphoneAlert);\r\n\r\n // divMic.appendChild(meter);\r\n divMicMeter.appendChild(divMeter);\r\n divMicMeter.appendChild(divRange);\r\n\r\n const pronunceMic = document.createElement(\"p\");\r\n pronunceMic.setAttribute(\"class\", \"pronounce-responsive\");\r\n pronunceMic.innerText =\r\n 'Pronuncie em voz alta: \"Testando...\"';\r\n pronunceMic.style.textAlign = \"start\";\r\n const pronunceMicStyles = {\r\n width: \"calc(100% - 40px)\",\r\n marginLeft: \"20px\",\r\n marginRight: \"20px\",\r\n marginBottom: \"15px\",\r\n boxSizing: \"border-box\",\r\n padding: \"0 10px\",\r\n };\r\n this.applyStyles(pronunceMic, pronunceMicStyles);\r\n\r\n divMic.appendChild(divMicMeter);\r\n divMic.appendChild(alertDivMicrophone);\r\n // divMic.appendChild(pMeter);\r\n modal.appendChild(pronunceMic);\r\n modal.appendChild(divMic);\r\n\r\n // ################################ Modal Buttons ################################\r\n\r\n // Div Buttons\r\n const divBtn = document.createElement(\"div\");\r\n const divBtnStyles = {\r\n width: \"100%\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n borderTop: \"2px solid rgba(0, 0, 0, .1)\",\r\n boxSizing: \"border-box\",\r\n };\r\n this.applyStyles(divBtn, divBtnStyles);\r\n\r\n // Cancel Button\r\n const buttonCancel = document.createElement(\"button\");\r\n buttonCancel.setAttribute(\"id\", \"cancelBtn\");\r\n buttonCancel.setAttribute(\"class\", \"button-responsive\");\r\n buttonCancel.innerText = \"Cancelar\";\r\n const buttonCancelStyles = {\r\n width: \"100%\",\r\n height: \"70px\",\r\n backgroundColor: \"#FFF\",\r\n border: \"none\",\r\n color: \"rgba(0, 0, 0, .7)\",\r\n fontWeight: \"bold\",\r\n borderRadius: \"10px\",\r\n paddingTop: \"5px\",\r\n paddingBottom: \"5px\",\r\n };\r\n this.applyStyles(buttonCancel, buttonCancelStyles);\r\n\r\n // Buttons Divider\r\n const divider = document.createElement(\"span\");\r\n divider.setAttribute(\"class\", \"divider-responsive\");\r\n const dividerStyles = {\r\n width: \"3px\",\r\n height: \"70px\",\r\n margin: \"0px 2px\",\r\n background: \"rgba(0, 0, 0, .1)\",\r\n };\r\n this.applyStyles(divider, dividerStyles);\r\n\r\n // ConfirmButton\r\n const button = document.createElement(\"button\");\r\n button.innerText = \"Continuar\";\r\n button.setAttribute(\"id\", \"confirmBtn\");\r\n button.setAttribute(\"class\", \"button-responsive\");\r\n const buttonStyles = {\r\n width: \"100%\",\r\n height: \"70px\",\r\n backgroundColor: \"#FFF\",\r\n border: \"none\",\r\n color: \"rgba(0, 0, 0, .7)\",\r\n fontWeight: \"bold\",\r\n borderRadius: \"10px\",\r\n paddingTop: \"5px\",\r\n paddingBottom: \"5px\",\r\n };\r\n this.applyStyles(button, buttonStyles);\r\n if (this.options.useSpyScan) {\r\n button.style.cursor = \"not-allowed\"\r\n button.setAttribute(\"disabled\", \"true\");\r\n }\r\n\r\n divBtn.appendChild(buttonCancel);\r\n divBtn.appendChild(divider);\r\n divBtn.appendChild(button);\r\n\r\n modal.appendChild(divBtn);\r\n\r\n fullBg.appendChild(modal);\r\n\r\n document.body.appendChild(fullBg);\r\n }\r\n\r\n public async setSelectOption(options: ProctoringSessionOptions, changeSelectedDevice: (arg0: { cameras: any; microphones: any; } | { cameras: HTMLSelectElement | null; microphones: HTMLSelectElement | null; }) => any) {\r\n const cameras: HTMLSelectElement | null = document.querySelector(\"#cameraSelect\");\r\n const microphones: HTMLSelectElement | null = document.querySelector(\"#micSelect\");\r\n // Listar os dispositivos\r\n const devices = await enumarateDevices();\r\n\r\n cameras && (cameras.value = options.cameraId || \"default\");\r\n microphones && (microphones.value = options.microphoneId || \"default\");\r\n\r\n const generateOption = (text: string, value: string) => {\r\n const el = document.createElement(\"option\");\r\n el.setAttribute(\"value\", value);\r\n el.innerHTML = text;\r\n return el;\r\n };\r\n\r\n devices.cameras.forEach((camera) => {\r\n const option = generateOption(camera.label, camera.id);\r\n cameras?.appendChild(option);\r\n });\r\n\r\n devices.microphones.forEach((microphone) => {\r\n const option = generateOption(microphone.label, microphone.id);\r\n microphones?.appendChild(option);\r\n });\r\n\r\n this.onSelectOptionChange((e) => changeSelectedDevice(e));\r\n }\r\n\r\n public async onSelectOptionChange(changeSelectedDevice: { (e: any): any; (arg0: { cameraId: string | undefined; microphoneId: string | undefined; }): any; }) {\r\n const cameras: HTMLSelectElement | null = document.querySelector(\"#cameraSelect\");\r\n const microphones: HTMLSelectElement | null = document.querySelector(\"#micSelect\");\r\n \r\n cameras?.addEventListener(\"change\", () => changeSelectedDevice({ \r\n cameraId: cameras?.value, \r\n microphoneId: microphones?.value\r\n }));\r\n \r\n microphones?.addEventListener(\"change\", () => changeSelectedDevice({ \r\n cameraId: cameras?.value, \r\n microphoneId: microphones?.value\r\n }));\r\n }\r\n\r\n public closeModal() {\r\n const checkDevices = document.querySelector(\"#checkDevices\");\r\n checkDevices?.remove();\r\n }\r\n\r\n public modalActions(closeCheckDevices: { (): Promise<void>; (): void; }): Promise<checkDevicesInterfaceReturn> {\r\n const cancelBtn = document.getElementById(\"cancelBtn\");\r\n const confirmBtn = document.getElementById(\"confirmBtn\");\r\n const cameraSelect = document.getElementById(\"cameraSelect\");\r\n const micSelect = document.getElementById(\"micSelect\");\r\n\r\n return new Promise((resolve, reject) => {\r\n cancelBtn?.addEventListener(\"click\", () => {\r\n closeCheckDevices();\r\n this.closeModal();\r\n reject({\r\n result: false,\r\n });\r\n });\r\n\r\n \r\n confirmBtn?.addEventListener(\"click\", () => {\r\n // if button is disabled, do nothing\r\n if ((confirmBtn as HTMLButtonElement).disabled) return;\r\n\r\n closeCheckDevices();\r\n this.closeModal();\r\n resolve({\r\n cameraId: (cameraSelect as HTMLSelectElement)?.value,\r\n microphoneId: (micSelect as HTMLSelectElement)?.value,\r\n result: true,\r\n });\r\n });\r\n })\r\n }\r\n\r\n public realtimeAlertsUI(response: {\r\n status: string,\r\n description: string,\r\n type?: string,\r\n }) {\r\n const facePositionAlert = document.getElementById(\"facePositionAlert\");\r\n const ambientVerifyAlert = document.getElementById(\"ambientVerifyAlert\");\r\n\r\n const alertDivFacePosition = document.getElementById(\"alertDivFacePosition\");\r\n const info_FacePosition = document.getElementById(\"info_FacePosition\");\r\n\r\n const checkmark_FacePosition = document.getElementById(\"checkmark_FacePosition\");\r\n const checkmark_stem_FacePosition = document.getElementById(\"checkmark_stem_FacePosition\");\r\n const checkmark_kick_FacePosition = document.getElementById(\"checkmark_kick_FacePosition\");\r\n\r\n const alertDivAmbientVerify = document.getElementById(\"alertDivAmbientVerify\");\r\n const checkmark_AmbientVerify = document.getElementById(\"checkmark_AmbientVerify\");\r\n const checkmark_stem_AmbientVerify = document.getElementById(\"checkmark_stem_AmbientVerify\");\r\n const checkmark_kick_AmbientVerify = document.getElementById(\"checkmark_kick_AmbientVerify\");\r\n \r\n\r\n if(response.status === 'OK') {\r\n facePositionAlert && (facePositionAlert!.style.color = \"#16A34A\");\r\n ambientVerifyAlert && (ambientVerifyAlert!.style.color = \"#16A34A\");\r\n\r\n alertDivFacePosition && (alertDivFacePosition!.setAttribute(\"title\", ``));\r\n info_FacePosition && (info_FacePosition!.style.display = \"none\");\r\n\r\n alertDivAmbientVerify && (alertDivAmbientVerify!.setAttribute(\"title\", ``));\r\n\r\n if (checkmark_FacePosition) {\r\n checkmark_FacePosition!.setAttribute(\"class\", \"checkmark\");\r\n checkmark_stem_FacePosition!.setAttribute(\"class\", \"checkmark_stem\");\r\n checkmark_kick_FacePosition!.setAttribute(\"class\", \"checkmark_kick\");\r\n }\r\n\r\n if (checkmark_AmbientVerify) {\r\n checkmark_AmbientVerify!.setAttribute(\"class\", \"checkmark\");\r\n checkmark_stem_AmbientVerify!.setAttribute(\"class\", \"checkmark_stem\");\r\n checkmark_kick_AmbientVerify!.setAttribute(\"class\", \"checkmark_kick\");\r\n }\r\n } else {\r\n // response.description && (error!.innerText = `${this.faceDetection.alertTranslate(response.description)}`);\r\n // if (checkmark_FacePosition && (response.description === \"Nenhuma face encontrada\" || response.description === \"Face na posi\u00E7\u00E3o errada\")) {\r\n if (checkmark_FacePosition && (response.type === \"position_detection_on_stream\" || response.type === \"face_detection_on_stream\")) {\r\n facePositionAlert && (facePositionAlert!.style.color = \"#FF0000\");\r\n\r\n info_FacePosition && (info_FacePosition!.style.display = \"block\");\r\n alertDivFacePosition && (alertDivFacePosition!.setAttribute(\"title\", response.description));\r\n \r\n checkmark_FacePosition!.setAttribute(\"class\", \"checkmark_error\");\r\n checkmark_stem_FacePosition!.setAttribute(\"class\", \"checkmark_stem_error\");\r\n checkmark_kick_FacePosition!.setAttribute(\"class\", \"checkmark_kick_error\");\r\n }\r\n \r\n if (checkmark_AmbientVerify && response.description === \"M\u00FAltiplas faces detectadas\") {\r\n ambientVerifyAlert && (ambientVerifyAlert!.style.color = \"#FF0000\");\r\n alertDivAmbientVerify && (alertDivAmbientVerify!.setAttribute(\"title\", `${response.description}`));\r\n \r\n checkmark_AmbientVerify!.setAttribute(\"class\", \"checkmark_error\");\r\n checkmark_stem_AmbientVerify!.setAttribute(\"class\", \"checkmark_stem_error\");\r\n checkmark_kick_AmbientVerify!.setAttribute(\"class\", \"checkmark_kick_error\");\r\n }\r\n }\r\n }\r\n\r\n public waitingSpyDevices(waiting: boolean)\r\n {\r\n const SpyCamAlert = document.getElementById(\"SpyCamAlert\");\r\n\r\n const alertDivSpyCam = document.getElementById(\r\n \"alertDivSpyCam\"\r\n );\r\n alertDivSpyCam && (alertDivSpyCam!.style.display = \"flex\");\r\n \r\n if(waiting)\r\n {\r\n SpyCamAlert && (SpyCamAlert!.style.color = \"#c7c7c7\");\r\n SpyCamAlert && (SpyCamAlert.innerText = \"Verificando Spy Cam...\");\r\n const confirmBtn = document.getElementById(\"confirmBtn\");\r\n if(confirmBtn)\r\n confirmBtn.setAttribute(\"disabled\", \"true\");\r\n confirmBtn && (confirmBtn.style.cursor = \"not-allowed\");\r\n }\r\n else\r\n {\r\n SpyCamAlert && (SpyCamAlert!.style.color = \"#16A34A\");\r\n SpyCamAlert && (SpyCamAlert.innerText = \"Verifica\u00E7\u00E3o de Spy Cam\");\r\n const confirmBtn = document.getElementById(\"confirmBtn\");\r\n if(confirmBtn)\r\n confirmBtn.setAttribute(\"disabled\", \"false\");\r\n confirmBtn && (confirmBtn.style.cursor = \"pointer\");\r\n }\r\n }\r\n public isSpyDevicesUI(allowedDevices: boolean) {\r\n \r\n const SpyCamAlert = document.getElementById(\"SpyCamAlert\");\r\n const confirmBtn = document.getElementById(\"confirmBtn\");\r\n\r\n const alertDivSpyCam = document.getElementById(\r\n \"alertDivSpyCam\"\r\n );\r\n alertDivSpyCam && (alertDivSpyCam!.style.display = \"flex\");\r\n const checkmark_SpyCam = document.getElementById(\r\n \"checkmark_SpyCam\"\r\n );\r\n const checkmark_stem_SpyCam = document.getElementById(\r\n \"checkmark_stem_SpyCam\"\r\n );\r\n const checkmark_kick_SpyCam = document.getElementById(\r\n \"checkmark_kick_SpyCam\"\r\n );\r\n\r\n if (allowedDevices) {\r\n SpyCamAlert && (SpyCamAlert!.style.color = \"#16A34A\");\r\n\r\n if (checkmark_SpyCam) {\r\n checkmark_SpyCam!.setAttribute(\"class\", \"checkmark\");\r\n checkmark_stem_SpyCam!.setAttribute(\"class\", \"checkmark_stem\");\r\n checkmark_kick_SpyCam!.setAttribute(\"class\", \"checkmark_kick\");\r\n }\r\n } else {\r\n if (checkmark_SpyCam) {\r\n SpyCamAlert && (SpyCamAlert!.style.color = \"#FF0000\");\r\n\r\n checkmark_SpyCam!.setAttribute(\"class\", \"checkmark_error\");\r\n checkmark_stem_SpyCam!.setAttribute(\r\n \"class\",\r\n \"checkmark_stem_error\"\r\n );\r\n checkmark_kick_SpyCam!.setAttribute(\r\n \"class\",\r\n \"checkmark_kick_error\"\r\n );\r\n }\r\n }\r\n\r\n this.options.useSpyScan && confirmBtn?.removeAttribute(\"disabled\");\r\n confirmBtn && (confirmBtn.style.cursor = \"pointer\");\r\n }\r\n\r\n public isUnderResolutionUI(allowedResolution: boolean) {\r\n const error = document.getElementById(\"resolutionAlert\");\r\n const alertDivResolution = document.getElementById(\"alertDivResolution\");\r\n const info_resolution = document.getElementById(\"info_resolution\");\r\n\r\n const checkmark_resolution = document.getElementById(\"checkmark_resolution\");\r\n const checkmark_stem_resolution = document.getElementById(\"checkmark_stem_resolution\");\r\n const checkmark_kick_resolution = document.getElementById(\"checkmark_kick_resolution\");\r\n\r\n if (!allowedResolution) {\r\n error!.style.color = \"#FF0000\";\r\n info_resolution && (info_resolution!.style.display = \"block\");\r\n alertDivResolution!.setAttribute(\"title\", `A c\u00E2mera n\u00E3o satisfaz a resolu\u00E7\u00E3o m\u00EDnima exigida (${this.videoOptions.minWidth}x${this.videoOptions.minHeight}).\\nPara iniciar um exame utilize uma outra c\u00E2mera.`);\r\n // error!.innerText = `A c\u00E2mera n\u00E3o satisfaz a resolu\u00E7\u00E3o m\u00EDnima exigida (${this.videoOptions.minWidth}x${this.videoOptions.minHeight}).\\nPara iniciar um exame utilize uma outra c\u00E2mera.`;\r\n \r\n // Error\r\n checkmark_resolution!.setAttribute(\"class\", \"checkmark_error\");\r\n checkmark_stem_resolution!.setAttribute(\"class\", \"checkmark_stem_error\");\r\n checkmark_kick_resolution!.setAttribute(\"class\", \"checkmark_kick_error\");\r\n } else {\r\n error!.style.color = \"#16A34A\";\r\n info_resolution && (info_resolution!.style.display = \"none\");\r\n error!.setAttribute(\"title\", '');\r\n\r\n // OK\r\n checkmark_resolution!.setAttribute(\"class\", \"checkmark\");\r\n checkmark_stem_resolution!.setAttribute(\"class\", \"checkmark_stem\");\r\n checkmark_kick_resolution!.setAttribute(\"class\", \"checkmark_kick\");\r\n }\r\n }\r\n\r\n public videoDeviceInterfaceUI(stream: MediaStream) {\r\n const cameraStream: HTMLMediaElement | null = document.querySelector(\"#cameraStream\");\r\n\r\n if (cameraStream) {\r\n cameraStream.srcObject = stream;\r\n cameraStream.play().catch(e => {\r\n console.warn(\"Erro ao iniciar preview de v\u00EDdeo:\", e);\r\n });\r\n }\r\n }\r\n\r\n public audioDeviceInterfaceUIAllowedAmbient(allowedAmbient: boolean) {\r\n const ambientVerifyAlert = document.getElementById(\"ambientVerifyAlert\");\r\n const alertDivAmbientVerify = document.getElementById(\"alertDivAmbientVerify\");\r\n const checkmark_AmbientVerify = document.getElementById(\"checkmark_AmbientVerify\");\r\n const checkmark_stem_AmbientVerify = document.getElementById(\"checkmark_stem_AmbientVerify\");\r\n const checkmark_kick_AmbientVerify = document.getElementById(\"checkmark_kick_AmbientVerify\");\r\n\r\n if(!allowedAmbient) {\r\n ambientVerifyAlert && (ambientVerifyAlert!.style.color = \"#FF0000\");\r\n alertDivAmbientVerify && (alertDivAmbientVerify!.setAttribute(\"title\", `Ambiente apresentando muito ru\u00EDdo!`));\r\n \r\n checkmark_AmbientVerify!.setAttribute(\"class\", \"checkmark_error\");\r\n checkmark_stem_AmbientVerify!.setAttribute(\"class\", \"checkmark_stem_error\");\r\n checkmark_kick_AmbientVerify!.setAttribute(\"class\", \"checkmark_kick_error\");\r\n } else {\r\n ambientVerifyAlert && (ambientVerifyAlert!.style.color = \"#16A34A\");\r\n alertDivAmbientVerify && (alertDivAmbientVerify!.setAttribute(\"title\", ``));\r\n\r\n checkmark_AmbientVerify!.setAttribute(\"class\", \"checkmark\");\r\n checkmark_stem_AmbientVerify!.setAttribute(\"class\", \"checkmark_stem\");\r\n checkmark_kick_AmbientVerify!.setAttribute(\"class\", \"checkmark_kick\");\r\n } \r\n }\r\n\r\n public audioDeviceInterfaceUIMicrophoneWorks(microphoneWorks: boolean) {\r\n const error = document.getElementById(\"microphoneAlert\");\r\n const alertDivMicrophone = document.getElementById(\"alertDivMicrophone\");\r\n const checkmark_microphone = document.getElementById(\"checkmark_microphone\");\r\n const checkmark_stem_microphone = document.getElementById(\"checkmark_stem_microphone\");\r\n const checkmark_kick_microphone = document.getElementById(\"checkmark_kick_microphone\");\r\n\r\n // Verify if microphone works\r\n if(microphoneWorks) {\r\n // OK\r\n error && (error!.style.color = \"#16A34A\");\r\n alertDivMicrophone && (alertDivMicrophone!.setAttribute(\"title\", ``));\r\n checkmark_microphone && checkmark_microphone!.setAttribute(\"class\", \"checkmark\");\r\n checkmark_stem_microphone && checkmark_stem_microphone!.setAttribute(\"class\", \"checkmark_stem\");\r\n checkmark_kick_microphone && checkmark_kick_microphone!.setAttribute(\"class\", \"checkmark_kick\");\r\n } else {\r\n error && (error!.style.color = \"#FF0000\");\r\n alertDivMicrophone && (alertDivMicrophone!.setAttribute(\"title\", `Microfone n\u00E3o est\u00E1 funcionando corretamente!`));\r\n checkmark_microphone && checkmark_microphone!.setAttribute(\"class\", \"checkmark_error\");\r\n checkmark_stem_microphone && checkmark_stem_microphone!.setAttribute(\"class\", \"checkmark_stem_error\");\r\n checkmark_kick_microphone && checkmark_kick_microphone!.setAttribute(\"class\", \"checkmark_kick_error\");\r\n } \r\n }\r\n \r\n public audioDeviceInterfaceUIErrorExec() {\r\n const error = document.getElementById(\"microphoneAlert\");\r\n const checkmark_microphone = document.getElementById(\"checkmark_microphone\");\r\n const checkmark_stem_microphone = document.getElementById(\"checkmark_stem_microphone\");\r\n const checkmark_kick_microphone = document.getElementById(\"checkmark_kick_microphone\");\r\n\r\n\r\n // Error\r\n error && (error!.style.color = \"#FF0000\");\r\n checkmark_microphone && checkmark_microphone!.setAttribute(\"class\", \"checkmark_error\");\r\n checkmark_stem_microphone && checkmark_stem_microphone!.setAttribute(\"class\", \"checkmark_stem_error\");\r\n checkmark_kick_microphone && checkmark_kick_microphone!.setAttribute(\"class\", \"checkmark_kick_error\"); \r\n }\r\n\r\n public audioDeviceInterfaceUIPills(value: number) {\r\n const audioStream: HTMLMeterElement | null = document.querySelector(\"#audioStream\");\r\n const pillList = audioStream?.querySelectorAll(\"div\");\r\n const volumeText: HTMLParagraphElement | null = document.querySelector(\"#audioText\");\r\n\r\n const pillValue = value / 4;\r\n pillList?.forEach((item, index) => {\r\n index < Math.ceil(pillValue) ? (item.style.backgroundColor = \"rgb(22, 163, 74)\") : (item.style.backgroundColor = \"rgba(0, 0, 0, .3)\");\r\n }); \r\n\r\n volumeText && (volumeText.innerText = value.toFixed(0).toString());\r\n }\r\n\r\n public async addStyleMask() {\r\n const styles = `\r\n .facial-biometry__mask {\r\n mask-image: url('https://iarisprod.blob.core.windows.net/imagens/square.svg'), url('https://iarisprod.blob.core.windows.net/imagens/face-mask.svg');\r\n mask-size: cover, auto 65%;\r\n mask-repeat: no-repeat;\r\n mask-position: center, center;\r\n mask-composite: subtract;\r\n \r\n -webkit-mask-image: url('https://iarisprod.blob.core.windows.net/imagens/square.svg'), url('https://iarisprod.blob.core.windows.net/imagens/face-mask.svg');\r\n -webkit-mask-size: cover, auto 65%;\r\n -webkit-mask-repeat: no-repeat;\r\n -webkit-mask-position: center, center;\r\n -webkit-mask-composite: source-out;\r\n }\r\n \r\n .biometry__frame {\r\n background: url(\"https://iarisprod.blob.core.windows.net/imagens/face-frame.svg\") no-repeat center;\r\n background-size: auto 65%;\r\n\r\n // mask-image: url(\"https://iarisprod.blob.core.windows.net/imagens/face-frame.svg\");\r\n // mask-size: auto 65%;\r\n // mask-position: center;\r\n // mask-repeat: no-repeat;\r\n\r\n // -webkit-mask-image: url(\"https://iarisprod.blob.core.windows.net/imagens/face-frame.svg\");\r\n // -webkit-mask-size: auto 65%;\r\n // -webkit-mask-position: center;\r\n // -webkit-mask-repeat: no-repeat;\r\n }\r\n `;\r\n\r\n const styleSheet = document.createElement(\"style\");\r\n styleSheet.innerHTML = styles;\r\n document.head.appendChild(styleSheet);\r\n }\r\n\r\n public applyStyles(element: any, styles: any) {\r\n for (const [property, value] of Object.entries(styles)) {\r\n element.style[property] = value;\r\n }\r\n }\r\n}", "import IParamsConfig from \"../../interfaces/ParamsConfig\";\r\nimport { checkPermissions } from \"../../modules/checkPermissions\";\r\nimport enumarateDevices from \"../../modules/enumarateDevices\";\r\nimport { FaceDetection } from \"../../modules/faceDetection\";\r\nimport { SpyCam, SpyCamDevice } from \"../../modules/SpyCam\";\r\nimport {\r\n getDefaultProctoringOptions,\r\n ProctoringSessionOptions,\r\n} from \"../../proctoring/options/ProctoringOptions\";\r\nimport {\r\n getDefaultProctoringVideoOptions,\r\n ProctoringVideoOptions,\r\n validatePartialVideoOptions,\r\n} from \"../../proctoring/options/ProctoringVideoOptions\";\r\nimport { ProctoringContext } from \"../../proctoring/proctoring\";\r\nimport { isMobileDevice } from \"../../utils/browserInformations\";\r\nimport { BackendService } from \"../backend/BackendService\";\r\nimport { DeviceTypeEnum } from \"../backend/SpyCamBackendService\";\r\nimport { CameraRecorder } from \"../recorders/CameraRecorder\";\r\nimport { VolumeMeter } from \"../recorders/VolumeMeter\";\r\nimport { DeviceCheckerUI } from \"./DeviceCheckerUI\";\r\n\r\nexport interface checkDevicesReturn {\r\n cameraId?: string;\r\n microphoneId?: string;\r\n volumeRange?: number;\r\n allowedResolution?: boolean;\r\n allowedAmbient?: boolean;\r\n allowedPositionFace?: boolean;\r\n allowedMicrophone?: boolean;\r\n allowedSpyScan?: boolean | null;\r\n result: boolean;\r\n faceDetectionAlerts?: {\r\n status: string;\r\n description: string;\r\n };\r\n}\r\n\r\nexport class DeviceCheckerService {\r\n private deviceCheckResult: any | null = null;\r\n private static isModalOpen: boolean = false;\r\n private options: ProctoringSessionOptions;\r\n private videoOptions: ProctoringVideoOptions = {\r\n width: 1080,\r\n height: 720,\r\n minWidth: 0,\r\n minHeight: 0,\r\n };\r\n private cameraRecorder: CameraRecorder;\r\n private DeviceCheckerUI: DeviceCheckerUI | undefined;\r\n private volumeMeter: VolumeMeter | undefined;\r\n\r\n private volumeMedia: number = 0;\r\n private volumeSum: number = 0;\r\n private volumeCounter: number = 0;\r\n private faceDetection: FaceDetection;\r\n private faceDetectionAlerts: any;\r\n\r\n private microphoneMinThreshold: number = 5;\r\n\r\n private allowedResolution: boolean = true;\r\n private allowedAmbient: boolean = true;\r\n private allowedPositionFace: boolean = true;\r\n private allowedMicrophone: boolean = false;\r\n private allowedSpyScan: boolean | null = null;\r\n\r\n\r\n private readonly backend: BackendService;\r\n private readonly context: ProctoringContext;\r\n\r\n private noiseLimit: number = 0;\r\n\r\n private onUpdateCb: any;\r\n\r\n private spycam: SpyCam;\r\n private spydevices: SpyCamDevice[] | undefined;\r\n\r\n constructor(context: ProctoringContext) {\r\n this.faceDetection = new FaceDetection(\r\n {\r\n onRealtimeAlertsCallback: (response: any) =>\r\n this.realtimeAlerts(response),\r\n },\r\n { videoBehaviourParameters: { detectFace: true } },\r\n \"cameraStream\",\r\n \"liveCheckDevices\"\r\n );\r\n this.context = context;\r\n this.backend = new BackendService({\r\n type: context?.type || \"prod\",\r\n token: context.token!,\r\n });\r\n\r\n }\r\n\r\n public getDeviceCheckResult() {\r\n return this.deviceCheckResult;\r\n }\r\n\r\n public async runCheckDevicesFlow(\r\n options: ProctoringSessionOptions,\r\n _videoOptions: Partial<ProctoringVideoOptions>,\r\n onModalConfirm: (\r\n resolve: (cameraId: string, microphoneId: string) => void\r\n ) => void,\r\n onModalCancel: (reject: (error: Error) => void) => void,\r\n onUpdate: (feedback: any) => void\r\n ): Promise<any> {\r\n if (DeviceCheckerService.isModalOpen) {\r\n return Promise.reject(\"Modal j\u00E1 est\u00E1 aberto\");\r\n }\r\n\r\n this.options = {\r\n ...getDefaultProctoringOptions,\r\n ...options,\r\n captureScreen: false,\r\n allowMultipleMonitors: true,\r\n allowOnlyFirstMonitor: false,\r\n };\r\n\r\n DeviceCheckerService.isModalOpen = true;\r\n\r\n try {\r\n await this.faceDetection.initializeDetector();\r\n\r\n // Inicia a checagem de dispositivos (c\u00E2mera e microfone)\r\n const { cameraStream } = await this.startCheckDevices(\r\n options,\r\n _videoOptions\r\n );\r\n\r\n if(this.options?.useSpyScan) {\r\n await this.checkSpyScan();\r\n }\r\n\r\n // Retorna imediatamente o cameraStream para o desenvolvedor exibir o v\u00EDdeo ao vivo\r\n const returnData = { cameraStream: this.cameraRecorder.cameraStream };\r\n\r\n this.onUpdateCb = (e: any) => onUpdate(e);\r\n\r\n // Espera o resultado do modal personalizado\r\n const resultPromise = new Promise<checkDevicesReturn>(\r\n (resolve, reject) => {\r\n // Passa os callbacks para quem est\u00E1 usando o componente\r\n onModalConfirm(() => {\r\n this.closeCheckDevices();\r\n\r\n // Quando o modal de quem usa o componente confirmar\r\n resolve({\r\n result: true,\r\n cameraId: options.cameraId || \"default\",\r\n microphoneId: options.microphoneId || \"default\",\r\n volumeRange: this.volumeMedia,\r\n allowedResolution: this.allowedResolution,\r\n allowedPositionFace: this.allowedPositionFace,\r\n allowedAmbient: this.allowedAmbient,\r\n allowedMicrophone: this.allowedMicrophone,\r\n allowedSpyScan: this.allowedSpyScan,\r\n faceDetectionAlerts: this.faceDetectionAlerts,\r\n });\r\n DeviceCheckerService.isModalOpen = false;\r\n });\r\n\r\n // Callback de cancelamento do modal\r\n onModalCancel(() => {\r\n this.closeCheckDevices();\r\n // reject(new Error(\"Modal cancelado pelo usu\u00E1rio\"));\r\n resolve({\r\n result: false,\r\n });\r\n DeviceCheckerService.isModalOpen = false;\r\n });\r\n }\r\n );\r\n\r\n // Salva uma c\u00F3pia local da resposta\r\n this.deviceCheckResult = { ...returnData, result: resultPromise };\r\n\r\n // Retorna imediatamente o cameraStream junto com a promise para o resultado final\r\n return { ...returnData, result: resultPromise };\r\n } catch (error) {\r\n // Se algum erro ocorrer durante o processo, fecha os dispositivos\r\n this.closeCheckDevices();\r\n DeviceCheckerService.isModalOpen = false;\r\n throw error;\r\n }\r\n }\r\n\r\n private onUpdateCallback() {\r\n if (typeof this.onUpdateCb === \"function\") {\r\n this.onUpdateCb({\r\n allowedResolution: this.allowedResolution,\r\n allowedPositionFace: this.allowedPositionFace,\r\n allowedAmbient: this.allowedAmbient,\r\n allowedMicrophone: this.allowedMicrophone,\r\n allowedSpyScan: this.allowedSpyScan,\r\n faceDetectionAlerts: this.faceDetectionAlerts,\r\n });\r\n }\r\n }\r\n\r\n public async checkDevices(\r\n options: ProctoringSessionOptions = getDefaultProctoringOptions,\r\n _videoOptions: ProctoringVideoOptions = getDefaultProctoringVideoOptions\r\n ): Promise<checkDevicesReturn> {\r\n if (DeviceCheckerService.isModalOpen) {\r\n return Promise.reject();\r\n }\r\n console.log('checkDevices started');\r\n\r\n this.allowedMicrophone = false;\r\n this.allowedResolution = false;\r\n this.allowedAmbient = false;\r\n this.allowedPositionFace = false;\r\n \r\n\r\n DeviceCheckerService.isModalOpen = true;\r\n this.DeviceCheckerUI = new DeviceCheckerUI(options, _videoOptions);\r\n\r\n\r\n try {\r\n this.options = {\r\n ...getDefaultProctoringOptions,\r\n ...options,\r\n captureScreen: false,\r\n allowMultipleMonitors: true,\r\n allowOnlyFirstMonitor: false,\r\n };\r\n this.videoOptions = { ...this.videoOptions, ..._videoOptions };\r\n\r\n const paramsConfig: IParamsConfig = await this.backend.getParamsConfig(\r\n this.context\r\n );\r\n this.noiseLimit = paramsConfig.audioBehaviourParameters?.noiseLimit || 40;\r\n\r\n await this.faceDetection.initializeDetector();\r\n\r\n this.DeviceCheckerUI.checkDevicesInterface();\r\n this.startCheckDevices(options, _videoOptions);\r\n\r\n await this.checkSpyScan();\r\n\r\n const { cameraId, microphoneId, result } =\r\n await this.DeviceCheckerUI.modalActions(() => this.closeCheckDevices());\r\n\r\n return new Promise((resolve) => {\r\n const response = {\r\n result,\r\n cameraId,\r\n microphoneId,\r\n volumeRange: this.volumeMedia,\r\n allowedResolution: this.allowedResolution,\r\n allowedPositionFace: this.allowedPositionFace,\r\n allowedAmbient: this.allowedAmbient,\r\n allowedMicrophone: this.allowedMicrophone,\r\n allowedSpyScan: this.allowedSpyScan,\r\n faceDetectionAlerts: this.faceDetectionAlerts,\r\n };\r\n // Salva uma c\u00F3pia local da resposta\r\n this.deviceCheckResult = response;\r\n\r\n resolve(response);\r\n });\r\n } catch (error) {\r\n this.DeviceCheckerUI && this.DeviceCheckerUI.closeModal();\r\n this.closeCheckDevices();\r\n // If there is an error, reject the promise\r\n return Promise.reject(error);\r\n }\r\n }\r\n \r\n\r\n private isUnderResolution() {\r\n const settings = this.cameraRecorder.cameraStream\r\n .getVideoTracks()[0]\r\n .getSettings();\r\n\r\n // conferindo se a camera est\u00E1 em modo portrait\r\n let { width = 0, height = 0 } = settings;\r\n\r\n const isPortrait =\r\n screen.orientation?.type.includes(\"portrait\");\r\n \r\n if (isPortrait && isMobileDevice()) {\r\n if(this.videoOptions.width == height && this.videoOptions.height == width) {\r\n [width, height] = [height, width];\r\n }\r\n }\r\n\r\n if (\r\n this.videoOptions.minWidth! > width! ||\r\n this.videoOptions.minHeight! > height!\r\n ) {\r\n this.allowedResolution = false;\r\n } else {\r\n this.allowedResolution = true;\r\n }\r\n\r\n this.onUpdateCallback();\r\n\r\n this.DeviceCheckerUI &&\r\n this.DeviceCheckerUI.isUnderResolutionUI(this.allowedResolution);\r\n }\r\n\r\n private realtimeAlerts(response: {\r\n status: string;\r\n description: string;\r\n type?: string;\r\n }) {\r\n this.faceDetectionAlerts = response;\r\n\r\n if (response.status === \"OK\") {\r\n this.allowedPositionFace = true;\r\n this.allowedAmbient = true;\r\n } else {\r\n this.allowedPositionFace = false;\r\n this.allowedAmbient = false;\r\n }\r\n\r\n this.onUpdateCallback();\r\n\r\n this.DeviceCheckerUI && this.DeviceCheckerUI.realtimeAlertsUI(response);\r\n }\r\n\r\n private videoDeviceInterface(stream: MediaStream) {\r\n this.DeviceCheckerUI && this.DeviceCheckerUI.videoDeviceInterfaceUI(stream);\r\n\r\n this.isUnderResolution();\r\n this.faceDetection.enableCam(stream);\r\n }\r\n\r\n private audioDeviceInterface(stream: MediaStream) {\r\n this.volumeMeter = new VolumeMeter(this.cameraRecorder.cameraStream);\r\n\r\n \r\n this.volumeMeter\r\n .start({\r\n setVolume: (value: number) => {\r\n this.volumeCounter++;\r\n this.volumeSum += value;\r\n // console.log('setVolume', value);\r\n // console.log('this.allowedMicrophone', this.allowedMicrophone);\r\n // console.log('this.microphoneMinThreshold', this.microphoneMinThreshold);\r\n // Verify if microphone works\r\n if (!this.allowedMicrophone && value > this.microphoneMinThreshold) {\r\n this.allowedMicrophone = true;\r\n this.onUpdateCallback();\r\n // OK\r\n this.DeviceCheckerUI &&\r\n this.DeviceCheckerUI.audioDeviceInterfaceUIMicrophoneWorks(true);\r\n } else if (!this.allowedMicrophone) {\r\n this.DeviceCheckerUI &&\r\n this.DeviceCheckerUI.audioDeviceInterfaceUIMicrophoneWorks(false);\r\n }\r\n\r\n this.DeviceCheckerUI &&\r\n this.DeviceCheckerUI.audioDeviceInterfaceUIPills(value);\r\n\r\n if (value > this.noiseLimit) {\r\n this.allowedAmbient = false;\r\n this.onUpdateCallback();\r\n this.DeviceCheckerUI &&\r\n this.DeviceCheckerUI.audioDeviceInterfaceUIAllowedAmbient(false);\r\n } else {\r\n this.allowedAmbient = true;\r\n this.onUpdateCallback();\r\n this.DeviceCheckerUI &&\r\n this.DeviceCheckerUI.audioDeviceInterfaceUIAllowedAmbient(true);\r\n }\r\n },\r\n })\r\n .catch((e: any) => {\r\n console.log(e);\r\n\r\n this.volumeMeter = undefined;\r\n\r\n this.DeviceCheckerUI &&\r\n this.DeviceCheckerUI.audioDeviceInterfaceUIErrorExec();\r\n });\r\n }\r\n\r\n public async changeSelectedDevice({ cameraId, microphoneId }: any) {\r\n await this.cameraRecorder.stopStream();\r\n this.volumeMeter?.stop();\r\n\r\n this.faceDetection.stopDetection();\r\n\r\n this.cameraRecorder = new CameraRecorder(\r\n {\r\n cameraId,\r\n microphoneId,\r\n onBufferSizeError: false,\r\n onBufferSizeErrorCallback: () => {},\r\n },\r\n {\r\n width: this.videoOptions.width,\r\n height: this.videoOptions.height,\r\n }\r\n );\r\n\r\n await this.cameraRecorder.startStream();\r\n\r\n this.videoDeviceInterface(this.cameraRecorder.cameraStream);\r\n this.audioDeviceInterface(this.cameraRecorder.cameraStream);\r\n\r\n return {\r\n cameraStream: this.cameraRecorder.cameraStream,\r\n };\r\n }\r\n\r\n public async startCheckDevices(\r\n options: ProctoringSessionOptions = getDefaultProctoringOptions,\r\n _videoOptions: Partial<ProctoringVideoOptions>\r\n ) {\r\n\r\n this.allowedMicrophone = false;\r\n this.allowedResolution = false;\r\n this.allowedAmbient = false;\r\n this.allowedPositionFace = false;\r\n\r\n this.DeviceCheckerUI &&\r\n this.DeviceCheckerUI.setSelectOption(options, (e: any) =>\r\n this.changeSelectedDevice(e)\r\n );\r\n\r\n this.videoOptions = validatePartialVideoOptions(_videoOptions);\r\n\r\n await checkPermissions();\r\n\r\n this.cameraRecorder = new CameraRecorder(\r\n {\r\n cameraId: options.cameraId,\r\n microphoneId: options.microphoneId,\r\n onBufferSizeError: false,\r\n onBufferSizeErrorCallback: () => {},\r\n },\r\n {\r\n width: this.videoOptions.width,\r\n height: this.videoOptions.height,\r\n }\r\n );\r\n\r\n await this.cameraRecorder.startStream();\r\n\r\n this.videoDeviceInterface(this.cameraRecorder.cameraStream);\r\n this.audioDeviceInterface(this.cameraRecorder.cameraStream);\r\n\r\n if (this.DeviceCheckerUI) {\r\n const button: HTMLButtonElement | null =\r\n document.querySelector(\"#confirmBtn\");\r\n // button!.disabled = false;\r\n !this.options.useSpyScan && (button!.disabled = false);\r\n }\r\n\r\n return {\r\n cameraStream: this.cameraRecorder.cameraStream,\r\n };\r\n }\r\n\r\n public async closeCheckDevices() {\r\n DeviceCheckerService.isModalOpen = false;\r\n\r\n this.faceDetection.stopDetection();\r\n\r\n this.volumeMeter?.stop();\r\n\r\n this.volumeMedia = Math.ceil(this.volumeSum / this.volumeCounter);\r\n\r\n await this.cameraRecorder.stopStream();\r\n\r\n this.DeviceCheckerUI = undefined;\r\n this.onUpdateCb = undefined;\r\n }\r\n\r\n private async checkSpyScan() {\r\n this.spycam = new SpyCam(this.context, {});\r\n this.allowedSpyScan = null;\r\n\r\n if (this.options.useSpyScan) {\r\n this.DeviceCheckerUI && this.DeviceCheckerUI.waitingSpyDevices(true);\r\n try {\r\n const isPlugged = await this.spycam.isPluggedIn();\r\n if (isPlugged) {\r\n await this.spycam\r\n .devices({\r\n deviceType: DeviceTypeEnum.POTENCIAL_CAMERA,\r\n })\r\n .then((devices) => {\r\n if (devices?.length > 0) {\r\n this.allowedSpyScan = false;\r\n } else {\r\n this.allowedSpyScan = true;\r\n }\r\n })\r\n .finally(() => {\r\n this.DeviceCheckerUI &&\r\n this.DeviceCheckerUI.waitingSpyDevices(false);\r\n this.DeviceCheckerUI &&\r\n this.allowedSpyScan != null &&\r\n this.DeviceCheckerUI.isSpyDevicesUI(this.allowedSpyScan);\r\n });\r\n } else {\r\n this.allowedSpyScan = false;\r\n this.DeviceCheckerUI && this.DeviceCheckerUI.waitingSpyDevices(false);\r\n this.DeviceCheckerUI &&\r\n this.DeviceCheckerUI.isSpyDevicesUI(this.allowedSpyScan);\r\n }\r\n } catch (error: any) {\r\n this.allowedSpyScan = false;\r\n this.DeviceCheckerUI && this.DeviceCheckerUI.waitingSpyDevices(false);\r\n this.DeviceCheckerUI &&\r\n this.DeviceCheckerUI.isSpyDevicesUI(this.allowedSpyScan);\r\n console.log(error);\r\n }\r\n }\r\n }\r\n}\r\n", "import enumarateDevices from \"../modules/enumarateDevices\";\r\nimport { CameraRecorder } from \"../new-flow/recorders/CameraRecorder\";\r\n\r\nexport interface cameraInterface {\r\n base64: string;\r\n}\r\n\r\nexport interface IResolution {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport class CapturePhoto {\r\n private cameraRecorder: CameraRecorder;\r\n private base64: string;\r\n private resolution: IResolution;\r\n\r\n constructor() {}\r\n\r\n public async takePicture(\r\n title: string,\r\n subtitle: string,\r\n resolution: IResolution = { width: 1080, height: 720 }\r\n ) {\r\n this.resolution = resolution;\r\n\r\n return await this.takePictureInterface(title, subtitle);\r\n }\r\n\r\n public async startCapture(cameraId = \"default\") {\r\n const cameraContainer: HTMLMediaElement | null =\r\n document.querySelector(\"#cameraStream\");\r\n\r\n const constraints: MediaStreamConstraints = {\r\n audio: false,\r\n video: {\r\n facingMode: \"user\",\r\n aspectRatio: 1.777777778,\r\n width: { min: 640, ideal: 640, max: 1920 },\r\n height: { min: 400, ideal: 480 },\r\n deviceId: cameraId,\r\n },\r\n };\r\n\r\n // navigator.mediaDevices.getUserMedia(constraints);\r\n // .then((media: MediaStream) => {\r\n // cameraContainer!.srcObject = media;\r\n // cameraContainer!.play();\r\n // })\r\n // .catch((e) => {\r\n // console.log(e);\r\n // });\r\n\r\n this.cameraRecorder = new CameraRecorder(\r\n {\r\n cameraId: cameraId,\r\n onBufferSizeErrorCallback: () => {},\r\n },\r\n { ...this.resolution }\r\n // {\r\n // width: 640,\r\n // height: 480,\r\n // }\r\n );\r\n\r\n await this.cameraRecorder.startRecording();\r\n\r\n cameraContainer!.srcObject = this.cameraRecorder.cameraStream;\r\n cameraContainer!.play().catch(e => {\r\n console.warn(\"Autoplay bloqueado ou erro ao iniciar v\u00EDdeo:\", e);\r\n });\r\n }\r\n\r\n public shot() {\r\n const cameraContainer: HTMLVideoElement =\r\n document.querySelector(\"#cameraStream\")!;\r\n const canvas: HTMLCanvasElement = document.querySelector(\"#canvas\")!;\r\n const picture: HTMLImageElement = document.querySelector(\"#image\")!;\r\n\r\n canvas.width = cameraContainer.videoWidth;\r\n canvas.height = cameraContainer.videoHeight;\r\n\r\n canvas\r\n .getContext(\"2d\")!\r\n .drawImage(\r\n cameraContainer,\r\n 0,\r\n 0,\r\n cameraContainer.videoWidth,\r\n cameraContainer.videoHeight\r\n );\r\n picture.src = canvas!.toDataURL(\"image/jpg\");\r\n this.base64 = canvas!.toDataURL(\"image/jpg\");\r\n }\r\n\r\n private takePictureInterface(\r\n title: string,\r\n subtitle: string\r\n ): Promise<cameraInterface> {\r\n return new Promise((resolve, reject) => {\r\n // ################################ Background Blur ################################\r\n const fullBg = document.createElement(\"div\");\r\n fullBg.setAttribute(\"id\", \"authPhoto\");\r\n\r\n fullBg.style.backgroundColor = \"rgba(0,0,0,0.4)\";\r\n fullBg.style.zIndex = \"1000\";\r\n fullBg.style.position = \"fixed\";\r\n fullBg.style.top = \"0\";\r\n fullBg.style.left = \"0\";\r\n fullBg.style.height = \"100vh\";\r\n fullBg.style.width = \"100%\";\r\n fullBg.style.display = \"flex\";\r\n fullBg.style.alignItems = \"center\";\r\n fullBg.style.justifyContent = \"center\";\r\n\r\n // ################################ Modal Check Devices ################################\r\n const modal = document.createElement(\"div\");\r\n\r\n modal.style.backgroundColor = \"#fff\";\r\n modal.style.zIndex = \"1001\";\r\n modal.style.position = \"fixed\";\r\n modal.style.top = \"0\";\r\n modal.style.left = \"0\";\r\n modal.style.height = \"100vh\";\r\n modal.style.width = \"100%\";\r\n // modal.style.width = \"800px\";\r\n // modal.style.maxHeight = \"95vh\";\r\n modal.style.borderRadius = \"10px\";\r\n modal.style.display = \"flex\";\r\n modal.style.flexDirection = \"column\";\r\n modal.style.alignItems = \"center\";\r\n modal.style.boxSizing = \"border-box\";\r\n\r\n // ################################ Modal Title ################################\r\n const h3 = document.createElement(\"h3\");\r\n\r\n h3.innerText = title || \"Biometria Facial\";\r\n\r\n h3.style.color = \"rgba(0, 0, 0, .7)\";\r\n h3.style.fontWeight = \"bold\";\r\n h3.style.fontSize = \"20px\";\r\n h3.style.marginTop = \"0px\";\r\n h3.style.marginBottom = \"15px\";\r\n h3.style.padding = \"20px 0px 0px\";\r\n h3.style.width = \"100%\";\r\n h3.style.textAlign = \"center\";\r\n h3.style.position = \"fixed\";\r\n h3.style.top = \"0\";\r\n h3.style.left = \"0\";\r\n h3.style.zIndex = \"1010\";\r\n\r\n modal.appendChild(h3);\r\n\r\n // ################################ Modal Subtitle ################################\r\n const p = document.createElement(\"p\");\r\n\r\n p.innerText =\r\n subtitle || \"Encaixe seu rosto no formato e clique no bot\u00E3o abaixo\";\r\n\r\n p.style.color = \"rgba(0, 0, 0, .7)\";\r\n p.style.fontWeight = \"normal\";\r\n p.style.fontSize = \"16px\";\r\n p.style.marginBottom = \"15px\";\r\n p.style.padding = \"0px 0px 20px\";\r\n // p.style.borderBottom = \"2px solid rgba(0, 0, 0, .1)\";\r\n p.style.width = \"100%\";\r\n p.style.textAlign = \"center\";\r\n p.style.position = \"fixed\";\r\n p.style.top = \"55px\";\r\n p.style.left = \"0\";\r\n p.style.zIndex = \"1011\";\r\n\r\n modal.appendChild(p);\r\n\r\n // ################################ Camera Title ################################\r\n\r\n const divCameraHeader = document.createElement(\"div\");\r\n const h3Camera = document.createElement(\"h3\");\r\n const selectCamera = document.createElement(\"select\");\r\n selectCamera.setAttribute(\"id\", \"cameraSelect\");\r\n\r\n divCameraHeader.style.padding = \"0 20px\";\r\n divCameraHeader.style.width = \"100%\";\r\n divCameraHeader.style.display = \"flex\";\r\n divCameraHeader.style.justifyContent = \"space-between\";\r\n divCameraHeader.style.marginBottom = \"15px\";\r\n\r\n h3Camera.innerText = \"C\u00E2mera\";\r\n h3Camera.style.color = \"rgba(0, 0, 0, .75)\";\r\n h3Camera.style.fontWeight = \"bold\";\r\n h3Camera.style.fontSize = \"16px\";\r\n\r\n // selectCamera.style.maxWidth = \"400px\";\r\n\r\n divCameraHeader.appendChild(h3Camera);\r\n divCameraHeader.appendChild(selectCamera);\r\n // modal.appendChild(divCameraHeader);\r\n\r\n // ################################ Camera Stream ################################\r\n\r\n const divCamera = document.createElement(\"div\");\r\n const video = document.createElement(\"video\");\r\n video.setAttribute(\"id\", \"cameraStream\");\r\n video.muted = true;\r\n\r\n // IOS Problem: open camera in fullscreen mode\r\n video.setAttribute(\"playsinline\", \"true\"); // Essencial para iOS n\u00E3o abrir fullscreen\r\n video.setAttribute(\"webkit-playsinline\", \"true\"); // Compatibilidade legada WebKit\r\n video.autoplay = true; // Ajuda a iniciar o stream imediatamente\r\n\r\n // divCamera.style.width = \"calc(100% - 40px)\";\r\n // divCamera.style.width = \"100%\";\r\n // divCamera.style.height = \"50vh\";\r\n divCamera.style.position = \"fixed\";\r\n divCamera.style.top = \"0\";\r\n divCamera.style.left = \"0\";\r\n divCamera.style.height = \"100vh\";\r\n divCamera.style.width = \"100%\";\r\n divCamera.style.display = \"flex\";\r\n divCamera.style.justifyContent = \"center\";\r\n // divCamera.style.position = \"relative\";\r\n\r\n video.style.backgroundColor = \"#000\";\r\n video.style.borderRadius = \"10px\";\r\n video.style.width = \"auto\";\r\n video.style.height = \"auto\";\r\n video.style.minHeight = \"100%\";\r\n\r\n divCamera.appendChild(video);\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.setAttribute(\"id\", \"canvas\");\r\n\r\n canvas.style.display = \"none\";\r\n canvas.style.width = \"100%\";\r\n canvas.style.height = \"100%\";\r\n\r\n const image = document.createElement(\"img\");\r\n image.setAttribute(\"id\", \"image\");\r\n\r\n image.style.objectFit = \"contain\";\r\n image.style.display = \"none\";\r\n image.style.borderRadius = \"8px\";\r\n\r\n divCamera.appendChild(canvas);\r\n divCamera.appendChild(image);\r\n\r\n const mask = document.createElement(\"div\");\r\n mask.setAttribute(\"class\", \"facial-biometry__mask\");\r\n mask.style.width = \"100%\";\r\n mask.style.height = \"100%\";\r\n mask.style.position = \"absolute\";\r\n mask.style.top = \"0px\";\r\n mask.style.left = \"0px\";\r\n mask.style.backgroundColor = \"#fff\";\r\n mask.style.opacity = \"0.8\";\r\n\r\n const frame = document.createElement(\"div\");\r\n frame.setAttribute(\"class\", \"biometry__frame\");\r\n frame.style.width = \"100%\";\r\n frame.style.height = \"100%\";\r\n frame.style.position = \"absolute\";\r\n frame.style.top = \"0px\";\r\n frame.style.left = \"0px\";\r\n frame.style.zIndex = \"10\";\r\n\r\n divCamera.appendChild(mask);\r\n divCamera.appendChild(frame);\r\n\r\n modal.appendChild(divCamera);\r\n this.addStyleMask();\r\n\r\n // ################################ Modal Button ################################\r\n\r\n const takePhotoBtn = document.createElement(\"button\");\r\n const divBtn = document.createElement(\"div\");\r\n takePhotoBtn.setAttribute(\"id\", \"confirmBtn\");\r\n\r\n divBtn.style.position = \"fixed\";\r\n divBtn.style.bottom = \"0\";\r\n divBtn.style.left = \"0\";\r\n divBtn.style.width = \"100%\";\r\n divBtn.style.display = \"flex\";\r\n divBtn.style.alignItems = \"center\";\r\n divBtn.style.justifyContent = \"center\";\r\n\r\n takePhotoBtn.style.background =\r\n \"url('https://iarisprod.blob.core.windows.net/imagens/camera.svg') no-repeat center\";\r\n takePhotoBtn.style.width = \"70px\";\r\n takePhotoBtn.style.height = \"70px\";\r\n takePhotoBtn.style.borderRadius = \"70px\";\r\n takePhotoBtn.style.border = \"none\";\r\n takePhotoBtn.style.backgroundColor = \"#16a34a\";\r\n takePhotoBtn.style.margin = \"20px\";\r\n\r\n const closeModalBtn = document.createElement(\"button\");\r\n closeModalBtn.setAttribute(\"id\", \"closeModal\");\r\n\r\n closeModalBtn.style.background =\r\n \"url('https://iarisprod.blob.core.windows.net/imagens/close.svg') no-repeat center\";\r\n closeModalBtn.style.width = \"70px\";\r\n closeModalBtn.style.height = \"70px\";\r\n closeModalBtn.style.borderRadius = \"70px\";\r\n closeModalBtn.style.border = \"none\";\r\n closeModalBtn.style.backgroundColor = \"#e74141\";\r\n closeModalBtn.style.margin = \"20px\";\r\n\r\n divBtn.appendChild(closeModalBtn);\r\n divBtn.appendChild(takePhotoBtn);\r\n modal.appendChild(divBtn);\r\n\r\n const retakeBtn = document.createElement(\"button\");\r\n\r\n // retakeBtn.innerText = \"Tirar outra foto\";\r\n // retakeBtn.style.width = \"100%\";\r\n // retakeBtn.style.height = \"70px\";\r\n // retakeBtn.style.color = \"rgba(0, 0, 0, .7)\";\r\n // retakeBtn.style.fontWeight = \"bold\";\r\n // retakeBtn.style.paddingTop = \"5px\";\r\n // retakeBtn.style.paddingBottom = \"5px\";\r\n // retakeBtn.style.borderRight = \"2px solid rgba(0, 0, 0, .1)\";\r\n retakeBtn.style.background =\r\n \"url('https://easyproctor-public.s3.us-east-2.amazonaws.com/images/retry.svg') no-repeat center\";\r\n retakeBtn.style.width = \"70px\";\r\n retakeBtn.style.height = \"70px\";\r\n retakeBtn.style.borderRadius = \"70px\";\r\n retakeBtn.style.border = \"none\";\r\n retakeBtn.style.backgroundColor = \"#e74141\";\r\n retakeBtn.style.margin = \"20px 20px\";\r\n\r\n const confirmBtn = document.createElement(\"button\");\r\n\r\n // confirmBtn.innerText = \"Confirmar\";\r\n // confirmBtn.style.width = \"100%\";\r\n // confirmBtn.style.height = \"70px\";\r\n // confirmBtn.style.color = \"rgba(0, 0, 0, .7)\";\r\n // confirmBtn.style.fontWeight = \"bold\";\r\n // confirmBtn.style.paddingTop = \"5px\";\r\n // confirmBtn.style.paddingBottom = \"5px\";\r\n confirmBtn.style.background =\r\n \"url('https://iarisprod.blob.core.windows.net/imagens/check.svg') no-repeat center\";\r\n confirmBtn.style.width = \"70px\";\r\n confirmBtn.style.height = \"70px\";\r\n confirmBtn.style.borderRadius = \"70px\";\r\n confirmBtn.style.border = \"none\";\r\n confirmBtn.style.backgroundColor = \"#16a34a\";\r\n confirmBtn.style.margin = \"20px 20px\";\r\n\r\n fullBg.appendChild(modal);\r\n document.body.appendChild(fullBg);\r\n\r\n this.setSelectOption();\r\n this.startCapture();\r\n\r\n takePhotoBtn.addEventListener(\"click\", () => {\r\n divBtn.removeChild(takePhotoBtn);\r\n divBtn.removeChild(closeModalBtn);\r\n divBtn.appendChild(retakeBtn);\r\n divBtn.appendChild(confirmBtn);\r\n\r\n this.shot();\r\n video.style.display = \"none\";\r\n image.style.display = \"block\";\r\n });\r\n\r\n retakeBtn.addEventListener(\"click\", () => {\r\n divBtn.appendChild(closeModalBtn);\r\n divBtn.appendChild(takePhotoBtn);\r\n divBtn.removeChild(retakeBtn);\r\n divBtn.removeChild(confirmBtn);\r\n\r\n video.style.display = \"block\";\r\n image.style.display = \"none\";\r\n });\r\n\r\n confirmBtn.addEventListener(\"click\", () => {\r\n this.closeInterface();\r\n resolve({ base64: this.base64 });\r\n });\r\n\r\n closeModalBtn.addEventListener(\"click\", () => {\r\n this.closeInterface();\r\n reject(new Error(\"User does not captured photo\"));\r\n });\r\n });\r\n }\r\n\r\n private async setSelectOption() {\r\n const cameras: HTMLSelectElement | null =\r\n document.querySelector(\"#cameraSelect\");\r\n\r\n // Listar os dispositivos\r\n const devices = await enumarateDevices();\r\n\r\n cameras && (cameras.value = \"default\");\r\n\r\n const generateOption = (text: string, value: string) => {\r\n const el = document.createElement(\"option\");\r\n el.setAttribute(\"value\", value);\r\n el.innerHTML = text;\r\n return el;\r\n };\r\n\r\n devices.cameras.forEach((camera) => {\r\n const option = generateOption(camera.label, camera.id);\r\n cameras?.appendChild(option);\r\n });\r\n\r\n this.onSelectOptionChange();\r\n }\r\n\r\n private async onSelectOptionChange() {\r\n const cameras: HTMLSelectElement | null =\r\n document.querySelector(\"#cameraSelect\");\r\n\r\n cameras?.addEventListener(\"change\", async () => {\r\n this.startCapture(cameras?.value);\r\n });\r\n }\r\n\r\n private async closeInterface() {\r\n await this.cameraRecorder.stopRecording();\r\n\r\n const authPhoto = document.querySelector(\"#authPhoto\");\r\n authPhoto?.remove();\r\n }\r\n\r\n private async addStyleMask() {\r\n const styles = `\r\n .facial-biometry__mask {\r\n mask-image: url('https://iarisprod.blob.core.windows.net/imagens/square.svg'), url('https://iarisprod.blob.core.windows.net/imagens/face-mask.svg');\r\n mask-size: cover, auto 65%;\r\n mask-repeat: no-repeat;\r\n mask-position: center, center;\r\n mask-composite: subtract;\r\n \r\n -webkit-mask-image: url('https://iarisprod.blob.core.windows.net/imagens/square.svg'), url('https://iarisprod.blob.core.windows.net/imagens/face-mask.svg');\r\n -webkit-mask-size: cover, auto 65%;\r\n -webkit-mask-repeat: no-repeat;\r\n -webkit-mask-position: center, center;\r\n -webkit-mask-composite: source-out;\r\n }\r\n \r\n .biometry__frame {\r\n background: url(\"https://iarisprod.blob.core.windows.net/imagens/face-frame.svg\") no-repeat center;\r\n background-size: auto 65%;\r\n\r\n // mask-image: url(\"https://iarisprod.blob.core.windows.net/imagens/face-frame.svg\");\r\n // mask-size: auto 65%;\r\n // mask-position: center;\r\n // mask-repeat: no-repeat;\r\n\r\n // -webkit-mask-image: url(\"https://iarisprod.blob.core.windows.net/imagens/face-frame.svg\");\r\n // -webkit-mask-size: auto 65%;\r\n // -webkit-mask-position: center;\r\n // -webkit-mask-repeat: no-repeat;\r\n }\r\n `;\r\n\r\n const styleSheet = document.createElement(\"style\");\r\n styleSheet.innerHTML = styles;\r\n document.head.appendChild(styleSheet);\r\n }\r\n}\r\n", "import { ProgressCallback } from \"../new-flow/upload/uploadCalback\";\r\nimport { ProctoringFinisherOptions } from \"../proctoring/proctoring\";\r\n\r\nexport class ExtensionEasyProctor {\r\n hasExtension: boolean = false;\r\n tryes: number = 0;\r\n responseStart: boolean = false;\r\n public options: ProctoringFinisherOptions;\r\n\r\n start(): Promise<boolean> {\r\n let timer: any;\r\n return new Promise((resolve, reject) => {\r\n window.postMessage({ type: 'easyproctor', func: 'startExtensionEasyproctor' }, \"*\");\r\n\r\n timer = setInterval(() => {\r\n if (this.tryes > 10) {\r\n clearInterval(timer);\r\n reject(new Error(\"N\u00E3o foi poss\u00EDvel se conectar com a extens\u00E3o\"));\r\n }\r\n\r\n if (this.responseStart) {\r\n clearInterval(timer);\r\n resolve(this.responseStart);\r\n }\r\n\r\n this.tryes++;\r\n }, 1000);\r\n });\r\n }\r\n sendVerifyMsg(link: string, token: string) {\r\n // console.log(\"Enviando mensagem...\");\r\n window.postMessage({ type: 'easyproctor', func: 'verifyExtensionEasyproctor', url: link, token: token }, \"*\");\r\n }\r\n\r\n private verify(event: MessageEvent<any>) {\r\n if (event.source == window &&\r\n event.data.sender &&\r\n event.data.sender === \"easyproctor-extension\" &&\r\n event.data.message_name &&\r\n event.data.message_name === \"progress\") {\r\n // console.log(\"progress complete\");\r\n this.options.onProgress && this.options.onProgress(100);\r\n }\r\n \r\n if (event.source == window &&\r\n event.data.sender &&\r\n event.data.sender === \"easyproctor-extension\" &&\r\n event.data.message_name &&\r\n event.data.message_name === \"start\") {\r\n // console.log(\"start recieved\");\r\n this.responseStart = true;\r\n }\r\n\r\n return new Promise((resolve, reject) => { \r\n\r\n if (event.source == window &&\r\n event.data.sender &&\r\n event.data.sender === \"easyproctor-extension\" &&\r\n event.data.message_name &&\r\n event.data.message_name === \"version\") {\r\n // console.log(\"have extension\");\r\n this.hasExtension = true;\r\n resolve(this.hasExtension);\r\n }\r\n\r\n });\r\n } \r\n\r\n addEventListener() {\r\n window.addEventListener(\"message\", (event) => this.verify(event));\r\n }\r\n}", "import { ProgressCallback } from \"../new-flow/upload/uploadCalback\";\r\nimport { ProctoringFinisherOptions } from \"../proctoring/proctoring\";\r\n\r\nexport class ExtensionEasyCatcher {\r\n hasExtension: boolean = false;\r\n tryes: number = 0;\r\n responseStart: boolean = false;\r\n public options: ProctoringFinisherOptions;\r\n\r\n constructor(options?: ProctoringFinisherOptions) {\r\n this.options = options || {};\r\n }\r\n\r\n /**\r\n * Verifica se a extens\u00E3o est\u00E1 instalada e ativa.\r\n * Retorna o n\u00FAmero da vers\u00E3o se encontrada, ou lan\u00E7a erro ap\u00F3s timeout.\r\n */\r\n checkExtensionInstalled(timeoutMs = 2000): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n let handled = false;\r\n\r\n const handler = (event: MessageEvent) => {\r\n if (event.source === window &&\r\n event.data.sender === \"easyproctor-extension\" &&\r\n event.data.message_name === \"version\") {\r\n \r\n handled = true;\r\n window.removeEventListener(\"message\", handler);\r\n resolve(event.data.message); // Retorna a vers\u00E3o\r\n }\r\n };\r\n\r\n window.addEventListener(\"message\", handler);\r\n\r\n window.postMessage({ \r\n type: 'easycatcher', \r\n func: 'verifyExtensionEasycatcher' \r\n }, \"*\");\r\n\r\n setTimeout(() => {\r\n if (!handled) {\r\n window.removeEventListener(\"message\", handler);\r\n reject(new Error(\"Extens\u00E3o n\u00E3o detectada ou n\u00E3o respondeu.\"));\r\n }\r\n }, timeoutMs);\r\n });\r\n }\r\n\r\n /**\r\n * Solicita o JSON da sess\u00E3o atual capturado pela extens\u00E3o.\r\n */\r\n getSessionData(timeoutMs = 5000): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n let handled = false;\r\n\r\n const handler = (event: MessageEvent) => {\r\n if (event.source === window &&\r\n event.data.sender === \"easyproctor-extension\" &&\r\n event.data.message_name === \"data_response\") {\r\n \r\n handled = true;\r\n window.removeEventListener(\"message\", handler);\r\n resolve(event.data.payload);\r\n }\r\n };\r\n\r\n window.addEventListener(\"message\", handler);\r\n window.postMessage({ \r\n type: 'easycatcher', \r\n func: 'getDataExtensionEasycatcher' \r\n }, \"*\");\r\n\r\n setTimeout(() => {\r\n if (!handled) {\r\n window.removeEventListener(\"message\", handler);\r\n reject(new Error(\"Timeout ao aguardar dados da extens\u00E3o.\"));\r\n }\r\n }, timeoutMs);\r\n });\r\n }\r\n\r\n start(): Promise<boolean> {\r\n return new Promise((resolve, reject) => {\r\n let handled = false;\r\n\r\n const handler = (event: MessageEvent) => {\r\n if (event.source === window &&\r\n event.data.sender === \"easyproctor-extension\" &&\r\n event.data.message_name === \"started_confirmed\") {\r\n \r\n handled = true;\r\n window.removeEventListener(\"message\", handler);\r\n resolve(true);\r\n }\r\n };\r\n\r\n window.addEventListener(\"message\", handler);\r\n \r\n // Envia comando para zerar/iniciar\r\n window.postMessage({ type: 'easycatcher', func: 'startExtensionEasycatcher' }, \"*\");\r\n\r\n // Timeout de seguran\u00E7a (3s)\r\n setTimeout(() => {\r\n if (!handled) {\r\n window.removeEventListener(\"message\", handler);\r\n // Opcional: resolve(true) mesmo sem resposta se n\u00E3o quiser travar o fluxo\r\n reject(new Error(\"Timeout: Extens\u00E3o n\u00E3o confirmou o in\u00EDcio.\"));\r\n }\r\n }, 3000);\r\n });\r\n }\r\n}", "import Devices, { Device, DevicesChanged } from \"../interfaces/Devices\";\r\nimport { AlertCategory, AlertType } from \"../new-flow/proctoring/ProctoringSession\";\r\nimport { ISessionRepository } from \"../new-flow/repository/ISessionRepository\";\r\nimport { trackers } from \"../plugins/insights\";\r\nimport { ProctoringSessionOptions } from \"../proctoring/options/ProctoringOptions\";\r\nimport { ProctoringChangeDevicesOptions } from \"../proctoring/proctoring\";\r\nimport enumarateDevices from \"./enumarateDevices\";\r\n\r\nexport class onChangeDevices {\r\n private repositoryDevices: ISessionRepository;\r\n private proctoringId: string;\r\n private sessionOptions: ProctoringSessionOptions;\r\n private allRecorders: any;\r\n\r\n constructor(\r\n repositoryDevices: ISessionRepository,\r\n proctoringId: string,\r\n sessionOptions: ProctoringSessionOptions,\r\n allRecorders: any\r\n ){\r\n this.repositoryDevices = repositoryDevices;\r\n this.proctoringId = proctoringId;\r\n this.sessionOptions = sessionOptions;\r\n this.allRecorders = allRecorders;\r\n }\r\n\r\n public startRecording(options: ProctoringChangeDevicesOptions) {\r\n // console.log(\"proctoring.onChangeDevices\");\r\n navigator.mediaDevices.ondevicechange = () => {\r\n this.onChangeDevices(options);\r\n };\r\n }\r\n\r\n public async onChangeDevices(options: ProctoringChangeDevicesOptions) {\r\n const devices = await enumarateDevices();\r\n \r\n // A comparer used to determine if two entries are equal.\r\n const isSameDevice = (a: Device, b: Device) => a.label === b.label && a.id === b.id;\r\n \r\n // Get items that only occur in the left array,\r\n // using the compareFunction to determine equality.\r\n const onlyInLeft = (left: Device[], right: Device[], compareFunction: (arg0: Device, arg1: Device) => any) => \r\n left.filter((leftValue: Device) =>\r\n !right.some((rightValue: Device) => \r\n compareFunction(leftValue, rightValue)));\r\n \r\n const response = await this.repositoryDevices.getDevices(\"devices\");\r\n const defaultDevice = { label: \"\", id: \"\" };\r\n const copy: Devices = { cameras: response?.cameras || [defaultDevice], microphones: response?.microphones || [defaultDevice] };\r\n\r\n const status = devices.cameras.length > copy?.cameras.length || devices.microphones.length > copy?.microphones.length ? \"in\" : \"out\";\r\n\r\n let resultCameras: Device[] = [];\r\n let resultMicrophones: Device[] = [];\r\n let isActiveDeviceRemoved = false;\r\n \r\n if (devices.cameras.length != copy?.cameras.length) {\r\n // Se o status for \"out\" (remo\u00E7\u00E3o), os dispositivos removidos est\u00E3o em copy?.cameras\r\n // Se o status for \"in\" (adi\u00E7\u00E3o), os dispositivos adicionados est\u00E3o em devices.cameras\r\n const removedCameras = status === \"out\" ? onlyInLeft(copy?.cameras, devices.cameras, isSameDevice) : [];\r\n const addedCameras = status === \"in\" ? onlyInLeft(devices.cameras, copy?.cameras, isSameDevice) : [];\r\n\r\n resultCameras = status === \"out\" ? removedCameras : addedCameras;\r\n resultCameras = resultCameras.filter((item) => item.id != \"default\");\r\n \r\n // Verifica se a c\u00E2mera ativa foi removida\r\n console.log(removedCameras);\r\n console.log(this.sessionOptions.cameraId);\r\n if (status === \"out\") {\r\n isActiveDeviceRemoved = removedCameras.some(\r\n (device) => device.id === this.sessionOptions.cameraId\r\n );\r\n }\r\n }\r\n \r\n if (devices.microphones.length != copy?.microphones.length) {\r\n // Se o status for \"out\" (remo\u00E7\u00E3o), os dispositivos removidos est\u00E3o em copy?.microphones\r\n // Se o status for \"in\" (adi\u00E7\u00E3o), os dispositivos adicionados est\u00E3o em devices.microphones\r\n const removedMicrophones = status === \"out\" ? onlyInLeft(copy?.microphones, devices.microphones, isSameDevice) : [];\r\n const addedMicrophones = status === \"in\" ? onlyInLeft(devices.microphones, copy?.microphones, isSameDevice) : [];\r\n\r\n resultMicrophones = status === \"out\" ? removedMicrophones : addedMicrophones;\r\n resultMicrophones = resultMicrophones.filter((item) => item.id != \"default\" && item.id != \"communications\");\r\n \r\n // Verifica se o microfone ativo foi removido\r\n // Se isActiveDeviceRemoved j\u00E1 for true, n\u00E3o precisa verificar novamente para o microfone\r\n if (status === \"out\" && !isActiveDeviceRemoved) {\r\n isActiveDeviceRemoved = removedMicrophones.some(\r\n (device) => device.id === this.sessionOptions.microphoneId\r\n );\r\n }\r\n }\r\n \r\n const devicesChanged: DevicesChanged = {\r\n cameras: resultCameras || [],\r\n microphones: resultMicrophones || [],\r\n status,\r\n isActiveDevice: isActiveDeviceRemoved \r\n };\r\n \r\n await this.repositoryDevices.save({ ...devices, id: \"devices\", status });\r\n \r\n if (options.status && (devicesChanged.cameras.length != 0 || devicesChanged.microphones.length != 0)) {\r\n trackers.registerChangeDevice(this.proctoringId, devicesChanged.status, JSON.stringify(devicesChanged, null, 2));\r\n if(devicesChanged.isActiveDevice){\r\n this.allRecorders.alertRecorder.addAlert({\r\n alert: AlertCategory.ChangeDevices,\r\n type: AlertType.Video\r\n });\r\n }\r\n options.status(devicesChanged);\r\n }\r\n }\r\n}\r\n", "import UploadDataDTO from \"../../dtos/UploadDataDTO\";\r\nimport { trackers } from \"../../plugins/insights\";\r\nimport { IDownloadService } from \"./IDownloadService\";\r\nimport { saveAs } from 'file-saver';\r\n\r\nexport class DownloadService implements IDownloadService {\r\n private readonly proctoringId: string;\r\n\r\n constructor(proctoringId: string) {\r\n this.proctoringId = proctoringId;\r\n }\r\n\r\n public loadingBoolean = true;\r\n public loadingInterval: any;\r\n\r\n async upload(data: UploadDataDTO, token: string) {\r\n const { file, onProgress } = data;\r\n try {\r\n\r\n // const url = URL.createObjectURL(file);\r\n // const a = document.createElement(\"a\");\r\n // document.body.appendChild(a);\r\n // a.style.display = 'none';\r\n // a.href = url;\r\n // a.download = file.name;\r\n // a.click();\r\n // window.URL.revokeObjectURL(url);\r\n\r\n // Using FileSaver.js\r\n trackers.registerDownloadFile(this.proctoringId, `File to download\\n\\tFile name: ${file.name}\\n\\tFile type: ${file.type}\\n\\tFile size: ${file.size}}`);\r\n saveAs(file);\r\n\r\n this.loadingBoolean = false;\r\n clearInterval(this.loadingInterval);\r\n onProgress && onProgress(Math.round(100));\r\n } catch (err) {\r\n file && this.proctoringId && trackers.registerError(this.proctoringId, `Failed on machine download\\n\\tFile name: ${file.name}\\n\\tFile type: ${file.type}\\n\\tFile size: ${file.size}`);\r\n throw new Error(`Error on machine download`);\r\n }\r\n }\r\n}", "import { waitUntil } from \"../../utils/time\";\r\nimport { IRecorder } from \"../recorders/IRecorder\";\r\nimport { ProctoringSession } from \"./ProctoringSession\";\r\n\r\nexport class ProctoringRecorder {\r\n constructor(\r\n private session: ProctoringSession,\r\n private recorders: IRecorder[]\r\n ) {}\r\n\r\n public async startAll(): Promise<void> {\r\n this.session.start();\r\n // const startPromises = this.recorders.map((rec) => rec.startRecording());\r\n \r\n for (const rec of this.recorders) {\r\n await rec.startRecording({ retry: false });\r\n }\r\n // await Promise.allSettled(startPromises)\r\n // .then((resp) => {\r\n // resp.map((item) => {\r\n // if(item.status === \"rejected\") {\r\n // throw new Error(item.reason);\r\n // }\r\n // });\r\n // });\r\n }\r\n\r\n public async pauseAll(): Promise<void> {\r\n this.session.pause();\r\n // const pausePromises = this.recorders.map((rec) => rec.pauseRecording());\r\n // await Promise.all(pausePromises);\r\n for (const rec of this.recorders) {\r\n await rec.pauseRecording();\r\n }\r\n }\r\n\r\n public async resumeAll(): Promise<void> {\r\n this.session.resume();\r\n // const resumePromises = this.recorders.map((rec) => rec.resumeRecording());\r\n // await Promise.all(resumePromises);\r\n for (const rec of this.recorders) {\r\n await rec.resumeRecording();\r\n }\r\n }\r\n\r\n public async stopAll(): Promise<void> {\r\n // const stopPromises = this.recorders.map((rec) => rec.stopRecording());\r\n // await Promise.all(stopPromises);\r\n for (const rec of this.recorders) {\r\n await rec.stopRecording();\r\n }\r\n this.session.stop();\r\n }\r\n\r\n public async saveAllOnSession(): Promise<void> {\r\n // const savePromises = this.recorders.map((rec) => {\r\n // rec.saveOnSession(this.session);\r\n // });\r\n // await Promise.all(savePromises);\r\n for (const rec of this.recorders) {\r\n await rec.saveOnSession(this.session);\r\n }\r\n }\r\n}\r\n", "import { trackers } from \"../../plugins/insights\";\r\nimport { ProctoringContext } from \"../../proctoring/proctoring\";\r\nimport { BackendService } from \"../backend/BackendService\";\r\nimport { IDownloadService } from \"../download/IDownloadService\";\r\nimport { IUploadService, UploadResult } from \"../upload/IUploadService\";\r\nimport { ProgressCallback } from \"../upload/uploadCalback\";\r\nimport {\r\n ProctoringSession,\r\n Recording,\r\n StorageService,\r\n} from \"./ProctoringSession\";\r\n\r\nexport class ProctoringUploader {\r\n constructor(\r\n private session: ProctoringSession,\r\n private proctoringId: string,\r\n private uploadServices: IUploadService[] | IDownloadService[],\r\n ) {}\r\n\r\n public async upload(\r\n token: string,\r\n progress?: ProgressCallback\r\n ): Promise<void> {\r\n await this.uploadRecordings(token, progress);\r\n }\r\n\r\n private async uploadRecordings(token: string, onProgress?: ProgressCallback) {\r\n await this.uploadAllFiles(token, onProgress);\r\n if (!this.session.hasSomethingToUpload) {\r\n this.session.setUploaded();\r\n }\r\n }\r\n\r\n private async uploadAllFiles(\r\n token: string,\r\n globalOnProgres?: ProgressCallback\r\n ): Promise<void> {\r\n for (let i = 0; i < this.session.recordings.length; i++) {\r\n const rec = this.session.recordings[i];\r\n\r\n if (rec.upload) {\r\n continue;\r\n }\r\n\r\n const onProgress = (percentage: number) => {\r\n //considerar as porcentagens de todos os arquivos\r\n const relativePercentage =\r\n (i * 100 + percentage) / this.session.recordings.length;\r\n\r\n // console.log(\"progress\", rec.origin, percentage, relativePercentage);\r\n if (globalOnProgres) {\r\n globalOnProgres(relativePercentage);\r\n }\r\n };\r\n\r\n const result = await this.uploadFile(rec, token, onProgress).catch(\r\n () => undefined\r\n );\r\n\r\n if (result) {\r\n if (!rec.upload) {\r\n rec.upload = {\r\n storage: StorageService.none,\r\n awsUrl: \"\",\r\n azureUrl: \"\",\r\n };\r\n }\r\n\r\n if (result.uploaded) {\r\n rec.upload.storage = result.storage;\r\n }\r\n\r\n if (result.storage === StorageService.none) {\r\n result.url && (rec.upload.azureUrl = result.url);\r\n } else {\r\n result.url && (rec.upload.awsUrl = result.url);\r\n }\r\n }\r\n }\r\n\r\n if (globalOnProgres) {\r\n globalOnProgres(100);\r\n }\r\n }\r\n\r\n private async uploadFile(\r\n rec: Recording,\r\n token: string,\r\n onProgress?: ProgressCallback\r\n ): Promise<UploadResult> {\r\n // console.log(\"uploadService\");\r\n for await (const uploadService of this.uploadServices) {\r\n // console.log(\"uploadService 1\");\r\n // console.log(uploadService);\r\n\r\n const result = await uploadService\r\n .upload(\r\n {\r\n file: rec.file,\r\n onProgress: (progress) => {\r\n if (onProgress) onProgress(progress);\r\n },\r\n },\r\n token\r\n );\r\n // .catch(() => undefined);\r\n\r\n // console.log(\"RESULTADO\", result);\r\n\r\n if (result) {\r\n let fileType = \"\";\r\n\r\n if(rec.file.name.search(\"camera\") !== -1) {\r\n fileType = \"Camera\";\r\n } else if (rec.file.name.search(\"screen\") !== -1) {\r\n fileType = \"Screen\";\r\n } else if (rec.file.name.search(\"audio\") !== -1) {\r\n fileType = \"Audio\";\r\n }\r\n\r\n trackers.registerUploadFile(this.proctoringId, `Upload File\\n\\tName: ${rec.file.name}\\n\\tType: ${rec.file.type}\\n\\tSize: ${rec.file.size}`, fileType);\r\n return result;\r\n }\r\n }\r\n throw new Error(\"Could not upload\");\r\n }\r\n}\r\n", "import { ProctoringSessionOptions } from \"../../proctoring/options/ProctoringOptions\";\r\nimport {\r\n Alert,\r\n AlertCategory,\r\n AlertType,\r\n ProctoringSession,\r\n} from \"../proctoring/ProctoringSession\";\r\nimport { IRecorder } from \"./IRecorder\";\r\n\r\nexport class AlertRecorder implements IRecorder {\r\n private alerts: Alert[] = [];\r\n private startTime: Date;\r\n private onLostFocusCallback: (response: any) => void;\r\n private onFocusCallback: (response: any) => void;\r\n private onRealtimeAlertCallback?: (response: any) => void;\r\n private optionsProctoring: ProctoringSessionOptions;\r\n\r\n // Vari\u00E1veis para controle de inatividade\r\n private lastActivityTime: number = Date.now();\r\n private idleCheckInterval: any;\r\n private readonly IDLE_THRESHOLD_MS = 30000; // 30 segundos sem input gera alerta (configure como quiser)\r\n\r\n // Vari\u00E1veis para controle de Split Screen\r\n private resizeTimeout: any;\r\n\r\n constructor(options: {\r\n onLostFocusCallback: (response: any) => void;\r\n onFocusCallback: (response: any) => void;\r\n onRealtimeAlertCallback?: (response: any) => void;\r\n }, optionsProctoring: ProctoringSessionOptions) {\r\n this.onLostFocusCallback = options.onLostFocusCallback;\r\n this.onFocusCallback = options.onFocusCallback;\r\n this.onRealtimeAlertCallback = options.onRealtimeAlertCallback;\r\n this.optionsProctoring = optionsProctoring;\r\n }\r\n\r\n async startRecording(): Promise<void> {\r\n this.startTime = new Date(Date.now());\r\n this.alerts = [];\r\n\r\n this.attachListeners();\r\n // this.startIdleChecker();\r\n\r\n // Testar backgound event\r\n // Supondo que voc\u00EA criou a inst\u00E2ncia assim:\r\n // ADICIONE ISSO TEMPORARIAMENTE PARA TESTE:\r\n // (window as any).debugRecorder = this; // Descomentar isso\r\n // window.debugRecorder.addBackgroundEvent(\"Teste Manual do Console\"); // Colar no console do navegador\r\n }\r\n async pauseRecording(): Promise<void> {\r\n this.detachListeners();\r\n // this.stopIdleChecker();\r\n }\r\n async resumeRecording(): Promise<void> {\r\n this.attachListeners();\r\n // this.startIdleChecker();\r\n }\r\n async stopRecording(): Promise<void> {\r\n this.detachListeners();\r\n // this.stopIdleChecker();\r\n }\r\n\r\n async saveOnSession(session: ProctoringSession): Promise<void> {\r\n this.alerts.forEach((alert) => {\r\n session.addAlert(alert);\r\n });\r\n }\r\n\r\n // ==========================================\r\n // GERENCIAMENTO DE LISTENERS\r\n // ==========================================\r\n \r\n private attachListeners() {\r\n if (this.optionsProctoring.captureScreen) {\r\n window.addEventListener(\"visibilitychange\", this.handleVisibilityChange);\r\n // window.addEventListener(\"blur\", this.handleLostFocus);\r\n // window.addEventListener(\"focus\", this.handleReturnFocus);\r\n window.addEventListener(\"resize\", this.handleResize);\r\n \r\n // Listeners para detectar atividade humana\r\n //window.addEventListener(\"mousemove\", this.handleUserActivity);\r\n //window.addEventListener(\"keydown\", this.handleUserActivity);\r\n //window.addEventListener(\"click\", this.handleUserActivity);\r\n //window.addEventListener(\"scroll\", this.handleUserActivity);\r\n //window.addEventListener(\"touchstart\", this.handleUserActivity);\r\n\r\n // Clipboard Events (Novo)\r\n window.document.addEventListener(\"copy\", this.handleCopy);\r\n window.document.addEventListener(\"cut\", this.handleCut);\r\n window.document.addEventListener(\"paste\", this.handlePaste);\r\n }\r\n }\r\n\r\n private detachListeners() {\r\n window.removeEventListener(\"visibilitychange\", this.handleVisibilityChange);\r\n // window.removeEventListener(\"blur\", this.handleLostFocus);\r\n // window.removeEventListener(\"focus\", this.handleReturnFocus);\r\n window.removeEventListener(\"resize\", this.handleResize);\r\n\r\n //window.removeEventListener(\"mousemove\", this.handleUserActivity);\r\n //window.removeEventListener(\"keydown\", this.handleUserActivity);\r\n //window.removeEventListener(\"click\", this.handleUserActivity);\r\n //window.removeEventListener(\"scroll\", this.handleUserActivity);\r\n //window.removeEventListener(\"touchstart\", this.handleUserActivity);\r\n\r\n // Clipboard Events (Novo)\r\n window.document.removeEventListener(\"copy\", this.handleCopy);\r\n window.document.removeEventListener(\"cut\", this.handleCut);\r\n window.document.removeEventListener(\"paste\", this.handlePaste);\r\n }\r\n\r\n // ==========================================\r\n // HANDLERS (Fun\u00E7\u00F5es Arrow para preservar o 'this')\r\n // ==========================================\r\n\r\n // 1. LOST / RETURN FOCUS\r\n\r\n private handleVisibilityChange = () => {\r\n if (document.visibilityState === 'visible') {\r\n this.handleReturnFocus();\r\n } else {\r\n this.handleLostFocus();\r\n }\r\n };\r\n\r\n private handleLostFocus = () => {\r\n // Evita alertas instant\u00E2neos (ex: popup do sistema), espera 500ms ou valida l\u00F3gica\r\n if (this.getRelativeTime() > 10000) { \r\n // this.createAlert(AlertCategory.FocusOff, AlertType.Screen, \"Usu\u00E1rio mudou de aba ou minimizou\");\r\n\r\n const alertPayload = {\r\n begin: this.getRelativeTime(),\r\n end: 0,\r\n alert: AlertCategory.FocusOff,\r\n type: AlertType.Screen\r\n }\r\n \r\n this.onLostFocusCallback(alertPayload);\r\n this.alerts.push(alertPayload);\r\n }\r\n };\r\n\r\n private handleReturnFocus = () => {\r\n // Procura o \u00FAltimo alerta de FocusOff que n\u00E3o tem fim (end: 0)\r\n // const lastAlert = this.alerts.slice().reverse().find(a => a.alert === AlertCategory.FocusOff && a.end === 0);\r\n const lastAlert = this.alerts[this.alerts.length - 1];\r\n \r\n if (lastAlert) {\r\n this.onFocusCallback({\r\n begin: lastAlert.begin,\r\n end: this.getRelativeTime(),\r\n alert: AlertCategory.FocusOff,\r\n type: AlertType.Screen\r\n });\r\n lastAlert.end = this.getRelativeTime();\r\n }\r\n };\r\n\r\n // 2. SPLIT SCREEN DETECTION\r\n private handleResize = () => {\r\n // Debounce: Limpa o timeout anterior se o usu\u00E1rio ainda estiver arrastando a janela\r\n clearTimeout(this.resizeTimeout);\r\n\r\n this.resizeTimeout = setTimeout(() => {\r\n const screenWidth = window.screen.availWidth; // Largura total dispon\u00EDvel (sem barra de tarefas)\r\n const windowWidth = window.outerWidth; // Largura atual da janela do navegador\r\n\r\n // Se a janela for menor que 85% da tela, consideramos Split Screen\r\n // Voc\u00EA pode ajustar essa porcentagem conforme necessidade\r\n if (windowWidth < (screenWidth * 0.85)) {\r\n const msg = `Split Screen Detectado: Janela ocupa ${(windowWidth/screenWidth * 100).toFixed(0)}% da tela`;\r\n this.createAlert(AlertCategory.SplitScreen, AlertType.Screen, msg); \r\n \r\n this.onRealtimeAlertCallback && this.onRealtimeAlertCallback({\r\n status: 'ALERT',\r\n description: msg,\r\n type: 'split_screen'\r\n });\r\n }\r\n }, 1000); // S\u00F3 dispara 1s ap\u00F3s parar de redimensionar\r\n };\r\n\r\n // 3. DETEC\u00C7\u00C3O DE INATIVIDADE (NO INPUT)\r\n private handleUserActivity = (e: Event) => {\r\n this.lastActivityTime = Date.now();\r\n console.log('\uD83D\uDC49 handleUserActivity', e);\r\n };\r\n\r\n // private startIdleChecker() {\r\n // this.stopIdleChecker(); // Garante que n\u00E3o tenha duplica\u00E7\u00E3o\r\n // this.idleCheckInterval = setInterval(() => {\r\n // const idleTime = Date.now() - this.lastActivityTime;\r\n \r\n // if (idleTime > this.IDLE_THRESHOLD_MS) {\r\n // // Verifica se j\u00E1 n\u00E3o mandamos esse alerta recentemente para n\u00E3o floodar\r\n // const lastAlert = this.alerts[this.alerts.length - 1];\r\n // // Se o \u00FAltimo alerta n\u00E3o foi de inatividade ou foi h\u00E1 muito tempo, cria novo\r\n // if (!lastAlert || lastAlert.alert !== AlertCategory.ForbiddenAction || (this.getRelativeTime() - lastAlert.begin > 5000)) {\r\n \r\n // const msg = \"Usu\u00E1rio inativo por muito tempo\";\r\n // // Assumindo ForbiddenAction ou outra categoria adequada\r\n // this.createAlert(AlertCategory.ForbiddenAction, AlertType.System, msg);\r\n\r\n // this.onRealtimeAlertCallback && this.onRealtimeAlertCallback({\r\n // status: 'ALERT',\r\n // description: msg,\r\n // type: 'user_idle'\r\n // });\r\n // }\r\n // }\r\n // }, 5000); // Checa a cada 5 segundos\r\n // }\r\n\r\n // private stopIdleChecker() {\r\n // if (this.idleCheckInterval) {\r\n // clearInterval(this.idleCheckInterval);\r\n // this.idleCheckInterval = null;\r\n // }\r\n // }\r\n\r\n // 4. BACKGROUND EVENTS (Eventos disparados manualmente)\r\n public addBackgroundEvent(description: string, category: AlertCategory = AlertCategory.System) {\r\n this.createAlert(category, AlertType.Screen, description);\r\n \r\n // Se quiser notificar o frontend em tempo real tamb\u00E9m\r\n this.onRealtimeAlertCallback && this.onRealtimeAlertCallback({\r\n status: 'ALERT',\r\n description: description,\r\n type: 'background_event'\r\n });\r\n }\r\n\r\n // 5. CLIPBOARD HANDLERS \r\n private handleCopy = (e: Event) => {\r\n e.preventDefault(); // Bloqueia a a\u00E7\u00E3o\r\n const msg = \"Tentativa de Copiar (Clipboard)\";\r\n this.createAlert(AlertCategory.ClipBoardUse, AlertType.Screen, msg);\r\n \r\n this.onRealtimeAlertCallback && this.onRealtimeAlertCallback({\r\n status: 'ALERT',\r\n description: msg,\r\n type: 'clipboard_copy'\r\n });\r\n };\r\n\r\n private handleCut = (e: Event) => {\r\n e.preventDefault(); // Bloqueia a a\u00E7\u00E3o\r\n const msg = \"Tentativa de Recortar (Clipboard)\";\r\n this.createAlert(AlertCategory.ClipBoardUse, AlertType.Screen, msg);\r\n \r\n this.onRealtimeAlertCallback && this.onRealtimeAlertCallback({\r\n status: 'ALERT',\r\n description: msg,\r\n type: 'clipboard_cut'\r\n });\r\n };\r\n\r\n private handlePaste = (e: Event) => {\r\n e.preventDefault(); // Bloqueia a a\u00E7\u00E3o\r\n const msg = \"Tentativa de Colar (Clipboard)\";\r\n this.createAlert(AlertCategory.ClipBoardUse, AlertType.Screen, msg);\r\n \r\n this.onRealtimeAlertCallback && this.onRealtimeAlertCallback({\r\n status: 'ALERT',\r\n description: msg,\r\n type: 'clipboard_paste'\r\n });\r\n };\r\n\r\n // ==========================================\r\n // HELPERS\r\n // ==========================================\r\n\r\n private getRelativeTime(): number {\r\n return Date.now() - this.startTime.getTime();\r\n }\r\n\r\n private createAlert(category: AlertCategory, type: AlertType, description?: string) {\r\n this.alerts.push({\r\n begin: this.getRelativeTime(),\r\n end: this.getRelativeTime(), // Eventos pontuais come\u00E7am e terminam no mesmo ms (exceto focus)\r\n alert: category,\r\n type: type,\r\n // description: description // Se sua interface Alert suportar descri\u00E7\u00E3o, descomente\r\n });\r\n }\r\n public addAlert({ alert, type }: { alert: AlertCategory, type: AlertType }) {\r\n this.alerts.push({\r\n begin: Date.now() - this.startTime.getTime(),\r\n end: Date.now() - this.startTime.getTime(),\r\n alert,\r\n type\r\n });\r\n }\r\n}\r\n\r\n", "import { getSeekableBlob, RecordRTCPromisesHandler } from \"recordrtc\";\r\nimport {\r\n MULTIPLE_MONITORS_DETECTED,\r\n NOT_SHARED_FIRST_SCREEN,\r\n NOT_SHARED_SCREEN\r\n} from \"../../errors/errors\";\r\nimport { waitUntil } from \"../../utils/time\";\r\nimport {\r\n ProctoringSession,\r\n RecordingOrigin,\r\n} from \"../proctoring/ProctoringSession\";\r\nimport { IRecorder } from \"./IRecorder\";\r\nimport recorder, { setRecorderProctoringId } from \"../../plugins/recorder\";\r\nimport { isMobileDevice } from \"../../utils/browserInformations\";\r\n\r\nexport class ScreenRecorder implements IRecorder {\r\n private blobs: Blob[] = [];\r\n private blobsFinal: Blob[] = [];\r\n private options: {\r\n allowOnlyFirstMonitor: boolean;\r\n allowMultipleMonitors: boolean;\r\n screenRecorderOptions: { width: number, height: number };\r\n onStopSharingScreenCallback: () => void;\r\n onBufferSizeError?: boolean;\r\n onBufferSizeErrorCallback: () => void;\r\n };\r\n\r\n public recorder: RecordRTCPromisesHandler | undefined;\r\n public screenStream: MediaStream | undefined;\r\n public proctoringId: string | undefined;\r\n\r\n public startTime: Date | undefined;\r\n\r\n constructor(options: {\r\n allowOnlyFirstMonitor: boolean;\r\n allowMultipleMonitors: boolean;\r\n screenRecorderOptions: { width: number, height: number };\r\n onStopSharingScreenCallback: () => void;\r\n onBufferSizeError?: boolean;\r\n onBufferSizeErrorCallback: () => void;\r\n }) {\r\n this.options = options;\r\n }\r\n\r\n file?: File;\r\n\r\n public recordingStart: () => any;\r\n public recordingStop: () => any;\r\n public recordingPause: () => any;\r\n public recordingResume: () => any;\r\n\r\n setProctoringId(proctoringId: string) {\r\n this.proctoringId = proctoringId;\r\n setRecorderProctoringId(proctoringId);\r\n }\r\n\r\n async startRecording(): Promise<void> {\r\n \r\n this.startTime = new Date(Date.now());\r\n\r\n if(isMobileDevice()) return;\r\n\r\n const { allowOnlyFirstMonitor, allowMultipleMonitors, onStopSharingScreenCallback, onBufferSizeErrorCallback } = this.options;\r\n\r\n const complexConstraints: any = {\r\n video: {\r\n cursor: \"always\",\r\n width: this.options.screenRecorderOptions.width,\r\n height: this.options.screenRecorderOptions.height,\r\n displaySurface: 'monitor'\r\n },\r\n audio: false,\r\n };\r\n\r\n const simpleConstraints: any = {\r\n video: {\r\n cursor: \"always\",\r\n width: 1280,\r\n height: 720,\r\n displaySurface: 'monitor'\r\n },\r\n audio: false,\r\n };\r\n\r\n let stream: MediaStream | undefined;\r\n\r\n try {\r\n stream = await navigator.mediaDevices.getDisplayMedia(complexConstraints);\r\n } catch (e) {\r\n if (e instanceof TypeError && e.message.includes('min constraints are not supported')) {\r\n console.warn(\"Navegador n\u00E3o suporta restri\u00E7\u00F5es 'min/max/ideal'. Tentando com 720p fixo.\");\r\n stream = await navigator.mediaDevices.getDisplayMedia(simpleConstraints);\r\n } else {\r\n throw e; \r\n }\r\n }\r\n\r\n this.screenStream = stream;\r\n\r\n const tracks = this.screenStream.getVideoTracks();\r\n\r\n tracks[0].onended = onStopSharingScreenCallback;\r\n\r\n // Verificar se est\u00E1 com duas telas conectadas no firefox\r\n // N\u00E3o suporta m\u00FAltiplas telas no firefox\r\n const isFirefox = navigator.userAgent.indexOf(\"Firefox\") > -1;\r\n if (isFirefox) {\r\n const hasMultipleMonitors = tracks.find(\r\n (el) => el.label == \"\"\r\n );\r\n if ((hasMultipleMonitors && allowOnlyFirstMonitor) || (hasMultipleMonitors && !allowMultipleMonitors)) {\r\n throw MULTIPLE_MONITORS_DETECTED;\r\n }\r\n }\r\n\r\n // Permitir: \"screen:0:0\", \"Primary Monitor\", \"\", \"screen:1:0\"\r\n // N\u00E3o Permitir: \"web-contents-media-stream\", \"window\" ou outra coisa\r\n\r\n // Verificar se compartilhou a primeira tela\r\n const sharedFirstScreen =\r\n tracks.find((el) => {\r\n return [\"screen:0:0\", \"Primary Monitor\"].includes(el.label);\r\n }) != null;\r\n \r\n // Verificar se compartilhou tela\r\n const sharedScreen =\r\n tracks.find((el) => {\r\n return [\"screen:0:0\", \"Primary Monitor\", \"\"].includes(el.label) || [\"screen:\"].some(substring => el.label.includes(substring));\r\n }) != null;\r\n \r\n // Verificar se compartilhou aba ou janela (Google)\r\n const sharedNotAllowed = tracks.find((el) => {\r\n // substringsArray.some(substring=>yourBigString.includes(substring))\r\n return [\"web-contents-media-stream\", \"window\"].some(substring => el.label.includes(substring));\r\n }) != null;\r\n\r\n if (!sharedFirstScreen && allowOnlyFirstMonitor) {\r\n // Finalizar a stream\r\n tracks.forEach((el) => {\r\n el.stop();\r\n });\r\n throw NOT_SHARED_FIRST_SCREEN;\r\n } else if (!sharedScreen || sharedNotAllowed) {\r\n // Finalizar a stream\r\n tracks.forEach((el) => {\r\n el.stop();\r\n });\r\n throw NOT_SHARED_SCREEN;\r\n }\r\n\r\n // ### RecordRTC\r\n\r\n // // Stream do v\u00EDdeo\r\n // this.recorder = new RecordRTCPromisesHandler(this.screenStream, {\r\n // type: \"video\",\r\n // });\r\n\r\n // // Come\u00E7ar a grava\u00E7\u00E3o da camera\r\n // this.recorder.startRecording();\r\n\r\n // ### Finish RecordRTC\r\n\r\n const { startRecording, stopRecording } = recorder(this.screenStream, this.blobs, null, this.options.onBufferSizeError, onBufferSizeErrorCallback);\r\n\r\n this.recordingStart = startRecording;\r\n this.recordingStop = stopRecording;\r\n\r\n this.recordingStart();\r\n}\r\n\r\n async pauseRecording(): Promise<void> {\r\n // await this.recordingStop();\r\n // this.blobsFinal.concat(this.blobs);\r\n // console.log(\"screen buffer\", this.blobs);\r\n }\r\n\r\n async resumeRecording(): Promise<void> {\r\n // this.recordingStart();\r\n }\r\n\r\n async stopRecording(): Promise<void> {\r\n // ### RecordRTC\r\n\r\n // await this.recorder?.stopRecording();\r\n // const blob = await this.recorder?.getBlob();\r\n\r\n // if (!blob) throw new Error(\"Error on Blob to Stop Recording\");\r\n\r\n // let finished = false;\r\n\r\n // getSeekableBlob(blob, (seekableBlob) => {\r\n // // recorder.stream?.stop();\r\n // this.recorder?.destroy();\r\n\r\n // this.blobs.push(seekableBlob);\r\n // // invokeSaveAsDialog(seekableBlob, 'seekable-recordrtc.webm');\r\n\r\n // this.screenStream?.getTracks().forEach((el) => {\r\n // el.stop();\r\n // });\r\n\r\n // finished = true;\r\n // });\r\n\r\n // await waitUntil(() => finished);\r\n\r\n // ### Finish RecordRTC\r\n\r\n this.recordingStop && await this.recordingStop();\r\n }\r\n async saveOnSession(session: ProctoringSession): Promise<void> {\r\n\r\n if(isMobileDevice()) return;\r\n \r\n //salva tela\r\n // console.log(\"screen buffer\", this.blobs);\r\n session.addRecording({\r\n device: \"\",\r\n file: new File(this.blobs, `EP_${session.id}_screen_0.webm`, {\r\n type: \"video/webm\",\r\n }),\r\n origin: RecordingOrigin.Screen,\r\n });\r\n }\r\n}\r\n", "import Devices, { DevicesChanged } from \"../../interfaces/Devices\";\r\nimport { ProctoringSession } from \"../proctoring/ProctoringSession\";\r\nimport { ISessionRepository } from \"./ISessionRepository\";\r\n\r\nexport class IndexDbSessionRepository implements ISessionRepository {\r\n private dbName: string = \"EasyProctorDb\";\r\n private dbVersion: number = 2;\r\n private storeName: string = \"exams2\";\r\n\r\n constructor(dbName: string, storeName: string) {\r\n this.dbName = dbName;\r\n this.storeName = storeName;\r\n }\r\n\r\n async save(data: Devices | DevicesChanged | ProctoringSession): Promise<void> {\r\n const { transaction, store } = await this.connectToStore(\"readwrite\");\r\n return this.processRequest(store.put(data), transaction).then(() => {});\r\n }\r\n\r\n async delete(id: string): Promise<void> {\r\n const { transaction, store } = await this.connectToStore(\"readwrite\");\r\n return this.processRequest(store.delete(id), transaction);\r\n }\r\n\r\n async get(id: string): Promise<ProctoringSession | undefined> {\r\n const { transaction, store } = await this.connectToStore(\"readwrite\");\r\n return this.processRequest<ProctoringSession>(\r\n store.get(id),\r\n transaction\r\n ).catch(() => undefined);\r\n }\r\n\r\n async getDevices(id: string): Promise<Devices | undefined> {\r\n const { transaction, store } = await this.connectToStore(\"readwrite\");\r\n return this.processRequest<Devices>(\r\n store.get(id),\r\n transaction\r\n ).catch(() => undefined);\r\n }\r\n\r\n async list(): Promise<ProctoringSession[] | Devices[]> {\r\n const { transaction, store } = await this.connectToStore(\"readonly\");\r\n return this.processRequest(store.getAll(), transaction);\r\n }\r\n\r\n async clear(): Promise<void> {\r\n const { transaction, store } = await this.connectToStore(\"readwrite\");\r\n return this.processRequest(store.clear(), transaction);\r\n }\r\n\r\n private async processRequest<T>(\r\n request: IDBRequest<T>,\r\n transaction: IDBTransaction\r\n ): Promise<T> {\r\n return new Promise((resolve, reject) => {\r\n request.onerror = (event) => {\r\n reject(request.error?.message);\r\n };\r\n request.onsuccess = (event) => {\r\n transaction.commit();\r\n resolve(request.result);\r\n };\r\n });\r\n }\r\n\r\n async hasSessions(): Promise<boolean> {\r\n const list = await this.list();\r\n return list.length > 0;\r\n }\r\n\r\n private connection?: IDBOpenDBRequest;\r\n\r\n private async connectToStore(mode: \"readonly\" | \"readwrite\") {\r\n const connection = await this.connect();\r\n const db = connection.result;\r\n const transaction = db.transaction(this.storeName, mode);\r\n const store = transaction.objectStore(this.storeName);\r\n return { transaction, store };\r\n }\r\n\r\n private async connect(): Promise<IDBOpenDBRequest> {\r\n if (this.connection) return this.connection;\r\n\r\n return new Promise<IDBOpenDBRequest>((resolve, reject) => {\r\n const request = window.indexedDB.open(this.dbName, this.dbVersion);\r\n request.onerror = (event) => {\r\n // console.log(\"request.onerror\", event);\r\n reject(\"Can't connect to IndexedDB\");\r\n };\r\n request.onupgradeneeded = (event) => {\r\n // console.log(\"request.onupgradeneeded\", event);\r\n\r\n const db = request.result;\r\n db.onerror = (event) => {\r\n // console.log(\"request.onupgradeneeded/db.onerror\", event);\r\n };\r\n db.createObjectStore(this.storeName, { keyPath: \"id\" });\r\n };\r\n request.onsuccess = (event) => {\r\n this.connection = request;\r\n resolve(request);\r\n };\r\n });\r\n }\r\n}\r\n", "export interface GeolocationInterface {\r\n coords: GeolocationCoordinates;\r\n timestamp: number;\r\n}\r\n\r\ninterface GeolocationCoordinates {\r\n accuracy: number | null;\r\n altitude: number | null;\r\n altitudeAccuracy: number | null;\r\n heading: number | null;\r\n latitude: number | undefined;\r\n longitude: number | undefined;\r\n speed: number | null;\r\n}\r\n\r\nexport function getGeolocation() {\r\n return new Promise<GeolocationInterface>((resolve, reject) => {\r\n window.navigator.geolocation.getCurrentPosition(resolve, reject);\r\n });\r\n}\r\n", "\r\n// Verify SafeBrowser Version\r\nexport function versionVerify() {\r\n const agentStr = window.navigator.userAgent.split('SEB/');\r\n if (agentStr.length > 1)\r\n return agentStr[1];\r\n else return \"1.0.0.0\";\r\n}\r\n", "import { BackendService } from \"../new-flow/backend/BackendService\";\r\nimport { CapturePhoto } from \"./CapturePhoto\";\r\n\r\nexport class Auth {\r\n private capturePhoto: CapturePhoto;\r\n private backend: BackendService;\r\n\r\n private cpf: string;\r\n private base64: string;\r\n private token: string;\r\n\r\n constructor(cpf: string, backend: BackendService) {\r\n this.cpf = cpf;\r\n this.backend = backend;\r\n this.capturePhoto = new CapturePhoto();\r\n }\r\n\r\n public async login(): Promise<string> {\r\n const capture = await this.capturePhoto.takePicture(\r\n \"Login com biometria facial\", \r\n \"Encaixe seu rosto no formato e clique no bot\u00E3o abaixo\",\r\n { width: 1280, height: 720 }\r\n );\r\n\r\n this.loading();\r\n\r\n return new Promise((resolve, reject) => {\r\n this.backend.loginAuth(this.cpf, capture.base64.substr(22, capture.base64.length))\r\n .then((resp) => {\r\n this.token = resp.token;\r\n\r\n const authLoader = document.querySelector(\"#authLoader\");\r\n authLoader?.remove();\r\n\r\n this.backend.token = this.token;\r\n \r\n resolve(this.token);\r\n })\r\n .catch(e => {\r\n console.log(e);\r\n \r\n const authLoader = document.querySelector(\"#authLoader\");\r\n authLoader?.remove();\r\n\r\n reject(e);\r\n }); \r\n });\r\n }\r\n\r\n public loading() {\r\n const fullBg = document.createElement(\"div\");\r\n fullBg.setAttribute(\"id\", \"authLoader\");\r\n \r\n fullBg.style.backgroundColor = \"rgba(0,0,0,0.4)\";\r\n fullBg.style.zIndex = \"1000\";\r\n fullBg.style.position = \"fixed\";\r\n fullBg.style.top = \"0\";\r\n fullBg.style.left = \"0\";\r\n fullBg.style.height = \"100vh\";\r\n fullBg.style.width = \"100%\";\r\n fullBg.style.display = \"flex\";\r\n fullBg.style.alignItems = \"center\";\r\n fullBg.style.justifyContent = \"center\";\r\n\r\n const loader = document.createElement(\"div\");\r\n loader.setAttribute(\"class\", \"loader\");\r\n\r\n fullBg.appendChild(loader);\r\n document.body.appendChild(fullBg);\r\n\r\n const styles = `\r\n .loader {\r\n border: 6px solid #f3f3f3;\r\n border-radius: 50%;\r\n border-top: 6px solid #16a34a;\r\n width: 50px;\r\n height: 50px;\r\n -webkit-animation: spin 2s linear infinite; /* Safari */\r\n animation: spin 2s linear infinite;\r\n }\r\n \r\n /* Safari */\r\n @-webkit-keyframes spin {\r\n 0% { -webkit-transform: rotate(0deg); }\r\n 100% { -webkit-transform: rotate(360deg); }\r\n }\r\n \r\n @keyframes spin {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n `;\r\n\r\n const styleSheet = document.createElement(\"style\");\r\n styleSheet.innerHTML = styles;\r\n document.head.appendChild(styleSheet);\r\n }\r\n \r\n}", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HttpTransportType } from \"./ITransport\";\r\n\r\n/** Error thrown when an HTTP request fails. */\r\nexport class HttpError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The HTTP status code represented by this error. */\r\n public statusCode: number;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n * @param {number} statusCode The HTTP status code represented by this error.\r\n */\r\n constructor(errorMessage: string, statusCode: number) {\r\n const trueProto = new.target.prototype;\r\n super(`${errorMessage}: Status code '${statusCode}'`);\r\n this.statusCode = statusCode;\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when a timeout elapses. */\r\nexport class TimeoutError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.TimeoutError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n */\r\n constructor(errorMessage: string = \"A timeout occurred.\") {\r\n const trueProto = new.target.prototype;\r\n super(errorMessage);\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when an action is aborted. */\r\nexport class AbortError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** Constructs a new instance of {@link AbortError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n */\r\n constructor(errorMessage: string = \"An abort occurred.\") {\r\n const trueProto = new.target.prototype;\r\n super(errorMessage);\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when the selected transport is unsupported by the browser. */\r\n/** @private */\r\nexport class UnsupportedTransportError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The {@link @microsoft/signalr.HttpTransportType} this error occurred on. */\r\n public transport: HttpTransportType;\r\n\r\n /** The type name of this error. */\r\n public errorType: string;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.UnsupportedTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occurred on.\r\n */\r\n constructor(message: string, transport: HttpTransportType) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'UnsupportedTransportError';\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when the selected transport is disabled by the browser. */\r\n/** @private */\r\nexport class DisabledTransportError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The {@link @microsoft/signalr.HttpTransportType} this error occurred on. */\r\n public transport: HttpTransportType;\r\n\r\n /** The type name of this error. */\r\n public errorType: string;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.DisabledTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occurred on.\r\n */\r\n constructor(message: string, transport: HttpTransportType) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'DisabledTransportError';\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when the selected transport cannot be started. */\r\n/** @private */\r\nexport class FailedToStartTransportError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The {@link @microsoft/signalr.HttpTransportType} this error occurred on. */\r\n public transport: HttpTransportType;\r\n\r\n /** The type name of this error. */\r\n public errorType: string;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.FailedToStartTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occurred on.\r\n */\r\n constructor(message: string, transport: HttpTransportType) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'FailedToStartTransportError';\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when the negotiation with the server failed to complete. */\r\n/** @private */\r\nexport class FailedToNegotiateWithServerError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The type name of this error. */\r\n public errorType: string;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.FailedToNegotiateWithServerError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n */\r\n constructor(message: string) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.errorType = 'FailedToNegotiateWithServerError';\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when multiple errors have occurred. */\r\n/** @private */\r\nexport class AggregateErrors extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The collection of errors this error is aggregating. */\r\n public innerErrors: Error[];\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.AggregateErrors}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {Error[]} innerErrors The collection of errors this error is aggregating.\r\n */\r\n constructor(message: string, innerErrors: Error[]) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n\r\n this.innerErrors = innerErrors;\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AbortSignal } from \"./AbortController\";\r\nimport { MessageHeaders } from \"./IHubProtocol\";\r\n\r\n/** Represents an HTTP request. */\r\nexport interface HttpRequest {\r\n /** The HTTP method to use for the request. */\r\n method?: string;\r\n\r\n /** The URL for the request. */\r\n url?: string;\r\n\r\n /** The body content for the request. May be a string or an ArrayBuffer (for binary data). */\r\n content?: string | ArrayBuffer;\r\n\r\n /** An object describing headers to apply to the request. */\r\n headers?: MessageHeaders;\r\n\r\n /** The XMLHttpRequestResponseType to apply to the request. */\r\n responseType?: XMLHttpRequestResponseType;\r\n\r\n /** An AbortSignal that can be monitored for cancellation. */\r\n abortSignal?: AbortSignal;\r\n\r\n /** The time to wait for the request to complete before throwing a TimeoutError. Measured in milliseconds. */\r\n timeout?: number;\r\n\r\n /** This controls whether credentials such as cookies are sent in cross-site requests. */\r\n withCredentials?: boolean;\r\n}\r\n\r\n/** Represents an HTTP response. */\r\nexport class HttpResponse {\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n */\r\n constructor(statusCode: number);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code and message.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n */\r\n constructor(statusCode: number, statusText: string);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code, message and string content.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n * @param {string} content The content of the response.\r\n */\r\n constructor(statusCode: number, statusText: string, content: string);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code, message and binary content.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n * @param {ArrayBuffer} content The content of the response.\r\n */\r\n constructor(statusCode: number, statusText: string, content: ArrayBuffer);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code, message and binary content.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n * @param {string | ArrayBuffer} content The content of the response.\r\n */\r\n constructor(statusCode: number, statusText: string, content: string | ArrayBuffer);\r\n constructor(\r\n public readonly statusCode: number,\r\n public readonly statusText?: string,\r\n public readonly content?: string | ArrayBuffer) {\r\n }\r\n}\r\n\r\n/** Abstraction over an HTTP client.\r\n *\r\n * This class provides an abstraction over an HTTP client so that a different implementation can be provided on different platforms.\r\n */\r\nexport abstract class HttpClient {\r\n /** Issues an HTTP GET request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @returns {Promise<HttpResponse>} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public get(url: string): Promise<HttpResponse>;\r\n\r\n /** Issues an HTTP GET request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @param {HttpRequest} options Additional options to configure the request. The 'url' field in this object will be overridden by the url parameter.\r\n * @returns {Promise<HttpResponse>} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public get(url: string, options: HttpRequest): Promise<HttpResponse>;\r\n public get(url: string, options?: HttpRequest): Promise<HttpResponse> {\r\n return this.send({\r\n ...options,\r\n method: \"GET\",\r\n url,\r\n });\r\n }\r\n\r\n /** Issues an HTTP POST request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @returns {Promise<HttpResponse>} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public post(url: string): Promise<HttpResponse>;\r\n\r\n /** Issues an HTTP POST request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @param {HttpRequest} options Additional options to configure the request. The 'url' field in this object will be overridden by the url parameter.\r\n * @returns {Promise<HttpResponse>} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public post(url: string, options: HttpRequest): Promise<HttpResponse>;\r\n public post(url: string, options?: HttpRequest): Promise<HttpResponse> {\r\n return this.send({\r\n ...options,\r\n method: \"POST\",\r\n url,\r\n });\r\n }\r\n\r\n /** Issues an HTTP DELETE request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @returns {Promise<HttpResponse>} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public delete(url: string): Promise<HttpResponse>;\r\n\r\n /** Issues an HTTP DELETE request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @param {HttpRequest} options Additional options to configure the request. The 'url' field in this object will be overridden by the url parameter.\r\n * @returns {Promise<HttpResponse>} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public delete(url: string, options: HttpRequest): Promise<HttpResponse>;\r\n public delete(url: string, options?: HttpRequest): Promise<HttpResponse> {\r\n return this.send({\r\n ...options,\r\n method: \"DELETE\",\r\n url,\r\n });\r\n }\r\n\r\n /** Issues an HTTP request to the specified URL, returning a {@link Promise} that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {HttpRequest} request An {@link @microsoft/signalr.HttpRequest} describing the request to send.\r\n * @returns {Promise<HttpResponse>} A Promise that resolves with an HttpResponse describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public abstract send(request: HttpRequest): Promise<HttpResponse>;\r\n\r\n /** Gets all cookies that apply to the specified URL.\r\n *\r\n * @param url The URL that the cookies are valid for.\r\n * @returns {string} A string containing all the key-value cookie pairs for the specified URL.\r\n */\r\n // @ts-ignore\r\n public getCookieString(url: string): string {\r\n return \"\";\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// These values are designed to match the ASP.NET Log Levels since that's the pattern we're emulating here.\r\n/** Indicates the severity of a log message.\r\n *\r\n * Log Levels are ordered in increasing severity. So `Debug` is more severe than `Trace`, etc.\r\n */\r\nexport enum LogLevel {\r\n /** Log level for very low severity diagnostic messages. */\r\n Trace = 0,\r\n /** Log level for low severity diagnostic messages. */\r\n Debug = 1,\r\n /** Log level for informational diagnostic messages. */\r\n Information = 2,\r\n /** Log level for diagnostic messages that indicate a non-fatal problem. */\r\n Warning = 3,\r\n /** Log level for diagnostic messages that indicate a failure in the current operation. */\r\n Error = 4,\r\n /** Log level for diagnostic messages that indicate a failure that will terminate the entire application. */\r\n Critical = 5,\r\n /** The highest possible log level. Used when configuring logging to indicate that no log messages should be emitted. */\r\n None = 6,\r\n}\r\n\r\n/** An abstraction that provides a sink for diagnostic messages. */\r\nexport interface ILogger {\r\n /** Called by the framework to emit a diagnostic message.\r\n *\r\n * @param {LogLevel} logLevel The severity level of the message.\r\n * @param {string} message The message.\r\n */\r\n log(logLevel: LogLevel, message: string): void;\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\n\r\n/** A logger that does nothing when log messages are sent to it. */\r\nexport class NullLogger implements ILogger {\r\n /** The singleton instance of the {@link @microsoft/signalr.NullLogger}. */\r\n public static instance: ILogger = new NullLogger();\r\n\r\n private constructor() {}\r\n\r\n /** @inheritDoc */\r\n // eslint-disable-next-line\r\n public log(_logLevel: LogLevel, _message: string): void {\r\n }\r\n}\r\n", "export const VERSION = '9.0.6';", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { IStreamSubscriber, ISubscription } from \"./Stream\";\r\nimport { Subject } from \"./Subject\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\nimport { VERSION } from \"./pkg-version\";\r\n\r\n// Version token that will be replaced by the prepack command\r\n/** The version of the SignalR client. */\r\n\r\nexport { VERSION };\r\n/** @private */\r\nexport class Arg {\r\n public static isRequired(val: any, name: string): void {\r\n if (val === null || val === undefined) {\r\n throw new Error(`The '${name}' argument is required.`);\r\n }\r\n }\r\n public static isNotEmpty(val: string, name: string): void {\r\n if (!val || val.match(/^\\s*$/)) {\r\n throw new Error(`The '${name}' argument should not be empty.`);\r\n }\r\n }\r\n\r\n public static isIn(val: any, values: any, name: string): void {\r\n // TypeScript enums have keys for **both** the name and the value of each enum member on the type itself.\r\n if (!(val in values)) {\r\n throw new Error(`Unknown ${name} value: ${val}.`);\r\n }\r\n }\r\n}\r\n\r\n/** @private */\r\nexport class Platform {\r\n // react-native has a window but no document so we should check both\r\n public static get isBrowser(): boolean {\r\n return !Platform.isNode && typeof window === \"object\" && typeof window.document === \"object\";\r\n }\r\n\r\n // WebWorkers don't have a window object so the isBrowser check would fail\r\n public static get isWebWorker(): boolean {\r\n return !Platform.isNode && typeof self === \"object\" && \"importScripts\" in self;\r\n }\r\n\r\n // react-native has a window but no document\r\n static get isReactNative(): boolean {\r\n return !Platform.isNode && typeof window === \"object\" && typeof window.document === \"undefined\";\r\n }\r\n\r\n // Node apps shouldn't have a window object, but WebWorkers don't either\r\n // so we need to check for both WebWorker and window\r\n public static get isNode(): boolean {\r\n return typeof process !== \"undefined\" && process.release && process.release.name === \"node\";\r\n }\r\n}\r\n\r\n/** @private */\r\nexport function getDataDetail(data: any, includeContent: boolean): string {\r\n let detail = \"\";\r\n if (isArrayBuffer(data)) {\r\n detail = `Binary data of length ${data.byteLength}`;\r\n if (includeContent) {\r\n detail += `. Content: '${formatArrayBuffer(data)}'`;\r\n }\r\n } else if (typeof data === \"string\") {\r\n detail = `String data of length ${data.length}`;\r\n if (includeContent) {\r\n detail += `. Content: '${data}'`;\r\n }\r\n }\r\n return detail;\r\n}\r\n\r\n/** @private */\r\nexport function formatArrayBuffer(data: ArrayBuffer): string {\r\n const view = new Uint8Array(data);\r\n\r\n // Uint8Array.map only supports returning another Uint8Array?\r\n let str = \"\";\r\n view.forEach((num) => {\r\n const pad = num < 16 ? \"0\" : \"\";\r\n str += `0x${pad}${num.toString(16)} `;\r\n });\r\n\r\n // Trim of trailing space.\r\n return str.substr(0, str.length - 1);\r\n}\r\n\r\n// Also in signalr-protocol-msgpack/Utils.ts\r\n/** @private */\r\nexport function isArrayBuffer(val: any): val is ArrayBuffer {\r\n return val && typeof ArrayBuffer !== \"undefined\" &&\r\n (val instanceof ArrayBuffer ||\r\n // Sometimes we get an ArrayBuffer that doesn't satisfy instanceof\r\n (val.constructor && val.constructor.name === \"ArrayBuffer\"));\r\n}\r\n\r\n/** @private */\r\nexport async function sendMessage(logger: ILogger, transportName: string, httpClient: HttpClient, url: string,\r\n content: string | ArrayBuffer, options: IHttpConnectionOptions): Promise<void> {\r\n const headers: {[k: string]: string} = {};\r\n\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n logger.log(LogLevel.Trace, `(${transportName} transport) sending data. ${getDataDetail(content, options.logMessageContent!)}.`);\r\n\r\n const responseType = isArrayBuffer(content) ? \"arraybuffer\" : \"text\";\r\n const response = await httpClient.post(url, {\r\n content,\r\n headers: { ...headers, ...options.headers},\r\n responseType,\r\n timeout: options.timeout,\r\n withCredentials: options.withCredentials,\r\n });\r\n\r\n logger.log(LogLevel.Trace, `(${transportName} transport) request complete. Response status: ${response.statusCode}.`);\r\n}\r\n\r\n/** @private */\r\nexport function createLogger(logger?: ILogger | LogLevel): ILogger {\r\n if (logger === undefined) {\r\n return new ConsoleLogger(LogLevel.Information);\r\n }\r\n\r\n if (logger === null) {\r\n return NullLogger.instance;\r\n }\r\n\r\n if ((logger as ILogger).log !== undefined) {\r\n return logger as ILogger;\r\n }\r\n\r\n return new ConsoleLogger(logger as LogLevel);\r\n}\r\n\r\n/** @private */\r\nexport class SubjectSubscription<T> implements ISubscription<T> {\r\n private _subject: Subject<T>;\r\n private _observer: IStreamSubscriber<T>;\r\n\r\n constructor(subject: Subject<T>, observer: IStreamSubscriber<T>) {\r\n this._subject = subject;\r\n this._observer = observer;\r\n }\r\n\r\n public dispose(): void {\r\n const index: number = this._subject.observers.indexOf(this._observer);\r\n if (index > -1) {\r\n this._subject.observers.splice(index, 1);\r\n }\r\n\r\n if (this._subject.observers.length === 0 && this._subject.cancelCallback) {\r\n this._subject.cancelCallback().catch((_) => { });\r\n }\r\n }\r\n}\r\n\r\n/** @private */\r\nexport class ConsoleLogger implements ILogger {\r\n private readonly _minLevel: LogLevel;\r\n\r\n // Public for testing purposes.\r\n public out: {\r\n error(message: any): void,\r\n warn(message: any): void,\r\n info(message: any): void,\r\n log(message: any): void,\r\n };\r\n\r\n constructor(minimumLogLevel: LogLevel) {\r\n this._minLevel = minimumLogLevel;\r\n this.out = console;\r\n }\r\n\r\n public log(logLevel: LogLevel, message: string): void {\r\n if (logLevel >= this._minLevel) {\r\n const msg = `[${new Date().toISOString()}] ${LogLevel[logLevel]}: ${message}`;\r\n switch (logLevel) {\r\n case LogLevel.Critical:\r\n case LogLevel.Error:\r\n this.out.error(msg);\r\n break;\r\n case LogLevel.Warning:\r\n this.out.warn(msg);\r\n break;\r\n case LogLevel.Information:\r\n this.out.info(msg);\r\n break;\r\n default:\r\n // console.debug only goes to attached debuggers in Node, so we use console.log for Trace and Debug\r\n this.out.log(msg);\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** @private */\r\nexport function getUserAgentHeader(): [string, string] {\r\n let userAgentHeaderName = \"X-SignalR-User-Agent\";\r\n if (Platform.isNode) {\r\n userAgentHeaderName = \"User-Agent\";\r\n }\r\n return [ userAgentHeaderName, constructUserAgent(VERSION, getOsName(), getRuntime(), getRuntimeVersion()) ];\r\n}\r\n\r\n/** @private */\r\nexport function constructUserAgent(version: string, os: string, runtime: string, runtimeVersion: string | undefined): string {\r\n // Microsoft SignalR/[Version] ([Detailed Version]; [Operating System]; [Runtime]; [Runtime Version])\r\n let userAgent: string = \"Microsoft SignalR/\";\r\n\r\n const majorAndMinor = version.split(\".\");\r\n userAgent += `${majorAndMinor[0]}.${majorAndMinor[1]}`;\r\n userAgent += ` (${version}; `;\r\n\r\n if (os && os !== \"\") {\r\n userAgent += `${os}; `;\r\n } else {\r\n userAgent += \"Unknown OS; \";\r\n }\r\n\r\n userAgent += `${runtime}`;\r\n\r\n if (runtimeVersion) {\r\n userAgent += `; ${runtimeVersion}`;\r\n } else {\r\n userAgent += \"; Unknown Runtime Version\";\r\n }\r\n\r\n userAgent += \")\";\r\n return userAgent;\r\n}\r\n\r\n// eslint-disable-next-line spaced-comment\r\n/*#__PURE__*/ function getOsName(): string {\r\n if (Platform.isNode) {\r\n switch (process.platform) {\r\n case \"win32\":\r\n return \"Windows NT\";\r\n case \"darwin\":\r\n return \"macOS\";\r\n case \"linux\":\r\n return \"Linux\";\r\n default:\r\n return process.platform;\r\n }\r\n } else {\r\n return \"\";\r\n }\r\n}\r\n\r\n// eslint-disable-next-line spaced-comment\r\n/*#__PURE__*/ function getRuntimeVersion(): string | undefined {\r\n if (Platform.isNode) {\r\n return process.versions.node;\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction getRuntime(): string {\r\n if (Platform.isNode) {\r\n return \"NodeJS\";\r\n } else {\r\n return \"Browser\";\r\n }\r\n}\r\n\r\n/** @private */\r\nexport function getErrorString(e: any): string {\r\n if (e.stack) {\r\n return e.stack;\r\n } else if (e.message) {\r\n return e.message;\r\n }\r\n return `${e}`;\r\n}\r\n\r\n/** @private */\r\nexport function getGlobalThis(): unknown {\r\n // globalThis is semi-new and not available in Node until v12\r\n if (typeof globalThis !== \"undefined\") {\r\n return globalThis;\r\n }\r\n if (typeof self !== \"undefined\") {\r\n return self;\r\n }\r\n if (typeof window !== \"undefined\") {\r\n return window;\r\n }\r\n if (typeof global !== \"undefined\") {\r\n return global;\r\n }\r\n throw new Error(\"could not find global\");\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// @ts-ignore: This will be removed from built files and is here to make the types available during dev work\r\nimport { CookieJar } from \"@types/tough-cookie\";\r\n\r\nimport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { Platform, getGlobalThis, isArrayBuffer } from \"./Utils\";\r\n\r\nexport class FetchHttpClient extends HttpClient {\r\n private readonly _abortControllerType: { prototype: AbortController, new(): AbortController };\r\n private readonly _fetchType: (input: RequestInfo, init?: RequestInit) => Promise<Response>;\r\n private readonly _jar?: CookieJar;\r\n\r\n private readonly _logger: ILogger;\r\n\r\n public constructor(logger: ILogger) {\r\n super();\r\n this._logger = logger;\r\n\r\n // Node added a fetch implementation to the global scope starting in v18.\r\n // We need to add a cookie jar in node to be able to share cookies with WebSocket\r\n if (typeof fetch === \"undefined\" || Platform.isNode) {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n\r\n // Cookies aren't automatically handled in Node so we need to add a CookieJar to preserve cookies across requests\r\n this._jar = new (requireFunc(\"tough-cookie\")).CookieJar();\r\n\r\n if (typeof fetch === \"undefined\") {\r\n this._fetchType = requireFunc(\"node-fetch\");\r\n } else {\r\n // Use fetch from Node if available\r\n this._fetchType = fetch;\r\n }\r\n\r\n // node-fetch doesn't have a nice API for getting and setting cookies\r\n // fetch-cookie will wrap a fetch implementation with a default CookieJar or a provided one\r\n this._fetchType = requireFunc(\"fetch-cookie\")(this._fetchType, this._jar);\r\n } else {\r\n this._fetchType = fetch.bind(getGlobalThis());\r\n }\r\n if (typeof AbortController === \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n\r\n // Node needs EventListener methods on AbortController which our custom polyfill doesn't provide\r\n this._abortControllerType = requireFunc(\"abort-controller\");\r\n } else {\r\n this._abortControllerType = AbortController;\r\n }\r\n }\r\n\r\n /** @inheritDoc */\r\n public async send(request: HttpRequest): Promise<HttpResponse> {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n throw new AbortError();\r\n }\r\n\r\n if (!request.method) {\r\n throw new Error(\"No method defined.\");\r\n }\r\n if (!request.url) {\r\n throw new Error(\"No url defined.\");\r\n }\r\n\r\n const abortController = new this._abortControllerType();\r\n\r\n let error: any;\r\n // Hook our abortSignal into the abort controller\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = () => {\r\n abortController.abort();\r\n error = new AbortError();\r\n };\r\n }\r\n\r\n // If a timeout has been passed in, setup a timeout to call abort\r\n // Type needs to be any to fit window.setTimeout and NodeJS.setTimeout\r\n let timeoutId: any = null;\r\n if (request.timeout) {\r\n const msTimeout = request.timeout!;\r\n timeoutId = setTimeout(() => {\r\n abortController.abort();\r\n this._logger.log(LogLevel.Warning, `Timeout from HTTP request.`);\r\n error = new TimeoutError();\r\n }, msTimeout);\r\n }\r\n\r\n if (request.content === \"\") {\r\n request.content = undefined;\r\n }\r\n if (request.content) {\r\n // Explicitly setting the Content-Type header for React Native on Android platform.\r\n request.headers = request.headers || {};\r\n if (isArrayBuffer(request.content)) {\r\n request.headers[\"Content-Type\"] = \"application/octet-stream\";\r\n } else {\r\n request.headers[\"Content-Type\"] = \"text/plain;charset=UTF-8\";\r\n }\r\n }\r\n\r\n let response: Response;\r\n try {\r\n response = await this._fetchType(request.url!, {\r\n body: request.content,\r\n cache: \"no-cache\",\r\n credentials: request.withCredentials === true ? \"include\" : \"same-origin\",\r\n headers: {\r\n \"X-Requested-With\": \"XMLHttpRequest\",\r\n ...request.headers,\r\n },\r\n method: request.method!,\r\n mode: \"cors\",\r\n redirect: \"follow\",\r\n signal: abortController.signal,\r\n });\r\n } catch (e) {\r\n if (error) {\r\n throw error;\r\n }\r\n this._logger.log(\r\n LogLevel.Warning,\r\n `Error from HTTP request. ${e}.`,\r\n );\r\n throw e;\r\n } finally {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = null;\r\n }\r\n }\r\n\r\n if (!response.ok) {\r\n const errorMessage = await deserializeContent(response, \"text\") as string;\r\n throw new HttpError(errorMessage || response.statusText, response.status);\r\n }\r\n\r\n const content = deserializeContent(response, request.responseType);\r\n const payload = await content;\r\n\r\n return new HttpResponse(\r\n response.status,\r\n response.statusText,\r\n payload,\r\n );\r\n }\r\n\r\n public getCookieString(url: string): string {\r\n let cookies: string = \"\";\r\n if (Platform.isNode && this._jar) {\r\n // @ts-ignore: unused variable\r\n this._jar.getCookies(url, (e, c) => cookies = c.join(\"; \"));\r\n }\r\n return cookies;\r\n }\r\n}\r\n\r\nfunction deserializeContent(response: Response, responseType?: XMLHttpRequestResponseType): Promise<string | ArrayBuffer> {\r\n let content;\r\n switch (responseType) {\r\n case \"arraybuffer\":\r\n content = response.arrayBuffer();\r\n break;\r\n case \"text\":\r\n content = response.text();\r\n break;\r\n case \"blob\":\r\n case \"document\":\r\n case \"json\":\r\n throw new Error(`${responseType} is not supported.`);\r\n default:\r\n content = response.text();\r\n break;\r\n }\r\n\r\n return content;\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { isArrayBuffer } from \"./Utils\";\r\n\r\nexport class XhrHttpClient extends HttpClient {\r\n private readonly _logger: ILogger;\r\n\r\n public constructor(logger: ILogger) {\r\n super();\r\n this._logger = logger;\r\n }\r\n\r\n /** @inheritDoc */\r\n public send(request: HttpRequest): Promise<HttpResponse> {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n return Promise.reject(new AbortError());\r\n }\r\n\r\n if (!request.method) {\r\n return Promise.reject(new Error(\"No method defined.\"));\r\n }\r\n if (!request.url) {\r\n return Promise.reject(new Error(\"No url defined.\"));\r\n }\r\n\r\n return new Promise<HttpResponse>((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n\r\n xhr.open(request.method!, request.url!, true);\r\n xhr.withCredentials = request.withCredentials === undefined ? true : request.withCredentials;\r\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n if (request.content === \"\") {\r\n request.content = undefined;\r\n }\r\n if (request.content) {\r\n // Explicitly setting the Content-Type header for React Native on Android platform.\r\n if (isArrayBuffer(request.content)) {\r\n xhr.setRequestHeader(\"Content-Type\", \"application/octet-stream\");\r\n } else {\r\n xhr.setRequestHeader(\"Content-Type\", \"text/plain;charset=UTF-8\");\r\n }\r\n }\r\n\r\n const headers = request.headers;\r\n if (headers) {\r\n Object.keys(headers)\r\n .forEach((header) => {\r\n xhr.setRequestHeader(header, headers[header]);\r\n });\r\n }\r\n\r\n if (request.responseType) {\r\n xhr.responseType = request.responseType;\r\n }\r\n\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = () => {\r\n xhr.abort();\r\n reject(new AbortError());\r\n };\r\n }\r\n\r\n if (request.timeout) {\r\n xhr.timeout = request.timeout;\r\n }\r\n\r\n xhr.onload = () => {\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = null;\r\n }\r\n\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n resolve(new HttpResponse(xhr.status, xhr.statusText, xhr.response || xhr.responseText));\r\n } else {\r\n reject(new HttpError(xhr.response || xhr.responseText || xhr.statusText, xhr.status));\r\n }\r\n };\r\n\r\n xhr.onerror = () => {\r\n this._logger.log(LogLevel.Warning, `Error from HTTP request. ${xhr.status}: ${xhr.statusText}.`);\r\n reject(new HttpError(xhr.statusText, xhr.status));\r\n };\r\n\r\n xhr.ontimeout = () => {\r\n this._logger.log(LogLevel.Warning, `Timeout from HTTP request.`);\r\n reject(new TimeoutError());\r\n };\r\n\r\n xhr.send(request.content);\r\n });\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AbortError } from \"./Errors\";\r\nimport { FetchHttpClient } from \"./FetchHttpClient\";\r\nimport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\nimport { ILogger } from \"./ILogger\";\r\nimport { Platform } from \"./Utils\";\r\nimport { XhrHttpClient } from \"./XhrHttpClient\";\r\n\r\n/** Default implementation of {@link @microsoft/signalr.HttpClient}. */\r\nexport class DefaultHttpClient extends HttpClient {\r\n private readonly _httpClient: HttpClient;\r\n\r\n /** Creates a new instance of the {@link @microsoft/signalr.DefaultHttpClient}, using the provided {@link @microsoft/signalr.ILogger} to log messages. */\r\n public constructor(logger: ILogger) {\r\n super();\r\n\r\n if (typeof fetch !== \"undefined\" || Platform.isNode) {\r\n this._httpClient = new FetchHttpClient(logger);\r\n } else if (typeof XMLHttpRequest !== \"undefined\") {\r\n this._httpClient = new XhrHttpClient(logger);\r\n } else {\r\n throw new Error(\"No usable HttpClient found.\");\r\n }\r\n }\r\n\r\n /** @inheritDoc */\r\n public send(request: HttpRequest): Promise<HttpResponse> {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n return Promise.reject(new AbortError());\r\n }\r\n\r\n if (!request.method) {\r\n return Promise.reject(new Error(\"No method defined.\"));\r\n }\r\n if (!request.url) {\r\n return Promise.reject(new Error(\"No url defined.\"));\r\n }\r\n\r\n return this._httpClient.send(request);\r\n }\r\n\r\n public getCookieString(url: string): string {\r\n return this._httpClient.getCookieString(url);\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// Not exported from index\r\n/** @private */\r\nexport class TextMessageFormat {\r\n public static RecordSeparatorCode = 0x1e;\r\n public static RecordSeparator = String.fromCharCode(TextMessageFormat.RecordSeparatorCode);\r\n\r\n public static write(output: string): string {\r\n return `${output}${TextMessageFormat.RecordSeparator}`;\r\n }\r\n\r\n public static parse(input: string): string[] {\r\n if (input[input.length - 1] !== TextMessageFormat.RecordSeparator) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n\r\n const messages = input.split(TextMessageFormat.RecordSeparator);\r\n messages.pop();\r\n return messages;\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\nimport { isArrayBuffer } from \"./Utils\";\r\n\r\n/** @private */\r\nexport interface HandshakeRequestMessage {\r\n readonly protocol: string;\r\n readonly version: number;\r\n}\r\n\r\n/** @private */\r\nexport interface HandshakeResponseMessage {\r\n readonly error: string;\r\n readonly minorVersion: number;\r\n}\r\n\r\n/** @private */\r\nexport class HandshakeProtocol {\r\n // Handshake request is always JSON\r\n public writeHandshakeRequest(handshakeRequest: HandshakeRequestMessage): string {\r\n return TextMessageFormat.write(JSON.stringify(handshakeRequest));\r\n }\r\n\r\n public parseHandshakeResponse(data: any): [any, HandshakeResponseMessage] {\r\n let messageData: string;\r\n let remainingData: any;\r\n\r\n if (isArrayBuffer(data)) {\r\n // Format is binary but still need to read JSON text from handshake response\r\n const binaryData = new Uint8Array(data);\r\n const separatorIndex = binaryData.indexOf(TextMessageFormat.RecordSeparatorCode);\r\n if (separatorIndex === -1) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n\r\n // content before separator is handshake response\r\n // optional content after is additional messages\r\n const responseLength = separatorIndex + 1;\r\n messageData = String.fromCharCode.apply(null, Array.prototype.slice.call(binaryData.slice(0, responseLength)));\r\n remainingData = (binaryData.byteLength > responseLength) ? binaryData.slice(responseLength).buffer : null;\r\n } else {\r\n const textData: string = data;\r\n const separatorIndex = textData.indexOf(TextMessageFormat.RecordSeparator);\r\n if (separatorIndex === -1) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n\r\n // content before separator is handshake response\r\n // optional content after is additional messages\r\n const responseLength = separatorIndex + 1;\r\n messageData = textData.substring(0, responseLength);\r\n remainingData = (textData.length > responseLength) ? textData.substring(responseLength) : null;\r\n }\r\n\r\n // At this point we should have just the single handshake message\r\n const messages = TextMessageFormat.parse(messageData);\r\n const response = JSON.parse(messages[0]);\r\n if (response.type) {\r\n throw new Error(\"Expected a handshake response from the server.\");\r\n }\r\n const responseMessage: HandshakeResponseMessage = response;\r\n\r\n // multiple messages could have arrived with handshake\r\n // return additional data to be parsed as usual, or null if all parsed\r\n return [remainingData, responseMessage];\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { ILogger } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\n\r\n/** Defines the type of a Hub Message. */\r\nexport enum MessageType {\r\n /** Indicates the message is an Invocation message and implements the {@link @microsoft/signalr.InvocationMessage} interface. */\r\n Invocation = 1,\r\n /** Indicates the message is a StreamItem message and implements the {@link @microsoft/signalr.StreamItemMessage} interface. */\r\n StreamItem = 2,\r\n /** Indicates the message is a Completion message and implements the {@link @microsoft/signalr.CompletionMessage} interface. */\r\n Completion = 3,\r\n /** Indicates the message is a Stream Invocation message and implements the {@link @microsoft/signalr.StreamInvocationMessage} interface. */\r\n StreamInvocation = 4,\r\n /** Indicates the message is a Cancel Invocation message and implements the {@link @microsoft/signalr.CancelInvocationMessage} interface. */\r\n CancelInvocation = 5,\r\n /** Indicates the message is a Ping message and implements the {@link @microsoft/signalr.PingMessage} interface. */\r\n Ping = 6,\r\n /** Indicates the message is a Close message and implements the {@link @microsoft/signalr.CloseMessage} interface. */\r\n Close = 7,\r\n Ack = 8,\r\n Sequence = 9\r\n}\r\n\r\n/** Defines a dictionary of string keys and string values representing headers attached to a Hub message. */\r\nexport interface MessageHeaders {\r\n /** Gets or sets the header with the specified key. */\r\n [key: string]: string;\r\n}\r\n\r\n/** Union type of all known Hub messages. */\r\nexport type HubMessage =\r\n InvocationMessage |\r\n StreamInvocationMessage |\r\n StreamItemMessage |\r\n CompletionMessage |\r\n CancelInvocationMessage |\r\n PingMessage |\r\n CloseMessage |\r\n AckMessage |\r\n SequenceMessage;\r\n\r\n/** Defines properties common to all Hub messages. */\r\nexport interface HubMessageBase {\r\n /** A {@link @microsoft/signalr.MessageType} value indicating the type of this message. */\r\n readonly type: MessageType;\r\n}\r\n\r\n/** Defines properties common to all Hub messages relating to a specific invocation. */\r\nexport interface HubInvocationMessage extends HubMessageBase {\r\n /** A {@link @microsoft/signalr.MessageHeaders} dictionary containing headers attached to the message. */\r\n readonly headers?: MessageHeaders;\r\n /** The ID of the invocation relating to this message.\r\n *\r\n * This is expected to be present for {@link @microsoft/signalr.StreamInvocationMessage} and {@link @microsoft/signalr.CompletionMessage}. It may\r\n * be 'undefined' for an {@link @microsoft/signalr.InvocationMessage} if the sender does not expect a response.\r\n */\r\n readonly invocationId?: string;\r\n}\r\n\r\n/** A hub message representing a non-streaming invocation. */\r\nexport interface InvocationMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Invocation;\r\n /** The target method name. */\r\n readonly target: string;\r\n /** The target method arguments. */\r\n readonly arguments: any[];\r\n /** The target methods stream IDs. */\r\n readonly streamIds?: string[];\r\n}\r\n\r\n/** A hub message representing a streaming invocation. */\r\nexport interface StreamInvocationMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.StreamInvocation;\r\n\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n /** The target method name. */\r\n readonly target: string;\r\n /** The target method arguments. */\r\n readonly arguments: any[];\r\n /** The target methods stream IDs. */\r\n readonly streamIds?: string[];\r\n}\r\n\r\n/** A hub message representing a single item produced as part of a result stream. */\r\nexport interface StreamItemMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.StreamItem;\r\n\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n\r\n /** The item produced by the server. */\r\n readonly item?: any;\r\n}\r\n\r\n/** A hub message representing the result of an invocation. */\r\nexport interface CompletionMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Completion;\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n /** The error produced by the invocation, if any.\r\n *\r\n * Either {@link @microsoft/signalr.CompletionMessage.error} or {@link @microsoft/signalr.CompletionMessage.result} must be defined, but not both.\r\n */\r\n readonly error?: string;\r\n /** The result produced by the invocation, if any.\r\n *\r\n * Either {@link @microsoft/signalr.CompletionMessage.error} or {@link @microsoft/signalr.CompletionMessage.result} must be defined, but not both.\r\n */\r\n readonly result?: any;\r\n}\r\n\r\n/** A hub message indicating that the sender is still active. */\r\nexport interface PingMessage extends HubMessageBase {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Ping;\r\n}\r\n\r\n/** A hub message indicating that the sender is closing the connection.\r\n *\r\n * If {@link @microsoft/signalr.CloseMessage.error} is defined, the sender is closing the connection due to an error.\r\n */\r\nexport interface CloseMessage extends HubMessageBase {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Close;\r\n /** The error that triggered the close, if any.\r\n *\r\n * If this property is undefined, the connection was closed normally and without error.\r\n */\r\n readonly error?: string;\r\n\r\n /** If true, clients with automatic reconnects enabled should attempt to reconnect after receiving the CloseMessage. Otherwise, they should not. */\r\n readonly allowReconnect?: boolean;\r\n}\r\n\r\n/** A hub message sent to request that a streaming invocation be canceled. */\r\nexport interface CancelInvocationMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.CancelInvocation;\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n}\r\n\r\nexport interface AckMessage extends HubMessageBase\r\n{\r\n readonly type: MessageType.Ack;\r\n\r\n readonly sequenceId: number;\r\n}\r\n\r\nexport interface SequenceMessage extends HubMessageBase\r\n{\r\n readonly type: MessageType.Sequence;\r\n\r\n readonly sequenceId: number;\r\n}\r\n\r\n/** A protocol abstraction for communicating with SignalR Hubs. */\r\nexport interface IHubProtocol {\r\n /** The name of the protocol. This is used by SignalR to resolve the protocol between the client and server. */\r\n readonly name: string;\r\n /** The version of the protocol. */\r\n readonly version: number;\r\n /** The {@link @microsoft/signalr.TransferFormat} of the protocol. */\r\n readonly transferFormat: TransferFormat;\r\n\r\n /** Creates an array of {@link @microsoft/signalr.HubMessage} objects from the specified serialized representation.\r\n *\r\n * If {@link @microsoft/signalr.IHubProtocol.transferFormat} is 'Text', the `input` parameter must be a string, otherwise it must be an ArrayBuffer.\r\n *\r\n * @param {string | ArrayBuffer} input A string or ArrayBuffer containing the serialized representation.\r\n * @param {ILogger} logger A logger that will be used to log messages that occur during parsing.\r\n */\r\n parseMessages(input: string | ArrayBuffer, logger: ILogger): HubMessage[];\r\n\r\n /** Writes the specified {@link @microsoft/signalr.HubMessage} to a string or ArrayBuffer and returns it.\r\n *\r\n * If {@link @microsoft/signalr.IHubProtocol.transferFormat} is 'Text', the result of this method will be a string, otherwise it will be an ArrayBuffer.\r\n *\r\n * @param {HubMessage} message The message to write.\r\n * @returns {string | ArrayBuffer} A string or ArrayBuffer containing the serialized representation of the message.\r\n */\r\n writeMessage(message: HubMessage): string | ArrayBuffer;\r\n}", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { IStreamResult, IStreamSubscriber, ISubscription } from \"./Stream\";\r\nimport { SubjectSubscription } from \"./Utils\";\r\n\r\n/** Stream implementation to stream items to the server. */\r\nexport class Subject<T> implements IStreamResult<T> {\r\n /** @internal */\r\n public observers: IStreamSubscriber<T>[];\r\n\r\n /** @internal */\r\n public cancelCallback?: () => Promise<void>;\r\n\r\n constructor() {\r\n this.observers = [];\r\n }\r\n\r\n public next(item: T): void {\r\n for (const observer of this.observers) {\r\n observer.next(item);\r\n }\r\n }\r\n\r\n public error(err: any): void {\r\n for (const observer of this.observers) {\r\n if (observer.error) {\r\n observer.error(err);\r\n }\r\n }\r\n }\r\n\r\n public complete(): void {\r\n for (const observer of this.observers) {\r\n if (observer.complete) {\r\n observer.complete();\r\n }\r\n }\r\n }\r\n\r\n public subscribe(observer: IStreamSubscriber<T>): ISubscription<T> {\r\n this.observers.push(observer);\r\n return new SubjectSubscription(this, observer);\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { IConnection } from \"./IConnection\";\r\nimport { AckMessage, HubMessage, IHubProtocol, MessageType, SequenceMessage } from \"./IHubProtocol\";\r\nimport { isArrayBuffer } from \"./Utils\";\r\n\r\n/** @private */\r\nexport class MessageBuffer {\r\n private readonly _protocol: IHubProtocol;\r\n private readonly _connection: IConnection;\r\n\r\n private readonly _bufferSize: number = 100_000;\r\n\r\n private _messages: BufferedItem[] = [];\r\n private _totalMessageCount: number = 0;\r\n private _waitForSequenceMessage: boolean = false;\r\n\r\n // Message IDs start at 1 and always increment by 1\r\n private _nextReceivingSequenceId = 1;\r\n private _latestReceivedSequenceId = 0;\r\n private _bufferedByteCount: number = 0;\r\n private _reconnectInProgress: boolean = false;\r\n\r\n private _ackTimerHandle?: any;\r\n\r\n constructor(protocol: IHubProtocol, connection: IConnection, bufferSize: number) {\r\n this._protocol = protocol;\r\n this._connection = connection;\r\n this._bufferSize = bufferSize;\r\n }\r\n\r\n public async _send(message: HubMessage): Promise<void> {\r\n const serializedMessage = this._protocol.writeMessage(message);\r\n\r\n let backpressurePromise: Promise<void> = Promise.resolve();\r\n\r\n // Only count invocation messages. Acks, pings, etc. don't need to be resent on reconnect\r\n if (this._isInvocationMessage(message)) {\r\n this._totalMessageCount++;\r\n let backpressurePromiseResolver: (value: void) => void = () => {};\r\n let backpressurePromiseRejector: (value?: void) => void = () => {};\r\n\r\n if (isArrayBuffer(serializedMessage)) {\r\n this._bufferedByteCount += serializedMessage.byteLength;\r\n } else {\r\n this._bufferedByteCount += serializedMessage.length;\r\n }\r\n\r\n if (this._bufferedByteCount >= this._bufferSize) {\r\n backpressurePromise = new Promise((resolve, reject) => {\r\n backpressurePromiseResolver = resolve;\r\n backpressurePromiseRejector = reject;\r\n });\r\n }\r\n\r\n this._messages.push(new BufferedItem(serializedMessage, this._totalMessageCount,\r\n backpressurePromiseResolver, backpressurePromiseRejector));\r\n }\r\n\r\n try {\r\n // If this is set it means we are reconnecting or resending\r\n // We don't want to send on a disconnected connection\r\n // And we don't want to send if resend is running since that would mean sending\r\n // this message twice\r\n if (!this._reconnectInProgress) {\r\n await this._connection.send(serializedMessage);\r\n }\r\n } catch {\r\n this._disconnected();\r\n }\r\n await backpressurePromise;\r\n }\r\n\r\n public _ack(ackMessage: AckMessage): void {\r\n let newestAckedMessage = -1;\r\n\r\n // Find index of newest message being acked\r\n for (let index = 0; index < this._messages.length; index++) {\r\n const element = this._messages[index];\r\n if (element._id <= ackMessage.sequenceId) {\r\n newestAckedMessage = index;\r\n if (isArrayBuffer(element._message)) {\r\n this._bufferedByteCount -= element._message.byteLength;\r\n } else {\r\n this._bufferedByteCount -= element._message.length;\r\n }\r\n // resolve items that have already been sent and acked\r\n element._resolver();\r\n } else if (this._bufferedByteCount < this._bufferSize) {\r\n // resolve items that now fall under the buffer limit but haven't been acked\r\n element._resolver();\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n if (newestAckedMessage !== -1) {\r\n // We're removing everything including the message pointed to, so add 1\r\n this._messages = this._messages.slice(newestAckedMessage + 1);\r\n }\r\n }\r\n\r\n public _shouldProcessMessage(message: HubMessage): boolean {\r\n if (this._waitForSequenceMessage) {\r\n if (message.type !== MessageType.Sequence) {\r\n return false;\r\n } else {\r\n this._waitForSequenceMessage = false;\r\n return true;\r\n }\r\n }\r\n\r\n // No special processing for acks, pings, etc.\r\n if (!this._isInvocationMessage(message)) {\r\n return true;\r\n }\r\n\r\n const currentId = this._nextReceivingSequenceId;\r\n this._nextReceivingSequenceId++;\r\n if (currentId <= this._latestReceivedSequenceId) {\r\n if (currentId === this._latestReceivedSequenceId) {\r\n // Should only hit this if we just reconnected and the server is sending\r\n // Messages it has buffered, which would mean it hasn't seen an Ack for these messages\r\n this._ackTimer();\r\n }\r\n // Ignore, this is a duplicate message\r\n return false;\r\n }\r\n\r\n this._latestReceivedSequenceId = currentId;\r\n\r\n // Only start the timer for sending an Ack message when we have a message to ack. This also conveniently solves\r\n // timer throttling by not having a recursive timer, and by starting the timer via a network call (recv)\r\n this._ackTimer();\r\n return true;\r\n }\r\n\r\n public _resetSequence(message: SequenceMessage): void {\r\n if (message.sequenceId > this._nextReceivingSequenceId) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._connection.stop(new Error(\"Sequence ID greater than amount of messages we've received.\"));\r\n return;\r\n }\r\n\r\n this._nextReceivingSequenceId = message.sequenceId;\r\n }\r\n\r\n public _disconnected(): void {\r\n this._reconnectInProgress = true;\r\n this._waitForSequenceMessage = true;\r\n }\r\n\r\n public async _resend(): Promise<void> {\r\n const sequenceId = this._messages.length !== 0\r\n ? this._messages[0]._id\r\n : this._totalMessageCount + 1;\r\n await this._connection.send(this._protocol.writeMessage({ type: MessageType.Sequence, sequenceId }));\r\n\r\n // Get a local variable to the _messages, just in case messages are acked while resending\r\n // Which would slice the _messages array (which creates a new copy)\r\n const messages = this._messages;\r\n for (const element of messages) {\r\n await this._connection.send(element._message);\r\n }\r\n\r\n this._reconnectInProgress = false;\r\n }\r\n\r\n public _dispose(error?: Error): void {\r\n error ??= new Error(\"Unable to reconnect to server.\")\r\n\r\n // Unblock backpressure if any\r\n for (const element of this._messages) {\r\n element._rejector(error);\r\n }\r\n }\r\n\r\n private _isInvocationMessage(message: HubMessage): boolean {\r\n // There is no way to check if something implements an interface.\r\n // So we individually check the messages in a switch statement.\r\n // To make sure we don't miss any message types we rely on the compiler\r\n // seeing the function returns a value and it will do the\r\n // exhaustive check for us on the switch statement, since we don't use 'case default'\r\n switch (message.type) {\r\n case MessageType.Invocation:\r\n case MessageType.StreamItem:\r\n case MessageType.Completion:\r\n case MessageType.StreamInvocation:\r\n case MessageType.CancelInvocation:\r\n return true;\r\n case MessageType.Close:\r\n case MessageType.Sequence:\r\n case MessageType.Ping:\r\n case MessageType.Ack:\r\n return false;\r\n }\r\n }\r\n\r\n private _ackTimer(): void {\r\n if (this._ackTimerHandle === undefined) {\r\n this._ackTimerHandle = setTimeout(async () => {\r\n try {\r\n if (!this._reconnectInProgress) {\r\n await this._connection.send(this._protocol.writeMessage({ type: MessageType.Ack, sequenceId: this._latestReceivedSequenceId }))\r\n }\r\n // Ignore errors, that means the connection is closed and we don't care about the Ack message anymore.\r\n } catch { }\r\n\r\n clearTimeout(this._ackTimerHandle);\r\n this._ackTimerHandle = undefined;\r\n // 1 second delay so we don't spam Ack messages if there are many messages being received at once.\r\n }, 1000);\r\n }\r\n }\r\n}\r\n\r\nclass BufferedItem {\r\n constructor(message: string | ArrayBuffer, id: number, resolver: (value: void) => void, rejector: (value?: any) => void) {\r\n this._message = message;\r\n this._id = id;\r\n this._resolver = resolver;\r\n this._rejector = rejector;\r\n }\r\n\r\n _message: string | ArrayBuffer;\r\n _id: number;\r\n _resolver: (value: void) => void;\r\n _rejector: (value?: any) => void;\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HandshakeProtocol, HandshakeRequestMessage, HandshakeResponseMessage } from \"./HandshakeProtocol\";\r\nimport { IConnection } from \"./IConnection\";\r\nimport { AbortError } from \"./Errors\";\r\nimport { CancelInvocationMessage, CloseMessage, CompletionMessage, IHubProtocol, InvocationMessage, MessageType, StreamInvocationMessage, StreamItemMessage } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { IRetryPolicy } from \"./IRetryPolicy\";\r\nimport { IStreamResult } from \"./Stream\";\r\nimport { Subject } from \"./Subject\";\r\nimport { Arg, getErrorString, Platform } from \"./Utils\";\r\nimport { MessageBuffer } from \"./MessageBuffer\";\r\n\r\nconst DEFAULT_TIMEOUT_IN_MS: number = 30 * 1000;\r\nconst DEFAULT_PING_INTERVAL_IN_MS: number = 15 * 1000;\r\nconst DEFAULT_STATEFUL_RECONNECT_BUFFER_SIZE = 100_000;\r\n\r\n/** Describes the current state of the {@link HubConnection} to the server. */\r\nexport enum HubConnectionState {\r\n /** The hub connection is disconnected. */\r\n Disconnected = \"Disconnected\",\r\n /** The hub connection is connecting. */\r\n Connecting = \"Connecting\",\r\n /** The hub connection is connected. */\r\n Connected = \"Connected\",\r\n /** The hub connection is disconnecting. */\r\n Disconnecting = \"Disconnecting\",\r\n /** The hub connection is reconnecting. */\r\n Reconnecting = \"Reconnecting\",\r\n}\r\n\r\n/** Represents a connection to a SignalR Hub. */\r\nexport class HubConnection {\r\n private readonly _cachedPingMessage: string | ArrayBuffer;\r\n // Needs to not start with _ for tests\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private readonly connection: IConnection;\r\n private readonly _logger: ILogger;\r\n private readonly _reconnectPolicy?: IRetryPolicy;\r\n private readonly _statefulReconnectBufferSize: number;\r\n private _protocol: IHubProtocol;\r\n private _handshakeProtocol: HandshakeProtocol;\r\n private _callbacks: { [invocationId: string]: (invocationEvent: StreamItemMessage | CompletionMessage | null, error?: Error) => void };\r\n private _methods: { [name: string]: (((...args: any[]) => void) | ((...args: any[]) => any))[] };\r\n private _invocationId: number;\r\n private _messageBuffer?: MessageBuffer;\r\n\r\n private _closedCallbacks: ((error?: Error) => void)[];\r\n private _reconnectingCallbacks: ((error?: Error) => void)[];\r\n private _reconnectedCallbacks: ((connectionId?: string) => void)[];\r\n\r\n private _receivedHandshakeResponse: boolean;\r\n private _handshakeResolver!: (value?: PromiseLike<{}>) => void;\r\n private _handshakeRejecter!: (reason?: any) => void;\r\n private _stopDuringStartError?: Error;\r\n\r\n private _connectionState: HubConnectionState;\r\n // connectionStarted is tracked independently from connectionState, so we can check if the\r\n // connection ever did successfully transition from connecting to connected before disconnecting.\r\n private _connectionStarted: boolean;\r\n private _startPromise?: Promise<void>;\r\n private _stopPromise?: Promise<void>;\r\n private _nextKeepAlive: number = 0;\r\n\r\n // The type of these a) doesn't matter and b) varies when building in browser and node contexts\r\n // Since we're building the WebPack bundle directly from the TypeScript, this matters (previously\r\n // we built the bundle from the compiled JavaScript).\r\n private _reconnectDelayHandle?: any;\r\n private _timeoutHandle?: any;\r\n private _pingServerHandle?: any;\r\n\r\n private _freezeEventListener = () =>\r\n {\r\n this._logger.log(LogLevel.Warning, \"The page is being frozen, this will likely lead to the connection being closed and messages being lost. For more information see the docs at https://learn.microsoft.com/aspnet/core/signalr/javascript-client#bsleep\");\r\n };\r\n\r\n /** The server timeout in milliseconds.\r\n *\r\n * If this timeout elapses without receiving any messages from the server, the connection will be terminated with an error.\r\n * The default timeout value is 30,000 milliseconds (30 seconds).\r\n */\r\n public serverTimeoutInMilliseconds: number;\r\n\r\n /** Default interval at which to ping the server.\r\n *\r\n * The default value is 15,000 milliseconds (15 seconds).\r\n * Allows the server to detect hard disconnects (like when a client unplugs their computer).\r\n * The ping will happen at most as often as the server pings.\r\n * If the server pings every 5 seconds, a value lower than 5 will ping every 5 seconds.\r\n */\r\n public keepAliveIntervalInMilliseconds: number;\r\n\r\n /** @internal */\r\n // Using a public static factory method means we can have a private constructor and an _internal_\r\n // create method that can be used by HubConnectionBuilder. An \"internal\" constructor would just\r\n // be stripped away and the '.d.ts' file would have no constructor, which is interpreted as a\r\n // public parameter-less constructor.\r\n public static create(\r\n connection: IConnection,\r\n logger: ILogger,\r\n protocol: IHubProtocol,\r\n reconnectPolicy?: IRetryPolicy,\r\n serverTimeoutInMilliseconds?: number,\r\n keepAliveIntervalInMilliseconds?: number,\r\n statefulReconnectBufferSize?: number): HubConnection {\r\n return new HubConnection(connection, logger, protocol, reconnectPolicy,\r\n serverTimeoutInMilliseconds, keepAliveIntervalInMilliseconds, statefulReconnectBufferSize);\r\n }\r\n\r\n private constructor(\r\n connection: IConnection,\r\n logger: ILogger,\r\n protocol: IHubProtocol,\r\n reconnectPolicy?: IRetryPolicy,\r\n serverTimeoutInMilliseconds?: number,\r\n keepAliveIntervalInMilliseconds?: number,\r\n statefulReconnectBufferSize?: number) {\r\n Arg.isRequired(connection, \"connection\");\r\n Arg.isRequired(logger, \"logger\");\r\n Arg.isRequired(protocol, \"protocol\");\r\n\r\n this.serverTimeoutInMilliseconds = serverTimeoutInMilliseconds ?? DEFAULT_TIMEOUT_IN_MS;\r\n this.keepAliveIntervalInMilliseconds = keepAliveIntervalInMilliseconds ?? DEFAULT_PING_INTERVAL_IN_MS;\r\n\r\n this._statefulReconnectBufferSize = statefulReconnectBufferSize ?? DEFAULT_STATEFUL_RECONNECT_BUFFER_SIZE;\r\n\r\n this._logger = logger;\r\n this._protocol = protocol;\r\n this.connection = connection;\r\n this._reconnectPolicy = reconnectPolicy;\r\n this._handshakeProtocol = new HandshakeProtocol();\r\n\r\n this.connection.onreceive = (data: any) => this._processIncomingData(data);\r\n this.connection.onclose = (error?: Error) => this._connectionClosed(error);\r\n\r\n this._callbacks = {};\r\n this._methods = {};\r\n this._closedCallbacks = [];\r\n this._reconnectingCallbacks = [];\r\n this._reconnectedCallbacks = [];\r\n this._invocationId = 0;\r\n this._receivedHandshakeResponse = false;\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._connectionStarted = false;\r\n\r\n this._cachedPingMessage = this._protocol.writeMessage({ type: MessageType.Ping });\r\n }\r\n\r\n /** Indicates the state of the {@link HubConnection} to the server. */\r\n get state(): HubConnectionState {\r\n return this._connectionState;\r\n }\r\n\r\n /** Represents the connection id of the {@link HubConnection} on the server. The connection id will be null when the connection is either\r\n * in the disconnected state or if the negotiation step was skipped.\r\n */\r\n get connectionId(): string | null {\r\n return this.connection ? (this.connection.connectionId || null) : null;\r\n }\r\n\r\n /** Indicates the url of the {@link HubConnection} to the server. */\r\n get baseUrl(): string {\r\n return this.connection.baseUrl || \"\";\r\n }\r\n\r\n /**\r\n * Sets a new url for the HubConnection. Note that the url can only be changed when the connection is in either the Disconnected or\r\n * Reconnecting states.\r\n * @param {string} url The url to connect to.\r\n */\r\n set baseUrl(url: string) {\r\n if (this._connectionState !== HubConnectionState.Disconnected && this._connectionState !== HubConnectionState.Reconnecting) {\r\n throw new Error(\"The HubConnection must be in the Disconnected or Reconnecting state to change the url.\");\r\n }\r\n\r\n if (!url) {\r\n throw new Error(\"The HubConnection url must be a valid url.\");\r\n }\r\n\r\n this.connection.baseUrl = url;\r\n }\r\n\r\n /** Starts the connection.\r\n *\r\n * @returns {Promise<void>} A Promise that resolves when the connection has been successfully established, or rejects with an error.\r\n */\r\n public start(): Promise<void> {\r\n this._startPromise = this._startWithStateTransitions();\r\n return this._startPromise;\r\n }\r\n\r\n private async _startWithStateTransitions(): Promise<void> {\r\n if (this._connectionState !== HubConnectionState.Disconnected) {\r\n return Promise.reject(new Error(\"Cannot start a HubConnection that is not in the 'Disconnected' state.\"));\r\n }\r\n\r\n this._connectionState = HubConnectionState.Connecting;\r\n this._logger.log(LogLevel.Debug, \"Starting HubConnection.\");\r\n\r\n try {\r\n await this._startInternal();\r\n\r\n if (Platform.isBrowser) {\r\n // Log when the browser freezes the tab so users know why their connection unexpectedly stopped working\r\n window.document.addEventListener(\"freeze\", this._freezeEventListener);\r\n }\r\n\r\n this._connectionState = HubConnectionState.Connected;\r\n this._connectionStarted = true;\r\n this._logger.log(LogLevel.Debug, \"HubConnection connected successfully.\");\r\n } catch (e) {\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._logger.log(LogLevel.Debug, `HubConnection failed to start successfully because of error '${e}'.`);\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n private async _startInternal() {\r\n this._stopDuringStartError = undefined;\r\n this._receivedHandshakeResponse = false;\r\n // Set up the promise before any connection is (re)started otherwise it could race with received messages\r\n const handshakePromise = new Promise((resolve, reject) => {\r\n this._handshakeResolver = resolve;\r\n this._handshakeRejecter = reject;\r\n });\r\n\r\n await this.connection.start(this._protocol.transferFormat);\r\n\r\n try {\r\n let version = this._protocol.version;\r\n if (!this.connection.features.reconnect) {\r\n // Stateful Reconnect starts with HubProtocol version 2, newer clients connecting to older servers will fail to connect due to\r\n // the handshake only supporting version 1, so we will try to send version 1 during the handshake to keep old servers working.\r\n version = 1;\r\n }\r\n\r\n const handshakeRequest: HandshakeRequestMessage = {\r\n protocol: this._protocol.name,\r\n version,\r\n };\r\n\r\n this._logger.log(LogLevel.Debug, \"Sending handshake request.\");\r\n\r\n await this._sendMessage(this._handshakeProtocol.writeHandshakeRequest(handshakeRequest));\r\n\r\n this._logger.log(LogLevel.Information, `Using HubProtocol '${this._protocol.name}'.`);\r\n\r\n // defensively cleanup timeout in case we receive a message from the server before we finish start\r\n this._cleanupTimeout();\r\n this._resetTimeoutPeriod();\r\n this._resetKeepAliveInterval();\r\n\r\n await handshakePromise;\r\n\r\n // It's important to check the stopDuringStartError instead of just relying on the handshakePromise\r\n // being rejected on close, because this continuation can run after both the handshake completed successfully\r\n // and the connection was closed.\r\n if (this._stopDuringStartError) {\r\n // It's important to throw instead of returning a rejected promise, because we don't want to allow any state\r\n // transitions to occur between now and the calling code observing the exceptions. Returning a rejected promise\r\n // will cause the calling continuation to get scheduled to run later.\r\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\r\n throw this._stopDuringStartError;\r\n }\r\n\r\n const useStatefulReconnect = this.connection.features.reconnect || false;\r\n if (useStatefulReconnect) {\r\n this._messageBuffer = new MessageBuffer(this._protocol, this.connection, this._statefulReconnectBufferSize);\r\n this.connection.features.disconnected = this._messageBuffer._disconnected.bind(this._messageBuffer);\r\n this.connection.features.resend = () => {\r\n if (this._messageBuffer) {\r\n return this._messageBuffer._resend();\r\n }\r\n }\r\n }\r\n\r\n if (!this.connection.features.inherentKeepAlive) {\r\n await this._sendMessage(this._cachedPingMessage);\r\n }\r\n } catch (e) {\r\n this._logger.log(LogLevel.Debug, `Hub handshake failed with error '${e}' during start(). Stopping HubConnection.`);\r\n\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n\r\n // HttpConnection.stop() should not complete until after the onclose callback is invoked.\r\n // This will transition the HubConnection to the disconnected state before HttpConnection.stop() completes.\r\n await this.connection.stop(e);\r\n throw e;\r\n }\r\n }\r\n\r\n /** Stops the connection.\r\n *\r\n * @returns {Promise<void>} A Promise that resolves when the connection has been successfully terminated, or rejects with an error.\r\n */\r\n public async stop(): Promise<void> {\r\n // Capture the start promise before the connection might be restarted in an onclose callback.\r\n const startPromise = this._startPromise;\r\n this.connection.features.reconnect = false;\r\n\r\n this._stopPromise = this._stopInternal();\r\n await this._stopPromise;\r\n\r\n try {\r\n // Awaiting undefined continues immediately\r\n await startPromise;\r\n } catch (e) {\r\n // This exception is returned to the user as a rejected Promise from the start method.\r\n }\r\n }\r\n\r\n private _stopInternal(error?: Error): Promise<void> {\r\n if (this._connectionState === HubConnectionState.Disconnected) {\r\n this._logger.log(LogLevel.Debug, `Call to HubConnection.stop(${error}) ignored because it is already in the disconnected state.`);\r\n return Promise.resolve();\r\n }\r\n\r\n if (this._connectionState === HubConnectionState.Disconnecting) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnecting state.`);\r\n return this._stopPromise!;\r\n }\r\n\r\n const state = this._connectionState;\r\n this._connectionState = HubConnectionState.Disconnecting;\r\n\r\n this._logger.log(LogLevel.Debug, \"Stopping HubConnection.\");\r\n\r\n if (this._reconnectDelayHandle) {\r\n // We're in a reconnect delay which means the underlying connection is currently already stopped.\r\n // Just clear the handle to stop the reconnect loop (which no one is waiting on thankfully) and\r\n // fire the onclose callbacks.\r\n this._logger.log(LogLevel.Debug, \"Connection stopped during reconnect delay. Done reconnecting.\");\r\n\r\n clearTimeout(this._reconnectDelayHandle);\r\n this._reconnectDelayHandle = undefined;\r\n\r\n this._completeClose();\r\n return Promise.resolve();\r\n }\r\n\r\n if (state === HubConnectionState.Connected) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._sendCloseMessage();\r\n }\r\n\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n this._stopDuringStartError = error || new AbortError(\"The connection was stopped before the hub handshake could complete.\");\r\n\r\n // HttpConnection.stop() should not complete until after either HttpConnection.start() fails\r\n // or the onclose callback is invoked. The onclose callback will transition the HubConnection\r\n // to the disconnected state if need be before HttpConnection.stop() completes.\r\n return this.connection.stop(error);\r\n }\r\n\r\n private async _sendCloseMessage() {\r\n try {\r\n await this._sendWithProtocol(this._createCloseMessage());\r\n } catch {\r\n // Ignore, this is a best effort attempt to let the server know the client closed gracefully.\r\n }\r\n }\r\n\r\n /** Invokes a streaming hub method on the server using the specified name and arguments.\r\n *\r\n * @typeparam T The type of the items returned by the server.\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {IStreamResult<T>} An object that yields results from the server as they are received.\r\n */\r\n public stream<T = any>(methodName: string, ...args: any[]): IStreamResult<T> {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const invocationDescriptor = this._createStreamInvocation(methodName, args, streamIds);\r\n\r\n // eslint-disable-next-line prefer-const\r\n let promiseQueue: Promise<void>;\r\n\r\n const subject = new Subject<T>();\r\n subject.cancelCallback = () => {\r\n const cancelInvocation: CancelInvocationMessage = this._createCancelInvocation(invocationDescriptor.invocationId);\r\n\r\n delete this._callbacks[invocationDescriptor.invocationId];\r\n\r\n return promiseQueue.then(() => {\r\n return this._sendWithProtocol(cancelInvocation);\r\n });\r\n };\r\n\r\n this._callbacks[invocationDescriptor.invocationId] = (invocationEvent: CompletionMessage | StreamItemMessage | null, error?: Error) => {\r\n if (error) {\r\n subject.error(error);\r\n return;\r\n } else if (invocationEvent) {\r\n // invocationEvent will not be null when an error is not passed to the callback\r\n if (invocationEvent.type === MessageType.Completion) {\r\n if (invocationEvent.error) {\r\n subject.error(new Error(invocationEvent.error));\r\n } else {\r\n subject.complete();\r\n }\r\n } else {\r\n subject.next((invocationEvent.item) as T);\r\n }\r\n }\r\n };\r\n\r\n promiseQueue = this._sendWithProtocol(invocationDescriptor)\r\n .catch((e) => {\r\n subject.error(e);\r\n delete this._callbacks[invocationDescriptor.invocationId];\r\n });\r\n\r\n this._launchStreams(streams, promiseQueue);\r\n\r\n return subject;\r\n }\r\n\r\n private _sendMessage(message: any) {\r\n this._resetKeepAliveInterval();\r\n return this.connection.send(message);\r\n }\r\n\r\n /**\r\n * Sends a js object to the server.\r\n * @param message The js object to serialize and send.\r\n */\r\n private _sendWithProtocol(message: any) {\r\n if (this._messageBuffer) {\r\n return this._messageBuffer._send(message);\r\n } else {\r\n return this._sendMessage(this._protocol.writeMessage(message));\r\n }\r\n }\r\n\r\n /** Invokes a hub method on the server using the specified name and arguments. Does not wait for a response from the receiver.\r\n *\r\n * The Promise returned by this method resolves when the client has sent the invocation to the server. The server may still\r\n * be processing the invocation.\r\n *\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {Promise<void>} A Promise that resolves when the invocation has been successfully sent, or rejects with an error.\r\n */\r\n public send(methodName: string, ...args: any[]): Promise<void> {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const sendPromise = this._sendWithProtocol(this._createInvocation(methodName, args, true, streamIds));\r\n\r\n this._launchStreams(streams, sendPromise);\r\n\r\n return sendPromise;\r\n }\r\n\r\n /** Invokes a hub method on the server using the specified name and arguments.\r\n *\r\n * The Promise returned by this method resolves when the server indicates it has finished invoking the method. When the promise\r\n * resolves, the server has finished invoking the method. If the server method returns a result, it is produced as the result of\r\n * resolving the Promise.\r\n *\r\n * @typeparam T The expected return type.\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {Promise<T>} A Promise that resolves with the result of the server method (if any), or rejects with an error.\r\n */\r\n public invoke<T = any>(methodName: string, ...args: any[]): Promise<T> {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const invocationDescriptor = this._createInvocation(methodName, args, false, streamIds);\r\n\r\n const p = new Promise<any>((resolve, reject) => {\r\n // invocationId will always have a value for a non-blocking invocation\r\n this._callbacks[invocationDescriptor.invocationId!] = (invocationEvent: StreamItemMessage | CompletionMessage | null, error?: Error) => {\r\n if (error) {\r\n reject(error);\r\n return;\r\n } else if (invocationEvent) {\r\n // invocationEvent will not be null when an error is not passed to the callback\r\n if (invocationEvent.type === MessageType.Completion) {\r\n if (invocationEvent.error) {\r\n reject(new Error(invocationEvent.error));\r\n } else {\r\n resolve(invocationEvent.result);\r\n }\r\n } else {\r\n reject(new Error(`Unexpected message type: ${invocationEvent.type}`));\r\n }\r\n }\r\n };\r\n\r\n const promiseQueue = this._sendWithProtocol(invocationDescriptor)\r\n .catch((e) => {\r\n reject(e);\r\n // invocationId will always have a value for a non-blocking invocation\r\n delete this._callbacks[invocationDescriptor.invocationId!];\r\n });\r\n\r\n this._launchStreams(streams, promiseQueue);\r\n });\r\n\r\n return p;\r\n }\r\n\r\n /** Registers a handler that will be invoked when the hub method with the specified method name is invoked.\r\n *\r\n * @param {string} methodName The name of the hub method to define.\r\n * @param {Function} newMethod The handler that will be raised when the hub method is invoked.\r\n */\r\n public on(methodName: string, newMethod: (...args: any[]) => any): void\r\n public on(methodName: string, newMethod: (...args: any[]) => void): void {\r\n if (!methodName || !newMethod) {\r\n return;\r\n }\r\n\r\n methodName = methodName.toLowerCase();\r\n if (!this._methods[methodName]) {\r\n this._methods[methodName] = [];\r\n }\r\n\r\n // Preventing adding the same handler multiple times.\r\n if (this._methods[methodName].indexOf(newMethod) !== -1) {\r\n return;\r\n }\r\n\r\n this._methods[methodName].push(newMethod);\r\n }\r\n\r\n /** Removes all handlers for the specified hub method.\r\n *\r\n * @param {string} methodName The name of the method to remove handlers for.\r\n */\r\n public off(methodName: string): void;\r\n\r\n /** Removes the specified handler for the specified hub method.\r\n *\r\n * You must pass the exact same Function instance as was previously passed to {@link @microsoft/signalr.HubConnection.on}. Passing a different instance (even if the function\r\n * body is the same) will not remove the handler.\r\n *\r\n * @param {string} methodName The name of the method to remove handlers for.\r\n * @param {Function} method The handler to remove. This must be the same Function instance as the one passed to {@link @microsoft/signalr.HubConnection.on}.\r\n */\r\n public off(methodName: string, method: (...args: any[]) => void): void;\r\n public off(methodName: string, method?: (...args: any[]) => void): void {\r\n if (!methodName) {\r\n return;\r\n }\r\n\r\n methodName = methodName.toLowerCase();\r\n const handlers = this._methods[methodName];\r\n if (!handlers) {\r\n return;\r\n }\r\n if (method) {\r\n const removeIdx = handlers.indexOf(method);\r\n if (removeIdx !== -1) {\r\n handlers.splice(removeIdx, 1);\r\n if (handlers.length === 0) {\r\n delete this._methods[methodName];\r\n }\r\n }\r\n } else {\r\n delete this._methods[methodName];\r\n }\r\n\r\n }\r\n\r\n /** Registers a handler that will be invoked when the connection is closed.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection is closed. Optionally receives a single argument containing the error that caused the connection to close (if any).\r\n */\r\n public onclose(callback: (error?: Error) => void): void {\r\n if (callback) {\r\n this._closedCallbacks.push(callback);\r\n }\r\n }\r\n\r\n /** Registers a handler that will be invoked when the connection starts reconnecting.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection starts reconnecting. Optionally receives a single argument containing the error that caused the connection to start reconnecting (if any).\r\n */\r\n public onreconnecting(callback: (error?: Error) => void): void {\r\n if (callback) {\r\n this._reconnectingCallbacks.push(callback);\r\n }\r\n }\r\n\r\n /** Registers a handler that will be invoked when the connection successfully reconnects.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection successfully reconnects.\r\n */\r\n public onreconnected(callback: (connectionId?: string) => void): void {\r\n if (callback) {\r\n this._reconnectedCallbacks.push(callback);\r\n }\r\n }\r\n\r\n private _processIncomingData(data: any) {\r\n this._cleanupTimeout();\r\n\r\n if (!this._receivedHandshakeResponse) {\r\n data = this._processHandshakeResponse(data);\r\n this._receivedHandshakeResponse = true;\r\n }\r\n\r\n // Data may have all been read when processing handshake response\r\n if (data) {\r\n // Parse the messages\r\n const messages = this._protocol.parseMessages(data, this._logger);\r\n\r\n for (const message of messages) {\r\n if (this._messageBuffer && !this._messageBuffer._shouldProcessMessage(message)) {\r\n // Don't process the message, we are either waiting for a SequenceMessage or received a duplicate message\r\n continue;\r\n }\r\n\r\n switch (message.type) {\r\n case MessageType.Invocation:\r\n this._invokeClientMethod(message)\r\n .catch((e) => {\r\n this._logger.log(LogLevel.Error, `Invoke client method threw error: ${getErrorString(e)}`)\r\n });\r\n break;\r\n case MessageType.StreamItem:\r\n case MessageType.Completion: {\r\n const callback = this._callbacks[message.invocationId];\r\n if (callback) {\r\n if (message.type === MessageType.Completion) {\r\n delete this._callbacks[message.invocationId];\r\n }\r\n try {\r\n callback(message);\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `Stream callback threw error: ${getErrorString(e)}`);\r\n }\r\n }\r\n break;\r\n }\r\n case MessageType.Ping:\r\n // Don't care about pings\r\n break;\r\n case MessageType.Close: {\r\n this._logger.log(LogLevel.Information, \"Close message received from server.\");\r\n\r\n const error = message.error ? new Error(\"Server returned an error on close: \" + message.error) : undefined;\r\n\r\n if (message.allowReconnect === true) {\r\n // It feels wrong not to await connection.stop() here, but processIncomingData is called as part of an onreceive callback which is not async,\r\n // this is already the behavior for serverTimeout(), and HttpConnection.Stop() should catch and log all possible exceptions.\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.connection.stop(error);\r\n } else {\r\n // We cannot await stopInternal() here, but subsequent calls to stop() will await this if stopInternal() is still ongoing.\r\n this._stopPromise = this._stopInternal(error);\r\n }\r\n\r\n break;\r\n }\r\n case MessageType.Ack:\r\n if (this._messageBuffer) {\r\n this._messageBuffer._ack(message);\r\n }\r\n break;\r\n case MessageType.Sequence:\r\n if (this._messageBuffer) {\r\n this._messageBuffer._resetSequence(message);\r\n }\r\n break;\r\n default:\r\n this._logger.log(LogLevel.Warning, `Invalid message type: ${message.type}.`);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this._resetTimeoutPeriod();\r\n }\r\n\r\n private _processHandshakeResponse(data: any): any {\r\n let responseMessage: HandshakeResponseMessage;\r\n let remainingData: any;\r\n\r\n try {\r\n [remainingData, responseMessage] = this._handshakeProtocol.parseHandshakeResponse(data);\r\n } catch (e) {\r\n const message = \"Error parsing handshake response: \" + e;\r\n this._logger.log(LogLevel.Error, message);\r\n\r\n const error = new Error(message);\r\n this._handshakeRejecter(error);\r\n throw error;\r\n }\r\n if (responseMessage.error) {\r\n const message = \"Server returned handshake error: \" + responseMessage.error;\r\n this._logger.log(LogLevel.Error, message);\r\n\r\n const error = new Error(message);\r\n this._handshakeRejecter(error);\r\n throw error;\r\n } else {\r\n this._logger.log(LogLevel.Debug, \"Server handshake complete.\");\r\n }\r\n\r\n this._handshakeResolver();\r\n return remainingData;\r\n }\r\n\r\n private _resetKeepAliveInterval() {\r\n if (this.connection.features.inherentKeepAlive) {\r\n return;\r\n }\r\n\r\n // Set the time we want the next keep alive to be sent\r\n // Timer will be setup on next message receive\r\n this._nextKeepAlive = new Date().getTime() + this.keepAliveIntervalInMilliseconds;\r\n\r\n this._cleanupPingTimer();\r\n }\r\n\r\n private _resetTimeoutPeriod() {\r\n if (!this.connection.features || !this.connection.features.inherentKeepAlive) {\r\n // Set the timeout timer\r\n this._timeoutHandle = setTimeout(() => this.serverTimeout(), this.serverTimeoutInMilliseconds);\r\n\r\n // Set keepAlive timer if there isn't one\r\n if (this._pingServerHandle === undefined)\r\n {\r\n let nextPing = this._nextKeepAlive - new Date().getTime();\r\n if (nextPing < 0) {\r\n nextPing = 0;\r\n }\r\n\r\n // The timer needs to be set from a networking callback to avoid Chrome timer throttling from causing timers to run once a minute\r\n this._pingServerHandle = setTimeout(async () => {\r\n if (this._connectionState === HubConnectionState.Connected) {\r\n try {\r\n await this._sendMessage(this._cachedPingMessage);\r\n } catch {\r\n // We don't care about the error. It should be seen elsewhere in the client.\r\n // The connection is probably in a bad or closed state now, cleanup the timer so it stops triggering\r\n this._cleanupPingTimer();\r\n }\r\n }\r\n }, nextPing);\r\n }\r\n }\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private serverTimeout() {\r\n // The server hasn't talked to us in a while. It doesn't like us anymore ... :(\r\n // Terminate the connection, but we don't need to wait on the promise. This could trigger reconnecting.\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.connection.stop(new Error(\"Server timeout elapsed without receiving a message from the server.\"));\r\n }\r\n\r\n private async _invokeClientMethod(invocationMessage: InvocationMessage) {\r\n const methodName = invocationMessage.target.toLowerCase();\r\n const methods = this._methods[methodName];\r\n if (!methods) {\r\n this._logger.log(LogLevel.Warning, `No client method with the name '${methodName}' found.`);\r\n\r\n // No handlers provided by client but the server is expecting a response still, so we send an error\r\n if (invocationMessage.invocationId) {\r\n this._logger.log(LogLevel.Warning, `No result given for '${methodName}' method and invocation ID '${invocationMessage.invocationId}'.`);\r\n await this._sendWithProtocol(this._createCompletionMessage(invocationMessage.invocationId, \"Client didn't provide a result.\", null));\r\n }\r\n return;\r\n }\r\n\r\n // Avoid issues with handlers removing themselves thus modifying the list while iterating through it\r\n const methodsCopy = methods.slice();\r\n\r\n // Server expects a response\r\n const expectsResponse = invocationMessage.invocationId ? true : false;\r\n // We preserve the last result or exception but still call all handlers\r\n let res;\r\n let exception;\r\n let completionMessage;\r\n for (const m of methodsCopy) {\r\n try {\r\n const prevRes = res;\r\n res = await m.apply(this, invocationMessage.arguments);\r\n if (expectsResponse && res && prevRes) {\r\n this._logger.log(LogLevel.Error, `Multiple results provided for '${methodName}'. Sending error to server.`);\r\n completionMessage = this._createCompletionMessage(invocationMessage.invocationId!, `Client provided multiple results.`, null);\r\n }\r\n // Ignore exception if we got a result after, the exception will be logged\r\n exception = undefined;\r\n } catch (e) {\r\n exception = e;\r\n this._logger.log(LogLevel.Error, `A callback for the method '${methodName}' threw error '${e}'.`);\r\n }\r\n }\r\n if (completionMessage) {\r\n await this._sendWithProtocol(completionMessage);\r\n } else if (expectsResponse) {\r\n // If there is an exception that means either no result was given or a handler after a result threw\r\n if (exception) {\r\n completionMessage = this._createCompletionMessage(invocationMessage.invocationId!, `${exception}`, null);\r\n } else if (res !== undefined) {\r\n completionMessage = this._createCompletionMessage(invocationMessage.invocationId!, null, res);\r\n } else {\r\n this._logger.log(LogLevel.Warning, `No result given for '${methodName}' method and invocation ID '${invocationMessage.invocationId}'.`);\r\n // Client didn't provide a result or throw from a handler, server expects a response so we send an error\r\n completionMessage = this._createCompletionMessage(invocationMessage.invocationId!, \"Client didn't provide a result.\", null);\r\n }\r\n await this._sendWithProtocol(completionMessage);\r\n } else {\r\n if (res) {\r\n this._logger.log(LogLevel.Error, `Result given for '${methodName}' method but server is not expecting a result.`);\r\n }\r\n }\r\n }\r\n\r\n private _connectionClosed(error?: Error) {\r\n this._logger.log(LogLevel.Debug, `HubConnection.connectionClosed(${error}) called while in state ${this._connectionState}.`);\r\n\r\n // Triggering this.handshakeRejecter is insufficient because it could already be resolved without the continuation having run yet.\r\n this._stopDuringStartError = this._stopDuringStartError || error || new AbortError(\"The underlying connection was closed before the hub handshake could complete.\");\r\n\r\n // If the handshake is in progress, start will be waiting for the handshake promise, so we complete it.\r\n // If it has already completed, this should just noop.\r\n if (this._handshakeResolver) {\r\n this._handshakeResolver();\r\n }\r\n\r\n this._cancelCallbacksWithError(error || new Error(\"Invocation canceled due to the underlying connection being closed.\"));\r\n\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n\r\n if (this._connectionState === HubConnectionState.Disconnecting) {\r\n this._completeClose(error);\r\n } else if (this._connectionState === HubConnectionState.Connected && this._reconnectPolicy) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._reconnect(error);\r\n } else if (this._connectionState === HubConnectionState.Connected) {\r\n this._completeClose(error);\r\n }\r\n\r\n // If none of the above if conditions were true were called the HubConnection must be in either:\r\n // 1. The Connecting state in which case the handshakeResolver will complete it and stopDuringStartError will fail it.\r\n // 2. The Reconnecting state in which case the handshakeResolver will complete it and stopDuringStartError will fail the current reconnect attempt\r\n // and potentially continue the reconnect() loop.\r\n // 3. The Disconnected state in which case we're already done.\r\n }\r\n\r\n private _completeClose(error?: Error) {\r\n if (this._connectionStarted) {\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._connectionStarted = false;\r\n if (this._messageBuffer) {\r\n this._messageBuffer._dispose(error ?? new Error(\"Connection closed.\"));\r\n this._messageBuffer = undefined;\r\n }\r\n\r\n if (Platform.isBrowser) {\r\n window.document.removeEventListener(\"freeze\", this._freezeEventListener);\r\n }\r\n\r\n try {\r\n this._closedCallbacks.forEach((c) => c.apply(this, [error]));\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `An onclose callback called with error '${error}' threw error '${e}'.`);\r\n }\r\n }\r\n }\r\n\r\n private async _reconnect(error?: Error) {\r\n const reconnectStartTime = Date.now();\r\n let previousReconnectAttempts = 0;\r\n let retryError = error !== undefined ? error : new Error(\"Attempting to reconnect due to a unknown error.\");\r\n\r\n let nextRetryDelay = this._getNextRetryDelay(previousReconnectAttempts++, 0, retryError);\r\n\r\n if (nextRetryDelay === null) {\r\n this._logger.log(LogLevel.Debug, \"Connection not reconnecting because the IRetryPolicy returned null on the first reconnect attempt.\");\r\n this._completeClose(error);\r\n return;\r\n }\r\n\r\n this._connectionState = HubConnectionState.Reconnecting;\r\n\r\n if (error) {\r\n this._logger.log(LogLevel.Information, `Connection reconnecting because of error '${error}'.`);\r\n } else {\r\n this._logger.log(LogLevel.Information, \"Connection reconnecting.\");\r\n }\r\n\r\n if (this._reconnectingCallbacks.length !== 0) {\r\n try {\r\n this._reconnectingCallbacks.forEach((c) => c.apply(this, [error]));\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `An onreconnecting callback called with error '${error}' threw error '${e}'.`);\r\n }\r\n\r\n // Exit early if an onreconnecting callback called connection.stop().\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, \"Connection left the reconnecting state in onreconnecting callback. Done reconnecting.\");\r\n return;\r\n }\r\n }\r\n\r\n while (nextRetryDelay !== null) {\r\n this._logger.log(LogLevel.Information, `Reconnect attempt number ${previousReconnectAttempts} will start in ${nextRetryDelay} ms.`);\r\n\r\n await new Promise((resolve) => {\r\n this._reconnectDelayHandle = setTimeout(resolve, nextRetryDelay!);\r\n });\r\n this._reconnectDelayHandle = undefined;\r\n\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, \"Connection left the reconnecting state during reconnect delay. Done reconnecting.\");\r\n return;\r\n }\r\n\r\n try {\r\n await this._startInternal();\r\n\r\n this._connectionState = HubConnectionState.Connected;\r\n this._logger.log(LogLevel.Information, \"HubConnection reconnected successfully.\");\r\n\r\n if (this._reconnectedCallbacks.length !== 0) {\r\n try {\r\n this._reconnectedCallbacks.forEach((c) => c.apply(this, [this.connection.connectionId]));\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `An onreconnected callback called with connectionId '${this.connection.connectionId}; threw error '${e}'.`);\r\n }\r\n }\r\n\r\n return;\r\n } catch (e) {\r\n this._logger.log(LogLevel.Information, `Reconnect attempt failed because of error '${e}'.`);\r\n\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, `Connection moved to the '${this._connectionState}' from the reconnecting state during reconnect attempt. Done reconnecting.`);\r\n // The TypeScript compiler thinks that connectionState must be Connected here. The TypeScript compiler is wrong.\r\n if (this._connectionState as any === HubConnectionState.Disconnecting) {\r\n this._completeClose();\r\n }\r\n return;\r\n }\r\n\r\n retryError = e instanceof Error ? e : new Error((e as any).toString());\r\n nextRetryDelay = this._getNextRetryDelay(previousReconnectAttempts++, Date.now() - reconnectStartTime, retryError);\r\n }\r\n }\r\n\r\n this._logger.log(LogLevel.Information, `Reconnect retries have been exhausted after ${Date.now() - reconnectStartTime} ms and ${previousReconnectAttempts} failed attempts. Connection disconnecting.`);\r\n\r\n this._completeClose();\r\n }\r\n\r\n private _getNextRetryDelay(previousRetryCount: number, elapsedMilliseconds: number, retryReason: Error) {\r\n try {\r\n return this._reconnectPolicy!.nextRetryDelayInMilliseconds({\r\n elapsedMilliseconds,\r\n previousRetryCount,\r\n retryReason,\r\n });\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `IRetryPolicy.nextRetryDelayInMilliseconds(${previousRetryCount}, ${elapsedMilliseconds}) threw error '${e}'.`);\r\n return null;\r\n }\r\n }\r\n\r\n private _cancelCallbacksWithError(error: Error) {\r\n const callbacks = this._callbacks;\r\n this._callbacks = {};\r\n\r\n Object.keys(callbacks)\r\n .forEach((key) => {\r\n const callback = callbacks[key];\r\n try {\r\n callback(null, error);\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `Stream 'error' callback called with '${error}' threw error: ${getErrorString(e)}`);\r\n }\r\n });\r\n }\r\n\r\n private _cleanupPingTimer(): void {\r\n if (this._pingServerHandle) {\r\n clearTimeout(this._pingServerHandle);\r\n this._pingServerHandle = undefined;\r\n }\r\n }\r\n\r\n private _cleanupTimeout(): void {\r\n if (this._timeoutHandle) {\r\n clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n private _createInvocation(methodName: string, args: any[], nonblocking: boolean, streamIds: string[]): InvocationMessage {\r\n if (nonblocking) {\r\n if (streamIds.length !== 0) {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n streamIds,\r\n type: MessageType.Invocation,\r\n };\r\n } else {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n } else {\r\n const invocationId = this._invocationId;\r\n this._invocationId++;\r\n\r\n if (streamIds.length !== 0) {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n streamIds,\r\n type: MessageType.Invocation,\r\n };\r\n } else {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n }\r\n }\r\n\r\n private _launchStreams(streams: IStreamResult<any>[], promiseQueue: Promise<void>): void {\r\n if (streams.length === 0) {\r\n return;\r\n }\r\n\r\n // Synchronize stream data so they arrive in-order on the server\r\n if (!promiseQueue) {\r\n promiseQueue = Promise.resolve();\r\n }\r\n\r\n // We want to iterate over the keys, since the keys are the stream ids\r\n // eslint-disable-next-line guard-for-in\r\n for (const streamId in streams) {\r\n streams[streamId].subscribe({\r\n complete: () => {\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createCompletionMessage(streamId)));\r\n },\r\n error: (err) => {\r\n let message: string;\r\n if (err instanceof Error) {\r\n message = err.message;\r\n } else if (err && err.toString) {\r\n message = err.toString();\r\n } else {\r\n message = \"Unknown error\";\r\n }\r\n\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createCompletionMessage(streamId, message)));\r\n },\r\n next: (item) => {\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createStreamItemMessage(streamId, item)));\r\n },\r\n });\r\n }\r\n }\r\n\r\n private _replaceStreamingParams(args: any[]): [IStreamResult<any>[], string[]] {\r\n const streams: IStreamResult<any>[] = [];\r\n const streamIds: string[] = [];\r\n for (let i = 0; i < args.length; i++) {\r\n const argument = args[i];\r\n if (this._isObservable(argument)) {\r\n const streamId = this._invocationId;\r\n this._invocationId++;\r\n // Store the stream for later use\r\n streams[streamId] = argument;\r\n streamIds.push(streamId.toString());\r\n\r\n // remove stream from args\r\n args.splice(i, 1);\r\n }\r\n }\r\n\r\n return [streams, streamIds];\r\n }\r\n\r\n private _isObservable(arg: any): arg is IStreamResult<any> {\r\n // This allows other stream implementations to just work (like rxjs)\r\n return arg && arg.subscribe && typeof arg.subscribe === \"function\";\r\n }\r\n\r\n private _createStreamInvocation(methodName: string, args: any[], streamIds: string[]): StreamInvocationMessage {\r\n const invocationId = this._invocationId;\r\n this._invocationId++;\r\n\r\n if (streamIds.length !== 0) {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n streamIds,\r\n type: MessageType.StreamInvocation,\r\n };\r\n } else {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n type: MessageType.StreamInvocation,\r\n };\r\n }\r\n }\r\n\r\n private _createCancelInvocation(id: string): CancelInvocationMessage {\r\n return {\r\n invocationId: id,\r\n type: MessageType.CancelInvocation,\r\n };\r\n }\r\n\r\n private _createStreamItemMessage(id: string, item: any): StreamItemMessage {\r\n return {\r\n invocationId: id,\r\n item,\r\n type: MessageType.StreamItem,\r\n };\r\n }\r\n\r\n private _createCompletionMessage(id: string, error?: any, result?: any): CompletionMessage {\r\n if (error) {\r\n return {\r\n error,\r\n invocationId: id,\r\n type: MessageType.Completion,\r\n };\r\n }\r\n\r\n return {\r\n invocationId: id,\r\n result,\r\n type: MessageType.Completion,\r\n };\r\n }\r\n\r\n private _createCloseMessage(): CloseMessage {\r\n return { type: MessageType.Close };\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { IRetryPolicy, RetryContext } from \"./IRetryPolicy\";\r\n\r\n// 0, 2, 10, 30 second delays before reconnect attempts.\r\nconst DEFAULT_RETRY_DELAYS_IN_MILLISECONDS = [0, 2000, 10000, 30000, null];\r\n\r\n/** @private */\r\nexport class DefaultReconnectPolicy implements IRetryPolicy {\r\n private readonly _retryDelays: (number | null)[];\r\n\r\n constructor(retryDelays?: number[]) {\r\n this._retryDelays = retryDelays !== undefined ? [...retryDelays, null] : DEFAULT_RETRY_DELAYS_IN_MILLISECONDS;\r\n }\r\n\r\n public nextRetryDelayInMilliseconds(retryContext: RetryContext): number | null {\r\n return this._retryDelays[retryContext.previousRetryCount];\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nexport abstract class HeaderNames {\r\n static readonly Authorization = \"Authorization\";\r\n static readonly Cookie = \"Cookie\";\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\n\r\n/** @private */\r\nexport class AccessTokenHttpClient extends HttpClient {\r\n private _innerClient: HttpClient;\r\n _accessToken: string | undefined;\r\n _accessTokenFactory: (() => string | Promise<string>) | undefined;\r\n\r\n constructor(innerClient: HttpClient, accessTokenFactory: (() => string | Promise<string>) | undefined) {\r\n super();\r\n\r\n this._innerClient = innerClient;\r\n this._accessTokenFactory = accessTokenFactory;\r\n }\r\n\r\n public async send(request: HttpRequest): Promise<HttpResponse> {\r\n let allowRetry = true;\r\n if (this._accessTokenFactory && (!this._accessToken || (request.url && request.url.indexOf(\"/negotiate?\") > 0))) {\r\n // don't retry if the request is a negotiate or if we just got a potentially new token from the access token factory\r\n allowRetry = false;\r\n this._accessToken = await this._accessTokenFactory();\r\n }\r\n this._setAuthorizationHeader(request);\r\n const response = await this._innerClient.send(request);\r\n\r\n if (allowRetry && response.statusCode === 401 && this._accessTokenFactory) {\r\n this._accessToken = await this._accessTokenFactory();\r\n this._setAuthorizationHeader(request);\r\n return await this._innerClient.send(request);\r\n }\r\n return response;\r\n }\r\n\r\n private _setAuthorizationHeader(request: HttpRequest) {\r\n if (!request.headers) {\r\n request.headers = {};\r\n }\r\n if (this._accessToken) {\r\n request.headers[HeaderNames.Authorization] = `Bearer ${this._accessToken}`\r\n }\r\n // don't remove the header if there isn't an access token factory, the user manually added the header in this case\r\n else if (this._accessTokenFactory) {\r\n if (request.headers[HeaderNames.Authorization]) {\r\n delete request.headers[HeaderNames.Authorization];\r\n }\r\n }\r\n }\r\n\r\n public getCookieString(url: string): string {\r\n return this._innerClient.getCookieString(url);\r\n }\r\n}", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// This will be treated as a bit flag in the future, so we keep it using power-of-two values.\r\n/** Specifies a specific HTTP transport type. */\r\nexport enum HttpTransportType {\r\n /** Specifies no transport preference. */\r\n None = 0,\r\n /** Specifies the WebSockets transport. */\r\n WebSockets = 1,\r\n /** Specifies the Server-Sent Events transport. */\r\n ServerSentEvents = 2,\r\n /** Specifies the Long Polling transport. */\r\n LongPolling = 4,\r\n}\r\n\r\n/** Specifies the transfer format for a connection. */\r\nexport enum TransferFormat {\r\n /** Specifies that only text data will be transmitted over the connection. */\r\n Text = 1,\r\n /** Specifies that binary data will be transmitted over the connection. */\r\n Binary = 2,\r\n}\r\n\r\n/** An abstraction over the behavior of transports. This is designed to support the framework and not intended for use by applications. */\r\nexport interface ITransport {\r\n connect(url: string, transferFormat: TransferFormat): Promise<void>;\r\n send(data: any): Promise<void>;\r\n stop(): Promise<void>;\r\n onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n onclose: ((error?: Error) => void) | null;\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// Rough polyfill of https://developer.mozilla.org/en-US/docs/Web/API/AbortController\r\n// We don't actually ever use the API being polyfilled, we always use the polyfill because\r\n// it's a very new API right now.\r\n\r\n// Not exported from index.\r\n/** @private */\r\nexport class AbortController implements AbortSignal {\r\n private _isAborted: boolean = false;\r\n public onabort: (() => void) | null = null;\r\n\r\n public abort(): void {\r\n if (!this._isAborted) {\r\n this._isAborted = true;\r\n if (this.onabort) {\r\n this.onabort();\r\n }\r\n }\r\n }\r\n\r\n get signal(): AbortSignal {\r\n return this;\r\n }\r\n\r\n get aborted(): boolean {\r\n return this._isAborted;\r\n }\r\n}\r\n\r\n/** Represents a signal that can be monitored to determine if a request has been aborted. */\r\nexport interface AbortSignal {\r\n /** Indicates if the request has been aborted. */\r\n aborted: boolean;\r\n /** Set this to a handler that will be invoked when the request is aborted. */\r\n onabort: (() => void) | null;\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AbortController } from \"./AbortController\";\r\nimport { HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpRequest } from \"./HttpClient\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { ITransport, TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, sendMessage } from \"./Utils\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\n\r\n// Not exported from 'index', this type is internal.\r\n/** @private */\r\nexport class LongPollingTransport implements ITransport {\r\n private readonly _httpClient: HttpClient;\r\n private readonly _logger: ILogger;\r\n private readonly _options: IHttpConnectionOptions;\r\n private readonly _pollAbort: AbortController;\r\n\r\n private _url?: string;\r\n private _running: boolean;\r\n private _receiving?: Promise<void>;\r\n private _closeError?: Error | unknown;\r\n\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((error?: Error | unknown) => void) | null;\r\n\r\n // This is an internal type, not exported from 'index' so this is really just internal.\r\n public get pollAborted(): boolean {\r\n return this._pollAbort.aborted;\r\n }\r\n\r\n constructor(httpClient: HttpClient, logger: ILogger, options: IHttpConnectionOptions) {\r\n this._httpClient = httpClient;\r\n this._logger = logger;\r\n this._pollAbort = new AbortController();\r\n this._options = options;\r\n\r\n this._running = false;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n\r\n public async connect(url: string, transferFormat: TransferFormat): Promise<void> {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n\r\n this._url = url;\r\n\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Connecting.\");\r\n\r\n // Allow binary format on Node and Browsers that support binary content (indicated by the presence of responseType property)\r\n if (transferFormat === TransferFormat.Binary &&\r\n (typeof XMLHttpRequest !== \"undefined\" && typeof new XMLHttpRequest().responseType !== \"string\")) {\r\n throw new Error(\"Binary protocols over XmlHttpRequest not implementing advanced features are not supported.\");\r\n }\r\n\r\n const [name, value] = getUserAgentHeader();\r\n const headers = { [name]: value, ...this._options.headers };\r\n\r\n const pollOptions: HttpRequest = {\r\n abortSignal: this._pollAbort.signal,\r\n headers,\r\n timeout: 100000,\r\n withCredentials: this._options.withCredentials,\r\n };\r\n\r\n if (transferFormat === TransferFormat.Binary) {\r\n pollOptions.responseType = \"arraybuffer\";\r\n }\r\n\r\n // Make initial long polling request\r\n // Server uses first long polling request to finish initializing connection and it returns without data\r\n const pollUrl = `${url}&_=${Date.now()}`;\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);\r\n const response = await this._httpClient.get(pollUrl, pollOptions);\r\n if (response.statusCode !== 200) {\r\n this._logger.log(LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);\r\n\r\n // Mark running as false so that the poll immediately ends and runs the close logic\r\n this._closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this._running = false;\r\n } else {\r\n this._running = true;\r\n }\r\n\r\n this._receiving = this._poll(this._url, pollOptions);\r\n }\r\n\r\n private async _poll(url: string, pollOptions: HttpRequest): Promise<void> {\r\n try {\r\n while (this._running) {\r\n try {\r\n const pollUrl = `${url}&_=${Date.now()}`;\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);\r\n const response = await this._httpClient.get(pollUrl, pollOptions);\r\n\r\n if (response.statusCode === 204) {\r\n this._logger.log(LogLevel.Information, \"(LongPolling transport) Poll terminated by server.\");\r\n\r\n this._running = false;\r\n } else if (response.statusCode !== 200) {\r\n this._logger.log(LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);\r\n\r\n // Unexpected status code\r\n this._closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this._running = false;\r\n } else {\r\n // Process the response\r\n if (response.content) {\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) data received. ${getDataDetail(response.content, this._options.logMessageContent!)}.`);\r\n if (this.onreceive) {\r\n this.onreceive(response.content);\r\n }\r\n } else {\r\n // This is another way timeout manifest.\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n }\r\n }\r\n } catch (e) {\r\n if (!this._running) {\r\n // Log but disregard errors that occur after stopping\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) Poll errored after shutdown: ${(e as any).message}`);\r\n } else {\r\n if (e instanceof TimeoutError) {\r\n // Ignore timeouts and reissue the poll.\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n } else {\r\n // Close the connection with the error as the result.\r\n this._closeError = e;\r\n this._running = false;\r\n }\r\n }\r\n }\r\n }\r\n } finally {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Polling complete.\");\r\n\r\n // We will reach here with pollAborted==false when the server returned a response causing the transport to stop.\r\n // If pollAborted==true then client initiated the stop and the stop method will raise the close event after DELETE is sent.\r\n if (!this.pollAborted) {\r\n this._raiseOnClose();\r\n }\r\n }\r\n }\r\n\r\n public async send(data: any): Promise<void> {\r\n if (!this._running) {\r\n return Promise.reject(new Error(\"Cannot send until the transport is connected\"));\r\n }\r\n return sendMessage(this._logger, \"LongPolling\", this._httpClient, this._url!, data, this._options);\r\n }\r\n\r\n public async stop(): Promise<void> {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Stopping polling.\");\r\n\r\n // Tell receiving loop to stop, abort any current request, and then wait for it to finish\r\n this._running = false;\r\n this._pollAbort.abort();\r\n\r\n try {\r\n await this._receiving;\r\n\r\n // Send DELETE to clean up long polling on the server\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) sending DELETE request to ${this._url}.`);\r\n\r\n const headers: {[k: string]: string} = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n const deleteOptions: HttpRequest = {\r\n headers: { ...headers, ...this._options.headers },\r\n timeout: this._options.timeout,\r\n withCredentials: this._options.withCredentials,\r\n };\r\n\r\n let error;\r\n try {\r\n await this._httpClient.delete(this._url!, deleteOptions);\r\n } catch (err) {\r\n error = err;\r\n }\r\n\r\n if (error) {\r\n if (error instanceof HttpError) {\r\n if (error.statusCode === 404) {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) A 404 response was returned from sending a DELETE request.\");\r\n } else {\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) Error sending a DELETE request: ${error}`);\r\n }\r\n }\r\n } else {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) DELETE request accepted.\");\r\n }\r\n\r\n } finally {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Stop finished.\");\r\n\r\n // Raise close event here instead of in polling\r\n // It needs to happen after the DELETE request is sent\r\n this._raiseOnClose();\r\n }\r\n }\r\n\r\n private _raiseOnClose() {\r\n if (this.onclose) {\r\n let logMessage = \"(LongPolling transport) Firing onclose event.\";\r\n if (this._closeError) {\r\n logMessage += \" Error: \" + this._closeError;\r\n }\r\n this._logger.log(LogLevel.Trace, logMessage);\r\n this.onclose(this._closeError);\r\n }\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { MessageHeaders } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { ITransport, TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform, sendMessage } from \"./Utils\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\n\r\n/** @private */\r\nexport class ServerSentEventsTransport implements ITransport {\r\n private readonly _httpClient: HttpClient;\r\n private readonly _accessToken: string | undefined;\r\n private readonly _logger: ILogger;\r\n private readonly _options: IHttpConnectionOptions;\r\n private _eventSource?: EventSource;\r\n private _url?: string;\r\n\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((error?: Error | unknown) => void) | null;\r\n\r\n constructor(httpClient: HttpClient, accessToken: string | undefined, logger: ILogger,\r\n options: IHttpConnectionOptions) {\r\n this._httpClient = httpClient;\r\n this._accessToken = accessToken;\r\n this._logger = logger;\r\n this._options = options;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n\r\n public async connect(url: string, transferFormat: TransferFormat): Promise<void> {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n\r\n this._logger.log(LogLevel.Trace, \"(SSE transport) Connecting.\");\r\n\r\n // set url before accessTokenFactory because this._url is only for send and we set the auth header instead of the query string for send\r\n this._url = url;\r\n\r\n if (this._accessToken) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + `access_token=${encodeURIComponent(this._accessToken)}`;\r\n }\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n let opened = false;\r\n if (transferFormat !== TransferFormat.Text) {\r\n reject(new Error(\"The Server-Sent Events transport only supports the 'Text' transfer format\"));\r\n return;\r\n }\r\n\r\n let eventSource: EventSource;\r\n if (Platform.isBrowser || Platform.isWebWorker) {\r\n eventSource = new this._options.EventSource!(url, { withCredentials: this._options.withCredentials });\r\n } else {\r\n // Non-browser passes cookies via the dictionary\r\n const cookies = this._httpClient.getCookieString(url);\r\n const headers: MessageHeaders = {};\r\n headers.Cookie = cookies;\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n eventSource = new this._options.EventSource!(url, { withCredentials: this._options.withCredentials, headers: { ...headers, ...this._options.headers} } as EventSourceInit);\r\n }\r\n\r\n try {\r\n eventSource.onmessage = (e: MessageEvent) => {\r\n if (this.onreceive) {\r\n try {\r\n this._logger.log(LogLevel.Trace, `(SSE transport) data received. ${getDataDetail(e.data, this._options.logMessageContent!)}.`);\r\n this.onreceive(e.data);\r\n } catch (error) {\r\n this._close(error);\r\n return;\r\n }\r\n }\r\n };\r\n\r\n // @ts-ignore: not using event on purpose\r\n eventSource.onerror = (e: Event) => {\r\n // EventSource doesn't give any useful information about server side closes.\r\n if (opened) {\r\n this._close();\r\n } else {\r\n reject(new Error(\"EventSource failed to connect. The connection could not be found on the server,\"\r\n + \" either the connection ID is not present on the server, or a proxy is refusing/buffering the connection.\"\r\n + \" If you have multiple servers check that sticky sessions are enabled.\"));\r\n }\r\n };\r\n\r\n eventSource.onopen = () => {\r\n this._logger.log(LogLevel.Information, `SSE connected to ${this._url}`);\r\n this._eventSource = eventSource;\r\n opened = true;\r\n resolve();\r\n };\r\n } catch (e) {\r\n reject(e);\r\n return;\r\n }\r\n });\r\n }\r\n\r\n public async send(data: any): Promise<void> {\r\n if (!this._eventSource) {\r\n return Promise.reject(new Error(\"Cannot send until the transport is connected\"));\r\n }\r\n return sendMessage(this._logger, \"SSE\", this._httpClient, this._url!, data, this._options);\r\n }\r\n\r\n public stop(): Promise<void> {\r\n this._close();\r\n return Promise.resolve();\r\n }\r\n\r\n private _close(e?: Error | unknown) {\r\n if (this._eventSource) {\r\n this._eventSource.close();\r\n this._eventSource = undefined;\r\n\r\n if (this.onclose) {\r\n this.onclose(e);\r\n }\r\n }\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { MessageHeaders } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { ITransport, TransferFormat } from \"./ITransport\";\r\nimport { WebSocketConstructor } from \"./Polyfills\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform } from \"./Utils\";\r\n\r\n/** @private */\r\nexport class WebSocketTransport implements ITransport {\r\n private readonly _logger: ILogger;\r\n private readonly _accessTokenFactory: (() => string | Promise<string>) | undefined;\r\n private readonly _logMessageContent: boolean;\r\n private readonly _webSocketConstructor: WebSocketConstructor;\r\n private readonly _httpClient: HttpClient;\r\n private _webSocket?: WebSocket;\r\n private _headers: MessageHeaders;\r\n\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((error?: Error) => void) | null;\r\n\r\n constructor(httpClient: HttpClient, accessTokenFactory: (() => string | Promise<string>) | undefined, logger: ILogger,\r\n logMessageContent: boolean, webSocketConstructor: WebSocketConstructor, headers: MessageHeaders) {\r\n this._logger = logger;\r\n this._accessTokenFactory = accessTokenFactory;\r\n this._logMessageContent = logMessageContent;\r\n this._webSocketConstructor = webSocketConstructor;\r\n this._httpClient = httpClient;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n this._headers = headers;\r\n }\r\n\r\n public async connect(url: string, transferFormat: TransferFormat): Promise<void> {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this._logger.log(LogLevel.Trace, \"(WebSockets transport) Connecting.\");\r\n\r\n let token: string;\r\n if (this._accessTokenFactory) {\r\n token = await this._accessTokenFactory();\r\n }\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n url = url.replace(/^http/, \"ws\");\r\n let webSocket: WebSocket | undefined;\r\n const cookies = this._httpClient.getCookieString(url);\r\n let opened = false;\r\n\r\n if (Platform.isNode || Platform.isReactNative) {\r\n const headers: {[k: string]: string} = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n if (token) {\r\n headers[HeaderNames.Authorization] = `Bearer ${token}`;\r\n }\r\n\r\n if (cookies) {\r\n headers[HeaderNames.Cookie] = cookies;\r\n }\r\n\r\n // Only pass headers when in non-browser environments\r\n webSocket = new this._webSocketConstructor(url, undefined, {\r\n headers: { ...headers, ...this._headers },\r\n });\r\n }\r\n else\r\n {\r\n if (token) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + `access_token=${encodeURIComponent(token)}`;\r\n }\r\n }\r\n\r\n if (!webSocket) {\r\n // Chrome is not happy with passing 'undefined' as protocol\r\n webSocket = new this._webSocketConstructor(url);\r\n }\r\n\r\n if (transferFormat === TransferFormat.Binary) {\r\n webSocket.binaryType = \"arraybuffer\";\r\n }\r\n\r\n webSocket.onopen = (_event: Event) => {\r\n this._logger.log(LogLevel.Information, `WebSocket connected to ${url}.`);\r\n this._webSocket = webSocket;\r\n opened = true;\r\n resolve();\r\n };\r\n\r\n webSocket.onerror = (event: Event) => {\r\n let error: any = null;\r\n // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n error = event.error;\r\n } else {\r\n error = \"There was an error with the transport\";\r\n }\r\n\r\n this._logger.log(LogLevel.Information, `(WebSockets transport) ${error}.`);\r\n };\r\n\r\n webSocket.onmessage = (message: MessageEvent) => {\r\n this._logger.log(LogLevel.Trace, `(WebSockets transport) data received. ${getDataDetail(message.data, this._logMessageContent)}.`);\r\n if (this.onreceive) {\r\n try {\r\n this.onreceive(message.data);\r\n } catch (error) {\r\n this._close(error);\r\n return;\r\n }\r\n }\r\n };\r\n\r\n webSocket.onclose = (event: CloseEvent) => {\r\n // Don't call close handler if connection was never established\r\n // We'll reject the connect call instead\r\n if (opened) {\r\n this._close(event);\r\n } else {\r\n let error: any = null;\r\n // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n error = event.error;\r\n } else {\r\n error = \"WebSocket failed to connect. The connection could not be found on the server,\"\r\n + \" either the endpoint may not be a SignalR endpoint,\"\r\n + \" the connection ID is not present on the server, or there is a proxy blocking WebSockets.\"\r\n + \" If you have multiple servers check that sticky sessions are enabled.\";\r\n }\r\n\r\n reject(new Error(error));\r\n }\r\n };\r\n });\r\n }\r\n\r\n public send(data: any): Promise<void> {\r\n if (this._webSocket && this._webSocket.readyState === this._webSocketConstructor.OPEN) {\r\n this._logger.log(LogLevel.Trace, `(WebSockets transport) sending data. ${getDataDetail(data, this._logMessageContent)}.`);\r\n this._webSocket.send(data);\r\n return Promise.resolve();\r\n }\r\n\r\n return Promise.reject(\"WebSocket is not in the OPEN state\");\r\n }\r\n\r\n public stop(): Promise<void> {\r\n if (this._webSocket) {\r\n // Manually invoke onclose callback inline so we know the HttpConnection was closed properly before returning\r\n // This also solves an issue where websocket.onclose could take 18+ seconds to trigger during network disconnects\r\n this._close(undefined);\r\n }\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n private _close(event: CloseEvent | Error | unknown): void {\r\n // webSocket will be null if the transport did not start successfully\r\n if (this._webSocket) {\r\n // Clear websocket handlers because we are considering the socket closed now\r\n this._webSocket.onclose = () => {};\r\n this._webSocket.onmessage = () => {};\r\n this._webSocket.onerror = () => {};\r\n this._webSocket.close();\r\n this._webSocket = undefined;\r\n }\r\n\r\n this._logger.log(LogLevel.Trace, \"(WebSockets transport) socket closed.\");\r\n\r\n if (this.onclose) {\r\n if (this._isCloseEvent(event) && (event.wasClean === false || event.code !== 1000)) {\r\n this.onclose(new Error(`WebSocket closed with status code: ${event.code} (${event.reason || \"no reason given\"}).`));\r\n } else if (event instanceof Error) {\r\n this.onclose(event);\r\n } else {\r\n this.onclose();\r\n }\r\n }\r\n }\r\n\r\n private _isCloseEvent(event?: any): event is CloseEvent {\r\n return event && typeof event.wasClean === \"boolean\" && typeof event.code === \"number\";\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AccessTokenHttpClient } from \"./AccessTokenHttpClient\";\r\nimport { DefaultHttpClient } from \"./DefaultHttpClient\";\r\nimport { AggregateErrors, DisabledTransportError, FailedToNegotiateWithServerError, FailedToStartTransportError, HttpError, UnsupportedTransportError, AbortError } from \"./Errors\";\r\nimport { IConnection } from \"./IConnection\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { HttpTransportType, ITransport, TransferFormat } from \"./ITransport\";\r\nimport { LongPollingTransport } from \"./LongPollingTransport\";\r\nimport { ServerSentEventsTransport } from \"./ServerSentEventsTransport\";\r\nimport { Arg, createLogger, getUserAgentHeader, Platform } from \"./Utils\";\r\nimport { WebSocketTransport } from \"./WebSocketTransport\";\r\n\r\n/** @private */\r\nconst enum ConnectionState {\r\n Connecting = \"Connecting\",\r\n Connected = \"Connected\",\r\n Disconnected = \"Disconnected\",\r\n Disconnecting = \"Disconnecting\",\r\n}\r\n\r\n/** @private */\r\nexport interface INegotiateResponse {\r\n connectionId?: string;\r\n connectionToken?: string;\r\n negotiateVersion?: number;\r\n availableTransports?: IAvailableTransport[];\r\n url?: string;\r\n accessToken?: string;\r\n error?: string;\r\n useStatefulReconnect?: boolean;\r\n}\r\n\r\n/** @private */\r\nexport interface IAvailableTransport {\r\n transport: keyof typeof HttpTransportType;\r\n transferFormats: (keyof typeof TransferFormat)[];\r\n}\r\n\r\nconst MAX_REDIRECTS = 100;\r\n\r\n/** @private */\r\nexport class HttpConnection implements IConnection {\r\n private _connectionState: ConnectionState;\r\n // connectionStarted is tracked independently from connectionState, so we can check if the\r\n // connection ever did successfully transition from connecting to connected before disconnecting.\r\n private _connectionStarted: boolean;\r\n private readonly _httpClient: AccessTokenHttpClient;\r\n private readonly _logger: ILogger;\r\n private readonly _options: IHttpConnectionOptions;\r\n // Needs to not start with _ to be available for tests\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private transport?: ITransport;\r\n private _startInternalPromise?: Promise<void>;\r\n private _stopPromise?: Promise<void>;\r\n private _stopPromiseResolver: (value?: PromiseLike<void>) => void = () => {};\r\n private _stopError?: Error;\r\n private _accessTokenFactory?: () => string | Promise<string>;\r\n private _sendQueue?: TransportSendQueue;\r\n\r\n public readonly features: any = {};\r\n public baseUrl: string;\r\n public connectionId?: string;\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((e?: Error) => void) | null;\r\n\r\n private readonly _negotiateVersion: number = 1;\r\n\r\n constructor(url: string, options: IHttpConnectionOptions = {}) {\r\n Arg.isRequired(url, \"url\");\r\n\r\n this._logger = createLogger(options.logger);\r\n this.baseUrl = this._resolveUrl(url);\r\n\r\n options = options || {};\r\n options.logMessageContent = options.logMessageContent === undefined ? false : options.logMessageContent;\r\n if (typeof options.withCredentials === \"boolean\" || options.withCredentials === undefined) {\r\n options.withCredentials = options.withCredentials === undefined ? true : options.withCredentials;\r\n } else {\r\n throw new Error(\"withCredentials option was not a 'boolean' or 'undefined' value\");\r\n }\r\n options.timeout = options.timeout === undefined ? 100 * 1000 : options.timeout;\r\n\r\n let webSocketModule: any = null;\r\n let eventSourceModule: any = null;\r\n\r\n if (Platform.isNode && typeof require !== \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n webSocketModule = requireFunc(\"ws\");\r\n eventSourceModule = requireFunc(\"eventsource\");\r\n }\r\n\r\n if (!Platform.isNode && typeof WebSocket !== \"undefined\" && !options.WebSocket) {\r\n options.WebSocket = WebSocket;\r\n } else if (Platform.isNode && !options.WebSocket) {\r\n if (webSocketModule) {\r\n options.WebSocket = webSocketModule;\r\n }\r\n }\r\n\r\n if (!Platform.isNode && typeof EventSource !== \"undefined\" && !options.EventSource) {\r\n options.EventSource = EventSource;\r\n } else if (Platform.isNode && !options.EventSource) {\r\n if (typeof eventSourceModule !== \"undefined\") {\r\n options.EventSource = eventSourceModule;\r\n }\r\n }\r\n\r\n this._httpClient = new AccessTokenHttpClient(options.httpClient || new DefaultHttpClient(this._logger), options.accessTokenFactory);\r\n this._connectionState = ConnectionState.Disconnected;\r\n this._connectionStarted = false;\r\n this._options = options;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n\r\n public start(): Promise<void>;\r\n public start(transferFormat: TransferFormat): Promise<void>;\r\n public async start(transferFormat?: TransferFormat): Promise<void> {\r\n transferFormat = transferFormat || TransferFormat.Binary;\r\n\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n\r\n this._logger.log(LogLevel.Debug, `Starting connection with transfer format '${TransferFormat[transferFormat]}'.`);\r\n\r\n if (this._connectionState !== ConnectionState.Disconnected) {\r\n return Promise.reject(new Error(\"Cannot start an HttpConnection that is not in the 'Disconnected' state.\"));\r\n }\r\n\r\n this._connectionState = ConnectionState.Connecting;\r\n\r\n this._startInternalPromise = this._startInternal(transferFormat);\r\n await this._startInternalPromise;\r\n\r\n // The TypeScript compiler thinks that connectionState must be Connecting here. The TypeScript compiler is wrong.\r\n if (this._connectionState as any === ConnectionState.Disconnecting) {\r\n // stop() was called and transitioned the client into the Disconnecting state.\r\n const message = \"Failed to start the HttpConnection before stop() was called.\";\r\n this._logger.log(LogLevel.Error, message);\r\n\r\n // We cannot await stopPromise inside startInternal since stopInternal awaits the startInternalPromise.\r\n await this._stopPromise;\r\n\r\n return Promise.reject(new AbortError(message));\r\n } else if (this._connectionState as any !== ConnectionState.Connected) {\r\n // stop() was called and transitioned the client into the Disconnecting state.\r\n const message = \"HttpConnection.startInternal completed gracefully but didn't enter the connection into the connected state!\";\r\n this._logger.log(LogLevel.Error, message);\r\n return Promise.reject(new AbortError(message));\r\n }\r\n\r\n this._connectionStarted = true;\r\n }\r\n\r\n public send(data: string | ArrayBuffer): Promise<void> {\r\n if (this._connectionState !== ConnectionState.Connected) {\r\n return Promise.reject(new Error(\"Cannot send data if the connection is not in the 'Connected' State.\"));\r\n }\r\n\r\n if (!this._sendQueue) {\r\n this._sendQueue = new TransportSendQueue(this.transport!);\r\n }\r\n\r\n // Transport will not be null if state is connected\r\n return this._sendQueue.send(data);\r\n }\r\n\r\n public async stop(error?: Error): Promise<void> {\r\n if (this._connectionState === ConnectionState.Disconnected) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnected state.`);\r\n return Promise.resolve();\r\n }\r\n\r\n if (this._connectionState === ConnectionState.Disconnecting) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnecting state.`);\r\n return this._stopPromise;\r\n }\r\n\r\n this._connectionState = ConnectionState.Disconnecting;\r\n\r\n this._stopPromise = new Promise((resolve) => {\r\n // Don't complete stop() until stopConnection() completes.\r\n this._stopPromiseResolver = resolve;\r\n });\r\n\r\n // stopInternal should never throw so just observe it.\r\n await this._stopInternal(error);\r\n await this._stopPromise;\r\n }\r\n\r\n private async _stopInternal(error?: Error): Promise<void> {\r\n // Set error as soon as possible otherwise there is a race between\r\n // the transport closing and providing an error and the error from a close message\r\n // We would prefer the close message error.\r\n this._stopError = error;\r\n\r\n try {\r\n await this._startInternalPromise;\r\n } catch (e) {\r\n // This exception is returned to the user as a rejected Promise from the start method.\r\n }\r\n\r\n // The transport's onclose will trigger stopConnection which will run our onclose event.\r\n // The transport should always be set if currently connected. If it wasn't set, it's likely because\r\n // stop was called during start() and start() failed.\r\n if (this.transport) {\r\n try {\r\n await this.transport.stop();\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `HttpConnection.transport.stop() threw error '${e}'.`);\r\n this._stopConnection();\r\n }\r\n\r\n this.transport = undefined;\r\n } else {\r\n this._logger.log(LogLevel.Debug, \"HttpConnection.transport is undefined in HttpConnection.stop() because start() failed.\");\r\n }\r\n }\r\n\r\n private async _startInternal(transferFormat: TransferFormat): Promise<void> {\r\n // Store the original base url and the access token factory since they may change\r\n // as part of negotiating\r\n let url = this.baseUrl;\r\n this._accessTokenFactory = this._options.accessTokenFactory;\r\n this._httpClient._accessTokenFactory = this._accessTokenFactory;\r\n\r\n try {\r\n if (this._options.skipNegotiation) {\r\n if (this._options.transport === HttpTransportType.WebSockets) {\r\n // No need to add a connection ID in this case\r\n this.transport = this._constructTransport(HttpTransportType.WebSockets);\r\n // We should just call connect directly in this case.\r\n // No fallback or negotiate in this case.\r\n await this._startTransport(url, transferFormat);\r\n } else {\r\n throw new Error(\"Negotiation can only be skipped when using the WebSocket transport directly.\");\r\n }\r\n } else {\r\n let negotiateResponse: INegotiateResponse | null = null;\r\n let redirects = 0;\r\n\r\n do {\r\n negotiateResponse = await this._getNegotiationResponse(url);\r\n // the user tries to stop the connection when it is being started\r\n if (this._connectionState === ConnectionState.Disconnecting || this._connectionState === ConnectionState.Disconnected) {\r\n throw new AbortError(\"The connection was stopped during negotiation.\");\r\n }\r\n\r\n if (negotiateResponse.error) {\r\n throw new Error(negotiateResponse.error);\r\n }\r\n\r\n if ((negotiateResponse as any).ProtocolVersion) {\r\n throw new Error(\"Detected a connection attempt to an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details.\");\r\n }\r\n\r\n if (negotiateResponse.url) {\r\n url = negotiateResponse.url;\r\n }\r\n\r\n if (negotiateResponse.accessToken) {\r\n // Replace the current access token factory with one that uses\r\n // the returned access token\r\n const accessToken = negotiateResponse.accessToken;\r\n this._accessTokenFactory = () => accessToken;\r\n // set the factory to undefined so the AccessTokenHttpClient won't retry with the same token, since we know it won't change until a connection restart\r\n this._httpClient._accessToken = accessToken;\r\n this._httpClient._accessTokenFactory = undefined;\r\n }\r\n\r\n redirects++;\r\n }\r\n while (negotiateResponse.url && redirects < MAX_REDIRECTS);\r\n\r\n if (redirects === MAX_REDIRECTS && negotiateResponse.url) {\r\n throw new Error(\"Negotiate redirection limit exceeded.\");\r\n }\r\n\r\n await this._createTransport(url, this._options.transport, negotiateResponse, transferFormat);\r\n }\r\n\r\n if (this.transport instanceof LongPollingTransport) {\r\n this.features.inherentKeepAlive = true;\r\n }\r\n\r\n if (this._connectionState === ConnectionState.Connecting) {\r\n // Ensure the connection transitions to the connected state prior to completing this.startInternalPromise.\r\n // start() will handle the case when stop was called and startInternal exits still in the disconnecting state.\r\n this._logger.log(LogLevel.Debug, \"The HttpConnection connected successfully.\");\r\n this._connectionState = ConnectionState.Connected;\r\n }\r\n\r\n // stop() is waiting on us via this.startInternalPromise so keep this.transport around so it can clean up.\r\n // This is the only case startInternal can exit in neither the connected nor disconnected state because stopConnection()\r\n // will transition to the disconnected state. start() will wait for the transition using the stopPromise.\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, \"Failed to start the connection: \" + e);\r\n this._connectionState = ConnectionState.Disconnected;\r\n this.transport = undefined;\r\n\r\n // if start fails, any active calls to stop assume that start will complete the stop promise\r\n this._stopPromiseResolver();\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n private async _getNegotiationResponse(url: string): Promise<INegotiateResponse> {\r\n const headers: {[k: string]: string} = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n const negotiateUrl = this._resolveNegotiateUrl(url);\r\n this._logger.log(LogLevel.Debug, `Sending negotiation request: ${negotiateUrl}.`);\r\n try {\r\n const response = await this._httpClient.post(negotiateUrl, {\r\n content: \"\",\r\n headers: { ...headers, ...this._options.headers },\r\n timeout: this._options.timeout,\r\n withCredentials: this._options.withCredentials,\r\n });\r\n\r\n if (response.statusCode !== 200) {\r\n return Promise.reject(new Error(`Unexpected status code returned from negotiate '${response.statusCode}'`));\r\n }\r\n\r\n const negotiateResponse = JSON.parse(response.content as string) as INegotiateResponse;\r\n if (!negotiateResponse.negotiateVersion || negotiateResponse.negotiateVersion < 1) {\r\n // Negotiate version 0 doesn't use connectionToken\r\n // So we set it equal to connectionId so all our logic can use connectionToken without being aware of the negotiate version\r\n negotiateResponse.connectionToken = negotiateResponse.connectionId;\r\n }\r\n\r\n if (negotiateResponse.useStatefulReconnect && this._options._useStatefulReconnect !== true) {\r\n return Promise.reject(new FailedToNegotiateWithServerError(\"Client didn't negotiate Stateful Reconnect but the server did.\"));\r\n }\r\n\r\n return negotiateResponse;\r\n } catch (e) {\r\n let errorMessage = \"Failed to complete negotiation with the server: \" + e;\r\n if (e instanceof HttpError) {\r\n if (e.statusCode === 404) {\r\n errorMessage = errorMessage + \" Either this is not a SignalR endpoint or there is a proxy blocking the connection.\";\r\n }\r\n }\r\n this._logger.log(LogLevel.Error, errorMessage);\r\n\r\n return Promise.reject(new FailedToNegotiateWithServerError(errorMessage));\r\n }\r\n }\r\n\r\n private _createConnectUrl(url: string, connectionToken: string | null | undefined) {\r\n if (!connectionToken) {\r\n return url;\r\n }\r\n\r\n return url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + `id=${connectionToken}`;\r\n }\r\n\r\n private async _createTransport(url: string, requestedTransport: HttpTransportType | ITransport | undefined, negotiateResponse: INegotiateResponse, requestedTransferFormat: TransferFormat): Promise<void> {\r\n let connectUrl = this._createConnectUrl(url, negotiateResponse.connectionToken);\r\n if (this._isITransport(requestedTransport)) {\r\n this._logger.log(LogLevel.Debug, \"Connection was provided an instance of ITransport, using that directly.\");\r\n this.transport = requestedTransport;\r\n await this._startTransport(connectUrl, requestedTransferFormat);\r\n\r\n this.connectionId = negotiateResponse.connectionId;\r\n return;\r\n }\r\n\r\n const transportExceptions: any[] = [];\r\n const transports = negotiateResponse.availableTransports || [];\r\n let negotiate: INegotiateResponse | undefined = negotiateResponse;\r\n for (const endpoint of transports) {\r\n const transportOrError = this._resolveTransportOrError(endpoint, requestedTransport, requestedTransferFormat,\r\n negotiate?.useStatefulReconnect === true);\r\n if (transportOrError instanceof Error) {\r\n // Store the error and continue, we don't want to cause a re-negotiate in these cases\r\n transportExceptions.push(`${endpoint.transport} failed:`);\r\n transportExceptions.push(transportOrError);\r\n } else if (this._isITransport(transportOrError)) {\r\n this.transport = transportOrError;\r\n if (!negotiate) {\r\n try {\r\n negotiate = await this._getNegotiationResponse(url);\r\n } catch (ex) {\r\n return Promise.reject(ex);\r\n }\r\n connectUrl = this._createConnectUrl(url, negotiate.connectionToken);\r\n }\r\n try {\r\n await this._startTransport(connectUrl, requestedTransferFormat);\r\n this.connectionId = negotiate.connectionId;\r\n return;\r\n } catch (ex) {\r\n this._logger.log(LogLevel.Error, `Failed to start the transport '${endpoint.transport}': ${ex}`);\r\n negotiate = undefined;\r\n transportExceptions.push(new FailedToStartTransportError(`${endpoint.transport} failed: ${ex}`, HttpTransportType[endpoint.transport]));\r\n\r\n if (this._connectionState !== ConnectionState.Connecting) {\r\n const message = \"Failed to select transport before stop() was called.\";\r\n this._logger.log(LogLevel.Debug, message);\r\n return Promise.reject(new AbortError(message));\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (transportExceptions.length > 0) {\r\n return Promise.reject(new AggregateErrors(`Unable to connect to the server with any of the available transports. ${transportExceptions.join(\" \")}`, transportExceptions));\r\n }\r\n return Promise.reject(new Error(\"None of the transports supported by the client are supported by the server.\"));\r\n }\r\n\r\n private _constructTransport(transport: HttpTransportType): ITransport {\r\n switch (transport) {\r\n case HttpTransportType.WebSockets:\r\n if (!this._options.WebSocket) {\r\n throw new Error(\"'WebSocket' is not supported in your environment.\");\r\n }\r\n return new WebSocketTransport(this._httpClient, this._accessTokenFactory, this._logger, this._options.logMessageContent!,\r\n this._options.WebSocket, this._options.headers || {});\r\n case HttpTransportType.ServerSentEvents:\r\n if (!this._options.EventSource) {\r\n throw new Error(\"'EventSource' is not supported in your environment.\");\r\n }\r\n return new ServerSentEventsTransport(this._httpClient, this._httpClient._accessToken, this._logger, this._options);\r\n case HttpTransportType.LongPolling:\r\n return new LongPollingTransport(this._httpClient, this._logger, this._options);\r\n default:\r\n throw new Error(`Unknown transport: ${transport}.`);\r\n }\r\n }\r\n\r\n private _startTransport(url: string, transferFormat: TransferFormat): Promise<void> {\r\n this.transport!.onreceive = this.onreceive;\r\n if (this.features.reconnect) {\r\n this.transport!.onclose = async (e) => {\r\n let callStop = false;\r\n if (this.features.reconnect) {\r\n try {\r\n this.features.disconnected();\r\n await this.transport!.connect(url, transferFormat);\r\n await this.features.resend();\r\n } catch {\r\n callStop = true;\r\n }\r\n } else {\r\n this._stopConnection(e);\r\n return;\r\n }\r\n\r\n if (callStop) {\r\n this._stopConnection(e);\r\n }\r\n };\r\n } else {\r\n this.transport!.onclose = (e) => this._stopConnection(e);\r\n }\r\n return this.transport!.connect(url, transferFormat);\r\n }\r\n\r\n private _resolveTransportOrError(endpoint: IAvailableTransport, requestedTransport: HttpTransportType | undefined,\r\n requestedTransferFormat: TransferFormat, useStatefulReconnect: boolean): ITransport | Error | unknown {\r\n const transport = HttpTransportType[endpoint.transport];\r\n if (transport === null || transport === undefined) {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${endpoint.transport}' because it is not supported by this client.`);\r\n return new Error(`Skipping transport '${endpoint.transport}' because it is not supported by this client.`);\r\n } else {\r\n if (transportMatches(requestedTransport, transport)) {\r\n const transferFormats = endpoint.transferFormats.map((s) => TransferFormat[s]);\r\n if (transferFormats.indexOf(requestedTransferFormat) >= 0) {\r\n if ((transport === HttpTransportType.WebSockets && !this._options.WebSocket) ||\r\n (transport === HttpTransportType.ServerSentEvents && !this._options.EventSource)) {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it is not supported in your environment.'`);\r\n return new UnsupportedTransportError(`'${HttpTransportType[transport]}' is not supported in your environment.`, transport);\r\n } else {\r\n this._logger.log(LogLevel.Debug, `Selecting transport '${HttpTransportType[transport]}'.`);\r\n try {\r\n this.features.reconnect = transport === HttpTransportType.WebSockets ? useStatefulReconnect : undefined;\r\n return this._constructTransport(transport);\r\n } catch (ex) {\r\n return ex;\r\n }\r\n }\r\n } else {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it does not support the requested transfer format '${TransferFormat[requestedTransferFormat]}'.`);\r\n return new Error(`'${HttpTransportType[transport]}' does not support ${TransferFormat[requestedTransferFormat]}.`);\r\n }\r\n } else {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it was disabled by the client.`);\r\n return new DisabledTransportError(`'${HttpTransportType[transport]}' is disabled by the client.`, transport);\r\n }\r\n }\r\n }\r\n\r\n private _isITransport(transport: any): transport is ITransport {\r\n return transport && typeof (transport) === \"object\" && \"connect\" in transport;\r\n }\r\n\r\n private _stopConnection(error?: Error): void {\r\n this._logger.log(LogLevel.Debug, `HttpConnection.stopConnection(${error}) called while in state ${this._connectionState}.`);\r\n\r\n this.transport = undefined;\r\n\r\n // If we have a stopError, it takes precedence over the error from the transport\r\n error = this._stopError || error;\r\n this._stopError = undefined;\r\n\r\n if (this._connectionState === ConnectionState.Disconnected) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stopConnection(${error}) was ignored because the connection is already in the disconnected state.`);\r\n return;\r\n }\r\n\r\n if (this._connectionState === ConnectionState.Connecting) {\r\n this._logger.log(LogLevel.Warning, `Call to HttpConnection.stopConnection(${error}) was ignored because the connection is still in the connecting state.`);\r\n throw new Error(`HttpConnection.stopConnection(${error}) was called while the connection is still in the connecting state.`);\r\n }\r\n\r\n if (this._connectionState === ConnectionState.Disconnecting) {\r\n // A call to stop() induced this call to stopConnection and needs to be completed.\r\n // Any stop() awaiters will be scheduled to continue after the onclose callback fires.\r\n this._stopPromiseResolver();\r\n }\r\n\r\n if (error) {\r\n this._logger.log(LogLevel.Error, `Connection disconnected with error '${error}'.`);\r\n } else {\r\n this._logger.log(LogLevel.Information, \"Connection disconnected.\");\r\n }\r\n\r\n if (this._sendQueue) {\r\n this._sendQueue.stop().catch((e) => {\r\n this._logger.log(LogLevel.Error, `TransportSendQueue.stop() threw error '${e}'.`);\r\n });\r\n this._sendQueue = undefined;\r\n }\r\n\r\n this.connectionId = undefined;\r\n this._connectionState = ConnectionState.Disconnected;\r\n\r\n if (this._connectionStarted) {\r\n this._connectionStarted = false;\r\n try {\r\n if (this.onclose) {\r\n this.onclose(error);\r\n }\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `HttpConnection.onclose(${error}) threw error '${e}'.`);\r\n }\r\n }\r\n }\r\n\r\n private _resolveUrl(url: string): string {\r\n // startsWith is not supported in IE\r\n if (url.lastIndexOf(\"https://\", 0) === 0 || url.lastIndexOf(\"http://\", 0) === 0) {\r\n return url;\r\n }\r\n\r\n if (!Platform.isBrowser) {\r\n throw new Error(`Cannot resolve '${url}'.`);\r\n }\r\n\r\n // Setting the url to the href propery of an anchor tag handles normalization\r\n // for us. There are 3 main cases.\r\n // 1. Relative path normalization e.g \"b\" -> \"http://localhost:5000/a/b\"\r\n // 2. Absolute path normalization e.g \"/a/b\" -> \"http://localhost:5000/a/b\"\r\n // 3. Networkpath reference normalization e.g \"//localhost:5000/a/b\" -> \"http://localhost:5000/a/b\"\r\n const aTag = window.document.createElement(\"a\");\r\n aTag.href = url;\r\n\r\n this._logger.log(LogLevel.Information, `Normalizing '${url}' to '${aTag.href}'.`);\r\n return aTag.href;\r\n }\r\n\r\n private _resolveNegotiateUrl(url: string): string {\r\n const negotiateUrl = new URL(url);\r\n\r\n if (negotiateUrl.pathname.endsWith('/')) {\r\n negotiateUrl.pathname += \"negotiate\";\r\n } else {\r\n negotiateUrl.pathname += \"/negotiate\";\r\n }\r\n const searchParams = new URLSearchParams(negotiateUrl.searchParams);\r\n\r\n if (!searchParams.has(\"negotiateVersion\")) {\r\n searchParams.append(\"negotiateVersion\", this._negotiateVersion.toString());\r\n }\r\n\r\n if (searchParams.has(\"useStatefulReconnect\")) {\r\n if (searchParams.get(\"useStatefulReconnect\") === \"true\") {\r\n this._options._useStatefulReconnect = true;\r\n }\r\n } else if (this._options._useStatefulReconnect === true) {\r\n searchParams.append(\"useStatefulReconnect\", \"true\");\r\n }\r\n\r\n negotiateUrl.search = searchParams.toString();\r\n\r\n return negotiateUrl.toString();\r\n }\r\n}\r\n\r\nfunction transportMatches(requestedTransport: HttpTransportType | undefined, actualTransport: HttpTransportType) {\r\n return !requestedTransport || ((actualTransport & requestedTransport) !== 0);\r\n}\r\n\r\n/** @private */\r\nexport class TransportSendQueue {\r\n private _buffer: any[] = [];\r\n private _sendBufferedData: PromiseSource;\r\n private _executing: boolean = true;\r\n private _transportResult?: PromiseSource;\r\n private _sendLoopPromise: Promise<void>;\r\n\r\n constructor(private readonly _transport: ITransport) {\r\n this._sendBufferedData = new PromiseSource();\r\n this._transportResult = new PromiseSource();\r\n\r\n this._sendLoopPromise = this._sendLoop();\r\n }\r\n\r\n public send(data: string | ArrayBuffer): Promise<void> {\r\n this._bufferData(data);\r\n if (!this._transportResult) {\r\n this._transportResult = new PromiseSource();\r\n }\r\n return this._transportResult.promise;\r\n }\r\n\r\n public stop(): Promise<void> {\r\n this._executing = false;\r\n this._sendBufferedData.resolve();\r\n return this._sendLoopPromise;\r\n }\r\n\r\n private _bufferData(data: string | ArrayBuffer): void {\r\n if (this._buffer.length && typeof(this._buffer[0]) !== typeof(data)) {\r\n throw new Error(`Expected data to be of type ${typeof(this._buffer)} but was of type ${typeof(data)}`);\r\n }\r\n\r\n this._buffer.push(data);\r\n this._sendBufferedData.resolve();\r\n }\r\n\r\n private async _sendLoop(): Promise<void> {\r\n while (true) {\r\n await this._sendBufferedData.promise;\r\n\r\n if (!this._executing) {\r\n if (this._transportResult) {\r\n this._transportResult.reject(\"Connection stopped.\");\r\n }\r\n\r\n break;\r\n }\r\n\r\n this._sendBufferedData = new PromiseSource();\r\n\r\n const transportResult = this._transportResult!;\r\n this._transportResult = undefined;\r\n\r\n const data = typeof(this._buffer[0]) === \"string\" ?\r\n this._buffer.join(\"\") :\r\n TransportSendQueue._concatBuffers(this._buffer);\r\n\r\n this._buffer.length = 0;\r\n\r\n try {\r\n await this._transport.send(data);\r\n transportResult.resolve();\r\n } catch (error) {\r\n transportResult.reject(error);\r\n }\r\n }\r\n }\r\n\r\n private static _concatBuffers(arrayBuffers: ArrayBuffer[]): ArrayBuffer {\r\n const totalLength = arrayBuffers.map((b) => b.byteLength).reduce((a, b) => a + b);\r\n const result = new Uint8Array(totalLength);\r\n let offset = 0;\r\n for (const item of arrayBuffers) {\r\n result.set(new Uint8Array(item), offset);\r\n offset += item.byteLength;\r\n }\r\n\r\n return result.buffer;\r\n }\r\n}\r\n\r\nclass PromiseSource {\r\n private _resolver?: () => void;\r\n private _rejecter!: (reason?: any) => void;\r\n public promise: Promise<void>;\r\n\r\n constructor() {\r\n this.promise = new Promise((resolve, reject) => [this._resolver, this._rejecter] = [resolve, reject]);\r\n }\r\n\r\n public resolve(): void {\r\n this._resolver!();\r\n }\r\n\r\n public reject(reason?: any): void {\r\n this._rejecter!(reason);\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AckMessage, CompletionMessage, HubMessage, IHubProtocol, InvocationMessage, MessageType, SequenceMessage, StreamItemMessage } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\n\r\nconst JSON_HUB_PROTOCOL_NAME: string = \"json\";\r\n\r\n/** Implements the JSON Hub Protocol. */\r\nexport class JsonHubProtocol implements IHubProtocol {\r\n\r\n /** @inheritDoc */\r\n public readonly name: string = JSON_HUB_PROTOCOL_NAME;\r\n /** @inheritDoc */\r\n public readonly version: number = 2;\r\n\r\n /** @inheritDoc */\r\n public readonly transferFormat: TransferFormat = TransferFormat.Text;\r\n\r\n /** Creates an array of {@link @microsoft/signalr.HubMessage} objects from the specified serialized representation.\r\n *\r\n * @param {string} input A string containing the serialized representation.\r\n * @param {ILogger} logger A logger that will be used to log messages that occur during parsing.\r\n */\r\n public parseMessages(input: string, logger: ILogger): HubMessage[] {\r\n // The interface does allow \"ArrayBuffer\" to be passed in, but this implementation does not. So let's throw a useful error.\r\n if (typeof input !== \"string\") {\r\n throw new Error(\"Invalid input for JSON hub protocol. Expected a string.\");\r\n }\r\n\r\n if (!input) {\r\n return [];\r\n }\r\n\r\n if (logger === null) {\r\n logger = NullLogger.instance;\r\n }\r\n\r\n // Parse the messages\r\n const messages = TextMessageFormat.parse(input);\r\n\r\n const hubMessages = [];\r\n for (const message of messages) {\r\n const parsedMessage = JSON.parse(message) as HubMessage;\r\n if (typeof parsedMessage.type !== \"number\") {\r\n throw new Error(\"Invalid payload.\");\r\n }\r\n switch (parsedMessage.type) {\r\n case MessageType.Invocation:\r\n this._isInvocationMessage(parsedMessage);\r\n break;\r\n case MessageType.StreamItem:\r\n this._isStreamItemMessage(parsedMessage);\r\n break;\r\n case MessageType.Completion:\r\n this._isCompletionMessage(parsedMessage);\r\n break;\r\n case MessageType.Ping:\r\n // Single value, no need to validate\r\n break;\r\n case MessageType.Close:\r\n // All optional values, no need to validate\r\n break;\r\n case MessageType.Ack:\r\n this._isAckMessage(parsedMessage);\r\n break;\r\n case MessageType.Sequence:\r\n this._isSequenceMessage(parsedMessage);\r\n break;\r\n default:\r\n // Future protocol changes can add message types, old clients can ignore them\r\n logger.log(LogLevel.Information, \"Unknown message type '\" + parsedMessage.type + \"' ignored.\");\r\n continue;\r\n }\r\n hubMessages.push(parsedMessage);\r\n }\r\n\r\n return hubMessages;\r\n }\r\n\r\n /** Writes the specified {@link @microsoft/signalr.HubMessage} to a string and returns it.\r\n *\r\n * @param {HubMessage} message The message to write.\r\n * @returns {string} A string containing the serialized representation of the message.\r\n */\r\n public writeMessage(message: HubMessage): string {\r\n return TextMessageFormat.write(JSON.stringify(message));\r\n }\r\n\r\n private _isInvocationMessage(message: InvocationMessage): void {\r\n this._assertNotEmptyString(message.target, \"Invalid payload for Invocation message.\");\r\n\r\n if (message.invocationId !== undefined) {\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for Invocation message.\");\r\n }\r\n }\r\n\r\n private _isStreamItemMessage(message: StreamItemMessage): void {\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for StreamItem message.\");\r\n\r\n if (message.item === undefined) {\r\n throw new Error(\"Invalid payload for StreamItem message.\");\r\n }\r\n }\r\n\r\n private _isCompletionMessage(message: CompletionMessage): void {\r\n if (message.result && message.error) {\r\n throw new Error(\"Invalid payload for Completion message.\");\r\n }\r\n\r\n if (!message.result && message.error) {\r\n this._assertNotEmptyString(message.error, \"Invalid payload for Completion message.\");\r\n }\r\n\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for Completion message.\");\r\n }\r\n\r\n private _isAckMessage(message: AckMessage): void {\r\n if (typeof message.sequenceId !== 'number') {\r\n throw new Error(\"Invalid SequenceId for Ack message.\");\r\n }\r\n }\r\n\r\n private _isSequenceMessage(message: SequenceMessage): void {\r\n if (typeof message.sequenceId !== 'number') {\r\n throw new Error(\"Invalid SequenceId for Sequence message.\");\r\n }\r\n }\r\n\r\n private _assertNotEmptyString(value: any, errorMessage: string): void {\r\n if (typeof value !== \"string\" || value === \"\") {\r\n throw new Error(errorMessage);\r\n }\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { DefaultReconnectPolicy } from \"./DefaultReconnectPolicy\";\r\nimport { HttpConnection } from \"./HttpConnection\";\r\nimport { HubConnection } from \"./HubConnection\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\nimport { IHubProtocol } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { IRetryPolicy } from \"./IRetryPolicy\";\r\nimport { IStatefulReconnectOptions } from \"./IStatefulReconnectOptions\";\r\nimport { HttpTransportType } from \"./ITransport\";\r\nimport { JsonHubProtocol } from \"./JsonHubProtocol\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { Arg, ConsoleLogger } from \"./Utils\";\r\n\r\nconst LogLevelNameMapping: {[k: string]: LogLevel} = {\r\n trace: LogLevel.Trace,\r\n debug: LogLevel.Debug,\r\n info: LogLevel.Information,\r\n information: LogLevel.Information,\r\n warn: LogLevel.Warning,\r\n warning: LogLevel.Warning,\r\n error: LogLevel.Error,\r\n critical: LogLevel.Critical,\r\n none: LogLevel.None,\r\n};\r\n\r\nfunction parseLogLevel(name: string): LogLevel {\r\n // Case-insensitive matching via lower-casing\r\n // Yes, I know case-folding is a complicated problem in Unicode, but we only support\r\n // the ASCII strings defined in LogLevelNameMapping anyway, so it's fine -anurse.\r\n const mapping = LogLevelNameMapping[name.toLowerCase()];\r\n if (typeof mapping !== \"undefined\") {\r\n return mapping;\r\n } else {\r\n throw new Error(`Unknown log level: ${name}`);\r\n }\r\n}\r\n\r\n/** A builder for configuring {@link @microsoft/signalr.HubConnection} instances. */\r\nexport class HubConnectionBuilder {\r\n private _serverTimeoutInMilliseconds?: number;\r\n private _keepAliveIntervalInMilliseconds ?: number;\r\n\r\n /** @internal */\r\n public protocol?: IHubProtocol;\r\n /** @internal */\r\n public httpConnectionOptions?: IHttpConnectionOptions;\r\n /** @internal */\r\n public url?: string;\r\n /** @internal */\r\n public logger?: ILogger;\r\n\r\n /** If defined, this indicates the client should automatically attempt to reconnect if the connection is lost. */\r\n /** @internal */\r\n public reconnectPolicy?: IRetryPolicy;\r\n\r\n private _statefulReconnectBufferSize?: number;\r\n\r\n /** Configures console logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {LogLevel} logLevel The minimum level of messages to log. Anything at this level, or a more severe level, will be logged.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public configureLogging(logLevel: LogLevel): HubConnectionBuilder;\r\n\r\n /** Configures custom logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {ILogger} logger An object implementing the {@link @microsoft/signalr.ILogger} interface, which will be used to write all log messages.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public configureLogging(logger: ILogger): HubConnectionBuilder;\r\n\r\n /** Configures custom logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {string} logLevel A string representing a LogLevel setting a minimum level of messages to log.\r\n * See {@link https://learn.microsoft.com/aspnet/core/signalr/configuration#configure-logging|the documentation for client logging configuration} for more details.\r\n */\r\n public configureLogging(logLevel: string): HubConnectionBuilder;\r\n\r\n /** Configures custom logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {LogLevel | string | ILogger} logging A {@link @microsoft/signalr.LogLevel}, a string representing a LogLevel, or an object implementing the {@link @microsoft/signalr.ILogger} interface.\r\n * See {@link https://learn.microsoft.com/aspnet/core/signalr/configuration#configure-logging|the documentation for client logging configuration} for more details.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public configureLogging(logging: LogLevel | string | ILogger): HubConnectionBuilder;\r\n public configureLogging(logging: LogLevel | string | ILogger): HubConnectionBuilder {\r\n Arg.isRequired(logging, \"logging\");\r\n\r\n if (isLogger(logging)) {\r\n this.logger = logging;\r\n } else if (typeof logging === \"string\") {\r\n const logLevel = parseLogLevel(logging);\r\n this.logger = new ConsoleLogger(logLevel);\r\n } else {\r\n this.logger = new ConsoleLogger(logging);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use HTTP-based transports to connect to the specified URL.\r\n *\r\n * The transport will be selected automatically based on what the server and client support.\r\n *\r\n * @param {string} url The URL the connection will use.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withUrl(url: string): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use the specified HTTP-based transport to connect to the specified URL.\r\n *\r\n * @param {string} url The URL the connection will use.\r\n * @param {HttpTransportType} transportType The specific transport to use.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withUrl(url: string, transportType: HttpTransportType): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use HTTP-based transports to connect to the specified URL.\r\n *\r\n * @param {string} url The URL the connection will use.\r\n * @param {IHttpConnectionOptions} options An options object used to configure the connection.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withUrl(url: string, options: IHttpConnectionOptions): HubConnectionBuilder;\r\n public withUrl(url: string, transportTypeOrOptions?: IHttpConnectionOptions | HttpTransportType): HubConnectionBuilder {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isNotEmpty(url, \"url\");\r\n\r\n this.url = url;\r\n\r\n // Flow-typing knows where it's at. Since HttpTransportType is a number and IHttpConnectionOptions is guaranteed\r\n // to be an object, we know (as does TypeScript) this comparison is all we need to figure out which overload was called.\r\n if (typeof transportTypeOrOptions === \"object\") {\r\n this.httpConnectionOptions = { ...this.httpConnectionOptions, ...transportTypeOrOptions };\r\n } else {\r\n this.httpConnectionOptions = {\r\n ...this.httpConnectionOptions,\r\n transport: transportTypeOrOptions,\r\n };\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use the specified Hub Protocol.\r\n *\r\n * @param {IHubProtocol} protocol The {@link @microsoft/signalr.IHubProtocol} implementation to use.\r\n */\r\n public withHubProtocol(protocol: IHubProtocol): HubConnectionBuilder {\r\n Arg.isRequired(protocol, \"protocol\");\r\n\r\n this.protocol = protocol;\r\n return this;\r\n }\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to automatically attempt to reconnect if the connection is lost.\r\n * By default, the client will wait 0, 2, 10 and 30 seconds respectively before trying up to 4 reconnect attempts.\r\n */\r\n public withAutomaticReconnect(): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to automatically attempt to reconnect if the connection is lost.\r\n *\r\n * @param {number[]} retryDelays An array containing the delays in milliseconds before trying each reconnect attempt.\r\n * The length of the array represents how many failed reconnect attempts it takes before the client will stop attempting to reconnect.\r\n */\r\n public withAutomaticReconnect(retryDelays: number[]): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to automatically attempt to reconnect if the connection is lost.\r\n *\r\n * @param {IRetryPolicy} reconnectPolicy An {@link @microsoft/signalR.IRetryPolicy} that controls the timing and number of reconnect attempts.\r\n */\r\n public withAutomaticReconnect(reconnectPolicy: IRetryPolicy): HubConnectionBuilder;\r\n public withAutomaticReconnect(retryDelaysOrReconnectPolicy?: number[] | IRetryPolicy): HubConnectionBuilder {\r\n if (this.reconnectPolicy) {\r\n throw new Error(\"A reconnectPolicy has already been set.\");\r\n }\r\n\r\n if (!retryDelaysOrReconnectPolicy) {\r\n this.reconnectPolicy = new DefaultReconnectPolicy();\r\n } else if (Array.isArray(retryDelaysOrReconnectPolicy)) {\r\n this.reconnectPolicy = new DefaultReconnectPolicy(retryDelaysOrReconnectPolicy);\r\n } else {\r\n this.reconnectPolicy = retryDelaysOrReconnectPolicy;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** Configures {@link @microsoft/signalr.HubConnection.serverTimeoutInMilliseconds} for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withServerTimeout(milliseconds: number): HubConnectionBuilder {\r\n Arg.isRequired(milliseconds, \"milliseconds\");\r\n\r\n this._serverTimeoutInMilliseconds = milliseconds;\r\n\r\n return this;\r\n }\r\n\r\n /** Configures {@link @microsoft/signalr.HubConnection.keepAliveIntervalInMilliseconds} for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withKeepAliveInterval(milliseconds: number): HubConnectionBuilder {\r\n Arg.isRequired(milliseconds, \"milliseconds\");\r\n\r\n this._keepAliveIntervalInMilliseconds = milliseconds;\r\n\r\n return this;\r\n }\r\n\r\n /** Enables and configures options for the Stateful Reconnect feature.\r\n *\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withStatefulReconnect(options?: IStatefulReconnectOptions): HubConnectionBuilder {\r\n if (this.httpConnectionOptions === undefined) {\r\n this.httpConnectionOptions = {};\r\n }\r\n this.httpConnectionOptions._useStatefulReconnect = true;\r\n\r\n this._statefulReconnectBufferSize = options?.bufferSize;\r\n\r\n return this;\r\n }\r\n\r\n /** Creates a {@link @microsoft/signalr.HubConnection} from the configuration options specified in this builder.\r\n *\r\n * @returns {HubConnection} The configured {@link @microsoft/signalr.HubConnection}.\r\n */\r\n public build(): HubConnection {\r\n // If httpConnectionOptions has a logger, use it. Otherwise, override it with the one\r\n // provided to configureLogger\r\n const httpConnectionOptions = this.httpConnectionOptions || {};\r\n\r\n // If it's 'null', the user **explicitly** asked for null, don't mess with it.\r\n if (httpConnectionOptions.logger === undefined) {\r\n // If our logger is undefined or null, that's OK, the HttpConnection constructor will handle it.\r\n httpConnectionOptions.logger = this.logger;\r\n }\r\n\r\n // Now create the connection\r\n if (!this.url) {\r\n throw new Error(\"The 'HubConnectionBuilder.withUrl' method must be called before building the connection.\");\r\n }\r\n const connection = new HttpConnection(this.url, httpConnectionOptions);\r\n\r\n return HubConnection.create(\r\n connection,\r\n this.logger || NullLogger.instance,\r\n this.protocol || new JsonHubProtocol(),\r\n this.reconnectPolicy,\r\n this._serverTimeoutInMilliseconds,\r\n this._keepAliveIntervalInMilliseconds,\r\n this._statefulReconnectBufferSize);\r\n }\r\n}\r\n\r\nfunction isLogger(logger: any): logger is ILogger {\r\n return logger.log !== undefined;\r\n}\r\n", "import {\r\n HubConnection,\r\n HubConnectionBuilder,\r\n LogLevel,\r\n HttpTransportType,\r\n} from \"@microsoft/signalr\";\r\nimport QRCode from \"qrcode\";\r\nimport { BackendService } from \"../new-flow/backend/BackendService\";\r\nimport { ProctoringContext } from \"./proctoring\";\r\n\r\nexport interface ExternalCameraCheckReturn {\r\n result: boolean;\r\n imageUrl?: string;\r\n}\r\n\r\nexport class ActionMessage {\r\n message?: string;\r\n command: string;\r\n}\r\n\r\nexport enum ExternalCameraStatusEnum {\r\n WAITING = -1,\r\n STARTED = 0,\r\n QR_CODE = 1, // Celular conectou com sucesso\r\n POSITION = 2, // Check de posicionamento OK\r\n FINISHED = 3, // Captura da imagem finalizada\r\n ERROR = 9,\r\n}\r\n\r\nexport class ExternalCameraChecker {\r\n private static isModalOpen: boolean = false;\r\n private proctoringId: string = \"\";\r\n private capturePhotoUrl: string = \"\";\r\n private qrCodeBase64Image: string = \"\";\r\n private transmissionOk: boolean = false;\r\n private readonly backend: BackendService;\r\n private readonly context: ProctoringContext;\r\n private onRealtimeAlertsCallback: (response: any) => void;\r\n private onQrCodeReadedCallback: (response: any) => void;\r\n private onTakePictureCallback: (response: any) => void;\r\n\r\n private waitingPositionValidation: boolean = false;\r\n private externalSessionId: string | null = null;\r\n private currentStep:ExternalCameraStatusEnum = ExternalCameraStatusEnum.STARTED;\r\n private resolvePromise!: (value: ExternalCameraCheckReturn) => void;\r\n\r\n\r\n private connection: HubConnection | null = null;\r\n\r\n constructor(\r\n context: ProctoringContext,\r\n onRealtimeAlertsCallback: (response: any) => void,\r\n ) {\r\n this.context = context;\r\n this.onRealtimeAlertsCallback = onRealtimeAlertsCallback;\r\n // console.log(\"context -> \", context);\r\n this.backend = new BackendService({\r\n type: context?.type || \"prod\",\r\n token: context.token!,\r\n });\r\n this.currentStep = ExternalCameraStatusEnum.WAITING;\r\n }\r\n\r\n\r\n public getExternalCameraSessionId(){\r\n return \"\"+this.externalSessionId;\r\n }\r\n\r\n public async checkTransmission(){\r\n try {\r\n this.transmissionOk = false;\r\n const response = await this.backend.externalCameraCheckTransmission(\"\"+this.externalSessionId);\r\n console.log(response);\r\n let attempts = 0;\r\n while (!this.transmissionOk && attempts <= 5) {\r\n await new Promise(resolve => setTimeout(resolve, 2000)); // Espera 2 segundos antes de tentar novamente\r\n attempts = attempts+1;\r\n }\r\n if(!this.transmissionOk)\r\n throw new Error(\"Timed out na checagem da transmiss\u00E3o!\");\r\n } catch (error) {\r\n console.error(\"Erro ao checar a transmiss\u00E3o:\", error);\r\n throw new Error(\"N\u00E3o foi poss\u00EDvel checar a transmiss\u00E3o.\" + error);\r\n }\r\n }\r\n\r\n public async startTransmission(proctoringId: string){\r\n try {\r\n this.proctoringId = proctoringId;\r\n const response = await this.backend.externalCameraStartTransmission(\"\"+this.externalSessionId, proctoringId);\r\n console.log(response);\r\n } catch (error) {\r\n console.error(\"Erro ao iniciar transmiss\u00E3o:\", error);\r\n throw new Error(\"N\u00E3o foi poss\u00EDvel iniciar a transmiss\u00E3o.\");\r\n }\r\n }\r\n\r\n public async goToPositionGuide(){\r\n try {\r\n const response = await this.backend.goToExternalCameraPositionStep(\"\"+this.externalSessionId);\r\n console.log(response);\r\n } catch (error) {\r\n console.error(\"Erro ao enviar comando de Position:\", error);\r\n throw new Error(\"N\u00E3o foi poss\u00EDvel enviar comando de Position Guide.\");\r\n }\r\n }\r\n \r\n private async reset(){\r\n if (this.connection) {\r\n const actionMessage:ActionMessage = new ActionMessage();\r\n actionMessage.command = 'Reset';\r\n\r\n console.log(\"Enviando comando 'Reset' para o aplicativo...\");\r\n \r\n this.connection.invoke(\r\n \"SendAction\",\r\n this.externalSessionId,\r\n actionMessage\r\n );\r\n }\r\n }\r\n\r\n public async takePicture(waitingPositionValidation: boolean, onTakePictureCallback:(response: any) => void) {\r\n if (this.connection) {\r\n\r\n this.waitingPositionValidation = waitingPositionValidation;\r\n\r\n this.onTakePictureCallback = onTakePictureCallback;\r\n\r\n const actionMessage:ActionMessage = new ActionMessage();\r\n actionMessage.command = 'Capture';\r\n\r\n console.log(\"Enviando comando 'Capture' para o aplicativo...\");\r\n \r\n this.connection.invoke(\r\n \"SendAction\",\r\n this.externalSessionId,\r\n actionMessage\r\n );\r\n }\r\n else{\r\n throw new Error(\"N\u00E3o existe conex\u00E3o de camera externa ativa.\");\r\n }\r\n }\r\n\r\n\r\n public async startSession(onQrCodeReadedCallback: (response: any) => void): Promise<string>{\r\n \r\n try {\r\n\r\n this.onQrCodeReadedCallback = onQrCodeReadedCallback;\r\n\r\n // inicializa o socket para comunica\u00E7\u00E3o\r\n if(this.connection)\r\n await this.disconnectWebSocket();\r\n await this.initializeWebSocketConnection();\r\n\r\n // Reseta o aplicativo\r\n await this.reset();\r\n\r\n // inicializa uma sessao no backend \r\n const response = await this.backend.externalCameraStartSession();\r\n this.externalSessionId = response.externalSessionId;\r\n console.log(this.externalSessionId)\r\n \r\n // atualiza o step atual\r\n this.currentStep = ExternalCameraStatusEnum.STARTED;\r\n\r\n const pairingObject = {\r\n externalSessionId: this.externalSessionId,\r\n token: this.context.token,\r\n ambient: this.context.type\r\n };\r\n const pairingDataString = JSON.stringify(pairingObject);\r\n this.qrCodeBase64Image = await QRCode.toDataURL(pairingDataString);\r\n console.log(this.qrCodeBase64Image);\r\n return this.qrCodeBase64Image;\r\n } catch (error) {\r\n this.disconnectWebSocket();\r\n return Promise.reject(error);\r\n }\r\n }\r\n\r\n // teste com UI\r\n public async checkExternalCamera(): Promise<ExternalCameraCheckReturn> {\r\n\r\n this.currentStep = ExternalCameraStatusEnum.STARTED;\r\n \r\n if (ExternalCameraChecker.isModalOpen) {\r\n return Promise.reject(\"O modal de verifica\u00E7\u00E3o j\u00E1 est\u00E1 aberto.\");\r\n }\r\n ExternalCameraChecker.isModalOpen = true;\r\n\r\n try {\r\n \r\n await this.startSession(()=>{});\r\n\r\n return await this.buildInterface();\r\n } catch (error) {\r\n console.error(\"Erro ao iniciar verifica\u00E7\u00E3o:\", error);\r\n this.closeCheckExternalCamera();\r\n return Promise.reject(error);\r\n }\r\n }\r\n\r\n private buildInterface(): Promise<ExternalCameraCheckReturn> {\r\n return new Promise((resolve, reject) => {\r\n this.resolvePromise = resolve;\r\n\r\n const fullBg = document.createElement(\"div\");\r\n fullBg.setAttribute(\"id\", \"externalCameraCheck\");\r\n this.applyStyles(fullBg, {\r\n backgroundColor: \"rgba(0,0,0,0.4)\",\r\n zIndex: \"1000\",\r\n position: \"fixed\",\r\n top: \"0\",\r\n left: \"0\",\r\n height: \"100vh\",\r\n width: \"100%\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n });\r\n\r\n const modal = document.createElement(\"div\");\r\n this.applyStyles(modal, {\r\n backgroundColor: \"#fff\",\r\n zIndex: \"1001\",\r\n width: \"500px\",\r\n borderRadius: \"10px\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n });\r\n\r\n const h3 = document.createElement(\"h3\");\r\n h3.innerText = \"Conectar dispositivo m\u00F3vel\";\r\n this.applyStyles(h3, {\r\n color: \"rgba(0, 0, 0, .7)\",\r\n fontWeight: \"bold\",\r\n fontSize: \"20px\",\r\n marginBottom: \"15px\",\r\n padding: \"20px 0px\",\r\n borderBottom: \"2px solid rgba(0, 0, 0, .1)\",\r\n width: \"100%\",\r\n textAlign: \"center\",\r\n });\r\n\r\n \r\n\r\n const contentArea = document.createElement(\"div\");\r\n contentArea.id = \"external-camera-content\";\r\n this.applyStyles(contentArea, {\r\n width: \"100%\",\r\n padding: \"20px 40px\",\r\n boxSizing: \"border-box\",\r\n minHeight: \"300px\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n });\r\n\r\n const divBtn = document.createElement(\"div\");\r\n this.applyStyles(divBtn, {\r\n width: \"100%\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n borderTop: \"2px solid rgba(0, 0, 0, .1)\",\r\n });\r\n\r\n const buttonCancel = document.createElement(\"button\");\r\n buttonCancel.innerText = \"Cancelar\";\r\n this.applyStyles(buttonCancel, {\r\n width: \"100%\",\r\n height: \"70px\",\r\n backgroundColor: \"#FFF\",\r\n border: \"none\",\r\n color: \"rgba(0, 0, 0, .7)\",\r\n fontWeight: \"bold\",\r\n borderRadius: \"0 0 0 10px\",\r\n cursor: \"pointer\",\r\n });\r\n buttonCancel.addEventListener(\"click\", () => {\r\n const actionMessage:ActionMessage = new ActionMessage();\r\n actionMessage.command = 'Cancel';\r\n\r\n console.log(\"Enviando comando 'Cancel' para o aplicativo...\");\r\n this.connection?.invoke(\r\n \"SendAction\",\r\n this.externalSessionId,\r\n actionMessage\r\n );\r\n this.closeCheckExternalCamera();\r\n resolve({ result: false });\r\n });\r\n\r\n const buttonContinue = document.createElement(\"button\");\r\n buttonContinue.innerText = \"Continuar\";\r\n buttonContinue.id = \"external-camera-continue\";\r\n this.applyStyles(buttonContinue, {\r\n width: \"100%\",\r\n height: \"70px\",\r\n backgroundColor: \"#FFF\",\r\n border: \"none\",\r\n color: \"rgba(0, 0, 0, .7)\",\r\n fontWeight: \"bold\",\r\n borderRadius: \"0 0 10px 0\",\r\n cursor: \"pointer\",\r\n borderLeft: \"2px solid rgba(0, 0, 0, .1)\",\r\n });\r\n\r\n divBtn.appendChild(buttonCancel);\r\n divBtn.appendChild(buttonContinue);\r\n\r\n modal.appendChild(h3);\r\n modal.appendChild(contentArea);\r\n modal.appendChild(divBtn);\r\n fullBg.appendChild(modal);\r\n document.body.appendChild(fullBg);\r\n // #endregion\r\n\r\n this.renderCurrentStep();\r\n });\r\n }\r\n\r\n private renderCurrentStep() {\r\n const contentArea = document.getElementById(\"external-camera-content\");\r\n if (!contentArea) return;\r\n\r\n contentArea.innerHTML = \"\";\r\n\r\n switch (this.currentStep) {\r\n case ExternalCameraStatusEnum.STARTED:\r\n this.renderQRCodeStep(contentArea);\r\n break;\r\n case ExternalCameraStatusEnum.QR_CODE:\r\n this.renderPhotoStep(contentArea);\r\n break;\r\n case ExternalCameraStatusEnum.POSITION:\r\n this.renderImageStep(contentArea);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Passo 1: Renderiza o QR Code e as instru\u00E7\u00F5es.\r\n */\r\n private renderQRCodeStep(container: HTMLElement) {\r\n const qrCanvas = document.createElement(\"canvas\");\r\n qrCanvas.id = \"qr-code-canvas\";\r\n\r\n const instructions = document.createElement(\"p\");\r\n instructions.innerText =\r\n \"Aponte a c\u00E2mera do seu celular para o QR Code para iniciar a verifica\u00E7\u00E3o do ambiente.\";\r\n this.applyStyles(instructions, {\r\n textAlign: \"center\",\r\n color: \"#555\",\r\n marginTop: \"20px\",\r\n });\r\n\r\n const ctx = qrCanvas.getContext(\"2d\");\r\n\r\n // Criar a imagem\r\n const img = new Image();\r\n img.onload = () => {\r\n const targetWidth = 250;\r\n const scale = targetWidth / img.width;\r\n const targetHeight = img.height * scale;\r\n\r\n qrCanvas.width = targetWidth;\r\n qrCanvas.height = targetHeight;\r\n if(ctx)\r\n ctx.drawImage(img, 0, 0, targetWidth, targetHeight);\r\n };\r\n\r\n // Atribuir o base64 \u00E0 imagem\r\n img.src = this.qrCodeBase64Image;\r\n\r\n container.appendChild(qrCanvas);\r\n container.appendChild(instructions);\r\n\r\n // const pairingObject = {\r\n // externalSessionId: this.externalSessionId,\r\n // token: this.context.token,\r\n // proctoringId: this.proctoringId,\r\n // ambient: this.context.type\r\n // };\r\n // const pairingDataString = JSON.stringify(pairingObject);\r\n\r\n // QRCode.toCanvas(qrCanvas, pairingDataString, { width: 250 }, (error) => {\r\n // if (error) console.error(\"Erro ao gerar QR Code:\", error);\r\n // });\r\n\r\n const continueBtn = document.getElementById(\r\n \"external-camera-continue\"\r\n ) as HTMLButtonElement;\r\n continueBtn.disabled = true;\r\n this.applyStyles(continueBtn, { color: \"#ccc\", cursor: \"not-allowed\" });\r\n }\r\n\r\n /**\r\n * Passo 2: Renderiza a etapa de captura\r\n */\r\n private renderPhotoStep(container: HTMLElement) {\r\n\r\n\r\n // Instruction text\r\n const instructions = document.createElement(\"p\");\r\n instructions.id = \"photo-message\";\r\n instructions.innerText =\r\n \"Clique no bot\u00E3o abaixo para realizar a captura da foto do ambiente.\";\r\n this.applyStyles(instructions, {\r\n textAlign: \"center\",\r\n color: \"#555\",\r\n marginBottom: \"20px\",\r\n fontSize: \"14px\",\r\n display: \"-webkit-box\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n });\r\n // Set vendor-prefixed properties directly\r\n (instructions.style as any).webkitLineClamp = \"3\";\r\n (instructions.style as any).webkitBoxOrient = \"vertical\";\r\n container.appendChild(instructions);\r\n\r\n \r\n // Error banner\r\n const errorBanner = document.createElement(\"div\");\r\n errorBanner.id = \"photo-error-banner\";\r\n errorBanner.innerText = \"Foto fora do padr\u00E3o esperado.\";\r\n this.applyStyles(errorBanner, {\r\n backgroundColor: \"#FEE2E2\",\r\n color: \"#DC2626\",\r\n padding: \"12px 15px\",\r\n borderRadius: \"8px\",\r\n textAlign: \"center\",\r\n fontSize: \"12px\",\r\n fontWeight: \"400\",\r\n marginBottom: \"15px\",\r\n display: \"none\", // Hidden by default, can be shown when needed\r\n });\r\n container.appendChild(errorBanner);\r\n\r\n // White card container\r\n const card = document.createElement(\"div\");\r\n this.applyStyles(card, {\r\n backgroundColor: \"#fff\",\r\n borderRadius: \"8px\",\r\n padding: \"20px\",\r\n display: \"flex\",\r\n gap: \"20px\",\r\n alignItems: \"flex-start\",\r\n border: \"1px solid #e5e5e5\",\r\n marginBottom: \"20px\",\r\n });\r\n\r\n // Left side - Camera icon or captured image\r\n const iconContainer = document.createElement(\"div\");\r\n iconContainer.id = \"photo-icon-container\";\r\n this.applyStyles(iconContainer, {\r\n backgroundColor: \"#f5f5f5\",\r\n borderRadius: \"8px\",\r\n width: \"120px\",\r\n height: \"160px\",\r\n minWidth: \"120px\",\r\n minHeight: \"160px\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n flexShrink: \"0\",\r\n overflow: \"hidden\",\r\n });\r\n\r\n if (this.capturePhotoUrl && this.capturePhotoUrl.trim() !== \"\") {\r\n // Show captured image if available\r\n const capturedImage = document.createElement(\"img\");\r\n capturedImage.id = \"img-photo\";\r\n // Ensure base64 prefix is correct\r\n const base64Data = this.capturePhotoUrl.startsWith(\"data:\") \r\n ? this.capturePhotoUrl \r\n : \"data:image/jpeg;base64,\" + this.capturePhotoUrl;\r\n capturedImage.src = base64Data;\r\n this.applyStyles(capturedImage, {\r\n width: \"100%\",\r\n height: \"100%\",\r\n objectFit: \"contain\",\r\n objectPosition: \"center\",\r\n borderRadius: \"8px\",\r\n display: \"block\",\r\n });\r\n iconContainer.appendChild(capturedImage);\r\n } else {\r\n // Show camera icon if no image captured\r\n const cameraIcon = document.createElement(\"div\");\r\n cameraIcon.innerHTML = `\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M23 19C23 19.5304 22.7893 20.0391 22.4142 20.4142C22.0391 20.7893 21.5304 21 21 21H3C2.46957 21 1.96086 20.7893 1.58579 20.4142C1.21071 20.0391 1 19.5304 1 19V8C1 7.46957 1.21071 6.96086 1.58579 6.58579C1.96086 6.21071 2.46957 6 3 6H7L9 4H15L17 6H21C21.5304 6 22.0391 6.21071 22.4142 6.58579C22.7893 6.96086 23 7.46957 23 8V19Z\" stroke=\"#666\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M12 17C14.2091 17 16 15.2091 16 13C16 10.7909 14.2091 9 12 9C9.79086 9 8 10.7909 8 13C8 15.2091 9.79086 17 12 17Z\" stroke=\"#666\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n `;\r\n iconContainer.appendChild(cameraIcon);\r\n }\r\n card.appendChild(iconContainer);\r\n\r\n // Right side - Content\r\n const contentSide = document.createElement(\"div\");\r\n this.applyStyles(contentSide, {\r\n flex: \"1\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"15px\",\r\n });\r\n\r\n // Heading\r\n const heading = document.createElement(\"h4\");\r\n heading.innerText = \"Capture uma foto n\u00EDtida\";\r\n this.applyStyles(heading, {\r\n margin: \"0\",\r\n fontSize: \"16px\",\r\n fontWeight: \"bold\",\r\n color: \"#333\",\r\n });\r\n contentSide.appendChild(heading);\r\n\r\n // Checklist\r\n const checklist = document.createElement(\"div\");\r\n this.applyStyles(checklist, {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"10px\",\r\n });\r\n\r\n const checklistItems = [\r\n \"Boa ilumina\u00E7\u00E3o e sem reflexos\",\r\n \"Mostre a mesa, cadeira e ambiente\",\r\n \"Evite pessoas ao fundo\"\r\n ];\r\n\r\n checklistItems.forEach(itemText => {\r\n const item = document.createElement(\"div\");\r\n this.applyStyles(item, {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"8px\",\r\n fontSize: \"14px\",\r\n color: \"#555\",\r\n });\r\n\r\n const checkmark = document.createElement(\"span\");\r\n checkmark.innerHTML = `\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"10\" cy=\"10\" r=\"9\" stroke=\"#16A34A\" stroke-width=\"2\" fill=\"none\"/>\r\n <path d=\"M6 10L9 13L14 7\" stroke=\"#16A34A\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n `;\r\n this.applyStyles(checkmark, {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n width: \"20px\",\r\n height: \"20px\",\r\n flexShrink: \"0\",\r\n });\r\n\r\n const text = document.createElement(\"span\");\r\n text.innerText = itemText;\r\n\r\n item.appendChild(checkmark);\r\n item.appendChild(text);\r\n checklist.appendChild(item);\r\n });\r\n\r\n contentSide.appendChild(checklist);\r\n\r\n // Capture button\r\n const positionCaptureButton = document.createElement(\"button\");\r\n positionCaptureButton.innerText = \"Capturar foto\";\r\n positionCaptureButton.id = \"position-capture-button\";\r\n this.applyStyles(positionCaptureButton, {\r\n marginTop: \"10px\",\r\n padding: \"12px 24px\",\r\n fontSize: \"14px\",\r\n fontWeight: \"bold\",\r\n color: \"white\",\r\n backgroundColor: \"#16A34A\",\r\n border: \"none\",\r\n borderRadius: \"6px\",\r\n cursor: \"pointer\",\r\n transition: \"background-color 0.2s\",\r\n alignSelf: \"flex-start\",\r\n });\r\n\r\n positionCaptureButton.onclick = () => {\r\n if (this.connection) {\r\n const instructions = document.getElementById(\"photo-message\");\r\n if(instructions)\r\n instructions.innerText =\r\n \"N\u00E3o saia da posi\u00E7\u00E3o atual, estamos validando o ambiente...\";\r\n \r\n errorBanner.style.display = \"none\";\r\n this.takePicture(true, ()=>{}); \r\n positionCaptureButton.disabled = true;\r\n this.applyStyles(positionCaptureButton, {\r\n backgroundColor: \"#9CA3AF\",\r\n cursor: \"not-allowed\",\r\n });\r\n }\r\n };\r\n\r\n contentSide.appendChild(positionCaptureButton);\r\n card.appendChild(contentSide);\r\n container.appendChild(card);\r\n\r\n // Tip section\r\n const tipSection = document.createElement(\"div\");\r\n this.applyStyles(tipSection, {\r\n marginTop: \"10px\",\r\n fontSize: \"13px\",\r\n color: \"#666\",\r\n });\r\n\r\n const tipLabel = document.createElement(\"span\");\r\n tipLabel.innerText = \"Dica: \";\r\n tipLabel.style.fontWeight = \"bold\";\r\n\r\n const tipText = document.createElement(\"span\");\r\n tipText.innerText = \"mantenha o celular est\u00E1vel durante todo o processo.\";\r\n\r\n tipSection.appendChild(tipLabel);\r\n tipSection.appendChild(tipText);\r\n container.appendChild(tipSection);\r\n\r\n // Desabilitar o bot\u00E3o de continuar at\u00E9 que o QR Code seja escaneado\r\n const continueBtn = document.getElementById(\r\n \"external-camera-continue\"\r\n ) as HTMLButtonElement;\r\n continueBtn.disabled = true;\r\n this.applyStyles(continueBtn, { color: \"#ccc\", cursor: \"not-allowed\" });\r\n}\r\n\r\n \r\n\r\n /**\r\n * Passo 3: Renderiza a imagem capturada.\r\n */\r\n private renderImageStep(container: HTMLElement) {\r\n container.innerHTML = \"\";\r\n const image = document.createElement(\"img\");\r\n image.src = \"data:image/jpeg;base64,\" + this.capturePhotoUrl;\r\n this.applyStyles(image, {\r\n maxWidth: \"100%\",\r\n maxHeight: \"300px\",\r\n borderRadius: \"8px\",\r\n });\r\n\r\n container.appendChild(image);\r\n\r\n // Criar um elemento de texto de instru\u00E7\u00E3o\r\n const instructions = document.createElement(\"photo-message\");\r\n instructions.id = \"photo-message\";\r\n instructions.innerText = \"Verifica\u00E7\u00E3o finalizada com sucesso.\";\r\n this.applyStyles(instructions, {\r\n textAlign: \"center\",\r\n color: \"#555\",\r\n marginTop: \"20px\",\r\n });\r\n\r\n // Adicionar o canvas e as instru\u00E7\u00F5es ao container\r\n container.appendChild(instructions);\r\n\r\n const continueBtn = document.getElementById(\r\n \"external-camera-continue\"\r\n ) as HTMLButtonElement;\r\n continueBtn.disabled = false;\r\n\r\n continueBtn.innerText = \"Concluir\";\r\n this.applyStyles(continueBtn, {\r\n width: \"100%\",\r\n height: \"70px\",\r\n backgroundColor: \"#FFF\",\r\n border: \"none\",\r\n color: \"rgba(0, 0, 0, .7)\",\r\n fontWeight: \"bold\",\r\n borderRadius: \"0 0 10px 0\",\r\n cursor: \"pointer\",\r\n borderLeft: \"2px solid rgba(0, 0, 0, .1)\",\r\n });\r\n\r\n \r\n continueBtn.onclick = () => {\r\n this.closeCheckExternalCamera();\r\n this.resolvePromise({ result: true });\r\n };\r\n }\r\n\r\n private nextState() {\r\n this.renderCurrentStep();\r\n }\r\n\r\n // --- L\u00D3GICA DE WEBSOCKET ---\r\n public async initializeWebSocketConnection() {\r\n const hubUrl = this.backend.getSocketUrl();\r\n\r\n this.connection = new HubConnectionBuilder()\r\n .withUrl(hubUrl, {\r\n accessTokenFactory: () => this.context.token!,\r\n transport: HttpTransportType.WebSockets,\r\n withCredentials: false,\r\n skipNegotiation: true,\r\n })\r\n .withAutomaticReconnect()\r\n .configureLogging(LogLevel.Information)\r\n .build();\r\n\r\n this.connection.on(\r\n \"ReceiveMessage\",\r\n (sessionId: string, messageStr: string) => {\r\n console.log(\"sessionId: \", sessionId);\r\n console.log(\"Message: \", messageStr);\r\n if (sessionId !== this.externalSessionId) {\r\n console.warn(\"Sess\u00E3o diferente!\");\r\n return;\r\n }\r\n\r\n try {\r\n type EnumKey = keyof typeof ExternalCameraStatusEnum;\r\n const messageKey = messageStr as EnumKey;\r\n\r\n const message: ExternalCameraStatusEnum =\r\n ExternalCameraStatusEnum[messageKey];\r\n\r\n console.log(\"Mensagem -> \", message);\r\n this.handleWebSocketMessage(message);\r\n } catch (e) {\r\n console.error(\"Erro ao processar mensagem do WebSocket:\", e);\r\n }\r\n }\r\n );\r\n\r\n this.connection.on(\r\n \"ReceiveAction\",\r\n (sessionId: string, actionMessage: ActionMessage) => {\r\n console.log(\"sessionId: \", sessionId);\r\n console.log(\"Message: \", actionMessage);\r\n if (sessionId !== this.externalSessionId) {\r\n console.warn(\"Sess\u00E3o diferente!\");\r\n return;\r\n }\r\n\r\n try {\r\n this.handleWebSocketAction(actionMessage);\r\n } catch (e) {\r\n console.error(\"Erro ao processar mensagem do WebSocket:\", e);\r\n }\r\n }\r\n );\r\n\r\n try {\r\n await this.connection.start();\r\n console.log(\"Conectado ao Hub SignalR com sucesso!\");\r\n } catch (err) {\r\n console.error(\"Falha ao conectar ou entrar no grupo do SignalR: \", err);\r\n throw new Error(\"N\u00E3o foi poss\u00EDvel conectar ao servi\u00E7o em tempo real.\");\r\n }\r\n }\r\n\r\n /**\r\n * 7. Processa as a\u00E7\u00F5es recebidas e atualiza a UI.\r\n */\r\n private handleWebSocketAction(action: ActionMessage) {\r\n const positionCaptureButton = document.getElementById(\"position-capture-button\") as HTMLButtonElement;\r\n const instructions = document.getElementById(\"photo-message\");\r\n const errorBanner = document.getElementById(\"photo-error-banner\");\r\n\r\n switch (action.command) {\r\n case 'Capture_Error':\r\n // habilita botao de capturar novamente e exibe mensagem de erro\r\n if(positionCaptureButton)\r\n {\r\n this.applyStyles(positionCaptureButton, {\r\n marginTop: \"30px\",\r\n padding: \"12px 20px\",\r\n fontSize: \"16px\",\r\n fontWeight: \"bold\",\r\n color: \"white\",\r\n backgroundColor: \"#16A34A\",\r\n border: \"none\",\r\n borderRadius: \"8px\",\r\n cursor: \"pointer\",\r\n transition: \"background-color 0.2s\",\r\n });\r\n positionCaptureButton.disabled = false;\r\n }\r\n\r\n if(instructions)\r\n instructions.innerText = \"\"+action.message;\r\n\r\n if(errorBanner)\r\n errorBanner.style.display = \"flex\";\r\n\r\n if(this.waitingPositionValidation == true)\r\n this.onTakePictureCallback({\r\n photo: this.capturePhotoUrl,\r\n errorMessage: action.message,\r\n success: false\r\n });\r\n break;\r\n case 'CapturePhoto':\r\n //console.log(action.message)\r\n // exibe a foto capturada?\r\n this.capturePhotoUrl = \"\"+action.message;\r\n // if(instructions)\r\n // instructions.innerText = \"\";\r\n const iconContainer = document.getElementById(\"photo-icon-container\");\r\n if (iconContainer && this.capturePhotoUrl && this.capturePhotoUrl.trim() !== \"\") {\r\n // Check if image already exists, otherwise replace camera icon with image\r\n let image = document.getElementById(\"img-photo\") as HTMLImageElement;\r\n if (!image) {\r\n // Remove camera icon if present\r\n iconContainer.innerHTML = \"\";\r\n // Create new image element\r\n image = document.createElement(\"img\");\r\n image.id = \"img-photo\";\r\n this.applyStyles(image, {\r\n width: \"100%\",\r\n height: \"100%\",\r\n objectFit: \"contain\",\r\n objectPosition: \"center\",\r\n borderRadius: \"8px\",\r\n display: \"block\",\r\n });\r\n iconContainer.appendChild(image);\r\n }\r\n // Set the image source - ensure base64 prefix is correct\r\n const base64Data = this.capturePhotoUrl.startsWith(\"data:\") \r\n ? this.capturePhotoUrl \r\n : \"data:image/jpeg;base64,\" + this.capturePhotoUrl;\r\n image.src = base64Data;\r\n \r\n // Force image to load\r\n image.onload = () => {\r\n console.log(\"Image loaded successfully in icon container\");\r\n };\r\n image.onerror = (e) => {\r\n console.error(\"Error loading image:\", e);\r\n };\r\n }\r\n\r\n if(this.waitingPositionValidation == false)\r\n this.onTakePictureCallback({\r\n photo: this.capturePhotoUrl\r\n });\r\n\r\n break;\r\n case 'Check_Transmission':\r\n if(action.message == 'Transmission_OK')\r\n this.transmissionOk = true;\r\n break;\r\n case 'Cancel':\r\n // cancela processo\r\n this.closeCheckExternalCamera();\r\n break;\r\n case 'EnvironmentAlert':\r\n this.onRealtimeAlertsCallback({\r\n status: \"ALERT\",\r\n description: action.message,\r\n type: \"environment_alert\",\r\n });\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * 7. Processa as mensagens recebidas e atualiza a UI.\r\n */\r\n private handleWebSocketMessage(status: ExternalCameraStatusEnum) {\r\n this.currentStep = status;\r\n switch (status) {\r\n case ExternalCameraStatusEnum.QR_CODE:\r\n if (this.currentStep === 1) {\r\n this.nextState();\r\n this.onQrCodeReadedCallback(true);\r\n }\r\n break;\r\n case ExternalCameraStatusEnum.POSITION:\r\n this.nextState();\r\n if(this.waitingPositionValidation == true)\r\n this.onTakePictureCallback({\r\n photo: this.capturePhotoUrl,\r\n success: true\r\n });\r\n break;\r\n case ExternalCameraStatusEnum.FINISHED:\r\n this.closeCheckExternalCamera();\r\n break;\r\n\r\n case ExternalCameraStatusEnum.ERROR:\r\n console.error(\"Erro recebido do processo de c\u00E2mera externa.\");\r\n this.closeCheckExternalCamera();\r\n this.resolvePromise({ result: false });\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * 8. Desconecta do WebSocket de forma limpa.\r\n */\r\n public async disconnectWebSocket() {\r\n if (this.connection) {\r\n try {\r\n //await this.connection.invoke(\"RemoveFromGroup\", this.externalSessionId);\r\n await this.connection.stop();\r\n console.log(\"Desconectado do SignalR.\");\r\n } catch (err) {\r\n console.error(\"Erro ao desconectar do SignalR:\", err);\r\n } finally {\r\n this.connection = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Limpa os recursos, desconecta o WebSocket e remove o modal da tela.\r\n */\r\n public closeCheckExternalCamera() {\r\n \r\n ExternalCameraChecker.isModalOpen = false;\r\n \r\n // N\u00E3o vai desconectar agora pq vai receber alerta, s\u00F3 se for o teste\r\n this.disconnectWebSocket();\r\n\r\n const checkDiv = document.querySelector(\"#externalCameraCheck\");\r\n checkDiv?.remove();\r\n }\r\n\r\n /**\r\n * Fun\u00E7\u00E3o auxiliar para aplicar estilos.\r\n */\r\n private applyStyles(\r\n element: HTMLElement,\r\n styles: Partial<CSSStyleDeclaration>\r\n ) {\r\n for (const property in styles) {\r\n element.style[property as any] = styles[property]!;\r\n }\r\n }\r\n}\r\n", "import StartProctoringResponse from \"../dtos/StartProctoringResponse\";\r\nimport {\r\n BROWSER_NOT_SUPPORTED,\r\n CREDENTIALS_MISSING,\r\n ERROR_ON_MOBILE_APP_NOT_FOUND,\r\n EXTERNAL_CAMERA_CHECK_TRANSMISSION,\r\n EXTERNAL_CAMERA_NOT_STARTED,\r\n MULTIPLE_MONITORS_DETECTED,\r\n PROCTORING_ALREADY_STARTED,\r\n PROCTORING_NOT_STARTED,\r\n SPY_SCAN_API_NOT_FOUND,\r\n TOKEN_MISSING,\r\n} from \"../errors/errors\";\r\nimport { ExtensionEasyProctor } from \"../extension/extensionEasyProctor\";\r\nimport { ExtensionEasyCatcher } from \"../extension/extensionEasyCatcher\";\r\nimport Devices, { Device, DevicesChanged } from \"../interfaces/Devices\";\r\nimport IParamsConfig from \"../interfaces/ParamsConfig\";\r\nimport {\r\n checkIfhasMultipleMonitors,\r\n // checkPermissions,\r\n} from \"../modules/checkPermissions\";\r\nimport enumarateDevices from \"../modules/enumarateDevices\";\r\nimport { onChangeDevices } from \"../modules/onChangeDevices\";\r\nimport { BackendService } from \"../new-flow/backend/BackendService\";\r\nimport { DownloadService } from \"../new-flow/download/downloadService\";\r\nimport { ProctoringRecorder } from \"../new-flow/proctoring/ProctoringRecorder\";\r\nimport { AlertCategory, AlertType, FinishRealtimeWarningCategory, ProctoringSession } from \"../new-flow/proctoring/ProctoringSession\";\r\nimport { ProctoringUploader } from \"../new-flow/proctoring/ProctoringUploader\";\r\nimport { AlertRecorder } from \"../new-flow/recorders/AlertRecorder\";\r\nimport { CameraRecorder } from \"../new-flow/recorders/CameraRecorder\";\r\n// import { NoiseRecorder } from \"../new-flow/recorders/NoiseRecorder\";\r\nimport { IRecorder } from \"../new-flow/recorders/IRecorder\";\r\nimport { ScreenRecorder } from \"../new-flow/recorders/ScreenRecorder\";\r\nimport { IndexDbSessionRepository } from \"../new-flow/repository/IndexDbSessionRepository\";\r\nimport { ISessionRepository } from \"../new-flow/repository/ISessionRepository\";\r\nimport { UploadService } from \"../new-flow/upload/UploadService\";\r\nimport { trackers, init as initInsights } from \"../plugins/insights\";\r\nimport { fnBrowserDetect, isMobileDevice } from \"../utils/browserInformations\";\r\nimport { GeolocationInterface, getGeolocation } from \"../utils/geolocation\";\r\nimport { versionVerify } from \"../utils/verifyVersion\";\r\nimport { Auth } from \"./Auth\";\r\nimport {\r\n getDefaultProctoringOptions,\r\n ProctoringSessionOptions,\r\n} from \"./options/ProctoringOptions\";\r\nimport {\r\n ProctoringVideoOptions,\r\n validatePartialVideoOptions,\r\n} from \"./options/ProctoringVideoOptions\";\r\nimport { SpyCam } from \"../modules/SpyCam\";\r\nimport { DeviceTypeEnum } from \"../new-flow/backend/SpyCamBackendService\";\r\nimport { ExternalCameraChecker } from \"./ExternalCameraChecker\";\r\n\r\nexport interface ProctoringContext {\r\n type?: string;\r\n examId: string;\r\n clientId: string;\r\n token?: string;\r\n credentials?: {\r\n cpf: string;\r\n };\r\n showConsole?: boolean;\r\n}\r\n\r\nexport interface ProctoringFinisherOptions {\r\n onProgress?: (percentage: number) => void;\r\n onResultAvailable?: (score: number, scoreThreshold: number, approved: boolean, justification: string) => void;\r\n}\r\n\r\nexport interface ProctoringChangeDevicesOptions {\r\n status?: (devices: DevicesChanged) => void;\r\n}\r\n\r\nexport interface ProctoringRealtimeAlertsOptions {\r\n data?: (response: any) => void;\r\n}\r\n\r\nexport enum ProctoringState {\r\n Stop = \"Stop\",\r\n Starting = \"Starting\",\r\n Recording = \"Recording\",\r\n Stopping = \"Stopping\",\r\n Paused = \"Paused\",\r\n}\r\n\r\nexport enum ServiceType {\r\n Download = \"Download\",\r\n Upload = \"Upload\",\r\n}\r\n\r\nexport class Proctoring {\r\n private auth: Auth;\r\n private readonly backend: BackendService;\r\n private readonly repository: ISessionRepository;\r\n private readonly repositoryDevices: ISessionRepository;\r\n private extension: ExtensionEasyProctor;\r\n private extensionEasycatcher: ExtensionEasyCatcher;\r\n private deviceData: any | null = null;\r\n private sessionStartTime: number = 0;\r\n\r\n private paramsConfig: IParamsConfig = {\r\n audioBehaviourParameters: {\r\n recordingBitrate: 128,\r\n noiseLimit: 40,\r\n },\r\n imageBehaviourParameters: {\r\n useUploadImage: true,\r\n uploadInterval: 20,\r\n saveVideo: true,\r\n },\r\n videoBehaviourParameters: {\r\n detectFace: false,\r\n detectPerson: false,\r\n detectCellPhone: false,\r\n detectNoise: false,\r\n detectSpeech: false,\r\n realtimePackageSize: 10,\r\n realtimeCaptureInterval: 2,\r\n },\r\n };\r\n private proctoringId = \"\";\r\n private insights?: string = undefined;\r\n private proctoringSession: ProctoringSession;\r\n private sessionOptions: ProctoringSessionOptions;\r\n private videoOptions: ProctoringVideoOptions;\r\n private geolocation: GeolocationInterface;\r\n\r\n private state: ProctoringState = ProctoringState.Stop;\r\n private serviceType: ServiceType = ServiceType.Upload;\r\n\r\n private recorder: ProctoringRecorder;\r\n private allRecorders: {\r\n cameraRecorder: CameraRecorder;\r\n screenRecorder: ScreenRecorder | undefined;\r\n alertRecorder: AlertRecorder;\r\n // noiseRecorder: NoiseRecorder;\r\n };\r\n\r\n private spyCam: SpyCam;\r\n public appChecker:ExternalCameraChecker;\r\n private verifyFirstFaceInterval: any;\r\n\r\n\r\n private onStopSharingScreenCallback = () => {};\r\n public setOnStopSharingScreenCallback(cb: () => void) {\r\n this.onStopSharingScreenCallback = async () => {\r\n trackers.registerStopSharingScreen(\r\n this.proctoringId,\r\n \"Stop sharing screen\"\r\n );\r\n this.allRecorders?.alertRecorder?.addAlert({\r\n alert: AlertCategory.StopSharingScreen,\r\n type: AlertType.Screen\r\n });\r\n this.allRecorders?.screenRecorder?.stopRecording();\r\n cb();\r\n };\r\n }\r\n\r\n private setOnLostFocusAlertRecorderCallback() {\r\n // adicionar callback para perda de foco ao realtime alerts\r\n this.onLostFocusAlertRecorderCallback = async (response: any) => {\r\n this.onLostFocusCallback && this.onLostFocusCallback();\r\n if(this.sessionOptions.proctoringType === \"REALTIME\"){\r\n await this.onRealtimeAlertsCallback({\r\n type: \"lost_focus\",\r\n category: \"lost_focus\",\r\n description: 'Perda de foco no exame',\r\n begin: response.begin,\r\n end: response.end,\r\n alert: AlertCategory.FocusOff,\r\n status: \"ALERT\",\r\n });\r\n }\r\n }\r\n }\r\n\r\n private setOnFocusAlertRecorderCallback() {\r\n // adicionar callback para retorno de foco ao realtime alerts\r\n this.onFocusAlertRecorderCallback = async (response: any) => {\r\n\r\n this.onFocusCallback && this.onFocusCallback();\r\n if(this.sessionOptions.proctoringType === \"REALTIME\"){\r\n await this.onRealtimeAlertsCallback({\r\n type: \"focus\",\r\n category: \"focus\",\r\n description: 'Retorno de foco no exame',\r\n begin: response.begin,\r\n end: response.end,\r\n alert: AlertCategory.FocusOff,\r\n status: \"OK\",\r\n });\r\n }}\r\n }\r\n\r\n private onLostFocusCallback = () => {};\r\n private onLostFocusAlertRecorderCallback = (response: any) => {};\r\n public async setOnLostFocusCallback(cb: () => void) {\r\n this.onLostFocusCallback = async () => await cb();\r\n this.setOnLostFocusAlertRecorderCallback();\r\n }\r\n\r\n private onFocusCallback = () => {};\r\n private onFocusAlertRecorderCallback = (response: any) => {};\r\n public async setOnFocusCallback(cb: () => void) {\r\n this.onFocusCallback = async () => await cb();\r\n this.setOnFocusAlertRecorderCallback();\r\n }\r\n\r\n private onChangeDevicesCallback = (devices: DevicesChanged) => {\r\n return;\r\n };\r\n public async onChangeDevices(\r\n options: ProctoringChangeDevicesOptions = {}\r\n ): Promise<void> {\r\n const onChange = new onChangeDevices(\r\n this.repositoryDevices,\r\n this.proctoringId,\r\n this.sessionOptions,\r\n this.allRecorders\r\n );\r\n\r\n onChange.startRecording(options);\r\n\r\n this.onChangeDevicesCallback = (devices: DevicesChanged) => \r\n options.status && options.status(devices);\r\n }\r\n\r\n\r\n private convertRealtimeCategoryToAlertCategory(category: string): AlertCategory | null {\r\n switch(category) {\r\n case 'no_face_detected':\r\n return AlertCategory.NoFace;\r\n case 'multiple_faces_detected':\r\n return AlertCategory.MultipleFaces;\r\n case 'multiple_persons_detected':\r\n return AlertCategory.EnvironmentMultiplePeople;\r\n case 'no_person_detected':\r\n return AlertCategory.EnvironmentNoPeople;\r\n case 'lost_focus':\r\n return AlertCategory.FocusOff;\r\n case 'focus':\r\n return AlertCategory.FocusOff;\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n private convertRealtimeTypeToWarningType(category: string): FinishRealtimeWarningCategory | null {\r\n switch(category) {\r\n case 'face_detection_on_stream':\r\n return FinishRealtimeWarningCategory.Face;\r\n case 'person_detection_on_stream':\r\n return FinishRealtimeWarningCategory.People;\r\n case 'lost_focus':\r\n return FinishRealtimeWarningCategory.LostFocus;\r\n case 'focus':\r\n return FinishRealtimeWarningCategory.LostFocus;\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n // metodo para fechar o alerta realtime e fica tentando verificar a face at\u00E9 5 vezes\r\n private async stopRealtimeAlert(alert: any) {\r\n\r\n const verifyMaxRetries = 3;\r\n // metodo recursivo para verificar a face at\u00E9 3 vezes\r\n const verifyFace = async (verifyCount: number): Promise<any> => {\r\n if(verifyCount > verifyMaxRetries) return;\r\n try {\r\n //var response = await this.backend.verifyFace(this.proctoringId, await this.allRecorders.cameraRecorder.getCurrentImageBase64(), verifyCount > 5 ? false : true);\r\n var response = await this.backend.stopRealtimeAlert({\r\n proctoringId: this.proctoringId,\r\n begin: alert.begin,\r\n end: alert.end,\r\n warningCategoryEnum: this.convertRealtimeTypeToWarningType(alert.type),\r\n alertImageBase64: await this.allRecorders.cameraRecorder.getCurrentImageBase64(),\r\n retry: verifyCount < verifyMaxRetries-1 ? true : false\r\n });\r\n console.log(\"response stopRealtimeAlert\", response);\r\n return response;\r\n } catch(error: any) {\r\n console.log(\"error stopRealtimeAlert\", error);\r\n return verifyFace(verifyCount + 1);\r\n }\r\n }\r\n await verifyFace(1);\r\n \r\n }\r\n private onRealtimeAlertsCallback = (response: any) => {\r\n return;\r\n };\r\n \r\n public async onRealtimeAlerts(\r\n options: ProctoringRealtimeAlertsOptions = {}\r\n ): Promise<void> {\r\n\r\n this.setOnLostFocusAlertRecorderCallback();\r\n this.setOnFocusAlertRecorderCallback();\r\n this.onRealtimeAlertsCallback = async (response: any) =>\r\n {\r\n options.data && options.data(response);\r\n\r\n // Se for realtime, chamar o backend para salvar os warnings\r\n if(this.sessionOptions.proctoringType === \"REALTIME\" && \r\n (response.type === \"face_detection_on_stream\" || response.type === \"person_detection_on_stream\" || response.type === \"lost_focus\" || response.type === \"focus\")) {\r\n\r\n // start\r\n if(response.status === 'ALERT') {\r\n await this.backend.startRealtimeAlert({\r\n proctoringId: this.proctoringId,\r\n begin: response.begin,\r\n end: response.end,\r\n alert: this.convertRealtimeCategoryToAlertCategory(response.category),\r\n });\r\n }\r\n else if(response.status === 'OK') { // stop\r\n await this.stopRealtimeAlert(response);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private onBufferSizeErrorCallback = (cameraStream?: any) => {\r\n return;\r\n };\r\n public setOnBufferSizeErrorCallback(cb: (cameraStream?: any) => void) {\r\n // console.log(\"proctoring.setOnBufferSizeErrorCallback\");\r\n this.onBufferSizeErrorCallback = (cameraStream?: any) => cb(cameraStream);\r\n }\r\n\r\n // private onProgress = (percentage: number) => {};\r\n // public setOnProgress(cb: (percentage: number) => void) {\r\n // console.log(\"proctoring.setOnProgress\");\r\n // this.onProgress = (percentage) => cb(percentage);\r\n // }\r\n\r\n public setDeviceCheckData(data: any) {\r\n this.deviceData = data;\r\n }\r\n\r\n constructor(private context: ProctoringContext) {\r\n // console.log(\"new proctoring\", context);\r\n this.backend = new BackendService({\r\n type: context.type || \"prod\",\r\n token: context.token!,\r\n });\r\n this.repository = new IndexDbSessionRepository(\"EasyProctorDb\", \"exams2\");\r\n this.repositoryDevices = new IndexDbSessionRepository(\r\n \"EasyProctorDbDevices\",\r\n \"devices\"\r\n );\r\n this.context.credentials?.cpf &&\r\n (this.auth = new Auth(this.context.credentials!.cpf, this.backend));\r\n\r\n this.appChecker = new ExternalCameraChecker(this.context, (response: any) => this.onRealtimeAlertsCallback(response));\r\n }\r\n\r\n private async createRecorders(\r\n options: ProctoringSessionOptions = getDefaultProctoringOptions\r\n ) {\r\n this.onChangeDevices();\r\n\r\n console.log(\"Creating Recorders...\");\r\n\r\n await this.recorder?.stopAll();\r\n \r\n const cameraRecorder = new CameraRecorder(\r\n {\r\n cameraId: this.sessionOptions.cameraId,\r\n microphoneId: this.sessionOptions.microphoneId,\r\n onBufferSizeError: this.sessionOptions.onBufferSizeError,\r\n onBufferSizeErrorCallback: (cameraStream?: any) =>\r\n this.onBufferSizeErrorCallback(cameraStream),\r\n proctoringType: this.sessionOptions.proctoringType,\r\n onChangeDevicesCallback: (devices: DevicesChanged) =>\r\n this.onChangeDevicesCallback(devices),\r\n onRealtimeAlertsCallback: (response: any) =>\r\n this.onRealtimeAlertsCallback(response),\r\n },\r\n {\r\n width: this.videoOptions.width,\r\n height: this.videoOptions.height,\r\n minWidth: this.videoOptions.minWidth,\r\n minHeight: this.videoOptions.minHeight,\r\n timeSlice: this.videoOptions.timeSlice,\r\n videoBitsPerSecond: this.videoOptions.videoBitsPerSecond,\r\n mimeType: this.videoOptions.mimeType, \r\n },\r\n this.paramsConfig,\r\n this.backend,\r\n this.context.token\r\n );\r\n const screenRecorder = this.sessionOptions.captureScreen\r\n ? new ScreenRecorder({\r\n allowOnlyFirstMonitor:\r\n this.sessionOptions.allowOnlyFirstMonitor ?? true,\r\n allowMultipleMonitors:\r\n this.sessionOptions.allowMultipleMonitors ?? true,\r\n screenRecorderOptions: this.sessionOptions.screenRecorderOptions!,\r\n onStopSharingScreenCallback: () => this.onStopSharingScreenCallback(),\r\n onBufferSizeError: this.sessionOptions.onBufferSizeError,\r\n onBufferSizeErrorCallback: () => this.onBufferSizeErrorCallback(),\r\n })\r\n : undefined;\r\n\r\n\r\n const alertRecorder = new AlertRecorder(\r\n {\r\n onFocusCallback: (response: any) => this.onFocusAlertRecorderCallback(response),\r\n onLostFocusCallback: (response: any) => this.onLostFocusAlertRecorderCallback(response),\r\n onRealtimeAlertCallback: (response: any) => this.onRealtimeAlertsCallback(response),\r\n },\r\n options\r\n );\r\n\r\n // const noiseRecorder = new NoiseRecorder(\r\n // options,\r\n // this.proctoringSession,\r\n // this.paramsConfig,\r\n // cameraRecorder,\r\n // (response: any) => this.onRealtimeAlertsCallback(response),\r\n // this.backend,\r\n // this.context.token\r\n // );\r\n\r\n const recorders: IRecorder[] = [\r\n cameraRecorder,\r\n screenRecorder,\r\n alertRecorder,\r\n ].filter(Boolean) as IRecorder[];\r\n \r\n // if(this.sessionOptions.proctoringType == \"REALTIME\"){\r\n // recorders.push(noiseRecorder);\r\n // }\r\n \r\n this.recorder = new ProctoringRecorder(this.proctoringSession, recorders);\r\n\r\n return { cameraRecorder, screenRecorder, alertRecorder};\r\n }\r\n\r\n public async login() {\r\n if (!this.context.credentials?.cpf) throw CREDENTIALS_MISSING;\r\n this.context.token = await this.auth.login();\r\n }\r\n\r\n public async start(\r\n options: ProctoringSessionOptions = getDefaultProctoringOptions,\r\n _videoOptions: Partial<ProctoringVideoOptions> = {}\r\n ): Promise<StartProctoringResponse> {\r\n // console.log(\"proctoring.start\", options, _videoOptions);\r\n try {\r\n if (this.context.token === undefined) {\r\n // await this.login();\r\n throw TOKEN_MISSING;\r\n }\r\n\r\n if (options.useChallenge) {\r\n this.extensionEasycatcher = new ExtensionEasyCatcher();\r\n }\r\n\r\n this.extension = new ExtensionEasyProctor();\r\n this.extension.addEventListener();\r\n const baseURL = this.backend.selectBaseUrl(this.context.type!);\r\n // setTimeout(() => this.extension.sendVerifyMsg(baseURL, this.context.token), 5000);\r\n\r\n const devices = await enumarateDevices();\r\n await this.repositoryDevices.save({ ...devices, id: \"devices\" });\r\n\r\n //0. Salva op\u00E7\u00F5es\r\n this.sessionOptions = { ...getDefaultProctoringOptions, ...options };\r\n this.videoOptions = validatePartialVideoOptions(_videoOptions);\r\n\r\n //2. initConfig\r\n await this.initConfig(options.useGeolocation);\r\n\r\n // Verificar se \u00E9 um browser suportado\r\n await this.verifyBrowser();\r\n\r\n //3. verifica allowMultipleMonitors\r\n this.sessionOptions.captureScreen &&\r\n (await this.verifyMultipleMonitors(this.sessionOptions));\r\n\r\n // Checar o gadget de spycam\r\n try\r\n {\r\n if (options?.useSpyScan) {\r\n await this.spyCam.isAlive();\r\n }\r\n } catch(error: any) {\r\n throw SPY_SCAN_API_NOT_FOUND;\r\n }\r\n\r\n //1. Detectar que clicou 2x pra n\u00E3o chamar\r\n if (this.state != ProctoringState.Stop) {\r\n throw PROCTORING_ALREADY_STARTED;\r\n }\r\n this.state = ProctoringState.Starting;\r\n\r\n //4. limpa o banco se tiver um exame no banco\r\n if (await this.repository.hasSessions()) {\r\n await this.repository.clear();\r\n }\r\n\r\n // testa a camera externa\r\n // try {\r\n // if (options?.useExternalCamera) {\r\n // // Testar comunica\u00E7\u00E3o \r\n // await this.appChecker.checkTransmission();\r\n // }\r\n // } catch(error: any) {\r\n // throw EXTERNAL_CAMERA_CHECK_TRANSMISSION;\r\n // }\r\n\r\n //7. buscar hora do servidor, e configurar como tempo inicial\r\n //const startDate = await this.getServerDate();\r\n\r\n //6. criar new ProctoringSession(proctoringId)\r\n this.proctoringSession = new ProctoringSession();\r\n\r\n //8. iniciar captura com _startCapture recebendo os streams de camera e screen\r\n this.allRecorders = await this.createRecorders(this.sessionOptions);\r\n\r\n //5. chamar backendService.confirmStart salvando o proctoringId recebido\r\n const startResponse = await this.backend.confirmStart(\r\n {\r\n clientId: this.context.clientId,\r\n examId: this.context.examId,\r\n token: this.context.token,\r\n },\r\n this.sessionOptions,\r\n this.geolocation ? this.geolocation.coords!.latitude : undefined,\r\n this.geolocation ? this.geolocation.coords!.longitude : undefined,\r\n );\r\n this.proctoringId = startResponse.id;\r\n\r\n trackers.registerDevicesChecked(\r\n this.proctoringId,\r\n !!this.deviceData,\r\n `Devices checked: ${JSON.stringify(this.deviceData)} | Devices List: ${JSON.stringify(devices)}`\r\n );\r\n\r\n // incia a transmissao da camera externa\r\n try {\r\n if (options?.useExternalCamera) {\r\n await this.appChecker.startTransmission(this.proctoringId);\r\n }\r\n } catch(error: any) {\r\n throw EXTERNAL_CAMERA_NOT_STARTED;\r\n }\r\n\r\n \r\n // Liga apenas o listener\r\n //if (options?.useExternalCamera) \r\n //await this.appChecker.initializeWebSocketConnection();\r\n \r\n\r\n this.sessionStartTime = Date.now();\r\n\r\n // Setar proctoringId do Camera Recorder\r\n this.allRecorders.cameraRecorder.setProctoringId(this.proctoringId);\r\n // this.allRecorders.noiseRecorder.setProctoringId(this.proctoringId);\r\n this.proctoringSession.setProctoringId(this.proctoringId);\r\n\r\n try\r\n {\r\n console.log('start Proctoring recorder.startAll');\r\n await this.recorder.startAll();\r\n console.log('start Proctoring recorder.startAll ok');\r\n\r\n }\r\n catch(error: any)\r\n {\r\n console.log('start Proctoring error', error);\r\n alert(error);\r\n throw error;\r\n }\r\n\r\n //7. buscar hora do servidor, e configurar como tempo inicial\r\n //const startDate = await this.getServerDate();\r\n\r\n // Checar o gadget de spycam\r\n if (options?.useSpyScan) {\r\n this.spyCam.setProctoringId(this.proctoringId);\r\n this.spyCam.startCheckSpyCam(this.paramsConfig.spyScanInterval ?? 5, {\r\n deviceType: DeviceTypeEnum.POTENCIAL_CAMERA\r\n // rssiThreshold: 1,\r\n // packageRateThreshold: 1,\r\n });\r\n }\r\n\r\n //9. salvar a sess\u00E3o no repositorio\r\n await this.repository.save(this.proctoringSession);\r\n\r\n //10. log registerStart\r\n const _navigator: any = {};\r\n for (const i in navigator) _navigator[i] = (navigator as any)[i];\r\n trackers.registerStart(\r\n this.proctoringId,\r\n true,\r\n `Version: ${versionVerify()}\\nNavigator: ${JSON.stringify(_navigator)}`\r\n );\r\n // console.log(\"navigator: \", navigator);\r\n\r\n //12. retorna resultado do confirmStart + streams\r\n startResponse.cameraStream =\r\n this.allRecorders.cameraRecorder.cameraStream;\r\n // recorder (pause & resume)\r\n // startResponse.audioStream = this.allRecorders.audioRecorder.audioStream;\r\n if (this.allRecorders.screenRecorder) {\r\n startResponse.screenStream =\r\n this.allRecorders.screenRecorder.screenStream;\r\n }\r\n this.state = ProctoringState.Recording;\r\n // console.log(\"ProctoringState.Recording \", ProctoringState.Recording);\r\n\r\n let verifyFirstFaceIntervalCount = 0;\r\n let verifyingFace = false;\r\n // Verificar a face no primeiro segundo\r\n this.verifyFirstFaceInterval = setInterval(async () => {\r\n if(this.sessionOptions.proctoringType === \"REALTIME\") {\r\n\r\n if(verifyingFace) return;\r\n\r\n verifyingFace = true;\r\n verifyFirstFaceIntervalCount++;\r\n try {\r\n var response = await this.backend.verifyFace(this.proctoringId, await this.allRecorders.cameraRecorder.getCurrentImageBase64(), verifyFirstFaceIntervalCount > 5 ? false : true);\r\n verifyingFace = false;\r\n // parar o intervalo\r\n clearInterval(this.verifyFirstFaceInterval);\r\n } catch(error: any) {\r\n verifyingFace = false;\r\n // continuar o intervalo\r\n return;\r\n }\r\n }\r\n }, 1500);\r\n\r\n return startResponse;\r\n\r\n //ok\r\n } catch (error: any) {\r\n //13. se algo deu erro... chama o cancelCallback\r\n console.log(error);\r\n await this.cancel();\r\n this.proctoringId &&\r\n trackers.registerStart(\r\n this.proctoringId,\r\n false,\r\n `Token: ${\r\n this.context.token\r\n }\\nVersion: ${versionVerify()}\\nNavigator: ${navigator}\\nError: ${error}`\r\n );\r\n // console.log(\"Entrei no CATCH\");\r\n this.state = ProctoringState.Stop;\r\n throw error;\r\n }\r\n }\r\n\r\n private async cancel(): Promise<void> {\r\n if (\r\n this.state === ProctoringState.Recording ||\r\n this.state === ProctoringState.Starting\r\n ) {\r\n await this.recorder.stopAll();\r\n this.spyCam && (await this.spyCam.stopCheckSpyCam());\r\n }\r\n this.state = ProctoringState.Stop;\r\n }\r\n\r\n public async finish(options: ProctoringFinisherOptions = {}): Promise<void> {\r\n try {\r\n this.extension.options = options;\r\n // this.extension.sendVerifyMsg();\r\n\r\n // console.log(\"proctoring.finish\", options);\r\n //0. verificar se existe exame iniciado, se n\u00E3o...\r\n // trackers.registerError(proctoringId, 'Proctoring n\u00E3o iniciado!');\r\n // throw PROCTORING_NOT_STARTED;\r\n // console.log(\"state \", this.state);\r\n // console.log(\"ProctoringState.Recording \", ProctoringState.Recording);\r\n if (this.state !== ProctoringState.Recording) {\r\n throw PROCTORING_NOT_STARTED;\r\n }\r\n\r\n //1. stop!!!????\r\n await this.recorder.stopAll();\r\n\r\n this.spyCam && this.spyCam.stopCheckSpyCam();\r\n\r\n\r\n // Liga apenas o listener\r\n this.appChecker && await this.appChecker.disconnectWebSocket();\r\n\r\n //3. finalizar grava\u00E7\u00E3o - n faz sentido aqui\r\n //this.cancelCallback();\r\n\r\n //4. pega hora do servidor\r\n //const serverTime = await this.backend.getServerHour(this.context.token);\r\n\r\n //5. fech sess\u00E3o\r\n //_closeSession()\r\n //record.sessions.push(..., alerts, files, start, end, etc)\r\n await this.recorder.saveAllOnSession();\r\n\r\n await this.repository.save(this.proctoringSession);\r\n\r\n //2. preparar uploaders\r\n let uploader: ProctoringUploader;\r\n let uploaderServices: string;\r\n\r\n if (versionVerify() !== \"1.0.0.0\") {\r\n uploader = new ProctoringUploader(\r\n this.proctoringSession,\r\n this.proctoringId,\r\n [new DownloadService(this.proctoringId)]\r\n );\r\n uploaderServices = \"Download\";\r\n this.serviceType = ServiceType.Download;\r\n } else {\r\n uploader = new ProctoringUploader(\r\n this.proctoringSession,\r\n this.proctoringId,\r\n [\r\n new UploadService(this.proctoringId, this.backend),\r\n new DownloadService(this.proctoringId),\r\n ]\r\n );\r\n uploaderServices = \"Upload\";\r\n this.serviceType = ServiceType.Upload;\r\n }\r\n\r\n let extensionSuccess: boolean = false;\r\n\r\n // console.log(\"tem a extens\u00E3o ?\", this.extension.hasExtension);\r\n if (this.extension.hasExtension) {\r\n await this.extension\r\n .start()\r\n .then((response) => {\r\n extensionSuccess = response;\r\n })\r\n .catch((error) => {\r\n extensionSuccess = false;\r\n });\r\n }\r\n\r\n if (!extensionSuccess || !this.extension.hasExtension) {\r\n //9. faz upload\r\n await uploader\r\n .upload(this.context.token!, options.onProgress)\r\n // TODO: Test this solution\r\n // If download don't sucess do the upload\r\n .catch(async (error) => {\r\n trackers.registerUpload(\r\n this.proctoringSession.id,\r\n false,\r\n `upload error: ${error}\\n\\nUpload Services: ${uploaderServices}`,\r\n this.serviceType\r\n );\r\n\r\n if (versionVerify() !== \"1.0.0.0\") {\r\n uploader = new ProctoringUploader(\r\n this.proctoringSession,\r\n this.proctoringId,\r\n [\r\n new UploadService(this.proctoringId, this.backend),\r\n new DownloadService(this.proctoringId),\r\n ]\r\n );\r\n uploaderServices = \"Upload\";\r\n this.serviceType = ServiceType.Upload;\r\n uploaderServices = \"Download\";\r\n this.serviceType = ServiceType.Download;\r\n\r\n await uploader\r\n .upload(this.context.token!, options.onProgress)\r\n .catch((error) => {\r\n trackers.registerUpload(\r\n this.proctoringSession.id,\r\n false,\r\n `upload backup error: ${error}\\n\\nUpload Services: ${uploaderServices}\\nUpload backup for Safe Browser`,\r\n this.serviceType\r\n );\r\n });\r\n }\r\n });\r\n\r\n trackers.registerUpload(\r\n this.proctoringSession.id,\r\n true,\r\n `upload success\\n\\nUpload Services: ${uploaderServices}`,\r\n this.serviceType\r\n );\r\n }\r\n\r\n //8. manda alertas (alerts)\r\n //manda alerta numa rota separada?\r\n if (this.proctoringSession.alerts.length > 0) {\r\n await this.backend\r\n .saveAlerts(this.context, this.proctoringSession)\r\n .catch((err) => {\r\n trackers.registerFinish(\r\n this.proctoringSession.id,\r\n false,\r\n \"save-screen error: \" + err\r\n );\r\n });\r\n }\r\n\r\n //9. finish\r\n //manda urls dos arquivos\r\n await this.backend\r\n .finishAndSendUrls(this.context)\r\n .then((finishResponse: any) => {\r\n trackers.registerFinish(this.proctoringSession.id, true, \"\");\r\n console.log(\"finishResponse: \", finishResponse);\r\n options.onResultAvailable && options.onResultAvailable(finishResponse?.score ?? 100, finishResponse?.scoreThreshold ?? 70, finishResponse?.approved ?? true, finishResponse?.justification ?? \"\");\r\n })\r\n .catch((error) => {\r\n trackers.registerFinish(\r\n this.proctoringSession.id,\r\n false,\r\n \"finish error: \" + error\r\n );\r\n });\r\n\r\n \r\n // finaliza external session\r\n if(this.appChecker)\r\n {\r\n const externalSessionId = this.appChecker.getExternalCameraSessionId();\r\n console.log(\"externalSessionId -> \", externalSessionId);\r\n if(externalSessionId != \"null\")\r\n {\r\n await this.backend.externalCameraFinish(externalSessionId);\r\n }\r\n }\r\n \r\n // parar o intervalo\r\n if (this.verifyFirstFaceInterval) {\r\n clearInterval(this.verifyFirstFaceInterval);\r\n }\r\n\r\n //11. limpa repository\r\n //await this.repository.clear(); //TODO limpar no final\r\n\r\n //12. limpa alguma coisa?\r\n this.state = ProctoringState.Stop;\r\n } catch (error) {\r\n await this.cancel();\r\n trackers.registerFinish(\r\n this.proctoringId,\r\n false,\r\n `Token: ${this.context.token}\\nError: ` + error\r\n );\r\n // console.log(\"Entrei no CATCH\");\r\n this.state = ProctoringState.Stop;\r\n throw error;\r\n }\r\n }\r\n\r\n private async verifyMultipleMonitors(\r\n sessionOptions: ProctoringSessionOptions\r\n ) {\r\n if (!sessionOptions.allowMultipleMonitors) {\r\n const hasMultipleMonitors = await checkIfhasMultipleMonitors();\r\n if (hasMultipleMonitors) {\r\n trackers.registerError(\r\n this.proctoringId,\r\n \"Multiplas telas detectadas!\"\r\n );\r\n throw MULTIPLE_MONITORS_DETECTED;\r\n }\r\n }\r\n }\r\n\r\n private async verifyBrowser() {\r\n const browserName = await fnBrowserDetect();\r\n if (browserName !== \"chrome\" && browserName !== \"firefox\" && !isMobileDevice()) {\r\n trackers.registerBrowserNotSupported(\r\n this.proctoringId,\r\n `Browser n\u00E3o suportado: \\n Tentativa utilizando o browser ${browserName}`\r\n );\r\n throw BROWSER_NOT_SUPPORTED;\r\n }\r\n }\r\n\r\n private async initConfig(useGeolocation?: boolean) {\r\n try {\r\n const paramsConfig: IParamsConfig = await this.backend.getParamsConfig(\r\n this.context\r\n );\r\n\r\n this.paramsConfig = {\r\n ...this.paramsConfig,\r\n ...paramsConfig,\r\n audioBehaviourParameters: {\r\n ...this.paramsConfig.audioBehaviourParameters,\r\n ...paramsConfig.audioBehaviourParameters,\r\n },\r\n imageBehaviourParameters: {\r\n ...this.paramsConfig.imageBehaviourParameters,\r\n ...paramsConfig.imageBehaviourParameters,\r\n },\r\n videoBehaviourParameters: {\r\n ...this.paramsConfig.videoBehaviourParameters,\r\n ...paramsConfig.videoBehaviourParameters,\r\n },\r\n };\r\n\r\n if (useGeolocation) {\r\n this.geolocation = await getGeolocation()\r\n .then((resp) => resp)\r\n .catch((e) => {\r\n throw e.message;\r\n });\r\n }\r\n initInsights(this.backend);\r\n\r\n if (this.sessionOptions?.useSpyScan) {\r\n this.spyCam = new SpyCam(this.context, {\r\n onRealtimeAlertsCallback: (response: any) =>\r\n this.onRealtimeAlertsCallback(response),\r\n });\r\n }\r\n\r\n } catch (err) {\r\n this.proctoringId &&\r\n trackers.registerError(this.proctoringId, \"Erro no initConfig!\");\r\n await this.cancel();\r\n throw err;\r\n }\r\n }\r\n\r\n private async getServerDate() {\r\n const serverTime = await this.backend\r\n .getServerHour(this.context.token!)\r\n .catch((reason) => {\r\n trackers.registerError(\r\n this.proctoringId,\r\n \"N\u00E3o foi poss\u00EDvel requisitar a data do servidor!\"\r\n );\r\n return undefined;\r\n });\r\n const serverDate = serverTime\r\n ? new Date(serverTime.toString())\r\n : new Date();\r\n return serverDate;\r\n }\r\n\r\n //############################################################\r\n\r\n public async pause() {\r\n // console.log(\"proctoring.pause\");\r\n\r\n if (this.state !== ProctoringState.Recording) {\r\n trackers.registerError(this.proctoringId, \"Proctoring n\u00E3o iniciado!\");\r\n throw PROCTORING_NOT_STARTED;\r\n }\r\n\r\n // await this.recorder.pauseAll();\r\n await this.recorder.stopAll();\r\n\r\n await this.recorder.saveAllOnSession();\r\n\r\n await this.repository.save(this.proctoringSession);\r\n\r\n this.state = ProctoringState.Paused;\r\n }\r\n\r\n public async resume(): Promise<{\r\n cameraStream: MediaStream;\r\n audioStream?: MediaStream;\r\n _screenStream: MediaStream | undefined;\r\n }> {\r\n // console.log(\"proctoring.resume\", options, _videoOptions);\r\n\r\n if (this.state != ProctoringState.Paused) {\r\n throw PROCTORING_NOT_STARTED;\r\n }\r\n\r\n // Verificar se \u00E9 um browser suportado\r\n await this.verifyBrowser();\r\n\r\n await this.verifyMultipleMonitors(this.sessionOptions);\r\n\r\n // await this.recorder.resumeAll();\r\n // this.allRecorders = this.createRecorders(this.sessionOptions);\r\n await this.recorder.startAll();\r\n\r\n this.proctoringSession.recordings = []; //limpar os arquivos antigos\r\n await this.repository.save(this.proctoringSession);\r\n\r\n this.state = ProctoringState.Recording; //<----\r\n\r\n return {\r\n cameraStream: this.allRecorders.cameraRecorder.cameraStream,\r\n // recorder (pause & resume)\r\n // audioStream: this.allRecorders.audioRecorder.audioStream,\r\n _screenStream: this.allRecorders.screenRecorder?.screenStream,\r\n };\r\n }\r\n\r\n //########################### CHALLENGE #################################\r\n private isChallengeRunning: boolean;\r\n private challengeId: string;\r\n public async startChallenge(templateId: string) {\r\n if (!this.sessionOptions.useChallenge) {\r\n throw new Error(\"useChallenge is set as false on start method\");\r\n }\r\n\r\n await this.extensionEasycatcher.checkExtensionInstalled()\r\n .catch((err) => {\r\n throw new Error(\"EasyCatcher Extension is not installed\");\r\n });\r\n\r\n this.extensionEasycatcher.start();\r\n\r\n const start = Date.now() - this.sessionStartTime;\r\n await this.backend\r\n .startChallenge({ \r\n proctoringId: this.proctoringId,\r\n templateId, \r\n start \r\n })\r\n .then((resp) => {\r\n console.log(resp);\r\n this.challengeId = resp.id;\r\n })\r\n .catch((reason) => {\r\n trackers.registerError(\r\n this.proctoringId,\r\n \"N\u00E3o foi poss\u00EDvel iniciar desafio!\"\r\n );\r\n throw reason;\r\n });\r\n \r\n this.isChallengeRunning = true;\r\n }\r\n\r\n public async stopChallenge() {\r\n if (!this.isChallengeRunning) {\r\n throw new Error(\"Challenge not started\");\r\n }\r\n\r\n try {\r\n const sessionData = await this.extensionEasycatcher.getSessionData();\r\n \r\n const end = Date.now() - this.sessionStartTime;\r\n await this.backend\r\n .stopChallenge(\r\n this.challengeId, \r\n { \r\n end, \r\n data: sessionData \r\n }\r\n ) \r\n .catch((reason) => {\r\n trackers.registerError(\r\n this.proctoringId,\r\n \"N\u00E3o foi poss\u00EDvel finalizar o desafio no backend!\"\r\n );\r\n return undefined;\r\n });\r\n\r\n this.isChallengeRunning = false;\r\n } catch (error: any) {\r\n trackers.registerError(\r\n this.proctoringId, \r\n \"Erro ao recuperar dados da extens\u00E3o: \" + error.message\r\n );\r\n }\r\n }\r\n}\r\n", "import { ProctoringContext } from \"./proctoring\";\r\nimport { BackendService } from \"../new-flow/backend/BackendService\";\r\n\r\nexport interface SignTermInterface {\r\n cameraId: string, \r\n microphoneId: string,\r\n result: boolean,\r\n}\r\n\r\nexport class SignTerm {\r\n private static isModalOpen: boolean = false;\r\n private readonly backend: BackendService;\r\n\r\n constructor(context: ProctoringContext) {\r\n this.backend = new BackendService({\r\n type: context?.type || \"prod\",\r\n token: context.token!,\r\n });\r\n }\r\n\r\n public async signInTerms(): Promise<any> {\r\n if (SignTerm.isModalOpen) {\r\n return Promise.reject();\r\n }\r\n\r\n SignTerm.isModalOpen = true;\r\n\r\n try {\r\n const response = await this.openModal();\r\n\r\n return new Promise((resolve) => {\r\n resolve(response);\r\n });\r\n } catch (error) {\r\n this.closeModal();\r\n return Promise.reject(error);\r\n }\r\n }\r\n\r\n private openModal(): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n // ################################ Background Blur ################################\r\n const fullBg = document.createElement(\"div\");\r\n fullBg.setAttribute(\"id\", \"signTermModal\");\r\n\r\n const fullBgStyles = {\r\n backgroundColor: \"rgba(0,0,0,0.4)\",\r\n zIndex: \"1000\",\r\n position: \"fixed\",\r\n top: \"0\",\r\n left: \"0\",\r\n height: \"100vh\",\r\n width: \"100%\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n };\r\n this.applyStyles(fullBg, fullBgStyles);\r\n\r\n // ################################ Modal Check Devices ################################\r\n const modal = document.createElement(\"div\");\r\n\r\n const modalStyles = {\r\n backgroundColor: \"#fff\",\r\n zIndex: \"1001\",\r\n width: \"850px\",\r\n maxHeight: \"95%\",\r\n borderRadius: \"10px\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n };\r\n this.applyStyles(modal, modalStyles);\r\n\r\n // ################################ Modal Title ################################\r\n const h3 = document.createElement(\"h3\");\r\n\r\n h3.innerText = \"Termo de consentimento para coleta e uso de dados\";\r\n\r\n const h3Styles = {\r\n color: \"rgba(0, 0, 0, .7)\",\r\n fontWeight: \"bold\",\r\n fontSize: \"20px\",\r\n marginBottom: \"15px\",\r\n padding: \"20px 0px\",\r\n borderBottom: \"2px solid rgba(0, 0, 0, .1)\",\r\n width: \"100%\",\r\n textAlign: \"center\",\r\n };\r\n this.applyStyles(h3, h3Styles);\r\n\r\n modal.appendChild(h3);\r\n\r\n // Document Embed\r\n const docEmbed = document.createElement(\"iframe\");\r\n\r\n // URL padr\u00E3o\r\n const defaultUrl =\r\n \"https://docs.google.com/document/u/3/d/e/2PACX-1vRMgrLhDLyDP8BHmotfPDpwAFaDHqK-mA4eBJ0Cy1mDdvHcWLsx47H4otII_4qi4rhtSf6B0OO97e9c/pub\";\r\n\r\n this.backend.signTermUrl()\r\n .then((response) => { \r\n if (!response) throw new Error('N\u00E3o foi poss\u00EDvel obter o termo de consentimento');\r\n docEmbed.setAttribute(\"src\", response);\r\n }).catch(() => {\r\n docEmbed.setAttribute(\"src\", defaultUrl);\r\n });\r\n\r\n const docEmbedStyles = {\r\n width: \"100%\",\r\n height: \"500px\",\r\n border: \"1px solid rgba(0, 0, 0, .1)\",\r\n margin: \"20px\",\r\n borderRadius: \"5px\",\r\n };\r\n this.applyStyles(docEmbed, docEmbedStyles);\r\n modal.appendChild(docEmbed);\r\n\r\n // Terms Checkbox\r\n const checkboxContainer = document.createElement(\"div\");\r\n const checkbox = document.createElement(\"input\");\r\n checkbox.setAttribute(\"type\", \"checkbox\");\r\n checkbox.setAttribute(\"id\", \"termsCheckbox\");\r\n const checkboxLabel = document.createElement(\"label\");\r\n checkboxLabel.setAttribute(\"for\", \"termsCheckbox\");\r\n checkboxLabel.innerText = \"Li e aceito os termos e condi\u00E7\u00F5es\";\r\n\r\n const checkboxContainerStyles = {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"10px\",\r\n margin: \"20px\",\r\n width: \"100%\",\r\n paddingLeft: \"20px\",\r\n };\r\n this.applyStyles(checkboxContainer, checkboxContainerStyles);\r\n\r\n checkboxContainer.appendChild(checkbox);\r\n checkboxContainer.appendChild(checkboxLabel);\r\n modal.appendChild(checkboxContainer);\r\n\r\n // ################################ Modal Buttons ################################\r\n\r\n // Div Buttons\r\n const divBtn = document.createElement(\"div\");\r\n const divBtnStyles = {\r\n width: \"100%\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n borderTop: \"2px solid rgba(0, 0, 0, .1)\",\r\n };\r\n this.applyStyles(divBtn, divBtnStyles);\r\n\r\n // Cancel Button\r\n const buttonCancel = document.createElement(\"button\");\r\n buttonCancel.innerText = \"Cancelar\";\r\n const buttonCancelStyles = {\r\n width: \"100%\",\r\n height: \"70px\",\r\n backgroundColor: \"#FFF\",\r\n border: \"none\",\r\n color: \"rgba(0, 0, 0, .7)\",\r\n fontWeight: \"bold\",\r\n borderRadius: \"10px\",\r\n paddingTop: \"5px\",\r\n paddingBottom: \"5px\",\r\n };\r\n this.applyStyles(buttonCancel, buttonCancelStyles);\r\n buttonCancel.addEventListener(\"click\", () => {\r\n this.closeModal();\r\n resolve(false);\r\n });\r\n\r\n // Buttons Divider\r\n const divider = document.createElement(\"span\");\r\n const dividerStyles = {\r\n width: \"3px\",\r\n height: \"70px\",\r\n margin: \"0px 2px\",\r\n background: \"rgba(0, 0, 0, .1)\",\r\n };\r\n this.applyStyles(divider, dividerStyles);\r\n\r\n // ConfirmButton\r\n const button = document.createElement(\"button\");\r\n button.innerText = \"Continuar\";\r\n button.setAttribute(\"id\", \"confirmBtn\");\r\n const buttonStyles = {\r\n width: \"100%\",\r\n height: \"70px\",\r\n backgroundColor: \"#FFF\",\r\n border: \"none\",\r\n color: \"rgba(0, 0, 0, .7)\",\r\n fontWeight: \"bold\",\r\n borderRadius: \"10px\",\r\n paddingTop: \"5px\",\r\n paddingBottom: \"5px\",\r\n disabled: true,\r\n cursor: \"not-allowed\",\r\n };\r\n this.applyStyles(button, buttonStyles);\r\n\r\n // Disable continue button by default\r\n button.disabled = true;\r\n\r\n button.addEventListener(\"click\", () => {\r\n this.closeModal();\r\n // Send to server\r\n this.backend.signTerm().then(() => {\r\n resolve(true);\r\n });\r\n });\r\n\r\n checkbox.addEventListener(\"change\", (e: any) => {\r\n button.disabled = !e.target.checked;\r\n if (e.target.checked) {\r\n button.style.color = \"#007bff\";\r\n button.style.cursor = \"pointer\";\r\n } else {\r\n button.style.color = \"rgba(0, 0, 0, .7)\";\r\n button.style.cursor = \"not-allowed\";\r\n }\r\n });\r\n\r\n divBtn.appendChild(buttonCancel);\r\n divBtn.appendChild(divider);\r\n divBtn.appendChild(button);\r\n\r\n modal.appendChild(divBtn);\r\n\r\n fullBg.appendChild(modal);\r\n\r\n document.body.appendChild(fullBg);\r\n });\r\n }\r\n\r\n public async closeModal() {\r\n SignTerm.isModalOpen = false;\r\n\r\n const signTermModal = document.querySelector(\"#signTermModal\");\r\n signTermModal?.remove();\r\n }\r\n\r\n applyStyles(element: any, styles: any) {\r\n for (const [property, value] of Object.entries(styles)) {\r\n element.style[property] = value;\r\n }\r\n }\r\n}", "import {\r\n checkIfhasMultipleMonitors,\r\n checkPermissions,\r\n} from \"../modules/checkPermissions\";\r\nimport enumarateDevices from \"../modules/enumarateDevices\";\r\nimport { DeviceCheckerService } from \"../new-flow/checkers/DeviceCheckerService\";\r\nimport { CapturePhoto } from \"./CapturePhoto\";\r\nimport { ExternalCameraChecker } from \"./ExternalCameraChecker\";\r\nimport { Proctoring, ProctoringContext } from \"./proctoring\";\r\nimport { SignTerm } from \"./SignTerm\";\r\n\r\nexport function useProctoring(\r\n proctoringOptions: ProctoringContext,\r\n enviromentConfig: string = \"prod\"\r\n) {\r\n if (!proctoringOptions.showConsole) {\r\n // const originalConsoleLog = console.log;\r\n // Substituir console.log por uma fun\u00E7\u00E3o vazia\r\n console.log = () => {};\r\n console.warn = () => {};\r\n console.error = () => {};\r\n }\r\n\r\n const parameters = {\r\n type: enviromentConfig,\r\n clientId: proctoringOptions.clientId,\r\n examId: proctoringOptions.examId,\r\n token: proctoringOptions.token,\r\n credentials: proctoringOptions.credentials,\r\n showConsole: proctoringOptions.showConsole,\r\n };\r\n\r\n const proctoring = new Proctoring(parameters);\r\n const checker = new DeviceCheckerService(parameters);\r\n //const externalChecker = new ExternalCameraChecker(parameters, ()=>{});\r\n const signTerm = new SignTerm(parameters);\r\n\r\n const photo = new CapturePhoto();\r\n\r\n const login = proctoring.login.bind(proctoring);\r\n\r\n const originalStart = proctoring.start.bind(proctoring);\r\n // Start modificado para permitir pegar as informa\u00E7\u00F5es do checkDevices\r\n const start = async (parameters: any, videoOptions: any) => {\r\n // Recuperar o resultado do checkDevices armazenado no checker\r\n const deviceResult = checker.getDeviceCheckResult();\r\n\r\n // Injetar o resultado na inst\u00E2ncia de Proctoring\r\n if (deviceResult) {\r\n proctoring.setDeviceCheckData(deviceResult); \r\n }\r\n \r\n // Chamar o m\u00E9todo start original\r\n return originalStart(parameters, videoOptions);\r\n };\r\n const finish = proctoring.finish.bind(proctoring);\r\n const startChallenge = proctoring.startChallenge.bind(proctoring);\r\n const stopChallenge = proctoring.stopChallenge.bind(proctoring);\r\n\r\n const pause = proctoring.pause.bind(proctoring);\r\n const resume = proctoring.resume.bind(proctoring);\r\n\r\n const onFocus = proctoring.setOnFocusCallback.bind(proctoring);\r\n const onLostFocus = proctoring.setOnLostFocusCallback.bind(proctoring);\r\n const onChangeDevices = proctoring.onChangeDevices.bind(proctoring);\r\n const onBufferSizeError = proctoring.setOnBufferSizeErrorCallback.bind(proctoring);\r\n const onStopSharingScreen = proctoring.setOnStopSharingScreenCallback.bind(proctoring);\r\n const onRealtimeAlerts = proctoring.onRealtimeAlerts.bind(proctoring);\r\n const signInTerms = signTerm.signInTerms.bind(signTerm);\r\n\r\n const checkDevices = checker.checkDevices.bind(checker);\r\n const checkExternalCamera = proctoring.appChecker.checkExternalCamera.bind(proctoring.appChecker);\r\n const startExternalCameraSession = proctoring.appChecker.startSession.bind(proctoring.appChecker);\r\n const takeExternalCameraPicture = proctoring.appChecker.takePicture.bind(proctoring.appChecker);\r\n const goToExternalCameraPositionStep = proctoring.appChecker.goToPositionGuide.bind(proctoring.appChecker);\r\n const startExternalCameraTransmission = proctoring.appChecker.startTransmission.bind(proctoring.appChecker);\r\n const runCheckDevicesFlow = checker.runCheckDevicesFlow.bind(checker);\r\n const changeSelectedDevice = checker.changeSelectedDevice.bind(checker);\r\n const capturePhoto = photo.takePicture.bind(photo);\r\n\r\n return {\r\n login,\r\n start,\r\n finish,\r\n startChallenge,\r\n stopChallenge,\r\n onFocus,\r\n onLostFocus,\r\n onChangeDevices,\r\n onBufferSizeError,\r\n onRealtimeAlerts,\r\n checkDevices,\r\n runCheckDevicesFlow,\r\n changeSelectedDevice,\r\n capturePhoto,\r\n enumarateDevices, //GLOBAL\r\n checkPermissions, //GLOBAL\r\n checkIfhasMultipleMonitors, //GLOBAL\r\n onStopSharingScreen,\r\n signInTerms,\r\n checkExternalCamera,\r\n startExternalCameraSession,\r\n takeExternalCameraPicture,\r\n goToExternalCameraPositionStep,\r\n startExternalCameraTransmission\r\n };\r\n}\r\n", "// console.log(\"LOADING index.ts\");\r\n\r\n// Seekable record\r\n// const ebmlScript = document.createElement(\"script\");\r\n// ebmlScript.setAttribute(\"src\", \"https://www.webrtc-experiment.com/EBML.js\");\r\n// document.head.appendChild(ebmlScript);\r\n// document.write(\r\n// '<script async src=\"https://www.webrtc-experiment.com/EBML.js\"></script>'\r\n// );\r\n\r\nimport { useProctoring } from \"./proctoring/useProctoring\";\r\nexport { useProctoring } from \"./proctoring/useProctoring\";\r\n\r\nif (typeof window !== \"undefined\") {\r\n (window as any).useProctoring = useProctoring;\r\n}\r\n"],
5
- "mappings": "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,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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",
6
- "names": []
7
- }