0&&-1===e?(this.log("Override startPosition with lastCurrentTime @"+t.toFixed(3)),e=t,this.state=zr):(this.loadedmetadata=!1,this.state=Zr),this.nextLoadPosition=this.startPosition=this.lastCurrentTime=e,this.tick()},r.doTick=function(){switch(this.state){case zr:this.doTickIdle();break;case Zr:var t,r=this.levels,i=this.trackId,n=null==r||null==(t=r[i])?void 0:t.details;if(n){if(this.waitForCdnTuneIn(n))break;this.state=ni}break;case Jr:var s,a=performance.now(),o=this.retryDate;if(!o||a>=o||null!=(s=this.media)&&s.seeking){var l=this.levels,h=this.trackId;this.log("RetryDate reached, switch back to IDLE state"),this.resetStartWhenNotLoaded((null==l?void 0:l[h])||null),this.state=zr}break;case ni:var u=this.waitingData;if(u){var d=u.frag,c=u.part,f=u.cache,g=u.complete;if(void 0!==this.initPTS[d.cc]){this.waitingData=null,this.waitingVideoCC=-1,this.state=Qr;var p={frag:d,part:c,payload:f.flush(),networkDetails:null};this._handleFragmentLoadProgress(p),g&&e.prototype._handleFragmentLoadComplete.call(this,p)}else if(this.videoTrackCC!==this.waitingVideoCC)this.log("Waiting fragment cc ("+d.cc+") cancelled because video is at cc "+this.videoTrackCC),this.clearWaitingFragment();else{var m=this.getLoadPosition(),v=Mr.bufferInfo(this.mediaBuffer,m,this.config.maxBufferHole);hr(v.end,this.config.maxFragLookUpTolerance,d)<0&&(this.log("Waiting fragment cc ("+d.cc+") @ "+d.start+" cancelled because another fragment at "+v.end+" is needed"),this.clearWaitingFragment())}}else this.state=zr}this.onTickEnd()},r.clearWaitingFragment=function(){var e=this.waitingData;e&&(this.fragmentTracker.removeFragment(e.frag),this.waitingData=null,this.waitingVideoCC=-1,this.state=zr)},r.resetLoadingState=function(){this.clearWaitingFragment(),e.prototype.resetLoadingState.call(this)},r.onTickEnd=function(){var e=this.media;null!=e&&e.readyState&&(this.lastCurrentTime=e.currentTime)},r.doTickIdle=function(){var e=this.hls,t=this.levels,r=this.media,i=this.trackId,n=e.config;if((r||!this.startFragRequested&&n.startFragPrefetch)&&null!=t&&t[i]){var s=t[i],a=s.details;if(!a||a.live&&this.levelLastLoaded!==s||this.waitForCdnTuneIn(a))this.state=Zr;else{var o=this.mediaBuffer?this.mediaBuffer:this.media;this.bufferFlushed&&o&&(this.bufferFlushed=!1,this.afterBufferFlushed(o,M,bt));var l=this.getFwdBufferInfo(o,bt);if(null!==l){var h=this.bufferedTrack,u=this.switchingTrack;if(!u&&this._streamEnded(l,a))return e.trigger(E.BUFFER_EOS,{type:"audio"}),void(this.state=ri);var d=this.getFwdBufferInfo(this.videoBuffer?this.videoBuffer:this.media,Lt),c=l.len,f=this.getMaxBufferLength(null==d?void 0:d.len),g=a.fragments,p=g[0].start,m=this.flushing?this.getLoadPosition():l.end;if(u&&r){var v=this.getLoadPosition();h&&!Ln(u.attrs,h.attrs)&&(m=v),a.PTSKnown&&vp||l.nextStart)&&(this.log("Alt audio track ahead of main track, seek to start of alt audio track"),r.currentTime=p+.05)}if(!(c>=f&&!u&&md.end+a.targetduration;if(T||(null==d||!d.len)&&l.len){var _=this.getAppendedFrag(y.start,Lt);if(null===_)return;if(S||(S=!!_.gap||!!T&&0===d.len),T&&!S||S&&l.nextStart&&l.nextStart<_.end)return}this.loadFragment(y,s,m)}else this.bufferFlushed=!0}}}}},r.getMaxBufferLength=function(t){var r=e.prototype.getMaxBufferLength.call(this);return t?Math.min(Math.max(r,t),this.config.maxMaxBufferLength):r},r.onMediaDetaching=function(){this.videoBuffer=null,this.bufferFlushed=this.flushing=!1,e.prototype.onMediaDetaching.call(this)},r.onAudioTracksUpdated=function(e,t){var r=t.audioTracks;this.resetTransmuxer(),this.levels=r.map((function(e){return new qt(e)}))},r.onAudioTrackSwitching=function(e,t){var r=!!t.url;this.trackId=t.id;var i=this.fragCurrent;i&&(i.abortRequests(),this.removeUnbufferedFrags(i.start)),this.resetLoadingState(),r?this.setInterval(100):this.resetTransmuxer(),r?(this.switchingTrack=t,this.state=zr,this.flushAudioIfNeeded(t)):(this.switchingTrack=null,this.bufferedTrack=t,this.state=Yr),this.tick()},r.onManifestLoading=function(){this.fragmentTracker.removeAllFragments(),this.startPosition=this.lastCurrentTime=0,this.bufferFlushed=this.flushing=!1,this.levels=this.mainDetails=this.waitingData=this.bufferedTrack=this.cachedTrackLoadedData=this.switchingTrack=null,this.startFragRequested=!1,this.trackId=this.videoTrackCC=this.waitingVideoCC=-1},r.onLevelLoaded=function(e,t){this.mainDetails=t.details,null!==this.cachedTrackLoadedData&&(this.hls.trigger(E.AUDIO_TRACK_LOADED,this.cachedTrackLoadedData),this.cachedTrackLoadedData=null)},r.onAudioTrackLoaded=function(e,t){var r;if(null!=this.mainDetails){var i=this.levels,n=t.details,s=t.id;if(i){this.log("Audio track "+s+" loaded ["+n.startSN+","+n.endSN+"]"+(n.lastPartSn?"[part-"+n.lastPartSn+"-"+n.lastPartIndex+"]":"")+",duration:"+n.totalduration);var a=i[s],o=0;if(n.live||null!=(r=a.details)&&r.live){this.checkLiveUpdate(n);var l,h=this.mainDetails;if(n.deltaUpdateFailed||!h)return;!a.details&&n.hasProgramDateTime&&h.hasProgramDateTime?(Br(n,h),o=n.fragments[0].start):o=this.alignPlaylists(n,a.details,null==(l=this.levelLastLoaded)?void 0:l.details)}a.details=n,this.levelLastLoaded=a,this.startFragRequested||!this.mainDetails&&n.live||this.setStartPosition(this.mainDetails||n,o),this.state!==Zr||this.waitForCdnTuneIn(n)||(this.state=zr),this.tick()}else this.warn("Audio tracks were reset while loading level "+s)}else this.cachedTrackLoadedData=t},r._handleFragmentLoadProgress=function(e){var t,r=e.frag,i=e.part,n=e.payload,s=this.config,a=this.trackId,o=this.levels;if(o){var l=o[a];if(l){var h=l.details;if(!h)return this.warn("Audio track details undefined on fragment load progress"),void this.removeUnbufferedFrags(r.start);var u=s.defaultAudioCodec||l.audioCodec||"mp4a.40.2",d=this.transmuxer;d||(d=this.transmuxer=new Tn(this.hls,bt,this._handleTransmuxComplete.bind(this),this._handleTransmuxerFlush.bind(this)));var c=this.initPTS[r.cc],f=null==(t=r.initSegment)?void 0:t.data;if(void 0!==c){var g=i?i.index:-1,p=-1!==g,m=new xr(r.level,r.sn,r.stats.chunkCount,n.byteLength,g,p);d.push(n,f,u,"",r,i,h.totalduration,!1,m,c)}else this.log("Unknown video PTS for cc "+r.cc+", waiting for video PTS before demuxing audio frag "+r.sn+" of ["+h.startSN+" ,"+h.endSN+"],track "+a),(this.waitingData=this.waitingData||{frag:r,part:i,cache:new oi,complete:!1}).cache.push(new Uint8Array(n)),this.waitingVideoCC=this.videoTrackCC,this.state=ni}else this.warn("Audio track is undefined on fragment load progress")}else this.warn("Audio tracks were reset while fragment load was in progress. Fragment "+r.sn+" of level "+r.level+" will not be buffered")},r._handleFragmentLoadComplete=function(t){this.waitingData?this.waitingData.complete=!0:e.prototype._handleFragmentLoadComplete.call(this,t)},r.onBufferReset=function(){this.mediaBuffer=this.videoBuffer=null,this.loadedmetadata=!1},r.onBufferCreated=function(e,t){var r=t.tracks.audio;r&&(this.mediaBuffer=r.buffer||null),t.tracks.video&&(this.videoBuffer=t.tracks.video.buffer||null)},r.onFragBuffered=function(e,t){var r=t.frag,n=t.part;if(r.type===bt)if(this.fragContextChanged(r))this.warn("Fragment "+r.sn+(n?" p: "+n.index:"")+" of level "+r.level+" finished buffering, but was aborted. state: "+this.state+", audioSwitch: "+(this.switchingTrack?this.switchingTrack.name:"false"));else{if("initSegment"!==r.sn){this.fragPrevious=r;var s=this.switchingTrack;s&&(this.bufferedTrack=s,this.switchingTrack=null,this.hls.trigger(E.AUDIO_TRACK_SWITCHED,i({},s)))}this.fragBufferedComplete(r,n)}else if(!this.loadedmetadata&&r.type===Lt){var a=this.videoBuffer||this.media;a&&Mr.getBuffered(a).length&&(this.loadedmetadata=!0)}},r.onError=function(t,r){var i;if(r.fatal)this.state=ii;else switch(r.details){case T.FRAG_GAP:case T.FRAG_PARSING_ERROR:case T.FRAG_DECRYPT_ERROR:case T.FRAG_LOAD_ERROR:case T.FRAG_LOAD_TIMEOUT:case T.KEY_LOAD_ERROR:case T.KEY_LOAD_TIMEOUT:this.onFragmentOrKeyLoadError(bt,r);break;case T.AUDIO_TRACK_LOAD_ERROR:case T.AUDIO_TRACK_LOAD_TIMEOUT:case T.LEVEL_PARSING_ERROR:r.levelRetry||this.state!==Zr||(null==(i=r.context)?void 0:i.type)!==Tt||(this.state=zr);break;case T.BUFFER_APPEND_ERROR:case T.BUFFER_FULL_ERROR:if(!r.parent||"audio"!==r.parent)return;if(r.details===T.BUFFER_APPEND_ERROR)return void this.resetLoadingState();this.reduceLengthAndFlushBuffer(r)&&(this.bufferedTrack=null,e.prototype.flushMainBuffer.call(this,0,Number.POSITIVE_INFINITY,"audio"));break;case T.INTERNAL_EXCEPTION:this.recoverWorkerError(r)}},r.onBufferFlushing=function(e,t){t.type!==x&&(this.flushing=!0)},r.onBufferFlushed=function(e,t){var r=t.type;if(r!==x){this.flushing=!1,this.bufferFlushed=!0,this.state===ri&&(this.state=zr);var i=this.mediaBuffer||this.media;i&&(this.afterBufferFlushed(i,r,bt),this.tick())}},r._handleTransmuxComplete=function(e){var t,r="audio",i=this.hls,n=e.remuxResult,s=e.chunkMeta,a=this.getCurrentContext(s);if(a){var l=a.frag,h=a.part,u=a.level,d=u.details,c=n.audio,f=n.text,g=n.id3,p=n.initSegment;if(!this.fragContextChanged(l)&&d){if(this.state=ei,this.switchingTrack&&c&&this.completeAudioSwitch(this.switchingTrack),null!=p&&p.tracks){var m=l.initSegment||l;this._bufferInitSegment(u,p.tracks,m,s),i.trigger(E.FRAG_PARSING_INIT_SEGMENT,{frag:m,id:r,tracks:p.tracks})}if(c){var v=c.startPTS,y=c.endPTS,S=c.startDTS,T=c.endDTS;h&&(h.elementaryStreams[M]={startPTS:v,endPTS:y,startDTS:S,endDTS:T}),l.setElementaryStreamInfo(M,v,y,S,T),this.bufferFragmentData(c,l,h,s)}if(null!=g&&null!=(t=g.samples)&&t.length){var _=o({id:r,frag:l,details:d},g);i.trigger(E.FRAG_PARSING_METADATA,_)}if(f){var L=o({id:r,frag:l,details:d},f);i.trigger(E.FRAG_PARSING_USERDATA,L)}}else this.fragmentTracker.removeFragment(l)}else this.resetWhenMissingContext(s)},r._bufferInitSegment=function(e,t,r,i){if(this.state===ei){t.video&&delete t.video;var n=t.audio;if(n){n.id="audio";var s=e.audioCodec;this.log("Init audio buffer, container:"+n.container+", codecs[level/parsed]=["+s+"/"+n.codec+"]"),s&&1===s.split(",").length&&(n.levelCodec=s),this.hls.trigger(E.BUFFER_CODECS,t);var a=n.initSegment;if(null!=a&&a.byteLength){var o={type:"audio",frag:r,part:null,chunkMeta:i,parent:r.type,data:a};this.hls.trigger(E.BUFFER_APPENDING,o)}this.tickImmediate()}}},r.loadFragment=function(t,r,i){var n,s=this.fragmentTracker.getState(t);if(this.fragCurrent=t,this.switchingTrack||s===Rr||s===wr)if("initSegment"===t.sn)this._loadInitSegment(t,r);else if(null!=(n=r.details)&&n.live&&!this.initPTS[t.cc]){this.log("Waiting for video PTS in continuity counter "+t.cc+" of live stream before loading audio fragment "+t.sn+" of level "+this.trackId),this.state=ni;var a=this.mainDetails;a&&a.fragments[0].start!==r.details.fragments[0].start&&Br(r.details,a)}else this.startFragRequested=!0,e.prototype.loadFragment.call(this,t,r,i);else this.clearTrackerIfNeeded(t)},r.flushAudioIfNeeded=function(t){var r=this.media,i=this.bufferedTrack,n=null==i?void 0:i.attrs,s=t.attrs;r&&n&&(n.CHANNELS!==s.CHANNELS||i.name!==t.name||i.lang!==t.lang)&&(this.log("Switching audio track : flushing all audio"),e.prototype.flushMainBuffer.call(this,0,Number.POSITIVE_INFINITY,"audio"),this.bufferedTrack=null)},r.completeAudioSwitch=function(e){var t=this.hls;this.flushAudioIfNeeded(e),this.bufferedTrack=e,this.switchingTrack=null,t.trigger(E.AUDIO_TRACK_SWITCHED,i({},e))},t}(ai),An=function(e){function t(t){var r;return(r=e.call(this,t,"[audio-track-controller]")||this).tracks=[],r.groupIds=null,r.tracksInGroup=[],r.trackId=-1,r.currentTrack=null,r.selectDefaultTrack=!0,r.registerListeners(),r}l(t,e);var r=t.prototype;return r.registerListeners=function(){var e=this.hls;e.on(E.MANIFEST_LOADING,this.onManifestLoading,this),e.on(E.MANIFEST_PARSED,this.onManifestParsed,this),e.on(E.LEVEL_LOADING,this.onLevelLoading,this),e.on(E.LEVEL_SWITCHING,this.onLevelSwitching,this),e.on(E.AUDIO_TRACK_LOADED,this.onAudioTrackLoaded,this),e.on(E.ERROR,this.onError,this)},r.unregisterListeners=function(){var e=this.hls;e.off(E.MANIFEST_LOADING,this.onManifestLoading,this),e.off(E.MANIFEST_PARSED,this.onManifestParsed,this),e.off(E.LEVEL_LOADING,this.onLevelLoading,this),e.off(E.LEVEL_SWITCHING,this.onLevelSwitching,this),e.off(E.AUDIO_TRACK_LOADED,this.onAudioTrackLoaded,this),e.off(E.ERROR,this.onError,this)},r.destroy=function(){this.unregisterListeners(),this.tracks.length=0,this.tracksInGroup.length=0,this.currentTrack=null,e.prototype.destroy.call(this)},r.onManifestLoading=function(){this.tracks=[],this.tracksInGroup=[],this.groupIds=null,this.currentTrack=null,this.trackId=-1,this.selectDefaultTrack=!0},r.onManifestParsed=function(e,t){this.tracks=t.audioTracks||[]},r.onAudioTrackLoaded=function(e,t){var r=t.id,i=t.groupId,n=t.details,s=this.tracksInGroup[r];if(s&&s.groupId===i){var a=s.details;s.details=t.details,this.log("Audio track "+r+' "'+s.name+'" lang:'+s.lang+" group:"+i+" loaded ["+n.startSN+"-"+n.endSN+"]"),r===this.trackId&&this.playlistLoaded(r,t,a)}else this.warn("Audio track with id:"+r+" and group:"+i+" not found in active group "+(null==s?void 0:s.groupId))},r.onLevelLoading=function(e,t){this.switchLevel(t.level)},r.onLevelSwitching=function(e,t){this.switchLevel(t.level)},r.switchLevel=function(e){var t=this.hls.levels[e];if(t){var r=t.audioGroups||null,i=this.groupIds,n=this.currentTrack;if(!r||(null==i?void 0:i.length)!==(null==r?void 0:r.length)||null!=r&&r.some((function(e){return-1===(null==i?void 0:i.indexOf(e))}))){this.groupIds=r,this.trackId=-1,this.currentTrack=null;var s=this.tracks.filter((function(e){return!r||-1!==r.indexOf(e.groupId)}));if(s.length)this.selectDefaultTrack&&!s.some((function(e){return e.default}))&&(this.selectDefaultTrack=!1),s.forEach((function(e,t){e.id=t}));else if(!n&&!this.tracksInGroup.length)return;this.tracksInGroup=s;var a=this.hls.config.audioPreference;if(!n&&a){var o=Er(a,s,Tr);if(o>-1)n=s[o];else{var l=Er(a,this.tracks);n=this.tracks[l]}}var h=this.findTrackId(n);-1===h&&n&&(h=this.findTrackId(null));var u={audioTracks:s};this.log("Updating audio tracks, "+s.length+" track(s) found in group(s): "+(null==r?void 0:r.join(","))),this.hls.trigger(E.AUDIO_TRACKS_UPDATED,u);var d=this.trackId;if(-1!==h&&-1===d)this.setAudioTrack(h);else if(s.length&&-1===d){var c,f=new Error("No audio track selected for current audio group-ID(s): "+(null==(c=this.groupIds)?void 0:c.join(","))+" track count: "+s.length);this.warn(f.message),this.hls.trigger(E.ERROR,{type:S.MEDIA_ERROR,details:T.AUDIO_TRACK_LOAD_ERROR,fatal:!0,error:f})}}else this.shouldReloadPlaylist(n)&&this.setAudioTrack(this.trackId)}},r.onError=function(e,t){!t.fatal&&t.context&&(t.context.type!==Tt||t.context.id!==this.trackId||this.groupIds&&-1===this.groupIds.indexOf(t.context.groupId)||(this.requestScheduled=-1,this.checkRetry(t)))},r.setAudioOption=function(e){var t=this.hls;if(t.config.audioPreference=e,e){var r=this.allAudioTracks;if(this.selectDefaultTrack=!1,r.length){var i=this.currentTrack;if(i&&Sr(e,i,Tr))return i;var n=Er(e,this.tracksInGroup,Tr);if(n>-1){var s=this.tracksInGroup[n];return this.setAudioTrack(n),s}if(i){var a=t.loadLevel;-1===a&&(a=t.firstAutoLevel);var o=function(e,t,r,i,n){var s=t[i],a=t.reduce((function(e,t,r){var i=t.uri;return(e[i]||(e[i]=[])).push(r),e}),{})[s.uri];a.length>1&&(i=Math.max.apply(Math,a));var o=s.videoRange,l=s.frameRate,h=s.codecSet.substring(0,4),u=_r(t,i,(function(t){if(t.videoRange!==o||t.frameRate!==l||t.codecSet.substring(0,4)!==h)return!1;var i=t.audioGroups,s=r.filter((function(e){return!i||-1!==i.indexOf(e.groupId)}));return Er(e,s,n)>-1}));return u>-1?u:_r(t,i,(function(t){var i=t.audioGroups,s=r.filter((function(e){return!i||-1!==i.indexOf(e.groupId)}));return Er(e,s,n)>-1}))}(e,t.levels,r,a,Tr);if(-1===o)return null;t.nextLoadLevel=o}if(e.channels||e.audioCodec){var l=Er(e,r);if(l>-1)return r[l]}}}return null},r.setAudioTrack=function(e){var t=this.tracksInGroup;if(e<0||e>=t.length)this.warn("Invalid audio track id: "+e);else{this.clearTimer(),this.selectDefaultTrack=!1;var r=this.currentTrack,n=t[e],s=n.details&&!n.details.live;if(!(e===this.trackId&&n===r&&s||(this.log("Switching to audio-track "+e+' "'+n.name+'" lang:'+n.lang+" group:"+n.groupId+" channels:"+n.channels),this.trackId=e,this.currentTrack=n,this.hls.trigger(E.AUDIO_TRACK_SWITCHING,i({},n)),s))){var a=this.switchParams(n.url,null==r?void 0:r.details,n.details);this.loadPlaylist(a)}}},r.findTrackId=function(e){for(var t=this.tracksInGroup,r=0;r=n[o].start&&a<=n[o].end){s=n[o];break}var l=r.start+r.duration;s?s.end=l:(s={start:a,end:l},n.push(s)),this.fragmentTracker.fragBuffered(r),this.fragBufferedComplete(r,null)}}},r.onBufferFlushing=function(e,t){var r=t.startOffset,i=t.endOffset;if(0===r&&i!==Number.POSITIVE_INFINITY){var n=i-1;if(n<=0)return;t.endOffsetSubtitles=Math.max(0,n),this.tracksBuffered.forEach((function(e){for(var t=0;t=n.length)&&o){this.log("Subtitle track "+a+" loaded ["+s.startSN+","+s.endSN+"]"+(s.lastPartSn?"[part-"+s.lastPartSn+"-"+s.lastPartIndex+"]":"")+",duration:"+s.totalduration),this.mediaBuffer=this.mediaBufferTimeRanges;var l=0;if(s.live||null!=(r=o.details)&&r.live){var h=this.mainDetails;if(s.deltaUpdateFailed||!h)return;var u,d=h.fragments[0];o.details?0===(l=this.alignPlaylists(s,o.details,null==(u=this.levelLastLoaded)?void 0:u.details))&&d&&Jt(s,l=d.start):s.hasProgramDateTime&&h.hasProgramDateTime?(Br(s,h),l=s.fragments[0].start):d&&Jt(s,l=d.start)}o.details=s,this.levelLastLoaded=o,a===i&&(this.startFragRequested||!this.mainDetails&&s.live||this.setStartPosition(this.mainDetails||s,l),this.tick(),s.live&&!this.fragCurrent&&this.media&&this.state===zr&&(lr(null,s.fragments,this.media.currentTime,0)||(this.warn("Subtitle playlist not aligned with playback"),o.details=void 0)))}}else this.warn("Subtitle tracks were reset while loading level "+a)},r._handleFragmentLoadComplete=function(e){var t=this,r=e.frag,i=e.payload,n=r.decryptdata,s=this.hls;if(!this.fragContextChanged(r)&&i&&i.byteLength>0&&null!=n&&n.key&&n.iv&&"AES-128"===n.method){var a=performance.now();this.decrypter.decrypt(new Uint8Array(i),n.key.buffer,n.iv.buffer).catch((function(e){throw s.trigger(E.ERROR,{type:S.MEDIA_ERROR,details:T.FRAG_DECRYPT_ERROR,fatal:!1,error:e,reason:e.message,frag:r}),e})).then((function(e){var t=performance.now();s.trigger(E.FRAG_DECRYPTED,{frag:r,payload:e,stats:{tstart:a,tdecrypt:t}})})).catch((function(e){t.warn(e.name+": "+e.message),t.state=zr}))}},r.doTick=function(){if(this.media){if(this.state===zr){var e=this.currentTrackId,t=this.levels,r=null==t?void 0:t[e];if(!r||!t.length||!r.details)return;var i=this.config,n=this.getLoadPosition(),s=Mr.bufferedInfo(this.tracksBuffered[this.currentTrackId]||[],n,i.maxBufferHole),a=s.end,o=s.len,l=this.getFwdBufferInfo(this.media,Lt),h=r.details;if(o>this.getMaxBufferLength(null==l?void 0:l.len)+h.levelTargetDuration)return;var u=h.fragments,d=u.length,c=h.edge,f=null,g=this.fragPrevious;if(ac-p?0:p;!(f=lr(g,u,Math.max(u[0].start,a),m))&&g&&g.start>>=0)>i-1)throw new DOMException("Failed to execute '"+t+"' on 'TimeRanges': The index provided ("+r+") is greater than the maximum bound ("+i+")");return e[r][t]};this.buffered={get length(){return e.length},end:function(r){return t("end",r,e.length)},start:function(r){return t("start",r,e.length)}}},In=function(e){function t(t){var r;return(r=e.call(this,t,"[subtitle-track-controller]")||this).media=null,r.tracks=[],r.groupIds=null,r.tracksInGroup=[],r.trackId=-1,r.currentTrack=null,r.selectDefaultTrack=!0,r.queuedDefaultTrack=-1,r.asyncPollTrackChange=function(){return r.pollTrackChange(0)},r.useTextTrackPolling=!1,r.subtitlePollingInterval=-1,r._subtitleDisplay=!0,r.onTextTracksChanged=function(){if(r.useTextTrackPolling||self.clearInterval(r.subtitlePollingInterval),r.media&&r.hls.config.renderTextTracksNatively){for(var e=null,t=Mt(r.media.textTracks),i=0;i-1&&(this.subtitleTrack=this.queuedDefaultTrack,this.queuedDefaultTrack=-1),this.useTextTrackPolling=!(this.media.textTracks&&"onchange"in this.media.textTracks),this.useTextTrackPolling?this.pollTrackChange(500):this.media.textTracks.addEventListener("change",this.asyncPollTrackChange))},r.pollTrackChange=function(e){self.clearInterval(this.subtitlePollingInterval),this.subtitlePollingInterval=self.setInterval(this.onTextTracksChanged,e)},r.onMediaDetaching=function(){this.media&&(self.clearInterval(this.subtitlePollingInterval),this.useTextTrackPolling||this.media.textTracks.removeEventListener("change",this.asyncPollTrackChange),this.trackId>-1&&(this.queuedDefaultTrack=this.trackId),Mt(this.media.textTracks).forEach((function(e){kt(e)})),this.subtitleTrack=-1,this.media=null)},r.onManifestLoading=function(){this.tracks=[],this.groupIds=null,this.tracksInGroup=[],this.trackId=-1,this.currentTrack=null,this.selectDefaultTrack=!0},r.onManifestParsed=function(e,t){this.tracks=t.subtitleTracks},r.onSubtitleTrackLoaded=function(e,t){var r=t.id,i=t.groupId,n=t.details,s=this.tracksInGroup[r];if(s&&s.groupId===i){var a=s.details;s.details=t.details,this.log("Subtitle track "+r+' "'+s.name+'" lang:'+s.lang+" group:"+i+" loaded ["+n.startSN+"-"+n.endSN+"]"),r===this.trackId&&this.playlistLoaded(r,t,a)}else this.warn("Subtitle track with id:"+r+" and group:"+i+" not found in active group "+(null==s?void 0:s.groupId))},r.onLevelLoading=function(e,t){this.switchLevel(t.level)},r.onLevelSwitching=function(e,t){this.switchLevel(t.level)},r.switchLevel=function(e){var t=this.hls.levels[e];if(t){var r=t.subtitleGroups||null,i=this.groupIds,n=this.currentTrack;if(!r||(null==i?void 0:i.length)!==(null==r?void 0:r.length)||null!=r&&r.some((function(e){return-1===(null==i?void 0:i.indexOf(e))}))){this.groupIds=r,this.trackId=-1,this.currentTrack=null;var s=this.tracks.filter((function(e){return!r||-1!==r.indexOf(e.groupId)}));if(s.length)this.selectDefaultTrack&&!s.some((function(e){return e.default}))&&(this.selectDefaultTrack=!1),s.forEach((function(e,t){e.id=t}));else if(!n&&!this.tracksInGroup.length)return;this.tracksInGroup=s;var a=this.hls.config.subtitlePreference;if(!n&&a){this.selectDefaultTrack=!1;var o=Er(a,s);if(o>-1)n=s[o];else{var l=Er(a,this.tracks);n=this.tracks[l]}}var h=this.findTrackId(n);-1===h&&n&&(h=this.findTrackId(null));var u={subtitleTracks:s};this.log("Updating subtitle tracks, "+s.length+' track(s) found in "'+(null==r?void 0:r.join(","))+'" group-id'),this.hls.trigger(E.SUBTITLE_TRACKS_UPDATED,u),-1!==h&&-1===this.trackId&&this.setSubtitleTrack(h)}else this.shouldReloadPlaylist(n)&&this.setSubtitleTrack(this.trackId)}},r.findTrackId=function(e){for(var t=this.tracksInGroup,r=this.selectDefaultTrack,i=0;i-1){var n=this.tracksInGroup[i];return this.setSubtitleTrack(i),n}if(r)return null;var s=Er(e,t);if(s>-1)return t[s]}}return null},r.loadPlaylist=function(t){e.prototype.loadPlaylist.call(this);var r=this.currentTrack;if(this.shouldLoadPlaylist(r)&&r){var i=r.id,n=r.groupId,s=r.url;if(t)try{s=t.addDirectives(s)}catch(e){this.warn("Could not construct new URL with HLS Delivery Directives: "+e)}this.log("Loading subtitle playlist for id "+i),this.hls.trigger(E.SUBTITLE_TRACK_LOADING,{url:s,id:i,groupId:n,deliveryDirectives:t||null})}},r.toggleTrackModes=function(){var e=this.media;if(e){var t,r=Mt(e.textTracks),i=this.currentTrack;if(i&&((t=r.filter((function(e){return bn(i,e)}))[0])||this.warn('Unable to find subtitle TextTrack with name "'+i.name+'" and language "'+i.lang+'"')),[].slice.call(r).forEach((function(e){"disabled"!==e.mode&&e!==t&&(e.mode="disabled")})),t){var n=this.subtitleDisplay?"showing":"hidden";t.mode!==n&&(t.mode=n)}}},r.setSubtitleTrack=function(e){var t=this.tracksInGroup;if(this.media)if(e<-1||e>=t.length||!m(e))this.warn("Invalid subtitle track id: "+e);else{this.clearTimer(),this.selectDefaultTrack=!1;var r=this.currentTrack,i=t[e]||null;if(this.trackId=e,this.currentTrack=i,this.toggleTrackModes(),i){var n=!!i.details&&!i.details.live;if(e!==this.trackId||i!==r||!n){this.log("Switching to subtitle-track "+e+(i?' "'+i.name+'" lang:'+i.lang+" group:"+i.groupId:""));var s=i.id,a=i.groupId,o=void 0===a?"":a,l=i.name,h=i.type,u=i.url;this.hls.trigger(E.SUBTITLE_TRACK_SWITCH,{id:s,groupId:o,name:l,type:h,url:u});var d=this.switchParams(i.url,null==r?void 0:r.details,i.details);this.loadPlaylist(d)}}else this.hls.trigger(E.SUBTITLE_TRACK_SWITCH,{id:e})}else this.queuedDefaultTrack=e},a(t,[{key:"subtitleDisplay",get:function(){return this._subtitleDisplay},set:function(e){this._subtitleDisplay=e,this.trackId>-1&&this.toggleTrackModes()}},{key:"allSubtitleTracks",get:function(){return this.tracks}},{key:"subtitleTracks",get:function(){return this.tracksInGroup}},{key:"subtitleTrack",get:function(){return this.trackId},set:function(e){this.selectDefaultTrack=!1,this.setSubtitleTrack(e)}}]),t}(cr),Cn=function(){function e(e){this.buffers=void 0,this.queues={video:[],audio:[],audiovideo:[]},this.buffers=e}var t=e.prototype;return t.append=function(e,t,r){var i=this.queues[t];i.push(e),1!==i.length||r||this.executeNext(t)},t.insertAbort=function(e,t){this.queues[t].unshift(e),this.executeNext(t)},t.appendBlocker=function(e){var t,r=new Promise((function(e){t=e})),i={execute:t,onStart:function(){},onComplete:function(){},onError:function(){}};return this.append(i,e),r},t.executeNext=function(e){var t=this.queues[e];if(t.length){var r=t[0];try{r.execute()}catch(t){A.warn('[buffer-operation-queue]: Exception executing "'+e+'" SourceBuffer operation: '+t),r.onError(t);var i=this.buffers[e];null!=i&&i.updating||this.shiftAndExecuteNext(e)}}},t.shiftAndExecuteNext=function(e){this.queues[e].shift(),this.executeNext(e)},t.current=function(e){return this.queues[e][0]},e}(),kn=/(avc[1234]|hvc1|hev1|dvh[1e]|vp09|av01)(?:\.[^.,]+)+/,Dn=function(){function e(e){var t=this;this.details=null,this._objectUrl=null,this.operationQueue=void 0,this.listeners=void 0,this.hls=void 0,this.bufferCodecEventsExpected=0,this._bufferCodecEventsTotal=0,this.media=null,this.mediaSource=null,this.lastMpegAudioChunk=null,this.appendSource=void 0,this.appendErrors={audio:0,video:0,audiovideo:0},this.tracks={},this.pendingTracks={},this.sourceBuffer=void 0,this.log=void 0,this.warn=void 0,this.error=void 0,this._onEndStreaming=function(e){t.hls&&t.hls.pauseBuffering()},this._onStartStreaming=function(e){t.hls&&t.hls.resumeBuffering()},this._onMediaSourceOpen=function(){var e=t.media,r=t.mediaSource;t.log("Media source opened"),e&&(e.removeEventListener("emptied",t._onMediaEmptied),t.updateMediaElementDuration(),t.hls.trigger(E.MEDIA_ATTACHED,{media:e,mediaSource:r})),r&&r.removeEventListener("sourceopen",t._onMediaSourceOpen),t.checkPendingTracks()},this._onMediaSourceClose=function(){t.log("Media source closed")},this._onMediaSourceEnded=function(){t.log("Media source ended")},this._onMediaEmptied=function(){var e=t.mediaSrc,r=t._objectUrl;e!==r&&A.error("Media element src was set while attaching MediaSource ("+r+" > "+e+")")},this.hls=e;var r,i="[buffer-controller]";this.appendSource=(r=ze(e.config.preferManagedMediaSource),"undefined"!=typeof self&&r===self.ManagedMediaSource),this.log=A.log.bind(A,i),this.warn=A.warn.bind(A,i),this.error=A.error.bind(A,i),this._initSourceBuffer(),this.registerListeners()}var t=e.prototype;return t.hasSourceTypes=function(){return this.getSourceBufferTypes().length>0||Object.keys(this.pendingTracks).length>0},t.destroy=function(){this.unregisterListeners(),this.details=null,this.lastMpegAudioChunk=null,this.hls=null},t.registerListeners=function(){var e=this.hls;e.on(E.MEDIA_ATTACHING,this.onMediaAttaching,this),e.on(E.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(E.MANIFEST_LOADING,this.onManifestLoading,this),e.on(E.MANIFEST_PARSED,this.onManifestParsed,this),e.on(E.BUFFER_RESET,this.onBufferReset,this),e.on(E.BUFFER_APPENDING,this.onBufferAppending,this),e.on(E.BUFFER_CODECS,this.onBufferCodecs,this),e.on(E.BUFFER_EOS,this.onBufferEos,this),e.on(E.BUFFER_FLUSHING,this.onBufferFlushing,this),e.on(E.LEVEL_UPDATED,this.onLevelUpdated,this),e.on(E.FRAG_PARSED,this.onFragParsed,this),e.on(E.FRAG_CHANGED,this.onFragChanged,this)},t.unregisterListeners=function(){var e=this.hls;e.off(E.MEDIA_ATTACHING,this.onMediaAttaching,this),e.off(E.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(E.MANIFEST_LOADING,this.onManifestLoading,this),e.off(E.MANIFEST_PARSED,this.onManifestParsed,this),e.off(E.BUFFER_RESET,this.onBufferReset,this),e.off(E.BUFFER_APPENDING,this.onBufferAppending,this),e.off(E.BUFFER_CODECS,this.onBufferCodecs,this),e.off(E.BUFFER_EOS,this.onBufferEos,this),e.off(E.BUFFER_FLUSHING,this.onBufferFlushing,this),e.off(E.LEVEL_UPDATED,this.onLevelUpdated,this),e.off(E.FRAG_PARSED,this.onFragParsed,this),e.off(E.FRAG_CHANGED,this.onFragChanged,this)},t._initSourceBuffer=function(){this.sourceBuffer={},this.operationQueue=new Cn(this.sourceBuffer),this.listeners={audio:[],video:[],audiovideo:[]},this.appendErrors={audio:0,video:0,audiovideo:0},this.lastMpegAudioChunk=null},t.onManifestLoading=function(){this.bufferCodecEventsExpected=this._bufferCodecEventsTotal=0,this.details=null},t.onManifestParsed=function(e,t){var r=2;(t.audio&&!t.video||!t.altAudio)&&(r=1),this.bufferCodecEventsExpected=this._bufferCodecEventsTotal=r,this.log(this.bufferCodecEventsExpected+" bufferCodec event(s) expected")},t.onMediaAttaching=function(e,t){var r=this.media=t.media,i=ze(this.appendSource);if(r&&i){var n,s=this.mediaSource=new i;this.log("created media source: "+(null==(n=s.constructor)?void 0:n.name)),s.addEventListener("sourceopen",this._onMediaSourceOpen),s.addEventListener("sourceended",this._onMediaSourceEnded),s.addEventListener("sourceclose",this._onMediaSourceClose),this.appendSource&&(s.addEventListener("startstreaming",this._onStartStreaming),s.addEventListener("endstreaming",this._onEndStreaming));var a=this._objectUrl=self.URL.createObjectURL(s);if(this.appendSource)try{r.removeAttribute("src");var o=self.ManagedMediaSource;r.disableRemotePlayback=r.disableRemotePlayback||o&&s instanceof o,Mn(r),function(e,t){var r=self.document.createElement("source");r.type="video/mp4",r.src=t,e.appendChild(r)}(r,a),r.load()}catch(e){r.src=a}else r.src=a;r.addEventListener("emptied",this._onMediaEmptied)}},t.onMediaDetaching=function(){var e=this.media,t=this.mediaSource,r=this._objectUrl;if(t){if(this.log("media source detaching"),"open"===t.readyState)try{t.endOfStream()}catch(e){this.warn("onMediaDetaching: "+e.message+" while calling endOfStream")}this.onBufferReset(),t.removeEventListener("sourceopen",this._onMediaSourceOpen),t.removeEventListener("sourceended",this._onMediaSourceEnded),t.removeEventListener("sourceclose",this._onMediaSourceClose),this.appendSource&&(t.removeEventListener("startstreaming",this._onStartStreaming),t.removeEventListener("endstreaming",this._onEndStreaming)),e&&(e.removeEventListener("emptied",this._onMediaEmptied),r&&self.URL.revokeObjectURL(r),this.mediaSrc===r?(e.removeAttribute("src"),this.appendSource&&Mn(e),e.load()):this.warn("media|source.src was changed by a third party - skip cleanup")),this.mediaSource=null,this.media=null,this._objectUrl=null,this.bufferCodecEventsExpected=this._bufferCodecEventsTotal,this.pendingTracks={},this.tracks={}}this.hls.trigger(E.MEDIA_DETACHED,void 0)},t.onBufferReset=function(){var e=this;this.getSourceBufferTypes().forEach((function(t){e.resetBuffer(t)})),this._initSourceBuffer()},t.resetBuffer=function(e){var t=this.sourceBuffer[e];try{var r;t&&(this.removeBufferListeners(e),this.sourceBuffer[e]=void 0,null!=(r=this.mediaSource)&&r.sourceBuffers.length&&this.mediaSource.removeSourceBuffer(t))}catch(t){this.warn("onBufferReset "+e,t)}},t.onBufferCodecs=function(e,t){var r=this,i=this.getSourceBufferTypes().length,n=Object.keys(t);if(n.forEach((function(e){if(i){var n=r.tracks[e];if(n&&"function"==typeof n.buffer.changeType){var s,a=t[e],o=a.id,l=a.codec,h=a.levelCodec,u=a.container,d=a.metadata,c=st(n.codec,n.levelCodec),f=null==c?void 0:c.replace(kn,"$1"),g=st(l,h),p=null==(s=g)?void 0:s.replace(kn,"$1");if(g&&f!==p){"audio"===e.slice(0,5)&&(g=nt(g,r.appendSource));var m=u+";codecs="+g;r.appendChangeType(e,m),r.log("switching codec "+c+" to "+g),r.tracks[e]={buffer:n.buffer,codec:l,container:u,levelCodec:h,metadata:d,id:o}}}}else r.pendingTracks[e]=t[e]})),!i){var s=Math.max(this.bufferCodecEventsExpected-1,0);this.bufferCodecEventsExpected!==s&&(this.log(s+" bufferCodec event(s) expected "+n.join(",")),this.bufferCodecEventsExpected=s),this.mediaSource&&"open"===this.mediaSource.readyState&&this.checkPendingTracks()}},t.appendChangeType=function(e,t){var r=this,i=this.operationQueue,n={execute:function(){var n=r.sourceBuffer[e];n&&(r.log("changing "+e+" sourceBuffer type to "+t),n.changeType(t)),i.shiftAndExecuteNext(e)},onStart:function(){},onComplete:function(){},onError:function(t){r.warn("Failed to change "+e+" SourceBuffer type",t)}};i.append(n,e,!!this.pendingTracks[e])},t.onBufferAppending=function(e,t){var r=this,i=this.hls,n=this.operationQueue,s=this.tracks,a=t.data,o=t.type,l=t.frag,h=t.part,u=t.chunkMeta,d=u.buffering[o],c=self.performance.now();d.start=c;var f=l.stats.buffering,g=h?h.stats.buffering:null;0===f.start&&(f.start=c),g&&0===g.start&&(g.start=c);var p=s.audio,m=!1;"audio"===o&&"audio/mpeg"===(null==p?void 0:p.container)&&(m=!this.lastMpegAudioChunk||1===u.id||this.lastMpegAudioChunk.sn!==u.sn,this.lastMpegAudioChunk=u);var v=l.start,y={execute:function(){if(d.executeStart=self.performance.now(),m){var e=r.sourceBuffer[o];if(e){var t=v-e.timestampOffset;Math.abs(t)>=.1&&(r.log("Updating audio SourceBuffer timestampOffset to "+v+" (delta: "+t+") sn: "+l.sn+")"),e.timestampOffset=v)}}r.appendExecutor(a,o)},onStart:function(){},onComplete:function(){var e=self.performance.now();d.executeEnd=d.end=e,0===f.first&&(f.first=e),g&&0===g.first&&(g.first=e);var t=r.sourceBuffer,i={};for(var n in t)i[n]=Mr.getBuffered(t[n]);r.appendErrors[o]=0,"audio"===o||"video"===o?r.appendErrors.audiovideo=0:(r.appendErrors.audio=0,r.appendErrors.video=0),r.hls.trigger(E.BUFFER_APPENDED,{type:o,frag:l,part:h,chunkMeta:u,parent:l.type,timeRanges:i})},onError:function(e){var t={type:S.MEDIA_ERROR,parent:l.type,details:T.BUFFER_APPEND_ERROR,sourceBufferName:o,frag:l,part:h,chunkMeta:u,error:e,err:e,fatal:!1};if(e.code===DOMException.QUOTA_EXCEEDED_ERR)t.details=T.BUFFER_FULL_ERROR;else{var n=++r.appendErrors[o];t.details=T.BUFFER_APPEND_ERROR,r.warn("Failed "+n+"/"+i.config.appendErrorMaxRetry+' times to append segment in "'+o+'" sourceBuffer'),n>=i.config.appendErrorMaxRetry&&(t.fatal=!0)}i.trigger(E.ERROR,t)}};n.append(y,o,!!this.pendingTracks[o])},t.onBufferFlushing=function(e,t){var r=this,i=this.operationQueue,n=function(e){return{execute:r.removeExecutor.bind(r,e,t.startOffset,t.endOffset),onStart:function(){},onComplete:function(){r.hls.trigger(E.BUFFER_FLUSHED,{type:e})},onError:function(t){r.warn("Failed to remove from "+e+" SourceBuffer",t)}}};t.type?i.append(n(t.type),t.type):this.getSourceBufferTypes().forEach((function(e){i.append(n(e),e)}))},t.onFragParsed=function(e,t){var r=this,i=t.frag,n=t.part,s=[],a=n?n.elementaryStreams:i.elementaryStreams;a[O]?s.push("audiovideo"):(a[M]&&s.push("audio"),a[x]&&s.push("video")),0===s.length&&this.warn("Fragments must have at least one ElementaryStreamType set. type: "+i.type+" level: "+i.level+" sn: "+i.sn),this.blockBuffers((function(){var e=self.performance.now();i.stats.buffering.end=e,n&&(n.stats.buffering.end=e);var t=n?n.stats:i.stats;r.hls.trigger(E.FRAG_BUFFERED,{frag:i,part:n,stats:t,id:i.type})}),s)},t.onFragChanged=function(e,t){this.trimBuffers()},t.onBufferEos=function(e,t){var r=this;this.getSourceBufferTypes().reduce((function(e,i){var n=r.sourceBuffer[i];return!n||t.type&&t.type!==i||(n.ending=!0,n.ended||(n.ended=!0,r.log(i+" sourceBuffer now EOS"))),e&&!(n&&!n.ended)}),!0)&&(this.log("Queueing mediaSource.endOfStream()"),this.blockBuffers((function(){r.getSourceBufferTypes().forEach((function(e){var t=r.sourceBuffer[e];t&&(t.ending=!1)}));var e=r.mediaSource;e&&"open"===e.readyState?(r.log("Calling mediaSource.endOfStream()"),e.endOfStream()):e&&r.log("Could not call mediaSource.endOfStream(). mediaSource.readyState: "+e.readyState)})))},t.onLevelUpdated=function(e,t){var r=t.details;r.fragments.length&&(this.details=r,this.getSourceBufferTypes().length?this.blockBuffers(this.updateMediaElementDuration.bind(this)):this.updateMediaElementDuration())},t.trimBuffers=function(){var e=this.hls,t=this.details,r=this.media;if(r&&null!==t&&this.getSourceBufferTypes().length){var i=e.config,n=r.currentTime,s=t.levelTargetDuration,a=t.live&&null!==i.liveBackBufferLength?i.liveBackBufferLength:i.backBufferLength;if(m(a)&&a>0){var o=Math.max(a,s),l=Math.floor(n/s)*s-o;this.flushBackBuffer(n,s,l)}if(m(i.frontBufferFlushThreshold)&&i.frontBufferFlushThreshold>0){var h=Math.max(i.maxBufferLength,i.frontBufferFlushThreshold),u=Math.max(h,s),d=Math.floor(n/s)*s+u;this.flushFrontBuffer(n,s,d)}}},t.flushBackBuffer=function(e,t,r){var i=this,n=this.details,s=this.sourceBuffer;this.getSourceBufferTypes().forEach((function(a){var o=s[a];if(o){var l=Mr.getBuffered(o);if(l.length>0&&r>l.start(0)){if(i.hls.trigger(E.BACK_BUFFER_REACHED,{bufferEnd:r}),null!=n&&n.live)i.hls.trigger(E.LIVE_BACK_BUFFER_REACHED,{bufferEnd:r});else if(o.ended&&l.end(l.length-1)-e<2*t)return void i.log("Cannot flush "+a+" back buffer while SourceBuffer is in ended state");i.hls.trigger(E.BUFFER_FLUSHING,{startOffset:0,endOffset:r,type:a})}}}))},t.flushFrontBuffer=function(e,t,r){var i=this,n=this.sourceBuffer;this.getSourceBufferTypes().forEach((function(s){var a=n[s];if(a){var o=Mr.getBuffered(a),l=o.length;if(l<2)return;var h=o.start(l-1),u=o.end(l-1);if(r>h||e>=h&&e<=u)return;if(a.ended&&e-u<2*t)return void i.log("Cannot flush "+s+" front buffer while SourceBuffer is in ended state");i.hls.trigger(E.BUFFER_FLUSHING,{startOffset:h,endOffset:1/0,type:s})}}))},t.updateMediaElementDuration=function(){if(this.details&&this.media&&this.mediaSource&&"open"===this.mediaSource.readyState){var e=this.details,t=this.hls,r=this.media,i=this.mediaSource,n=e.fragments[0].start+e.totalduration,s=r.duration,a=m(i.duration)?i.duration:0;e.live&&t.config.liveDurationInfinity?(i.duration=1/0,this.updateSeekableRange(e)):(n>a&&n>s||!m(s))&&(this.log("Updating Media Source duration to "+n.toFixed(3)),i.duration=n)}},t.updateSeekableRange=function(e){var t=this.mediaSource,r=e.fragments;if(r.length&&e.live&&null!=t&&t.setLiveSeekableRange){var i=Math.max(0,r[0].start),n=Math.max(i,i+e.totalduration);this.log("Media Source duration is set to "+t.duration+". Setting seekable range to "+i+"-"+n+"."),t.setLiveSeekableRange(i,n)}},t.checkPendingTracks=function(){var e=this.bufferCodecEventsExpected,t=this.operationQueue,r=this.pendingTracks,i=Object.keys(r).length;if(i&&(!e||2===i||"audiovideo"in r)){this.createSourceBuffers(r),this.pendingTracks={};var n=this.getSourceBufferTypes();if(n.length)this.hls.trigger(E.BUFFER_CREATED,{tracks:this.tracks}),n.forEach((function(e){t.executeNext(e)}));else{var s=new Error("could not create source buffer for media codec(s)");this.hls.trigger(E.ERROR,{type:S.MEDIA_ERROR,details:T.BUFFER_INCOMPATIBLE_CODECS_ERROR,fatal:!0,error:s,reason:s.message})}}},t.createSourceBuffers=function(e){var t=this,r=this.sourceBuffer,i=this.mediaSource;if(!i)throw Error("createSourceBuffers called when mediaSource was null");var n=function(n){if(!r[n]){var s,a=e[n];if(!a)throw Error("source buffer exists for track "+n+", however track does not");var o=-1===(null==(s=a.levelCodec)?void 0:s.indexOf(","))?a.levelCodec:a.codec;o&&"audio"===n.slice(0,5)&&(o=nt(o,t.appendSource));var l=a.container+";codecs="+o;t.log("creating sourceBuffer("+l+")");try{var h=r[n]=i.addSourceBuffer(l),u=n;t.addBufferListener(u,"updatestart",t._onSBUpdateStart),t.addBufferListener(u,"updateend",t._onSBUpdateEnd),t.addBufferListener(u,"error",t._onSBUpdateError),t.appendSource&&t.addBufferListener(u,"bufferedchange",(function(e,r){var i=r.removedRanges;null!=i&&i.length&&t.hls.trigger(E.BUFFER_FLUSHED,{type:n})})),t.tracks[n]={buffer:h,codec:o,container:a.container,levelCodec:a.levelCodec,metadata:a.metadata,id:a.id}}catch(e){t.error("error while trying to add sourceBuffer: "+e.message),t.hls.trigger(E.ERROR,{type:S.MEDIA_ERROR,details:T.BUFFER_ADD_CODEC_ERROR,fatal:!1,error:e,sourceBufferName:n,mimeType:l})}}};for(var s in e)n(s)},t._onSBUpdateStart=function(e){this.operationQueue.current(e).onStart()},t._onSBUpdateEnd=function(e){var t;if("closed"!==(null==(t=this.mediaSource)?void 0:t.readyState)){var r=this.operationQueue;r.current(e).onComplete(),r.shiftAndExecuteNext(e)}else this.resetBuffer(e)},t._onSBUpdateError=function(e,t){var r,i=new Error(e+" SourceBuffer error. MediaSource readyState: "+(null==(r=this.mediaSource)?void 0:r.readyState));this.error(""+i,t),this.hls.trigger(E.ERROR,{type:S.MEDIA_ERROR,details:T.BUFFER_APPENDING_ERROR,sourceBufferName:e,error:i,fatal:!1});var n=this.operationQueue.current(e);n&&n.onError(i)},t.removeExecutor=function(e,t,r){var i=this.media,n=this.mediaSource,s=this.operationQueue,a=this.sourceBuffer[e];if(!i||!n||!a)return this.warn("Attempting to remove from the "+e+" SourceBuffer, but it does not exist"),void s.shiftAndExecuteNext(e);var o=m(i.duration)?i.duration:1/0,l=m(n.duration)?n.duration:1/0,h=Math.max(0,t),u=Math.min(r,o,l);u>h&&(!a.ending||a.ended)?(a.ended=!1,this.log("Removing ["+h+","+u+"] from the "+e+" SourceBuffer"),a.remove(h,u)):s.shiftAndExecuteNext(e)},t.appendExecutor=function(e,t){var r=this.sourceBuffer[t];if(r)r.ended=!1,r.appendBuffer(e);else if(!this.pendingTracks[t])throw new Error("Attempting to append to the "+t+" SourceBuffer, but it does not exist")},t.blockBuffers=function(e,t){var r=this;if(void 0===t&&(t=this.getSourceBufferTypes()),!t.length)return this.log("Blocking operation requested, but no SourceBuffers exist"),void Promise.resolve().then(e);var i=this.operationQueue,n=t.map((function(e){return i.appendBlocker(e)}));Promise.all(n).then((function(){e(),t.forEach((function(e){var t=r.sourceBuffer[e];null!=t&&t.updating||i.shiftAndExecuteNext(e)}))}))},t.getSourceBufferTypes=function(){return Object.keys(this.sourceBuffer)},t.addBufferListener=function(e,t,r){var i=this.sourceBuffer[e];if(i){var n=r.bind(this,e);this.listeners[e].push({event:t,listener:n}),i.addEventListener(t,n)}},t.removeBufferListeners=function(e){var t=this.sourceBuffer[e];t&&this.listeners[e].forEach((function(e){t.removeEventListener(e.event,e.listener)}))},a(e,[{key:"mediaSrc",get:function(){var e,t=(null==(e=this.media)?void 0:e.firstChild)||this.media;return null==t?void 0:t.src}}]),e}();function Mn(e){var t=e.querySelectorAll("source");[].slice.call(t).forEach((function(t){e.removeChild(t)}))}var xn={42:225,92:233,94:237,95:243,96:250,123:231,124:247,125:209,126:241,127:9608,128:174,129:176,130:189,131:191,132:8482,133:162,134:163,135:9834,136:224,137:32,138:232,139:226,140:234,141:238,142:244,143:251,144:193,145:201,146:211,147:218,148:220,149:252,150:8216,151:161,152:42,153:8217,154:9473,155:169,156:8480,157:8226,158:8220,159:8221,160:192,161:194,162:199,163:200,164:202,165:203,166:235,167:206,168:207,169:239,170:212,171:217,172:249,173:219,174:171,175:187,176:195,177:227,178:205,179:204,180:236,181:210,182:242,183:213,184:245,185:123,186:125,187:92,188:94,189:95,190:124,191:8764,192:196,193:228,194:214,195:246,196:223,197:165,198:164,199:9475,200:197,201:229,202:216,203:248,204:9487,205:9491,206:9495,207:9499},On=function(e){return String.fromCharCode(xn[e]||e)},Fn=15,Nn=100,Bn={17:1,18:3,21:5,22:7,23:9,16:11,19:12,20:14},Un={17:2,18:4,21:6,22:8,23:10,19:13,20:15},Gn={25:1,26:3,29:5,30:7,31:9,24:11,27:12,28:14},Hn={25:2,26:4,29:6,30:8,31:10,27:13,28:15},$n=["white","green","blue","cyan","red","yellow","magenta","black","transparent"],Kn=function(){function e(){this.time=null,this.verboseLevel=0}return e.prototype.log=function(e,t){if(this.verboseLevel>=e){var r="function"==typeof t?t():t;A.log(this.time+" ["+e+"] "+r)}},e}(),Wn=function(e){for(var t=[],r=0;rNn&&(this.logger.log(3,"Too large cursor position "+this.pos),this.pos=Nn)},t.moveCursor=function(e){var t=this.pos+e;if(e>1)for(var r=this.pos+1;r=144&&this.backSpace();var r=On(e);this.pos>=Nn?this.logger.log(0,(function(){return"Cannot insert "+e.toString(16)+" ("+r+") at position "+t.pos+". Skipping it!"})):(this.chars[this.pos].setChar(r,this.currPenState),this.moveCursor(1))},t.clearFromPos=function(e){var t;for(t=e;t0&&(r=e?"["+t.join(" | ")+"]":t.join("\n")),r},t.getTextAndFormat=function(){return this.rows},e}(),zn=function(){function e(e,t,r){this.chNr=void 0,this.outputFilter=void 0,this.mode=void 0,this.verbose=void 0,this.displayedMemory=void 0,this.nonDisplayedMemory=void 0,this.lastOutputScreen=void 0,this.currRollUpRow=void 0,this.writeScreen=void 0,this.cueStartTime=void 0,this.logger=void 0,this.chNr=e,this.outputFilter=t,this.mode=null,this.verbose=0,this.displayedMemory=new Yn(r),this.nonDisplayedMemory=new Yn(r),this.lastOutputScreen=new Yn(r),this.currRollUpRow=this.displayedMemory.rows[14],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null,this.logger=r}var t=e.prototype;return t.reset=function(){this.mode=null,this.displayedMemory.reset(),this.nonDisplayedMemory.reset(),this.lastOutputScreen.reset(),this.outputFilter.reset(),this.currRollUpRow=this.displayedMemory.rows[14],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null},t.getHandler=function(){return this.outputFilter},t.setHandler=function(e){this.outputFilter=e},t.setPAC=function(e){this.writeScreen.setPAC(e)},t.setBkgData=function(e){this.writeScreen.setBkgData(e)},t.setMode=function(e){e!==this.mode&&(this.mode=e,this.logger.log(2,(function(){return"MODE="+e})),"MODE_POP-ON"===this.mode?this.writeScreen=this.nonDisplayedMemory:(this.writeScreen=this.displayedMemory,this.writeScreen.reset()),"MODE_ROLL-UP"!==this.mode&&(this.displayedMemory.nrRollUpRows=null,this.nonDisplayedMemory.nrRollUpRows=null),this.mode=e)},t.insertChars=function(e){for(var t=this,r=0;r=46,t.italics)t.foreground="white";else{var r=Math.floor(e/2)-16;t.foreground=["white","green","blue","cyan","red","yellow","magenta"][r]}this.logger.log(2,"MIDROW: "+JSON.stringify(t)),this.writeScreen.setPen(t)},t.outputDataUpdate=function(e){void 0===e&&(e=!1);var t=this.logger.time;null!==t&&this.outputFilter&&(null!==this.cueStartTime||this.displayedMemory.isEmpty()?this.displayedMemory.equals(this.lastOutputScreen)||(this.outputFilter.newCue(this.cueStartTime,t,this.lastOutputScreen),e&&this.outputFilter.dispatchCue&&this.outputFilter.dispatchCue(),this.cueStartTime=this.displayedMemory.isEmpty()?null:t):this.cueStartTime=t,this.lastOutputScreen.copy(this.displayedMemory))},t.cueSplitAtTime=function(e){this.outputFilter&&(this.displayedMemory.isEmpty()||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,e,this.displayedMemory),this.cueStartTime=e))},e}(),Xn=function(){function e(e,t,r){this.channels=void 0,this.currentChannel=0,this.cmdHistory={a:null,b:null},this.logger=void 0;var i=this.logger=new Kn;this.channels=[null,new zn(e,t,i),new zn(e+1,r,i)]}var t=e.prototype;return t.getHandler=function(e){return this.channels[e].getHandler()},t.setHandler=function(e,t){this.channels[e].setHandler(t)},t.addData=function(e,t){var r=this;this.logger.time=e;for(var i=function(e){var i=127&t[e],n=127&t[e+1],s=!1,a=null;if(0===i&&0===n)return 0;r.logger.log(3,(function(){return"["+Wn([t[e],t[e+1]])+"] -> ("+Wn([i,n])+")"}));var o=r.cmdHistory;if(i>=16&&i<=31){if(function(e,t,r){return r.a===e&&r.b===t}(i,n,o))return Qn(null,null,o),r.logger.log(3,(function(){return"Repeated command ("+Wn([i,n])+") is dropped"})),0;Qn(i,n,r.cmdHistory),(s=r.parseCmd(i,n))||(s=r.parseMidrow(i,n)),s||(s=r.parsePAC(i,n)),s||(s=r.parseBackgroundAttributes(i,n))}else Qn(null,null,o);if(!s&&(a=r.parseChars(i,n))){var l=r.currentChannel;l&&l>0?r.channels[l].insertChars(a):r.logger.log(2,"No channel found yet. TEXT-MODE?")}s||a||r.logger.log(2,(function(){return"Couldn't parse cleaned data "+Wn([i,n])+" orig: "+Wn([t[e],t[e+1]])}))},n=0;n=32&&t<=47||(23===e||31===e)&&t>=33&&t<=35))return!1;var r=20===e||21===e||23===e?1:2,i=this.channels[r];return 20===e||21===e||28===e||29===e?32===t?i.ccRCL():33===t?i.ccBS():34===t?i.ccAOF():35===t?i.ccAON():36===t?i.ccDER():37===t?i.ccRU(2):38===t?i.ccRU(3):39===t?i.ccRU(4):40===t?i.ccFON():41===t?i.ccRDC():42===t?i.ccTR():43===t?i.ccRTD():44===t?i.ccEDM():45===t?i.ccCR():46===t?i.ccENM():47===t&&i.ccEOC():i.ccTO(t-32),this.currentChannel=r,!0},t.parseMidrow=function(e,t){var r=0;if((17===e||25===e)&&t>=32&&t<=47){if((r=17===e?1:2)!==this.currentChannel)return this.logger.log(0,"Mismatch channel in midrow parsing"),!1;var i=this.channels[r];return!!i&&(i.ccMIDROW(t),this.logger.log(3,(function(){return"MIDROW ("+Wn([e,t])+")"})),!0)}return!1},t.parsePAC=function(e,t){var r;if(!((e>=17&&e<=23||e>=25&&e<=31)&&t>=64&&t<=127||(16===e||24===e)&&t>=64&&t<=95))return!1;var i=e<=23?1:2;r=t>=64&&t<=95?1===i?Bn[e]:Gn[e]:1===i?Un[e]:Hn[e];var n=this.channels[i];return!!n&&(n.setPAC(this.interpretPAC(r,t)),this.currentChannel=i,!0)},t.interpretPAC=function(e,t){var r,i={color:null,italics:!1,indent:null,underline:!1,row:e};return r=t>95?t-96:t-64,i.underline=!(1&~r),r<=13?i.color=["white","green","blue","cyan","red","yellow","magenta","white"][Math.floor(r/2)]:r<=15?(i.italics=!0,i.color="white"):i.indent=4*Math.floor((r-16)/2),i},t.parseChars=function(e,t){var r,i,n=null,s=null;return e>=25?(r=2,s=e-8):(r=1,s=e),s>=17&&s<=19?(i=17===s?t+80:18===s?t+112:t+144,this.logger.log(2,(function(){return"Special char '"+On(i)+"' in channel "+r})),n=[i]):e>=32&&e<=127&&(n=0===t?[e]:[e,t]),n&&this.logger.log(3,(function(){return"Char codes = "+Wn(n).join(",")})),n},t.parseBackgroundAttributes=function(e,t){var r;if(!((16===e||24===e)&&t>=32&&t<=47||(23===e||31===e)&&t>=45&&t<=47))return!1;var i={};16===e||24===e?(r=Math.floor((t-32)/2),i.background=$n[r],t%2==1&&(i.background=i.background+"_semi")):45===t?i.background="transparent":(i.foreground="black",47===t&&(i.underline=!0));var n=e<=23?1:2;return this.channels[n].setBkgData(i),!0},t.reset=function(){for(var e=0;ee)&&(this.startTime=e),this.endTime=t,this.screen=r,this.timelineController.createCaptionsTrack(this.trackName)},t.reset=function(){this.cueRanges=[],this.startTime=null},e}(),Zn=function(){if(null!=$&&$.VTTCue)return self.VTTCue;var e=["","lr","rl"],t=["start","middle","end","left","right"];function r(e,t){if("string"!=typeof t)return!1;if(!Array.isArray(e))return!1;var r=t.toLowerCase();return!!~e.indexOf(r)&&r}function i(e){return r(t,e)}function n(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),i=1;i100)throw new Error("Position must be between 0 and 100.");E=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"positionAlign",n({},l,{get:function(){return S},set:function(e){var t=i(e);if(!t)throw new SyntaxError("An invalid or illegal string was specified.");S=t,this.hasBeenReset=!0}})),Object.defineProperty(o,"size",n({},l,{get:function(){return T},set:function(e){if(e<0||e>100)throw new Error("Size must be between 0 and 100.");T=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"align",n({},l,{get:function(){return _},set:function(e){var t=i(e);if(!t)throw new SyntaxError("An invalid or illegal string was specified.");_=t,this.hasBeenReset=!0}})),o.displayState=void 0}return s.prototype.getCueAsHTML=function(){return self.WebVTT.convertCueToDOMTree(self,this.text)},s}(),es=function(){function e(){}return e.prototype.decode=function(e,t){if(!e)return"";if("string"!=typeof e)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(e))},e}();function ts(e){function t(e,t,r,i){return 3600*(0|e)+60*(0|t)+(0|r)+parseFloat(i||0)}var r=e.match(/^(?:(\d+):)?(\d{2}):(\d{2})(\.\d+)?/);return r?parseFloat(r[2])>59?t(r[2],r[3],0,r[4]):t(r[1],r[2],r[3],r[4]):null}var rs=function(){function e(){this.values=Object.create(null)}var t=e.prototype;return t.set=function(e,t){this.get(e)||""===t||(this.values[e]=t)},t.get=function(e,t,r){return r?this.has(e)?this.values[e]:t[r]:this.has(e)?this.values[e]:t},t.has=function(e){return e in this.values},t.alt=function(e,t,r){for(var i=0;i=0&&r<=100)return this.set(e,r),!0}return!1},e}();function is(e,t,r,i){var n=i?e.split(i):[e];for(var s in n)if("string"==typeof n[s]){var a=n[s].split(r);2===a.length&&t(a[0],a[1])}}var ns=new Zn(0,0,""),ss="middle"===ns.align?"middle":"center";function as(e,t,r){var i=e;function n(){var t=ts(e);if(null===t)throw new Error("Malformed timestamp: "+i);return e=e.replace(/^[^\sa-zA-Z-]+/,""),t}function s(){e=e.replace(/^\s+/,"")}if(s(),t.startTime=n(),s(),"--\x3e"!==e.slice(0,3))throw new Error("Malformed time stamp (time stamps must be separated by '--\x3e'): "+i);e=e.slice(3),s(),t.endTime=n(),s(),function(e,t){var i=new rs;is(e,(function(e,t){var n;switch(e){case"region":for(var s=r.length-1;s>=0;s--)if(r[s].id===t){i.set(e,r[s].region);break}break;case"vertical":i.alt(e,t,["rl","lr"]);break;case"line":n=t.split(","),i.integer(e,n[0]),i.percent(e,n[0])&&i.set("snapToLines",!1),i.alt(e,n[0],["auto"]),2===n.length&&i.alt("lineAlign",n[1],["start",ss,"end"]);break;case"position":n=t.split(","),i.percent(e,n[0]),2===n.length&&i.alt("positionAlign",n[1],["start",ss,"end","line-left","line-right","auto"]);break;case"size":i.percent(e,t);break;case"align":i.alt(e,t,["start",ss,"end","left","right"])}}),/:/,/\s/),t.region=i.get("region",null),t.vertical=i.get("vertical","");var n=i.get("line","auto");"auto"===n&&-1===ns.line&&(n=-1),t.line=n,t.lineAlign=i.get("lineAlign","start"),t.snapToLines=i.get("snapToLines",!0),t.size=i.get("size",100),t.align=i.get("align",ss);var s=i.get("position","auto");"auto"===s&&50===ns.position&&(s="start"===t.align||"left"===t.align?0:"end"===t.align||"right"===t.align?100:50),t.position=s}(e,t)}function os(e){return e.replace(/
/gi,"\n")}var ls=function(){function e(){this.state="INITIAL",this.buffer="",this.decoder=new es,this.regionList=[],this.cue=null,this.oncue=void 0,this.onparsingerror=void 0,this.onflush=void 0}var t=e.prototype;return t.parse=function(e){var t=this;function r(){var e=t.buffer,r=0;for(e=os(e);r>>0).toString()};function cs(e,t,r){return ds(e.toString())+ds(t.toString())+ds(r)}var fs="stpp.ttml.im1t",gs=/^(\d{2,}):(\d{2}):(\d{2}):(\d{2})\.?(\d+)?$/,ps=/^(\d*(?:\.\d*)?)(h|m|s|ms|f|t)$/,ms={left:"start",center:"center",right:"end",start:"start",end:"end"};function vs(e,t,r,i){var n=we(new Uint8Array(e),["mdat"]);if(0!==n.length){var s,a,l,h=n.map((function(e){return me(e)})),u=(s=t.baseTime,1,void 0===(a=t.timescale)&&(a=1),void 0===l&&(l=!1),Qi(s,1,1/a,l));try{h.forEach((function(e){return r(function(e,t){var r=(new DOMParser).parseFromString(e,"text/xml").getElementsByTagName("tt")[0];if(!r)throw new Error("Invalid ttml");var i={frameRate:30,subFrameRate:1,frameRateMultiplier:0,tickRate:0},n=Object.keys(i).reduce((function(e,t){return e[t]=r.getAttribute("ttp:"+t)||i[t],e}),{}),s="preserve"!==r.getAttribute("xml:space"),a=Es(ys(r,"styling","style")),l=Es(ys(r,"layout","region")),h=ys(r,"body","[begin]");return[].map.call(h,(function(e){var r=Ss(e,s);if(!r||!e.hasAttribute("begin"))return null;var i=Ls(e.getAttribute("begin"),n),h=Ls(e.getAttribute("dur"),n),u=Ls(e.getAttribute("end"),n);if(null===i)throw _s(e);if(null===u){if(null===h)throw _s(e);u=i+h}var d=new Zn(i-t,u-t,r);d.id=cs(d.startTime,d.endTime,d.text);var c=function(e,t,r){var i="http://www.w3.org/ns/ttml#styling",n=null,s=null!=e&&e.hasAttribute("style")?e.getAttribute("style"):null;return s&&r.hasOwnProperty(s)&&(n=r[s]),["displayAlign","textAlign","color","backgroundColor","fontSize","fontFamily"].reduce((function(r,s){var a=Ts(t,i,s)||Ts(e,i,s)||Ts(n,i,s);return a&&(r[s]=a),r}),{})}(l[e.getAttribute("region")],a[e.getAttribute("style")],a),f=c.textAlign;if(f){var g=ms[f];g&&(d.lineAlign=g),d.align=f}return o(d,c),d})).filter((function(e){return null!==e}))}(e,u))}))}catch(e){i(e)}}else i(new Error("Could not parse IMSC1 mdat"))}function ys(e,t,r){var i=e.getElementsByTagName(t)[0];return i?[].slice.call(i.querySelectorAll(r)):[]}function Es(e){return e.reduce((function(e,t){var r=t.getAttribute("xml:id");return r&&(e[r]=t),e}),{})}function Ss(e,t){return[].slice.call(e.childNodes).reduce((function(e,r,i){var n;return"br"===r.nodeName&&i?e+"\n":null!=(n=r.childNodes)&&n.length?Ss(r,t):t?e+r.textContent.trim().replace(/\s+/g," "):e+r.textContent}),"")}function Ts(e,t,r){return e&&e.hasAttributeNS(t,r)?e.getAttributeNS(t,r):null}function _s(e){return new Error("Could not parse ttml timestamp "+e)}function Ls(e,t){if(!e)return null;var r=ts(e);return null===r&&(gs.test(e)?r=function(e,t){var r=gs.exec(e),i=(0|r[4])+(0|r[5])/t.subFrameRate;return 3600*(0|r[1])+60*(0|r[2])+(0|r[3])+i/t.frameRate}(e,t):ps.test(e)&&(r=function(e,t){var r=ps.exec(e),i=Number(r[1]);switch(r[2]){case"h":return 3600*i;case"m":return 60*i;case"ms":return 1e3*i;case"f":return i/t.frameRate;case"t":return i/t.tickRate}return i}(e,t))),r}var bs=function(){function e(e){this.hls=void 0,this.media=null,this.config=void 0,this.enabled=!0,this.Cues=void 0,this.textTracks=[],this.tracks=[],this.initPTS=[],this.unparsedVttFrags=[],this.captionsTracks={},this.nonNativeCaptionsTracks={},this.cea608Parser1=void 0,this.cea608Parser2=void 0,this.lastCc=-1,this.lastSn=-1,this.lastPartIndex=-1,this.prevCC=-1,this.vttCCs={ccOffset:0,presentationOffset:0,0:{start:0,prevCC:-1,new:!0}},this.captionsProperties=void 0,this.hls=e,this.config=e.config,this.Cues=e.config.cueHandler,this.captionsProperties={textTrack1:{label:this.config.captionsTextTrack1Label,languageCode:this.config.captionsTextTrack1LanguageCode},textTrack2:{label:this.config.captionsTextTrack2Label,languageCode:this.config.captionsTextTrack2LanguageCode},textTrack3:{label:this.config.captionsTextTrack3Label,languageCode:this.config.captionsTextTrack3LanguageCode},textTrack4:{label:this.config.captionsTextTrack4Label,languageCode:this.config.captionsTextTrack4LanguageCode}},e.on(E.MEDIA_ATTACHING,this.onMediaAttaching,this),e.on(E.MEDIA_DETACHING,this.onMediaDetaching,this),e.on(E.MANIFEST_LOADING,this.onManifestLoading,this),e.on(E.MANIFEST_LOADED,this.onManifestLoaded,this),e.on(E.SUBTITLE_TRACKS_UPDATED,this.onSubtitleTracksUpdated,this),e.on(E.FRAG_LOADING,this.onFragLoading,this),e.on(E.FRAG_LOADED,this.onFragLoaded,this),e.on(E.FRAG_PARSING_USERDATA,this.onFragParsingUserdata,this),e.on(E.FRAG_DECRYPTED,this.onFragDecrypted,this),e.on(E.INIT_PTS_FOUND,this.onInitPtsFound,this),e.on(E.SUBTITLE_TRACKS_CLEARED,this.onSubtitleTracksCleared,this),e.on(E.BUFFER_FLUSHING,this.onBufferFlushing,this)}var t=e.prototype;return t.destroy=function(){var e=this.hls;e.off(E.MEDIA_ATTACHING,this.onMediaAttaching,this),e.off(E.MEDIA_DETACHING,this.onMediaDetaching,this),e.off(E.MANIFEST_LOADING,this.onManifestLoading,this),e.off(E.MANIFEST_LOADED,this.onManifestLoaded,this),e.off(E.SUBTITLE_TRACKS_UPDATED,this.onSubtitleTracksUpdated,this),e.off(E.FRAG_LOADING,this.onFragLoading,this),e.off(E.FRAG_LOADED,this.onFragLoaded,this),e.off(E.FRAG_PARSING_USERDATA,this.onFragParsingUserdata,this),e.off(E.FRAG_DECRYPTED,this.onFragDecrypted,this),e.off(E.INIT_PTS_FOUND,this.onInitPtsFound,this),e.off(E.SUBTITLE_TRACKS_CLEARED,this.onSubtitleTracksCleared,this),e.off(E.BUFFER_FLUSHING,this.onBufferFlushing,this),this.hls=this.config=null,this.cea608Parser1=this.cea608Parser2=void 0},t.initCea608Parsers=function(){if(this.config.enableCEA708Captions&&(!this.cea608Parser1||!this.cea608Parser2)){var e=new Jn(this,"textTrack1"),t=new Jn(this,"textTrack2"),r=new Jn(this,"textTrack3"),i=new Jn(this,"textTrack4");this.cea608Parser1=new Xn(1,e,t),this.cea608Parser2=new Xn(3,r,i)}},t.addCues=function(e,t,r,i,n){for(var s,a,o,l,h=!1,u=n.length;u--;){var d=n[u],c=(s=d[0],a=d[1],o=t,l=r,Math.min(a,l)-Math.max(s,o));if(c>=0&&(d[0]=Math.min(d[0],t),d[1]=Math.max(d[1],r),h=!0,c/(r-t)>.5))return}if(h||n.push([t,r]),this.config.renderTextTracksNatively){var f=this.captionsTracks[e];this.Cues.newCue(f,t,r,i)}else{var g=this.Cues.newCue(null,t,r,i);this.hls.trigger(E.CUES_PARSED,{type:"captions",cues:g,track:e})}},t.onInitPtsFound=function(e,t){var r=this,i=t.frag,n=t.id,s=t.initPTS,a=t.timescale,o=this.unparsedVttFrags;"main"===n&&(this.initPTS[i.cc]={baseTime:s,timescale:a}),o.length&&(this.unparsedVttFrags=[],o.forEach((function(e){r.onFragLoaded(E.FRAG_LOADED,e)})))},t.getExistingTrack=function(e,t){var r=this.media;if(r)for(var i=0;i0&&c.push(e)},u.onparsingerror=function(e){h=e},u.onflush=function(){h?a(h):s(c)},d.forEach((function(e){if(y){if(us(e,"X-TIMESTAMP-MAP=")){y=!1,e.slice(16).split(",").forEach((function(e){us(e,"LOCAL:")?g=e.slice(6):us(e,"MPEGTS:")&&(p=parseInt(e.slice(7)))}));try{v=function(e){var t=parseInt(e.slice(-3)),r=parseInt(e.slice(-6,-4)),i=parseInt(e.slice(-9,-7)),n=e.length>9?parseInt(e.substring(0,e.indexOf(":"))):0;if(!(m(t)&&m(r)&&m(i)&&m(n)))throw Error("Malformed X-TIMESTAMP-MAP: Local:"+e);return t+=1e3*r,(t+=6e4*i)+36e5*n}(g)/1e3}catch(e){h=e}return}""===e&&(y=!1)}u.parse(e+"\n")})),u.flush()}(null!=(t=i.initSegment)&&t.data?Fe(i.initSegment.data,new Uint8Array(n)):n,this.initPTS[i.cc],this.vttCCs,i.cc,i.start,(function(e){r._appendCues(e,i.level),l.trigger(E.SUBTITLE_FRAG_PROCESSED,{success:!0,frag:i})}),(function(t){var s="Missing initPTS for VTT MPEGTS"===t.message;s?a.push(e):r._fallbackToIMSC1(i,n),A.log("Failed to parse VTT cue: "+t),s&&o>i.cc||l.trigger(E.SUBTITLE_FRAG_PROCESSED,{success:!1,frag:i,error:t})}))}else a.push(e)},t._fallbackToIMSC1=function(e,t){var r=this,i=this.tracks[e.level];i.textCodec||vs(t,this.initPTS[e.cc],(function(){i.textCodec=fs,r._parseIMSC1(e,t)}),(function(){i.textCodec="wvtt"}))},t._appendCues=function(e,t){var r=this.hls;if(this.config.renderTextTracksNatively){var i=this.textTracks[t];if(!i||"disabled"===i.mode)return;e.forEach((function(e){return Ct(i,e)}))}else{var n=this.tracks[t];if(!n)return;var s=n.default?"default":"subtitles"+t;r.trigger(E.CUES_PARSED,{type:"subtitles",cues:e,track:s})}},t.onFragDecrypted=function(e,t){t.frag.type===Rt&&this.onFragLoaded(E.FRAG_LOADED,t)},t.onSubtitleTracksCleared=function(){this.tracks=[],this.captionsTracks={}},t.onFragParsingUserdata=function(e,t){this.initCea608Parsers();var r=this.cea608Parser1,i=this.cea608Parser2;if(this.enabled&&r&&i){var n=t.frag,s=t.samples;if(n.type!==Lt||"NONE"!==this.closedCaptionsForLevel(n))for(var a=0;athis.autoLevelCapping&&this.streamController&&this.streamController.nextLevelSwitch(),this.autoLevelCapping=t.autoLevelCapping}}},t.getMaxLevel=function(t){var r=this,i=this.hls.levels;if(!i.length)return-1;var n=i.filter((function(e,i){return r.isLevelAllowed(e)&&i<=t}));return this.clientRect=null,e.getMaxLevelByMediaSize(n,this.mediaWidth,this.mediaHeight)},t.startCapping=function(){this.timer||(this.autoLevelCapping=Number.POSITIVE_INFINITY,self.clearInterval(this.timer),this.timer=self.setInterval(this.detectPlayerSize.bind(this),1e3),this.detectPlayerSize())},t.stopCapping=function(){this.restrictedLevels=[],this.firstLevel=-1,this.autoLevelCapping=Number.POSITIVE_INFINITY,this.timer&&(self.clearInterval(this.timer),this.timer=void 0)},t.getDimensions=function(){if(this.clientRect)return this.clientRect;var e=this.media,t={width:0,height:0};if(e){var r=e.getBoundingClientRect();t.width=r.width,t.height=r.height,t.width||t.height||(t.width=r.right-r.left||e.width||0,t.height=r.bottom-r.top||e.height||0)}return this.clientRect=t,t},t.isLevelAllowed=function(e){return!this.restrictedLevels.some((function(t){return e.bitrate===t.bitrate&&e.width===t.width&&e.height===t.height}))},e.getMaxLevelByMediaSize=function(e,t,r){if(null==e||!e.length)return-1;for(var i,n,s=e.length-1,a=Math.max(t,r),o=0;o=a||l.height>=a)&&(i=l,!(n=e[o+1])||i.width!==n.width||i.height!==n.height)){s=o;break}}return s},a(e,[{key:"mediaWidth",get:function(){return this.getDimensions().width*this.contentScaleFactor}},{key:"mediaHeight",get:function(){return this.getDimensions().height*this.contentScaleFactor}},{key:"contentScaleFactor",get:function(){var e=1;if(!this.hls.config.ignoreDevicePixelRatio)try{e=self.devicePixelRatio}catch(e){}return e}}]),e}(),Ps=function(){function e(e){this.hls=void 0,this.isVideoPlaybackQualityAvailable=!1,this.timer=void 0,this.media=null,this.lastTime=void 0,this.lastDroppedFrames=0,this.lastDecodedFrames=0,this.streamController=void 0,this.hls=e,this.registerListeners()}var t=e.prototype;return t.setStreamController=function(e){this.streamController=e},t.registerListeners=function(){this.hls.on(E.MEDIA_ATTACHING,this.onMediaAttaching,this)},t.unregisterListeners=function(){this.hls.off(E.MEDIA_ATTACHING,this.onMediaAttaching,this)},t.destroy=function(){this.timer&&clearInterval(this.timer),this.unregisterListeners(),this.isVideoPlaybackQualityAvailable=!1,this.media=null},t.onMediaAttaching=function(e,t){var r=this.hls.config;if(r.capLevelOnFPSDrop){var i=t.media instanceof self.HTMLVideoElement?t.media:null;this.media=i,i&&"function"==typeof i.getVideoPlaybackQuality&&(this.isVideoPlaybackQualityAvailable=!0),self.clearInterval(this.timer),this.timer=self.setInterval(this.checkFPSInterval.bind(this),r.fpsDroppedMonitoringPeriod)}},t.checkFPS=function(e,t,r){var i=performance.now();if(t){if(this.lastTime){var n=i-this.lastTime,s=r-this.lastDroppedFrames,a=t-this.lastDecodedFrames,o=1e3*s/n,l=this.hls;if(l.trigger(E.FPS_DROP,{currentDropped:s,currentDecoded:a,totalDroppedFrames:r}),o>0&&s>l.config.fpsDroppedMonitoringThreshold*a){var h=l.currentLevel;A.warn("drop FPS ratio greater than max allowed value for currentLevel: "+h),h>0&&(-1===l.autoLevelCapping||l.autoLevelCapping>=h)&&(h-=1,l.trigger(E.FPS_DROP_LEVEL_CAPPING,{level:h,droppedLevel:l.currentLevel}),l.autoLevelCapping=h,this.streamController.nextLevelSwitch())}}this.lastTime=i,this.lastDroppedFrames=r,this.lastDecodedFrames=t}},t.checkFPSInterval=function(){var e=this.media;if(e)if(this.isVideoPlaybackQualityAvailable){var t=e.getVideoPlaybackQuality();this.checkFPS(e,t.totalVideoFrames,t.droppedVideoFrames)}else this.checkFPS(e,e.webkitDecodedFrameCount,e.webkitDroppedFrameCount)},e}(),Is="[eme]",Cs=function(){function e(t){this.hls=void 0,this.config=void 0,this.media=null,this.keyFormatPromise=null,this.keySystemAccessPromises={},this._requestLicenseFailureCount=0,this.mediaKeySessions=[],this.keyIdToKeySessionPromise={},this.setMediaKeysQueue=e.CDMCleanupPromise?[e.CDMCleanupPromise]:[],this.onMediaEncrypted=this._onMediaEncrypted.bind(this),this.onWaitingForKey=this._onWaitingForKey.bind(this),this.debug=A.debug.bind(A,Is),this.log=A.log.bind(A,Is),this.warn=A.warn.bind(A,Is),this.error=A.error.bind(A,Is),this.hls=t,this.config=t.config,this.registerListeners()}var t=e.prototype;return t.destroy=function(){this.unregisterListeners(),this.onMediaDetached();var e=this.config;e.requestMediaKeySystemAccessFunc=null,e.licenseXhrSetup=e.licenseResponseCallback=void 0,e.drmSystems=e.drmSystemOptions={},this.hls=this.onMediaEncrypted=this.onWaitingForKey=this.keyIdToKeySessionPromise=null,this.config=null},t.registerListeners=function(){this.hls.on(E.MEDIA_ATTACHED,this.onMediaAttached,this),this.hls.on(E.MEDIA_DETACHED,this.onMediaDetached,this),this.hls.on(E.MANIFEST_LOADING,this.onManifestLoading,this),this.hls.on(E.MANIFEST_LOADED,this.onManifestLoaded,this)},t.unregisterListeners=function(){this.hls.off(E.MEDIA_ATTACHED,this.onMediaAttached,this),this.hls.off(E.MEDIA_DETACHED,this.onMediaDetached,this),this.hls.off(E.MANIFEST_LOADING,this.onManifestLoading,this),this.hls.off(E.MANIFEST_LOADED,this.onManifestLoaded,this)},t.getLicenseServerUrl=function(e){var t=this.config,r=t.drmSystems,i=t.widevineLicenseUrl,n=r[e];if(n)return n.licenseUrl;if(e===K.WIDEVINE&&i)return i;throw new Error('no license server URL configured for key-system "'+e+'"')},t.getServerCertificateUrl=function(e){var t=this.config.drmSystems[e];if(t)return t.serverCertificateUrl;this.log('No Server Certificate in config.drmSystems["'+e+'"]')},t.attemptKeySystemAccess=function(e){var t=this,r=this.hls.levels,i=function(e,t,r){return!!e&&r.indexOf(e)===t},n=r.map((function(e){return e.audioCodec})).filter(i),s=r.map((function(e){return e.videoCodec})).filter(i);return n.length+s.length===0&&s.push("avc1.42e01e"),new Promise((function(r,i){!function e(a){var o=a.shift();t.getMediaKeysPromise(o,n,s).then((function(e){return r({keySystem:o,mediaKeys:e})})).catch((function(t){a.length?e(a):i(t instanceof Os?t:new Os({type:S.KEY_SYSTEM_ERROR,details:T.KEY_SYSTEM_NO_ACCESS,error:t,fatal:!0},t.message))}))}(e)}))},t.requestMediaKeySystemAccess=function(e,t){var r=this.config.requestMediaKeySystemAccessFunc;if("function"!=typeof r){var i="Configured requestMediaKeySystemAccess is not a function "+r;return null===Z&&"http:"===self.location.protocol&&(i="navigator.requestMediaKeySystemAccess is not available over insecure protocol "+location.protocol),Promise.reject(new Error(i))}return r(e,t)},t.getMediaKeysPromise=function(e,t,r){var i=this,n=function(e,t,r,i){var n;switch(e){case K.FAIRPLAY:n=["cenc","sinf"];break;case K.WIDEVINE:case K.PLAYREADY:n=["cenc"];break;case K.CLEARKEY:n=["cenc","keyids"];break;default:throw new Error("Unknown key-system: "+e)}return function(e,t,r,i){return[{initDataTypes:e,persistentState:i.persistentState||"optional",distinctiveIdentifier:i.distinctiveIdentifier||"optional",sessionTypes:i.sessionTypes||[i.sessionType||"temporary"],audioCapabilities:t.map((function(e){return{contentType:'audio/mp4; codecs="'+e+'"',robustness:i.audioRobustness||"",encryptionScheme:i.audioEncryptionScheme||null}})),videoCapabilities:r.map((function(e){return{contentType:'video/mp4; codecs="'+e+'"',robustness:i.videoRobustness||"",encryptionScheme:i.videoEncryptionScheme||null}}))}]}(n,t,r,i)}(e,t,r,this.config.drmSystemOptions),s=this.keySystemAccessPromises[e],a=null==s?void 0:s.keySystemAccess;if(!a){this.log('Requesting encrypted media "'+e+'" key-system access with config: '+JSON.stringify(n)),a=this.requestMediaKeySystemAccess(e,n);var o=this.keySystemAccessPromises[e]={keySystemAccess:a};return a.catch((function(t){i.log('Failed to obtain access to key-system "'+e+'": '+t)})),a.then((function(t){i.log('Access for key-system "'+t.keySystem+'" obtained');var r=i.fetchServerCertificate(e);return i.log('Create media-keys for "'+e+'"'),o.mediaKeys=t.createMediaKeys().then((function(t){return i.log('Media-keys created for "'+e+'"'),r.then((function(r){return r?i.setMediaKeysServerCertificate(t,e,r):t}))})),o.mediaKeys.catch((function(t){i.error('Failed to create media-keys for "'+e+'"}: '+t)})),o.mediaKeys}))}return a.then((function(){return s.mediaKeys}))},t.createMediaKeySessionContext=function(e){var t=e.decryptdata,r=e.keySystem,i=e.mediaKeys;this.log('Creating key-system session "'+r+'" keyId: '+ve(t.keyId||[]));var n=i.createSession(),s={decryptdata:t,keySystem:r,mediaKeys:i,mediaKeysSession:n,keyStatus:"status-pending"};return this.mediaKeySessions.push(s),s},t.renewKeySession=function(e){var t=e.decryptdata;if(t.pssh){var r=this.createMediaKeySessionContext(e),i=this.getKeyIdString(t);this.keyIdToKeySessionPromise[i]=this.generateRequestWithPreferredKeySession(r,"cenc",t.pssh,"expired")}else this.warn("Could not renew expired session. Missing pssh initData.");this.removeSession(e)},t.getKeyIdString=function(e){if(!e)throw new Error("Could not read keyId of undefined decryptdata");if(null===e.keyId)throw new Error("keyId is null");return ve(e.keyId)},t.updateKeySession=function(e,t){var r,i=e.mediaKeysSession;return this.log('Updating key-session "'+i.sessionId+'" for keyID '+ve((null==(r=e.decryptdata)?void 0:r.keyId)||[])+"\n } (data length: "+(t?t.byteLength:t)+")"),i.update(t)},t.selectKeySystemFormat=function(e){var t=Object.keys(e.levelkeys||{});return this.keyFormatPromise||(this.log("Selecting key-system from fragment (sn: "+e.sn+" "+e.type+": "+e.level+") key formats "+t.join(", ")),this.keyFormatPromise=this.getKeyFormatPromise(t)),this.keyFormatPromise},t.getKeyFormatPromise=function(e){var t=this;return new Promise((function(r,i){var n=Q(t.config),s=e.map(Y).filter((function(e){return!!e&&-1!==n.indexOf(e)}));return t.getKeySystemSelectionPromise(s).then((function(e){var t=e.keySystem,n=X(t);n?r(n):i(new Error('Unable to find format for key-system "'+t+'"'))})).catch(i)}))},t.loadKey=function(e){var t=this,r=e.keyInfo.decryptdata,i=this.getKeyIdString(r),n="(keyId: "+i+' format: "'+r.keyFormat+'" method: '+r.method+" uri: "+r.uri+")";this.log("Starting session for key "+n);var s=this.keyIdToKeySessionPromise[i];return s||(s=this.keyIdToKeySessionPromise[i]=this.getKeySystemForKeyPromise(r).then((function(i){var s=i.keySystem,a=i.mediaKeys;return t.throwIfDestroyed(),t.log("Handle encrypted media sn: "+e.frag.sn+" "+e.frag.type+": "+e.frag.level+" using key "+n),t.attemptSetMediaKeys(s,a).then((function(){t.throwIfDestroyed();var e=t.createMediaKeySessionContext({keySystem:s,mediaKeys:a,decryptdata:r});return t.generateRequestWithPreferredKeySession(e,"cenc",r.pssh,"playlist-key")}))}))).catch((function(e){return t.handleError(e)})),s},t.throwIfDestroyed=function(e){if(!this.hls)throw new Error("invalid state")},t.handleError=function(e){this.hls&&(this.error(e.message),e instanceof Os?this.hls.trigger(E.ERROR,e.data):this.hls.trigger(E.ERROR,{type:S.KEY_SYSTEM_ERROR,details:T.KEY_SYSTEM_NO_KEYS,error:e,fatal:!0}))},t.getKeySystemForKeyPromise=function(e){var t=this.getKeyIdString(e),r=this.keyIdToKeySessionPromise[t];if(!r){var i=Y(e.keyFormat),n=i?[i]:Q(this.config);return this.attemptKeySystemAccess(n)}return r},t.getKeySystemSelectionPromise=function(e){if(e.length||(e=Q(this.config)),0===e.length)throw new Os({type:S.KEY_SYSTEM_ERROR,details:T.KEY_SYSTEM_NO_CONFIGURED_LICENSE,fatal:!0},"Missing key-system license configuration options "+JSON.stringify({drmSystems:this.config.drmSystems}));return this.attemptKeySystemAccess(e)},t._onMediaEncrypted=function(e){var t=this,r=e.initDataType,i=e.initData;if(this.debug('"'+e.type+'" event: init data type: "'+r+'"'),null!==i){var n,s;if("sinf"===r&&this.config.drmSystems[K.FAIRPLAY]){var a=Te(new Uint8Array(i));try{var o=G(JSON.parse(a).sinf),l=xe(new Uint8Array(o));if(!l)return;n=l.subarray(8,24),s=K.FAIRPLAY}catch(e){return void this.warn('Failed to parse sinf "encrypted" event message initData')}}else{var h=function(e){if(!(e instanceof ArrayBuffer)||e.byteLength<32)return null;var t={version:0,systemId:"",kids:null,data:null},r=new DataView(e),i=r.getUint32(0);if(e.byteLength!==i&&i>44)return null;if(1886614376!==r.getUint32(4))return null;if(t.version=r.getUint32(8)>>>24,t.version>1)return null;t.systemId=ve(new Uint8Array(e,12,16));var n=r.getUint32(28);if(0===t.version){if(i-320)for(var s,a=0,o=n.length;a in key message");return H(atob(f))},t.setupLicenseXHR=function(e,t,r,i){var n=this,s=this.config.licenseXhrSetup;return s?Promise.resolve().then((function(){if(!r.decryptdata)throw new Error("Key removed");return s.call(n.hls,e,t,r,i)})).catch((function(a){if(!r.decryptdata)throw a;return e.open("POST",t,!0),s.call(n.hls,e,t,r,i)})).then((function(r){return e.readyState||e.open("POST",t,!0),{xhr:e,licenseChallenge:r||i}})):(e.open("POST",t,!0),Promise.resolve({xhr:e,licenseChallenge:i}))},t.requestLicense=function(e,t){var r=this,i=this.config.keyLoadPolicy.default;return new Promise((function(n,s){var a=r.getLicenseServerUrl(e.keySystem);r.log("Sending license request to URL: "+a);var o=new XMLHttpRequest;o.responseType="arraybuffer",o.onreadystatechange=function(){if(!r.hls||!e.mediaKeysSession)return s(new Error("invalid state"));if(4===o.readyState)if(200===o.status){r._requestLicenseFailureCount=0;var l=o.response;r.log("License received "+(l instanceof ArrayBuffer?l.byteLength:l));var h=r.config.licenseResponseCallback;if(h)try{l=h.call(r.hls,o,a,e)}catch(e){r.error(e)}n(l)}else{var u=i.errorRetry,d=u?u.maxNumRetry:0;if(r._requestLicenseFailureCount++,r._requestLicenseFailureCount>d||o.status>=400&&o.status<500)s(new Os({type:S.KEY_SYSTEM_ERROR,details:T.KEY_SYSTEM_LICENSE_REQUEST_FAILED,fatal:!0,networkDetails:o,response:{url:a,data:void 0,code:o.status,text:o.statusText}},"License Request XHR failed ("+a+"). Status: "+o.status+" ("+o.statusText+")"));else{var c=d-r._requestLicenseFailureCount+1;r.warn("Retrying license request, "+c+" attempts left"),r.requestLicense(e,t).then(n,s)}}},e.licenseXhr&&e.licenseXhr.readyState!==XMLHttpRequest.DONE&&e.licenseXhr.abort(),e.licenseXhr=o,r.setupLicenseXHR(o,a,e,t).then((function(t){var i=t.xhr,n=t.licenseChallenge;e.keySystem==K.PLAYREADY&&(n=r.unpackPlayReadyKeyMessage(i,n)),i.send(n)}))}))},t.onMediaAttached=function(e,t){if(this.config.emeEnabled){var r=t.media;this.media=r,r.addEventListener("encrypted",this.onMediaEncrypted),r.addEventListener("waitingforkey",this.onWaitingForKey)}},t.onMediaDetached=function(){var t=this,r=this.media,i=this.mediaKeySessions;r&&(r.removeEventListener("encrypted",this.onMediaEncrypted),r.removeEventListener("waitingforkey",this.onWaitingForKey),this.media=null),this._requestLicenseFailureCount=0,this.setMediaKeysQueue=[],this.mediaKeySessions=[],this.keyIdToKeySessionPromise={},$e.clearKeyUriToKeyIdMap();var n=i.length;e.CDMCleanupPromise=Promise.all(i.map((function(e){return t.removeSession(e)})).concat(null==r?void 0:r.setMediaKeys(null).catch((function(e){t.log("Could not clear media keys: "+e)})))).then((function(){n&&(t.log("finished closing key sessions and clearing media keys"),i.length=0)})).catch((function(e){t.log("Could not close sessions and clear media keys: "+e)}))},t.onManifestLoading=function(){this.keyFormatPromise=null},t.onManifestLoaded=function(e,t){var r=t.sessionKeys;if(r&&this.config.emeEnabled&&!this.keyFormatPromise){var i=r.reduce((function(e,t){return-1===e.indexOf(t.keyFormat)&&e.push(t.keyFormat),e}),[]);this.log("Selecting key-system from session-keys "+i.join(", ")),this.keyFormatPromise=this.getKeyFormatPromise(i)}},t.removeSession=function(e){var t=this,r=e.mediaKeysSession,i=e.licenseXhr;if(r){this.log("Remove licenses and keys and close session "+r.sessionId),e._onmessage&&(r.removeEventListener("message",e._onmessage),e._onmessage=void 0),e._onkeystatuseschange&&(r.removeEventListener("keystatuseschange",e._onkeystatuseschange),e._onkeystatuseschange=void 0),i&&i.readyState!==XMLHttpRequest.DONE&&i.abort(),e.mediaKeysSession=e.decryptdata=e.licenseXhr=void 0;var n=this.mediaKeySessions.indexOf(e);return n>-1&&this.mediaKeySessions.splice(n,1),r.remove().catch((function(e){t.log("Could not remove session: "+e)})).then((function(){return r.close()})).catch((function(e){t.log("Could not close session: "+e)}))}},e}();Cs.CDMCleanupPromise=void 0;var ks,Ds,Ms,xs,Os=function(e){function t(t,r){var i;return(i=e.call(this,r)||this).data=void 0,t.error||(t.error=new Error(r)),i.data=t,t.err=t.error,i}return l(t,e),t}(c(Error));!function(e){e.MANIFEST="m",e.AUDIO="a",e.VIDEO="v",e.MUXED="av",e.INIT="i",e.CAPTION="c",e.TIMED_TEXT="tt",e.KEY="k",e.OTHER="o"}(ks||(ks={})),function(e){e.DASH="d",e.HLS="h",e.SMOOTH="s",e.OTHER="o"}(Ds||(Ds={})),function(e){e.OBJECT="CMCD-Object",e.REQUEST="CMCD-Request",e.SESSION="CMCD-Session",e.STATUS="CMCD-Status"}(Ms||(Ms={}));var Fs=((xs={})[Ms.OBJECT]=["br","d","ot","tb"],xs[Ms.REQUEST]=["bl","dl","mtp","nor","nrr","su"],xs[Ms.SESSION]=["cid","pr","sf","sid","st","v"],xs[Ms.STATUS]=["bs","rtp"],xs),Ns=function e(t,r){this.value=void 0,this.params=void 0,Array.isArray(t)&&(t=t.map((function(t){return t instanceof e?t:new e(t)}))),this.value=t,this.params=r},Bs=function(e){this.description=void 0,this.description=e},Us="Dict";var Gs="Bare Item",Hs="Boolean",$s="Byte Sequence",Ks="Decimal",Ws="Integer",Vs=/[\x00-\x1f\x7f]+/,qs="Token",js="Key";function Ys(e,t,r){return function(e,t,r,i){return new Error("failed to "+e+' "'+(n=t,(Array.isArray(n)?JSON.stringify(n):n instanceof Map?"Map{}":n instanceof Set?"Set{}":"object"==typeof n?JSON.stringify(n):String(n))+'" as ')+r,{cause:i});var n}("serialize",e,t,r)}function zs(e){if(function(e){return e<-999999999999999||99999999999999912)throw Ys(e,Ks);var r=t.toString();return r.includes(".")?r:r+".0"}var Js="String";function Zs(e){var t,r=(t=e).description||t.toString().slice(7,-1);if(!1===/^([a-zA-Z*])([!#$%&'*+\-.^_`|~\w:/]*)$/.test(r))throw Ys(r,qs);return r}function ea(e){switch(typeof e){case"number":if(!m(e))throw Ys(e,Gs);return Number.isInteger(e)?zs(e):Qs(e);case"string":return function(e){if(Vs.test(e))throw Ys(e,Js);return'"'+e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'}(e);case"symbol":return Zs(e);case"boolean":return function(e){if("boolean"!=typeof e)throw Ys(e,Hs);return e?"?1":"?0"}(e);case"object":if(e instanceof Date)return function(e){return"@"+zs(e.getTime()/1e3)}(e);if(e instanceof Uint8Array)return function(e){if(!1===ArrayBuffer.isView(e))throw Ys(e,$s);return":"+(t=e,btoa(String.fromCharCode.apply(String,t))+":");var t}(e);if(e instanceof Bs)return Zs(e);default:throw Ys(e,Gs)}}function ta(e){if(!1===/^[a-z*][a-z0-9\-_.*]*$/.test(e))throw Ys(e,js);return e}function ra(e){return null==e?"":Object.entries(e).map((function(e){var t=e[0],r=e[1];return!0===r?";"+ta(t):";"+ta(t)+"="+ea(r)})).join("")}function ia(e){return e instanceof Ns?""+ea(e.value)+ra(e.params):ea(e)}var na=function(e){return"ot"===e||"sf"===e||"st"===e},sa=function(e){return"number"==typeof e?m(e):null!=e&&""!==e&&!1!==e},aa=function(e){return Math.round(e)},oa=function(e){return 100*aa(e/100)},la={br:aa,d:aa,bl:oa,dl:oa,mtp:oa,nor:function(e,t){return null!=t&&t.baseUrl&&(e=function(e,t){var r=new URL(e),i=new URL(t);if(r.origin!==i.origin)return e;for(var n=r.pathname.split("/").slice(1),s=i.pathname.split("/").slice(1,-1);n[0]===s[0];)n.shift(),s.shift();for(;s.length;)s.shift(),n.unshift("..");return n.join("/")}(e,t.baseUrl)),encodeURIComponent(e)},rtp:oa,tb:aa};function ha(e,t){return void 0===t&&(t={}),e?function(e,t){return function(e,t){var r;if(void 0===t&&(t={whitespace:!0}),"object"!=typeof e)throw Ys(e,Us);var i=e instanceof Map?e.entries():Object.entries(e),n=null!=(r=t)&&r.whitespace?" ":"";return Array.from(i).map((function(e){var t=e[0],r=e[1];r instanceof Ns==0&&(r=new Ns(r));var i,n=ta(t);return!0===r.value?n+=ra(r.params):(n+="=",Array.isArray(r.value)?n+="("+(i=r).value.map(ia).join(" ")+")"+ra(i.params):n+=ia(r)),n})).join(","+n)}(e,t)}(function(e,t){var r={};if(null==e||"object"!=typeof e)return r;var i=Object.keys(e).sort(),n=o({},la,null==t?void 0:t.formatters),s=null==t?void 0:t.filter;return i.forEach((function(i){if(null==s||!s(i)){var a=e[i],o=n[i];o&&(a=o(a,t)),"v"===i&&1===a||"pr"==i&&1===a||sa(a)&&(na(i)&&"string"==typeof a&&(a=new Bs(a)),r[i]=a)}})),r}(e,t),o({whitespace:!1},t)):""}var ua=/CMCD=[^]+/;var da=function(){function e(e){var t=this;this.hls=void 0,this.config=void 0,this.media=void 0,this.sid=void 0,this.cid=void 0,this.useHeaders=!1,this.includeKeys=void 0,this.initialized=!1,this.starved=!1,this.buffering=!0,this.audioBuffer=void 0,this.videoBuffer=void 0,this.onWaiting=function(){t.initialized&&(t.starved=!0),t.buffering=!0},this.onPlaying=function(){t.initialized||(t.initialized=!0),t.buffering=!1},this.applyPlaylistData=function(e){try{t.apply(e,{ot:ks.MANIFEST,su:!t.initialized})}catch(e){A.warn("Could not generate manifest CMCD data.",e)}},this.applyFragmentData=function(e){try{var r=e.frag,i=t.hls.levels[r.level],n=t.getObjectType(r),s={d:1e3*r.duration,ot:n};n!==ks.VIDEO&&n!==ks.AUDIO&&n!=ks.MUXED||(s.br=i.bitrate/1e3,s.tb=t.getTopBandwidth(n)/1e3,s.bl=t.getBufferLength(n)),t.apply(e,s)}catch(e){A.warn("Could not generate segment CMCD data.",e)}},this.hls=e;var r=this.config=e.config,i=r.cmcd;null!=i&&(r.pLoader=this.createPlaylistLoader(),r.fLoader=this.createFragmentLoader(),this.sid=i.sessionId||function(){try{return crypto.randomUUID()}catch(i){try{var e=URL.createObjectURL(new Blob),t=e.toString();return URL.revokeObjectURL(e),t.slice(t.lastIndexOf("/")+1)}catch(e){var r=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=(r+16*Math.random())%16|0;return r=Math.floor(r/16),("x"==e?t:3&t|8).toString(16)}))}}}(),this.cid=i.contentId,this.useHeaders=!0===i.useHeaders,this.includeKeys=i.includeKeys,this.registerListeners())}var t=e.prototype;return t.registerListeners=function(){var e=this.hls;e.on(E.MEDIA_ATTACHED,this.onMediaAttached,this),e.on(E.MEDIA_DETACHED,this.onMediaDetached,this),e.on(E.BUFFER_CREATED,this.onBufferCreated,this)},t.unregisterListeners=function(){var e=this.hls;e.off(E.MEDIA_ATTACHED,this.onMediaAttached,this),e.off(E.MEDIA_DETACHED,this.onMediaDetached,this),e.off(E.BUFFER_CREATED,this.onBufferCreated,this)},t.destroy=function(){this.unregisterListeners(),this.onMediaDetached(),this.hls=this.config=this.audioBuffer=this.videoBuffer=null,this.onWaiting=this.onPlaying=null},t.onMediaAttached=function(e,t){this.media=t.media,this.media.addEventListener("waiting",this.onWaiting),this.media.addEventListener("playing",this.onPlaying)},t.onMediaDetached=function(){this.media&&(this.media.removeEventListener("waiting",this.onWaiting),this.media.removeEventListener("playing",this.onPlaying),this.media=null)},t.onBufferCreated=function(e,t){var r,i;this.audioBuffer=null==(r=t.tracks.audio)?void 0:r.buffer,this.videoBuffer=null==(i=t.tracks.video)?void 0:i.buffer},t.createData=function(){var e;return{v:1,sf:Ds.HLS,sid:this.sid,cid:this.cid,pr:null==(e=this.media)?void 0:e.playbackRate,mtp:this.hls.bandwidthEstimate/1e3}},t.apply=function(e,t){void 0===t&&(t={}),o(t,this.createData());var r=t.ot===ks.INIT||t.ot===ks.VIDEO||t.ot===ks.MUXED;this.starved&&r&&(t.bs=!0,t.su=!0,this.starved=!1),null==t.su&&(t.su=this.buffering);var i=this.includeKeys;i&&(t=Object.keys(t).reduce((function(e,r){return i.includes(r)&&(e[r]=t[r]),e}),{})),this.useHeaders?(e.headers||(e.headers={}),function(e,t,r){o(e,function(e,t){var r;if(void 0===t&&(t={}),!e)return{};var i=Object.entries(e),n=Object.entries(Fs).concat(Object.entries((null==(r=t)?void 0:r.customHeaderMap)||{})),s=i.reduce((function(e,t){var r,i=t[0],s=t[1],a=(null==(r=n.find((function(e){return e[1].includes(i)})))?void 0:r[0])||Ms.REQUEST;return null!=e[a]||(e[a]={}),e[a][i]=s,e}),{});return Object.entries(s).reduce((function(e,r){var i=r[0],n=r[1];return e[i]=ha(n,t),e}),{})}(t,r))}(e.headers,t)):e.url=function(e,t,r){var i=function(e,t){if(void 0===t&&(t={}),!e)return"";var r=ha(e,t);return"CMCD="+encodeURIComponent(r)}(t,r);if(!i)return e;if(ua.test(e))return e.replace(ua,i);var n=e.includes("?")?"&":"?";return""+e+n+i}(e.url,t)},t.getObjectType=function(e){var t=e.type;return"subtitle"===t?ks.TIMED_TEXT:"initSegment"===e.sn?ks.INIT:"audio"===t?ks.AUDIO:"main"===t?this.hls.audioTracks.length?ks.VIDEO:ks.MUXED:void 0},t.getTopBandwidth=function(e){var t,r=0,i=this.hls;if(e===ks.AUDIO)t=i.audioTracks;else{var n=i.maxAutoLevel,s=n>-1?n+1:i.levels.length;t=i.levels.slice(0,s)}for(var a,o=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(r)return(r=r.call(e)).next.bind(r);if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return f(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var i=0;return function(){return i>=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(t);!(a=o()).done;){var l=a.value;l.bitrate>r&&(r=l.bitrate)}return r>0?r:NaN},t.getBufferLength=function(e){var t=this.hls.media,r=e===ks.AUDIO?this.audioBuffer:this.videoBuffer;return r&&t?1e3*Mr.bufferInfo(r,t.currentTime,this.config.maxBufferHole).len:NaN},t.createPlaylistLoader=function(){var e=this.config.pLoader,t=this.applyPlaylistData,r=e||this.config.loader;return function(){function e(e){this.loader=void 0,this.loader=new r(e)}var i=e.prototype;return i.destroy=function(){this.loader.destroy()},i.abort=function(){this.loader.abort()},i.load=function(e,r,i){t(e),this.loader.load(e,r,i)},a(e,[{key:"stats",get:function(){return this.loader.stats}},{key:"context",get:function(){return this.loader.context}}]),e}()},t.createFragmentLoader=function(){var e=this.config.fLoader,t=this.applyFragmentData,r=e||this.config.loader;return function(){function e(e){this.loader=void 0,this.loader=new r(e)}var i=e.prototype;return i.destroy=function(){this.loader.destroy()},i.abort=function(){this.loader.abort()},i.load=function(e,r,i){t(e),this.loader.load(e,r,i)},a(e,[{key:"stats",get:function(){return this.loader.stats}},{key:"context",get:function(){return this.loader.context}}]),e}()},e}(),ca=function(){function e(e){this.hls=void 0,this.log=void 0,this.loader=null,this.uri=null,this.pathwayId=".",this.pathwayPriority=null,this.timeToLoad=300,this.reloadTimer=-1,this.updated=0,this.started=!1,this.enabled=!0,this.levels=null,this.audioTracks=null,this.subtitleTracks=null,this.penalizedPathways={},this.hls=e,this.log=A.log.bind(A,"[content-steering]:"),this.registerListeners()}var t=e.prototype;return t.registerListeners=function(){var e=this.hls;e.on(E.MANIFEST_LOADING,this.onManifestLoading,this),e.on(E.MANIFEST_LOADED,this.onManifestLoaded,this),e.on(E.MANIFEST_PARSED,this.onManifestParsed,this),e.on(E.ERROR,this.onError,this)},t.unregisterListeners=function(){var e=this.hls;e&&(e.off(E.MANIFEST_LOADING,this.onManifestLoading,this),e.off(E.MANIFEST_LOADED,this.onManifestLoaded,this),e.off(E.MANIFEST_PARSED,this.onManifestParsed,this),e.off(E.ERROR,this.onError,this))},t.startLoad=function(){if(this.started=!0,this.clearTimeout(),this.enabled&&this.uri){if(this.updated){var e=1e3*this.timeToLoad-(performance.now()-this.updated);if(e>0)return void this.scheduleRefresh(this.uri,e)}this.loadSteeringManifest(this.uri)}},t.stopLoad=function(){this.started=!1,this.loader&&(this.loader.destroy(),this.loader=null),this.clearTimeout()},t.clearTimeout=function(){-1!==this.reloadTimer&&(self.clearTimeout(this.reloadTimer),this.reloadTimer=-1)},t.destroy=function(){this.unregisterListeners(),this.stopLoad(),this.hls=null,this.levels=this.audioTracks=this.subtitleTracks=null},t.removeLevel=function(e){var t=this.levels;t&&(this.levels=t.filter((function(t){return t!==e})))},t.onManifestLoading=function(){this.stopLoad(),this.enabled=!0,this.timeToLoad=300,this.updated=0,this.uri=null,this.pathwayId=".",this.levels=this.audioTracks=this.subtitleTracks=null},t.onManifestLoaded=function(e,t){var r=t.contentSteering;null!==r&&(this.pathwayId=r.pathwayId,this.uri=r.uri,this.started&&this.startLoad())},t.onManifestParsed=function(e,t){this.audioTracks=t.audioTracks,this.subtitleTracks=t.subtitleTracks},t.onError=function(e,t){var r=t.errorAction;if(2===(null==r?void 0:r.action)&&1===r.flags){var i=this.levels,n=this.pathwayPriority,s=this.pathwayId;if(t.context){var a=t.context,o=a.groupId,l=a.pathwayId,h=a.type;o&&i?s=this.getPathwayForGroupId(o,h,s):l&&(s=l)}s in this.penalizedPathways||(this.penalizedPathways[s]=performance.now()),!n&&i&&(n=i.reduce((function(e,t){return-1===e.indexOf(t.pathwayId)&&e.push(t.pathwayId),e}),[])),n&&n.length>1&&(this.updatePathwayPriority(n),r.resolved=this.pathwayId!==s),r.resolved||A.warn("Could not resolve "+t.details+' ("'+t.error.message+'") with content-steering for Pathway: '+s+" levels: "+(i?i.length:i)+" priorities: "+JSON.stringify(n)+" penalized: "+JSON.stringify(this.penalizedPathways))}},t.filterParsedLevels=function(e){this.levels=e;var t=this.getLevelsForPathway(this.pathwayId);if(0===t.length){var r=e[0].pathwayId;this.log("No levels found in Pathway "+this.pathwayId+'. Setting initial Pathway to "'+r+'"'),t=this.getLevelsForPathway(r),this.pathwayId=r}return t.length!==e.length?(this.log("Found "+t.length+"/"+e.length+' levels in Pathway "'+this.pathwayId+'"'),t):e},t.getLevelsForPathway=function(e){return null===this.levels?[]:this.levels.filter((function(t){return e===t.pathwayId}))},t.updatePathwayPriority=function(e){var t;this.pathwayPriority=e;var r=this.penalizedPathways,i=performance.now();Object.keys(r).forEach((function(e){i-r[e]>3e5&&delete r[e]}));for(var n=0;n0){this.log('Setting Pathway to "'+s+'"'),this.pathwayId=s,tr(t),this.hls.trigger(E.LEVELS_UPDATED,{levels:t});var l=this.hls.levels[a];o&&l&&this.levels&&(l.attrs["STABLE-VARIANT-ID"]!==o.attrs["STABLE-VARIANT-ID"]&&l.bitrate!==o.bitrate&&this.log("Unstable Pathways change from bitrate "+o.bitrate+" to "+l.bitrate),this.hls.nextLoadLevel=a);break}}}},t.getPathwayForGroupId=function(e,t,r){for(var i=this.getLevelsForPathway(r).concat(this.levels||[]),n=0;n=2&&(0===r.loading.first&&(r.loading.first=Math.max(self.performance.now(),r.loading.start),n.timeout!==n.loadPolicy.maxLoadTimeMs&&(self.clearTimeout(this.requestTimeout),n.timeout=n.loadPolicy.maxLoadTimeMs,this.requestTimeout=self.setTimeout(this.loadtimeout.bind(this),n.loadPolicy.maxLoadTimeMs-(r.loading.first-r.loading.start)))),4===i)){self.clearTimeout(this.requestTimeout),t.onreadystatechange=null,t.onprogress=null;var s=t.status,a="text"!==t.responseType;if(s>=200&&s<300&&(a&&t.response||null!==t.responseText)){r.loading.end=Math.max(self.performance.now(),r.loading.first);var o=a?t.response:t.responseText,l="arraybuffer"===t.responseType?o.byteLength:o.length;if(r.loaded=r.total=l,r.bwEstimate=8e3*r.total/(r.loading.end-r.loading.first),!this.callbacks)return;var h=this.callbacks.onProgress;if(h&&h(r,e,o,t),!this.callbacks)return;var u={url:t.responseURL,data:o,code:s};this.callbacks.onSuccess(u,r,e,t)}else{var d=n.loadPolicy.errorRetry;ar(d,r.retry,!1,{url:e.url,data:void 0,code:s})?this.retry(d):(A.error(s+" while loading "+e.url),this.callbacks.onError({code:s,text:t.statusText},e,t,r))}}}},t.loadtimeout=function(){if(this.config){var e=this.config.loadPolicy.timeoutRetry;if(ar(e,this.stats.retry,!0))this.retry(e);else{var t;A.warn("timeout while loading "+(null==(t=this.context)?void 0:t.url));var r=this.callbacks;r&&(this.abortInternal(),r.onTimeout(this.stats,this.context,this.loader))}}},t.retry=function(e){var t=this.context,r=this.stats;this.retryDelay=nr(e,r.retry),r.retry++,A.warn((status?"HTTP Status "+status:"Timeout")+" while loading "+(null==t?void 0:t.url)+", retrying "+r.retry+"/"+e.maxNumRetry+" in "+this.retryDelay+"ms"),this.abortInternal(),this.loader=null,self.clearTimeout(this.retryTimeout),this.retryTimeout=self.setTimeout(this.loadInternal.bind(this),this.retryDelay)},t.loadprogress=function(e){var t=this.stats;t.loaded=e.loaded,e.lengthComputable&&(t.total=e.total)},t.getCacheAge=function(){var e=null;if(this.loader&&pa.test(this.loader.getAllResponseHeaders())){var t=this.loader.getResponseHeader("age");e=t?parseFloat(t):null}return e},t.getResponseHeader=function(e){return this.loader&&new RegExp("^"+e+":\\s*[\\d.]+\\s*$","im").test(this.loader.getAllResponseHeaders())?this.loader.getResponseHeader(e):null},e}(),va=/(\d+)-(\d+)\/(\d+)/,ya=function(){function e(e){this.fetchSetup=void 0,this.requestTimeout=void 0,this.request=null,this.response=null,this.controller=void 0,this.context=null,this.config=null,this.callbacks=null,this.stats=void 0,this.loader=null,this.fetchSetup=e.fetchSetup||Ea,this.controller=new self.AbortController,this.stats=new D}var t=e.prototype;return t.destroy=function(){this.loader=this.callbacks=this.context=this.config=this.request=null,this.abortInternal(),this.response=null,this.fetchSetup=this.controller=this.stats=null},t.abortInternal=function(){this.controller&&!this.stats.loading.end&&(this.stats.aborted=!0,this.controller.abort())},t.abort=function(){var e;this.abortInternal(),null!=(e=this.callbacks)&&e.onAbort&&this.callbacks.onAbort(this.stats,this.context,this.response)},t.load=function(e,t,r){var i=this,n=this.stats;if(n.loading.start)throw new Error("Loader can only be used once.");n.loading.start=self.performance.now();var s=function(e,t){var r={method:"GET",mode:"cors",credentials:"same-origin",signal:t,headers:new self.Headers(o({},e.headers))};return e.rangeEnd&&r.headers.set("Range","bytes="+e.rangeStart+"-"+String(e.rangeEnd-1)),r}(e,this.controller.signal),a=r.onProgress,l="arraybuffer"===e.responseType,h=l?"byteLength":"length",u=t.loadPolicy,d=u.maxTimeToFirstByteMs,c=u.maxLoadTimeMs;this.context=e,this.config=t,this.callbacks=r,this.request=this.fetchSetup(e,s),self.clearTimeout(this.requestTimeout),t.timeout=d&&m(d)?d:c,this.requestTimeout=self.setTimeout((function(){i.abortInternal(),r.onTimeout(n,e,i.response)}),t.timeout),self.fetch(this.request).then((function(s){i.response=i.loader=s;var o=Math.max(self.performance.now(),n.loading.start);if(self.clearTimeout(i.requestTimeout),t.timeout=c,i.requestTimeout=self.setTimeout((function(){i.abortInternal(),r.onTimeout(n,e,i.response)}),c-(o-n.loading.start)),!s.ok){var h=s.status,u=s.statusText;throw new Ta(u||"fetch, bad network response",h,s)}return n.loading.first=o,n.total=function(e){var t=e.get("Content-Range");if(t){var r=function(e){var t=va.exec(e);if(t)return parseInt(t[2])-parseInt(t[1])+1}(t);if(m(r))return r}var i=e.get("Content-Length");if(i)return parseInt(i)}(s.headers)||n.total,a&&m(t.highWaterMark)?i.loadProgressively(s,n,e,t.highWaterMark,a):l?s.arrayBuffer():"json"===e.responseType?s.json():s.text()})).then((function(s){var o=i.response;if(!o)throw new Error("loader destroyed");self.clearTimeout(i.requestTimeout),n.loading.end=Math.max(self.performance.now(),n.loading.first);var l=s[h];l&&(n.loaded=n.total=l);var u={url:o.url,data:s,code:o.status};a&&!m(t.highWaterMark)&&a(n,e,s,o),r.onSuccess(u,n,e,o)})).catch((function(t){if(self.clearTimeout(i.requestTimeout),!n.aborted){var s=t&&t.code||0,a=t?t.message:null;r.onError({code:s,text:a},e,t?t.details:null,n)}}))},t.getCacheAge=function(){var e=null;if(this.response){var t=this.response.headers.get("age");e=t?parseFloat(t):null}return e},t.getResponseHeader=function(e){return this.response?this.response.headers.get(e):null},t.loadProgressively=function(e,t,r,i,n){void 0===i&&(i=0);var s=new oi,a=e.body.getReader();return function o(){return a.read().then((function(a){if(a.done)return s.dataLength&&n(t,r,s.flush(),e),Promise.resolve(new ArrayBuffer(0));var l=a.value,h=l.length;return t.loaded+=h,h=i&&n(t,r,s.flush(),e)):n(t,r,l,e),o()})).catch((function(){return Promise.reject()}))}()},e}();function Ea(e,t){return new self.Request(e.url,t)}var Sa,Ta=function(e){function t(t,r,i){var n;return(n=e.call(this,t)||this).code=void 0,n.details=void 0,n.code=r,n.details=i,n}return l(t,e),t}(c(Error)),_a=/\s/,La=i(i({autoStartLoad:!0,startPosition:-1,defaultAudioCodec:void 0,debug:!1,capLevelOnFPSDrop:!1,capLevelToPlayerSize:!1,ignoreDevicePixelRatio:!1,preferManagedMediaSource:!0,initialLiveManifestSize:1,maxBufferLength:30,backBufferLength:1/0,frontBufferFlushThreshold:1/0,maxBufferSize:6e7,maxBufferHole:.1,highBufferWatchdogPeriod:2,nudgeOffset:.1,nudgeMaxRetry:3,maxFragLookUpTolerance:.25,liveSyncDurationCount:3,liveMaxLatencyDurationCount:1/0,liveSyncDuration:void 0,liveMaxLatencyDuration:void 0,maxLiveSyncPlaybackRate:1,liveDurationInfinity:!1,liveBackBufferLength:null,maxMaxBufferLength:600,enableWorker:!0,workerPath:null,enableSoftwareAES:!0,startLevel:void 0,startFragPrefetch:!1,fpsDroppedMonitoringPeriod:5e3,fpsDroppedMonitoringThreshold:.2,appendErrorMaxRetry:3,loader:ma,fLoader:void 0,pLoader:void 0,xhrSetup:void 0,licenseXhrSetup:void 0,licenseResponseCallback:void 0,abrController:Lr,bufferController:Dn,capLevelController:ws,errorController:dr,fpsController:Ps,stretchShortVideoTrack:!1,maxAudioFramesDrift:1,forceKeyFrameOnDiscontinuity:!0,abrEwmaFastLive:3,abrEwmaSlowLive:9,abrEwmaFastVoD:3,abrEwmaSlowVoD:9,abrEwmaDefaultEstimate:5e5,abrEwmaDefaultEstimateMax:5e6,abrBandWidthFactor:.95,abrBandWidthUpFactor:.7,abrMaxWithRealBitrate:!1,maxStarvationDelay:4,maxLoadingDelay:4,minAutoBitrate:0,emeEnabled:!1,widevineLicenseUrl:void 0,drmSystems:{},drmSystemOptions:{},requestMediaKeySystemAccessFunc:Z,testBandwidth:!0,progressive:!1,lowLatencyMode:!0,cmcd:void 0,enableDateRangeMetadataCues:!0,enableEmsgMetadataCues:!0,enableID3MetadataCues:!0,useMediaCapabilities:!0,certLoadPolicy:{default:{maxTimeToFirstByteMs:8e3,maxLoadTimeMs:2e4,timeoutRetry:null,errorRetry:null}},keyLoadPolicy:{default:{maxTimeToFirstByteMs:8e3,maxLoadTimeMs:2e4,timeoutRetry:{maxNumRetry:1,retryDelayMs:1e3,maxRetryDelayMs:2e4,backoff:"linear"},errorRetry:{maxNumRetry:8,retryDelayMs:1e3,maxRetryDelayMs:2e4,backoff:"linear"}}},manifestLoadPolicy:{default:{maxTimeToFirstByteMs:1/0,maxLoadTimeMs:2e4,timeoutRetry:{maxNumRetry:2,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:1,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},playlistLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:2e4,timeoutRetry:{maxNumRetry:2,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:2,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},fragLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:12e4,timeoutRetry:{maxNumRetry:4,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:6,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},steeringManifestLoadPolicy:{default:{maxTimeToFirstByteMs:1e4,maxLoadTimeMs:2e4,timeoutRetry:{maxNumRetry:2,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:1,retryDelayMs:1e3,maxRetryDelayMs:8e3}}},manifestLoadingTimeOut:1e4,manifestLoadingMaxRetry:1,manifestLoadingRetryDelay:1e3,manifestLoadingMaxRetryTimeout:64e3,levelLoadingTimeOut:1e4,levelLoadingMaxRetry:4,levelLoadingRetryDelay:1e3,levelLoadingMaxRetryTimeout:64e3,fragLoadingTimeOut:2e4,fragLoadingMaxRetry:6,fragLoadingRetryDelay:1e3,fragLoadingMaxRetryTimeout:64e3},{cueHandler:{newCue:function(e,t,r,i){for(var n,s,a,o,l,h=[],u=self.VTTCue||self.TextTrackCue,d=0;d=16?o--:o++;var g=os(l.trim()),p=cs(t,r,g);null!=e&&null!=(c=e.cues)&&c.getCueById(p)||((s=new u(t,r,g)).id=p,s.line=d+1,s.align="left",s.position=10+Math.min(80,10*Math.floor(8*o/32)),h.push(s))}return e&&h.length&&(h.sort((function(e,t){return"auto"===e.line||"auto"===t.line?0:e.line>8&&t.line>8?t.line-e.line:e.line-t.line})),h.forEach((function(t){return Ct(e,t)}))),h}},enableWebVTT:!0,enableIMSC1:!0,enableCEA708Captions:!0,captionsTextTrack1Label:"English",captionsTextTrack1LanguageCode:"en",captionsTextTrack2Label:"Spanish",captionsTextTrack2LanguageCode:"es",captionsTextTrack3Label:"Unknown CC",captionsTextTrack3LanguageCode:"",captionsTextTrack4Label:"Unknown CC",captionsTextTrack4LanguageCode:"",renderTextTracksNatively:!0}),{},{subtitleStreamController:wn,subtitleTrackController:In,timelineController:bs,audioStreamController:Rn,audioTrackController:An,emeController:Cs,cmcdController:da,contentSteeringController:ca});function ba(e){return e&&"object"==typeof e?Array.isArray(e)?e.map(ba):Object.keys(e).reduce((function(t,r){return t[r]=ba(e[r]),t}),{}):e}var Ra=function(e){function t(t,r){var i;return(i=e.call(this,t,"[level-controller]")||this)._levels=[],i._firstLevel=-1,i._maxAutoLevel=-1,i._startLevel=void 0,i.currentLevel=null,i.currentLevelIndex=-1,i.manualLevelIndex=-1,i.steering=void 0,i.onParsedComplete=void 0,i.steering=r,i._registerListeners(),i}l(t,e);var r=t.prototype;return r._registerListeners=function(){var e=this.hls;e.on(E.MANIFEST_LOADING,this.onManifestLoading,this),e.on(E.MANIFEST_LOADED,this.onManifestLoaded,this),e.on(E.LEVEL_LOADED,this.onLevelLoaded,this),e.on(E.LEVELS_UPDATED,this.onLevelsUpdated,this),e.on(E.FRAG_BUFFERED,this.onFragBuffered,this),e.on(E.ERROR,this.onError,this)},r._unregisterListeners=function(){var e=this.hls;e.off(E.MANIFEST_LOADING,this.onManifestLoading,this),e.off(E.MANIFEST_LOADED,this.onManifestLoaded,this),e.off(E.LEVEL_LOADED,this.onLevelLoaded,this),e.off(E.LEVELS_UPDATED,this.onLevelsUpdated,this),e.off(E.FRAG_BUFFERED,this.onFragBuffered,this),e.off(E.ERROR,this.onError,this)},r.destroy=function(){this._unregisterListeners(),this.steering=null,this.resetLevels(),e.prototype.destroy.call(this)},r.stopLoad=function(){this._levels.forEach((function(e){e.loadError=0,e.fragmentError=0})),e.prototype.stopLoad.call(this)},r.resetLevels=function(){this._startLevel=void 0,this.manualLevelIndex=-1,this.currentLevelIndex=-1,this.currentLevel=null,this._levels=[],this._maxAutoLevel=-1},r.onManifestLoading=function(e,t){this.resetLevels()},r.onManifestLoaded=function(e,t){var r=this.hls.config.preferManagedMediaSource,i=[],n={},s={},a=!1,o=!1,l=!1;t.levels.forEach((function(e){var t,h,u=e.attrs,d=e.audioCodec,c=e.videoCodec;-1!==(null==(t=d)?void 0:t.indexOf("mp4a.40.34"))&&(Sa||(Sa=/chrome|firefox/i.test(navigator.userAgent)),Sa&&(e.audioCodec=d=void 0)),d&&(e.audioCodec=d=nt(d,r)),0===(null==(h=c)?void 0:h.indexOf("avc1"))&&(c=e.videoCodec=function(e){for(var t=e.split(","),r=0;r2){var n=i.shift()+".";n+=parseInt(i.shift()).toString(16),n+=("000"+parseInt(i.shift()).toString(16)).slice(-4),t[r]=n}}return t.join(",")}(c));var f=e.width,g=e.height,p=e.unknownCodecs;if(a||(a=!(!f||!g)),o||(o=!!c),l||(l=!!d),!(null!=p&&p.length||d&&!Qe(d,"audio",r)||c&&!Qe(c,"video",r))){var m=u.CODECS,v=u["FRAME-RATE"],y=u["HDCP-LEVEL"],E=u["PATHWAY-ID"],S=u.RESOLUTION,T=u["VIDEO-RANGE"],_=(E||".")+"-"+e.bitrate+"-"+S+"-"+v+"-"+m+"-"+T+"-"+y;if(n[_])if(n[_].uri===e.url||e.attrs["PATHWAY-ID"])n[_].addGroupId("audio",u.AUDIO),n[_].addGroupId("text",u.SUBTITLES);else{var L=s[_]+=1;e.attrs["PATHWAY-ID"]=new Array(L+1).join(".");var b=new qt(e);n[_]=b,i.push(b)}else{var R=new qt(e);n[_]=R,s[_]=1,i.push(R)}}})),this.filterAndSortMediaOptions(i,t,a,o,l)},r.filterAndSortMediaOptions=function(e,t,r,i,n){var s=this,a=[],o=[],l=e;if((r||i)&&n&&(l=l.filter((function(e){var t,r=e.videoCodec,i=e.videoRange,n=e.width,s=e.height;return(!!r||!(!n||!s))&&!!(t=i)&&Kt.indexOf(t)>-1}))),0!==l.length){if(t.audioTracks){var h=this.hls.config.preferManagedMediaSource;Aa(a=t.audioTracks.filter((function(e){return!e.audioCodec||Qe(e.audioCodec,"audio",h)})))}t.subtitles&&Aa(o=t.subtitles);var u=l.slice(0);l.sort((function(e,t){if(e.attrs["HDCP-LEVEL"]!==t.attrs["HDCP-LEVEL"])return(e.attrs["HDCP-LEVEL"]||"")>(t.attrs["HDCP-LEVEL"]||"")?1:-1;if(r&&e.height!==t.height)return e.height-t.height;if(e.frameRate!==t.frameRate)return e.frameRate-t.frameRate;if(e.videoRange!==t.videoRange)return Kt.indexOf(e.videoRange)-Kt.indexOf(t.videoRange);if(e.videoCodec!==t.videoCodec){var i=et(e.videoCodec),n=et(t.videoCodec);if(i!==n)return n-i}if(e.uri===t.uri&&e.codecSet!==t.codecSet){var s=tt(e.codecSet),a=tt(t.codecSet);if(s!==a)return a-s}return e.averageBitrate!==t.averageBitrate?e.averageBitrate-t.averageBitrate:0}));var d=u[0];if(this.steering&&(l=this.steering.filterParsedLevels(l)).length!==u.length)for(var c=0;cm&&m===La.abrEwmaDefaultEstimate&&(this.hls.bandwidthEstimate=v)}break}var y=n&&!i,_={levels:l,audioTracks:a,subtitleTracks:o,sessionData:t.sessionData,sessionKeys:t.sessionKeys,firstLevel:this._firstLevel,stats:t.stats,audio:n,video:i,altAudio:!y&&a.some((function(e){return!!e.url}))};this.hls.trigger(E.MANIFEST_PARSED,_),(this.hls.config.autoStartLoad||this.hls.forceStartLoad)&&this.hls.startLoad(this.hls.config.startPosition)}else Promise.resolve().then((function(){if(s.hls){t.levels.length&&s.warn("One or more CODECS in variant not supported: "+JSON.stringify(t.levels[0].attrs));var e=new Error("no level with compatible codecs found in manifest");s.hls.trigger(E.ERROR,{type:S.MEDIA_ERROR,details:T.MANIFEST_INCOMPATIBLE_CODECS_ERROR,fatal:!0,url:t.url,error:e,reason:e.message})}}))},r.onError=function(e,t){!t.fatal&&t.context&&t.context.type===St&&t.context.level===this.level&&this.checkRetry(t)},r.onFragBuffered=function(e,t){var r=t.frag;if(void 0!==r&&r.type===Lt){var i=r.elementaryStreams;if(!Object.keys(i).some((function(e){return!!i[e]})))return;var n=this._levels[r.level];null!=n&&n.loadError&&(this.log("Resetting level error count of "+n.loadError+" on frag buffered"),n.loadError=0)}},r.onLevelLoaded=function(e,t){var r,i,n=t.level,s=t.details,a=this._levels[n];if(!a)return this.warn("Invalid level index "+n),void(null!=(i=t.deliveryDirectives)&&i.skip&&(s.deltaUpdateFailed=!0));n===this.currentLevelIndex?(0===a.fragmentError&&(a.loadError=0),this.playlistLoaded(n,t,a.details)):null!=(r=t.deliveryDirectives)&&r.skip&&(s.deltaUpdateFailed=!0)},r.loadPlaylist=function(t){e.prototype.loadPlaylist.call(this);var r=this.currentLevelIndex,i=this.currentLevel;if(i&&this.shouldLoadPlaylist(i)){var n=i.uri;if(t)try{n=t.addDirectives(n)}catch(e){this.warn("Could not construct new URL with HLS Delivery Directives: "+e)}var s=i.attrs["PATHWAY-ID"];this.log("Loading level index "+r+(void 0!==(null==t?void 0:t.msn)?" at sn "+t.msn+" part "+t.part:"")+" with"+(s?" Pathway "+s:"")+" "+n),this.clearTimer(),this.hls.trigger(E.LEVEL_LOADING,{url:n,level:r,pathwayId:i.attrs["PATHWAY-ID"],id:0,deliveryDirectives:t||null})}},r.removeLevel=function(e){var t,r=this,i=this._levels.filter((function(t,i){return i!==e||(r.steering&&r.steering.removeLevel(t),t===r.currentLevel&&(r.currentLevel=null,r.currentLevelIndex=-1,t.details&&t.details.fragments.forEach((function(e){return e.level=-1}))),!1)}));tr(i),this._levels=i,this.currentLevelIndex>-1&&null!=(t=this.currentLevel)&&t.details&&(this.currentLevelIndex=this.currentLevel.details.fragments[0].level),this.hls.trigger(E.LEVELS_UPDATED,{levels:i})},r.onLevelsUpdated=function(e,t){var r=t.levels;this._levels=r},r.checkMaxAutoUpdated=function(){var e=this.hls,t=e.autoLevelCapping,r=e.maxAutoLevel,i=e.maxHdcpLevel;this._maxAutoLevel!==r&&(this._maxAutoLevel=r,this.hls.trigger(E.MAX_AUTO_LEVEL_UPDATED,{autoLevelCapping:t,levels:this.levels,maxAutoLevel:r,minAutoLevel:this.hls.minAutoLevel,maxHdcpLevel:i}))},a(t,[{key:"levels",get:function(){return 0===this._levels.length?null:this._levels}},{key:"level",get:function(){return this.currentLevelIndex},set:function(e){var t=this._levels;if(0!==t.length){if(e<0||e>=t.length){var r=new Error("invalid level idx"),i=e<0;if(this.hls.trigger(E.ERROR,{type:S.OTHER_ERROR,details:T.LEVEL_SWITCH_ERROR,level:e,fatal:i,error:r,reason:r.message}),i)return;e=Math.min(e,t.length-1)}var n=this.currentLevelIndex,s=this.currentLevel,a=s?s.attrs["PATHWAY-ID"]:void 0,o=t[e],l=o.attrs["PATHWAY-ID"];if(this.currentLevelIndex=e,this.currentLevel=o,n!==e||!o.details||!s||a!==l){this.log("Switching to level "+e+" ("+(o.height?o.height+"p ":"")+(o.videoRange?o.videoRange+" ":"")+(o.codecSet?o.codecSet+" ":"")+"@"+o.bitrate+")"+(l?" with Pathway "+l:"")+" from level "+n+(a?" with Pathway "+a:""));var h={level:e,attrs:o.attrs,details:o.details,bitrate:o.bitrate,averageBitrate:o.averageBitrate,maxBitrate:o.maxBitrate,realBitrate:o.realBitrate,width:o.width,height:o.height,codecSet:o.codecSet,audioCodec:o.audioCodec,videoCodec:o.videoCodec,audioGroups:o.audioGroups,subtitleGroups:o.subtitleGroups,loaded:o.loaded,loadError:o.loadError,fragmentError:o.fragmentError,name:o.name,id:o.id,uri:o.uri,url:o.url,urlId:0,audioGroupIds:o.audioGroupIds,textGroupIds:o.textGroupIds};this.hls.trigger(E.LEVEL_SWITCHING,h);var u=o.details;if(!u||u.live){var d=this.switchParams(o.uri,null==s?void 0:s.details,u);this.loadPlaylist(d)}}}}},{key:"manualLevel",get:function(){return this.manualLevelIndex},set:function(e){this.manualLevelIndex=e,void 0===this._startLevel&&(this._startLevel=e),-1!==e&&(this.level=e)}},{key:"firstLevel",get:function(){return this._firstLevel},set:function(e){this._firstLevel=e}},{key:"startLevel",get:function(){if(void 0===this._startLevel){var e=this.hls.config.startLevel;return void 0!==e?e:this.hls.firstAutoLevel}return this._startLevel},set:function(e){this._startLevel=e}},{key:"nextLoadLevel",get:function(){return-1!==this.manualLevelIndex?this.manualLevelIndex:this.hls.nextAutoLevel},set:function(e){this.level=e,-1===this.manualLevelIndex&&(this.hls.nextAutoLevel=e)}}]),t}(cr);function Aa(e){var t={};e.forEach((function(e){var r=e.groupId||"";e.id=t[r]=t[r]||0,t[r]++}))}var wa=function(){function e(e){this.config=void 0,this.keyUriToKeyInfo={},this.emeController=null,this.config=e}var t=e.prototype;return t.abort=function(e){for(var t in this.keyUriToKeyInfo){var r=this.keyUriToKeyInfo[t].loader;if(r){var i;if(e&&e!==(null==(i=r.context)?void 0:i.frag.type))return;r.abort()}}},t.detach=function(){for(var e in this.keyUriToKeyInfo){var t=this.keyUriToKeyInfo[e];(t.mediaKeySessionContext||t.decryptdata.isCommonEncryption)&&delete this.keyUriToKeyInfo[e]}},t.destroy=function(){for(var e in this.detach(),this.keyUriToKeyInfo){var t=this.keyUriToKeyInfo[e].loader;t&&t.destroy()}this.keyUriToKeyInfo={}},t.createKeyLoadError=function(e,t,r,i,n){return void 0===t&&(t=T.KEY_LOAD_ERROR),new Kr({type:S.NETWORK_ERROR,details:t,fatal:!1,frag:e,response:n,error:r,networkDetails:i})},t.loadClear=function(e,t){var r=this;if(this.emeController&&this.config.emeEnabled)for(var i=e.sn,n=e.cc,s=function(){var e=t[a];if(n<=e.cc&&("initSegment"===i||"initSegment"===e.sn||i2,c=!u||t&&t.start<=s||u-s>2&&!this.fragmentTracker.getPartialFragment(s);if(d||c)return;this.moved=!1}if(!this.moved&&null!==this.stalled){var f;if(!(h.len>0||u))return;var g=Math.max(u,h.start||0)-s,p=this.hls.levels?this.hls.levels[this.hls.currentLevel]:null,m=(null==p||null==(f=p.details)?void 0:f.live)?2*p.details.targetduration:2,v=this.fragmentTracker.getPartialFragment(s);if(g>0&&(g<=m||v))return void(i.paused||this._trySkipBufferHole(v))}var y=self.performance.now();if(null!==n){var E=y-n;if(a||!(E>=250)||(this._reportStall(h),this.media)){var S=Mr.bufferInfo(i,s,r.maxBufferHole);this._tryFixBufferStall(S,E)}}else this.stalled=y}else if(this.moved=!0,a||(this.nudgeRetry=0),null!==n){if(this.stallReported){var T=self.performance.now()-n;A.warn("playback not stuck anymore @"+s+", after "+Math.round(T)+"ms"),this.stallReported=!1}this.stalled=null}}},t._tryFixBufferStall=function(e,t){var r=this.config,i=this.fragmentTracker,n=this.media;if(null!==n){var s=n.currentTime,a=i.getPartialFragment(s);if(a&&(this._trySkipBufferHole(a)||!this.media))return;(e.len>r.maxBufferHole||e.nextStart&&e.nextStart-s1e3*r.highBufferWatchdogPeriod&&(A.warn("Trying to nudge playhead over buffer-hole"),this.stalled=null,this._tryNudgeBuffer())}},t._reportStall=function(e){var t=this.hls,r=this.media;if(!this.stallReported&&r){this.stallReported=!0;var i=new Error("Playback stalling at @"+r.currentTime+" due to low buffer ("+JSON.stringify(e)+")");A.warn(i.message),t.trigger(E.ERROR,{type:S.MEDIA_ERROR,details:T.BUFFER_STALLED_ERROR,fatal:!1,error:i,buffer:e.len})}},t._trySkipBufferHole=function(e){var t=this.config,r=this.hls,i=this.media;if(null===i)return 0;var n=i.currentTime,s=Mr.bufferInfo(i,n,0),a=n0&&s.len<1&&i.readyState<3,h=a-n;if(h>0&&(o||l)){if(h>t.maxBufferHole){var u=this.fragmentTracker,d=!1;if(0===n){var c=u.getAppendedFrag(0,Lt);c&&a1?(i=0,this.bitrateTest=!0):i=r.firstAutoLevel),r.nextLoadLevel=i,this.level=r.loadLevel,this.loadedmetadata=!1}t>0&&-1===e&&(this.log("Override startPosition with lastCurrentTime @"+t.toFixed(3)),e=t),this.state=zr,this.nextLoadPosition=this.startPosition=this.lastCurrentTime=e,this.tick()}else this._forceStartLoad=!0,this.state=Yr},r.stopLoad=function(){this._forceStartLoad=!1,e.prototype.stopLoad.call(this)},r.doTick=function(){switch(this.state){case si:var e=this.levels,t=this.level,r=null==e?void 0:e[t],i=null==r?void 0:r.details;if(i&&(!i.live||this.levelLastLoaded===r)){if(this.waitForCdnTuneIn(i))break;this.state=zr;break}if(this.hls.nextLoadLevel!==this.level){this.state=zr;break}break;case Jr:var n,s=self.performance.now(),a=this.retryDate;if(!a||s>=a||null!=(n=this.media)&&n.seeking){var o=this.levels,l=this.level,h=null==o?void 0:o[l];this.resetStartWhenNotLoaded(h||null),this.state=zr}}this.state===zr&&this.doTickIdle(),this.onTickEnd()},r.onTickEnd=function(){e.prototype.onTickEnd.call(this),this.checkBuffer(),this.checkFragmentChanged()},r.doTickIdle=function(){var e=this.hls,t=this.levelLastLoaded,r=this.levels,i=this.media;if(null!==t&&(i||!this.startFragRequested&&e.config.startFragPrefetch)&&(!this.altAudio||!this.audioOnly)){var n=e.nextLoadLevel;if(null!=r&&r[n]){var s=r[n],a=this.getMainFwdBufferInfo();if(null!==a){var o=this.getLevelDetails();if(o&&this._streamEnded(a,o)){var l={};return this.altAudio&&(l.type="video"),this.hls.trigger(E.BUFFER_EOS,l),void(this.state=ri)}e.loadLevel!==n&&-1===e.manualLevel&&this.log("Adapting to level "+n+" from level "+this.level),this.level=e.nextLoadLevel=n;var h=s.details;if(!h||this.state===si||h.live&&this.levelLastLoaded!==s)return this.level=n,void(this.state=si);var u=a.len,d=this.getMaxBufferLength(s.maxBitrate);if(!(u>=d)){this.backtrackFragment&&this.backtrackFragment.start>a.end&&(this.backtrackFragment=null);var c=this.backtrackFragment?this.backtrackFragment.start:a.end,f=this.getNextFragment(c,h);if(this.couldBacktrack&&!this.fragPrevious&&f&&"initSegment"!==f.sn&&this.fragmentTracker.getState(f)!==Pr){var g,p=(null!=(g=this.backtrackFragment)?g:f).sn-h.startSN,m=h.fragments[p-1];m&&f.cc===m.cc&&(f=m,this.fragmentTracker.removeFragment(m))}else this.backtrackFragment&&a.len&&(this.backtrackFragment=null);if(f&&this.isLoopLoading(f,c)){if(!f.gap){var v=this.audioOnly&&!this.altAudio?M:x,y=(v===x?this.videoBuffer:this.mediaBuffer)||this.media;y&&this.afterBufferFlushed(y,v,Lt)}f=this.getNextFragmentLoopLoading(f,h,a,Lt,d)}f&&(!f.initSegment||f.initSegment.data||this.bitrateTest||(f=f.initSegment),this.loadFragment(f,s,c))}}}}},r.loadFragment=function(t,r,i){var n=this.fragmentTracker.getState(t);this.fragCurrent=t,n===Rr||n===wr?"initSegment"===t.sn?this._loadInitSegment(t,r):this.bitrateTest?(this.log("Fragment "+t.sn+" of level "+t.level+" is being downloaded to test bitrate and will not be buffered"),this._loadBitrateTestFrag(t,r)):(this.startFragRequested=!0,e.prototype.loadFragment.call(this,t,r,i)):this.clearTrackerIfNeeded(t)},r.getBufferedFrag=function(e){return this.fragmentTracker.getBufferedFrag(e,Lt)},r.followingBufferedFrag=function(e){return e?this.getBufferedFrag(e.end+.5):null},r.immediateLevelSwitch=function(){this.abortCurrentFrag(),this.flushMainBuffer(0,Number.POSITIVE_INFINITY)},r.nextLevelSwitch=function(){var e=this.levels,t=this.media;if(null!=t&&t.readyState){var r,i=this.getAppendedFrag(t.currentTime);i&&i.start>1&&this.flushMainBuffer(0,i.start-1);var n=this.getLevelDetails();if(null!=n&&n.live){var s=this.getMainFwdBufferInfo();if(!s||s.len<2*n.targetduration)return}if(!t.paused&&e){var a=e[this.hls.nextLoadLevel],o=this.fragLastKbps;r=o&&this.fragCurrent?this.fragCurrent.duration*a.maxBitrate/(1e3*o)+1:0}else r=0;var l=this.getBufferedFrag(t.currentTime+r);if(l){var h=this.followingBufferedFrag(l);if(h){this.abortCurrentFrag();var u=h.maxStartPTS?h.maxStartPTS:h.start,d=h.duration,c=Math.max(l.end,u+Math.min(Math.max(d-this.config.maxFragLookUpTolerance,d*(this.couldBacktrack?.5:.125)),d*(this.couldBacktrack?.75:.25)));this.flushMainBuffer(c,Number.POSITIVE_INFINITY)}}}},r.abortCurrentFrag=function(){var e=this.fragCurrent;switch(this.fragCurrent=null,this.backtrackFragment=null,e&&(e.abortRequests(),this.fragmentTracker.removeFragment(e)),this.state){case Xr:case Qr:case Jr:case ei:case ti:this.state=zr}this.nextLoadPosition=this.getLoadPosition()},r.flushMainBuffer=function(t,r){e.prototype.flushMainBuffer.call(this,t,r,this.altAudio?"video":null)},r.onMediaAttached=function(t,r){e.prototype.onMediaAttached.call(this,t,r);var i=r.media;this.onvplaying=this.onMediaPlaying.bind(this),this.onvseeked=this.onMediaSeeked.bind(this),i.addEventListener("playing",this.onvplaying),i.addEventListener("seeked",this.onvseeked),this.gapController=new Ca(this.config,i,this.fragmentTracker,this.hls)},r.onMediaDetaching=function(){var t=this.media;t&&this.onvplaying&&this.onvseeked&&(t.removeEventListener("playing",this.onvplaying),t.removeEventListener("seeked",this.onvseeked),this.onvplaying=this.onvseeked=null,this.videoBuffer=null),this.fragPlaying=null,this.gapController&&(this.gapController.destroy(),this.gapController=null),e.prototype.onMediaDetaching.call(this)},r.onMediaPlaying=function(){this.tick()},r.onMediaSeeked=function(){var e=this.media,t=e?e.currentTime:null;m(t)&&this.log("Media seeked to "+t.toFixed(3));var r=this.getMainFwdBufferInfo();null!==r&&0!==r.len?this.tick():this.warn('Main forward buffer length on "seeked" event '+(r?r.len:"empty")+")")},r.onManifestLoading=function(){this.log("Trigger BUFFER_RESET"),this.hls.trigger(E.BUFFER_RESET,void 0),this.fragmentTracker.removeAllFragments(),this.couldBacktrack=!1,this.startPosition=this.lastCurrentTime=this.fragLastKbps=0,this.levels=this.fragPlaying=this.backtrackFragment=this.levelLastLoaded=null,this.altAudio=this.audioOnly=this.startFragRequested=!1},r.onManifestParsed=function(e,t){var r,i,n=!1,s=!1;t.levels.forEach((function(e){var t=e.audioCodec;t&&(n=n||-1!==t.indexOf("mp4a.40.2"),s=s||-1!==t.indexOf("mp4a.40.5"))})),this.audioCodecSwitch=n&&s&&!("function"==typeof(null==(i=Pa())||null==(r=i.prototype)?void 0:r.changeType)),this.audioCodecSwitch&&this.log("Both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC"),this.levels=t.levels,this.startFragRequested=!1},r.onLevelLoading=function(e,t){var r=this.levels;if(r&&this.state===zr){var i=r[t.level];(!i.details||i.details.live&&this.levelLastLoaded!==i||this.waitForCdnTuneIn(i.details))&&(this.state=si)}},r.onLevelLoaded=function(e,t){var r,i=this.levels,n=t.level,s=t.details,a=s.totalduration;if(i){this.log("Level "+n+" loaded ["+s.startSN+","+s.endSN+"]"+(s.lastPartSn?"[part-"+s.lastPartSn+"-"+s.lastPartIndex+"]":"")+", cc ["+s.startCC+", "+s.endCC+"] duration:"+a);var o=i[n],l=this.fragCurrent;!l||this.state!==Qr&&this.state!==Jr||l.level!==t.level&&l.loader&&this.abortCurrentFrag();var h=0;if(s.live||null!=(r=o.details)&&r.live){var u;if(this.checkLiveUpdate(s),s.deltaUpdateFailed)return;h=this.alignPlaylists(s,o.details,null==(u=this.levelLastLoaded)?void 0:u.details)}if(o.details=s,this.levelLastLoaded=o,this.hls.trigger(E.LEVEL_UPDATED,{details:s,level:n}),this.state===si){if(this.waitForCdnTuneIn(s))return;this.state=zr}this.startFragRequested?s.live&&this.synchronizeToLiveEdge(s):this.setStartPosition(s,h),this.tick()}else this.warn("Levels were reset while loading level "+n)},r._handleFragmentLoadProgress=function(e){var t,r=e.frag,i=e.part,n=e.payload,s=this.levels;if(s){var a=s[r.level],o=a.details;if(!o)return this.warn("Dropping fragment "+r.sn+" of level "+r.level+" after level details were reset"),void this.fragmentTracker.removeFragment(r);var l=a.videoCodec,h=o.PTSKnown||!o.live,u=null==(t=r.initSegment)?void 0:t.data,d=this._getAudioCodec(a),c=this.transmuxer=this.transmuxer||new Tn(this.hls,Lt,this._handleTransmuxComplete.bind(this),this._handleTransmuxerFlush.bind(this)),f=i?i.index:-1,g=-1!==f,p=new xr(r.level,r.sn,r.stats.chunkCount,n.byteLength,f,g),m=this.initPTS[r.cc];c.push(n,u,d,l,r,i,o.totalduration,h,p,m)}else this.warn("Levels were reset while fragment load was in progress. Fragment "+r.sn+" of level "+r.level+" will not be buffered")},r.onAudioTrackSwitching=function(e,t){var r=this.altAudio;if(!t.url){if(this.mediaBuffer!==this.media){this.log("Switching on main audio, use media.buffered to schedule main fragment loading"),this.mediaBuffer=this.media;var i=this.fragCurrent;i&&(this.log("Switching to main audio track, cancel main fragment load"),i.abortRequests(),this.fragmentTracker.removeFragment(i)),this.resetTransmuxer(),this.resetLoadingState()}else this.audioOnly&&this.resetTransmuxer();var n=this.hls;r&&(n.trigger(E.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:null}),this.fragmentTracker.removeAllFragments()),n.trigger(E.AUDIO_TRACK_SWITCHED,t)}},r.onAudioTrackSwitched=function(e,t){var r=t.id,i=!!this.hls.audioTracks[r].url;if(i){var n=this.videoBuffer;n&&this.mediaBuffer!==n&&(this.log("Switching on alternate audio, use video.buffered to schedule main fragment loading"),this.mediaBuffer=n)}this.altAudio=i,this.tick()},r.onBufferCreated=function(e,t){var r,i,n=t.tracks,s=!1;for(var a in n){var o=n[a];if("main"===o.id){if(i=a,r=o,"video"===a){var l=n[a];l&&(this.videoBuffer=l.buffer)}}else s=!0}s&&r?(this.log("Alternate track found, use "+i+".buffered to schedule main fragment loading"),this.mediaBuffer=r.buffer):this.mediaBuffer=this.media},r.onFragBuffered=function(e,t){var r=t.frag,i=t.part;if(!r||r.type===Lt){if(this.fragContextChanged(r))return this.warn("Fragment "+r.sn+(i?" p: "+i.index:"")+" of level "+r.level+" finished buffering, but was aborted. state: "+this.state),void(this.state===ti&&(this.state=zr));var n=i?i.stats:r.stats;this.fragLastKbps=Math.round(8*n.total/(n.buffering.end-n.loading.first)),"initSegment"!==r.sn&&(this.fragPrevious=r),this.fragBufferedComplete(r,i)}},r.onError=function(e,t){var r;if(t.fatal)this.state=ii;else switch(t.details){case T.FRAG_GAP:case T.FRAG_PARSING_ERROR:case T.FRAG_DECRYPT_ERROR:case T.FRAG_LOAD_ERROR:case T.FRAG_LOAD_TIMEOUT:case T.KEY_LOAD_ERROR:case T.KEY_LOAD_TIMEOUT:this.onFragmentOrKeyLoadError(Lt,t);break;case T.LEVEL_LOAD_ERROR:case T.LEVEL_LOAD_TIMEOUT:case T.LEVEL_PARSING_ERROR:t.levelRetry||this.state!==si||(null==(r=t.context)?void 0:r.type)!==St||(this.state=zr);break;case T.BUFFER_APPEND_ERROR:case T.BUFFER_FULL_ERROR:if(!t.parent||"main"!==t.parent)return;if(t.details===T.BUFFER_APPEND_ERROR)return void this.resetLoadingState();this.reduceLengthAndFlushBuffer(t)&&this.flushMainBuffer(0,Number.POSITIVE_INFINITY);break;case T.INTERNAL_EXCEPTION:this.recoverWorkerError(t)}},r.checkBuffer=function(){var e=this.media,t=this.gapController;if(e&&t&&e.readyState){if(this.loadedmetadata||!Mr.getBuffered(e).length){var r=this.state!==zr?this.fragCurrent:null;t.poll(this.lastCurrentTime,r)}this.lastCurrentTime=e.currentTime}},r.onFragLoadEmergencyAborted=function(){this.state=zr,this.loadedmetadata||(this.startFragRequested=!1,this.nextLoadPosition=this.startPosition),this.tickImmediate()},r.onBufferFlushed=function(e,t){var r=t.type;if(r!==M||this.audioOnly&&!this.altAudio){var i=(r===x?this.videoBuffer:this.mediaBuffer)||this.media;this.afterBufferFlushed(i,r,Lt),this.tick()}},r.onLevelsUpdated=function(e,t){this.level>-1&&this.fragCurrent&&(this.level=this.fragCurrent.level),this.levels=t.levels},r.swapAudioCodec=function(){this.audioCodecSwap=!this.audioCodecSwap},r.seekToStartPos=function(){var e=this.media;if(e){var t=e.currentTime,r=this.startPosition;if(r>=0&&t0&&(nT.cc;if(!1!==n.independent){var b=u.startPTS,R=u.endPTS,A=u.startDTS,w=u.endDTS;if(l)l.elementaryStreams[u.type]={startPTS:b,endPTS:R,startDTS:A,endDTS:w};else if(u.firstKeyFrame&&u.independent&&1===s.id&&!L&&(this.couldBacktrack=!0),u.dropped&&u.independent){var P=this.getMainFwdBufferInfo(),I=(P?P.end:this.getLoadPosition())+this.config.maxBufferHole,C=u.firstKeyFramePTS?u.firstKeyFramePTS:b;if(!_&&I2&&(o.gap=!0);o.setElementaryStreamInfo(u.type,b,R,A,w),this.backtrackFragment&&(this.backtrackFragment=o),this.bufferFragmentData(u,o,l,s,_||L)}else{if(!_&&!L)return void this.backtrack(o);o.gap=!0}}if(p){var k=p.startPTS,D=p.endPTS,x=p.startDTS,O=p.endDTS;l&&(l.elementaryStreams[M]={startPTS:k,endPTS:D,startDTS:x,endDTS:O}),o.setElementaryStreamInfo(M,k,D,x,O),this.bufferFragmentData(p,o,l,s)}if(g&&null!=c&&null!=(t=c.samples)&&t.length){var F={id:r,frag:o,details:g,samples:c.samples};i.trigger(E.FRAG_PARSING_METADATA,F)}if(g&&d){var N={id:r,frag:o,details:g,samples:d.samples};i.trigger(E.FRAG_PARSING_USERDATA,N)}}}else this.resetWhenMissingContext(s)},r._bufferInitSegment=function(e,t,r,i){var n=this;if(this.state===ei){this.audioOnly=!!t.audio&&!t.video,this.altAudio&&!this.audioOnly&&delete t.audio;var s=t.audio,a=t.video,o=t.audiovideo;if(s){var l=e.audioCodec,h=navigator.userAgent.toLowerCase();if(this.audioCodecSwitch){l&&(l=-1!==l.indexOf("mp4a.40.5")?"mp4a.40.2":"mp4a.40.5");var u=s.metadata;u&&"channelCount"in u&&1!==(u.channelCount||1)&&-1===h.indexOf("firefox")&&(l="mp4a.40.5")}l&&-1!==l.indexOf("mp4a.40.5")&&-1!==h.indexOf("android")&&"audio/mpeg"!==s.container&&(l="mp4a.40.2",this.log("Android: force audio codec to "+l)),e.audioCodec&&e.audioCodec!==l&&this.log('Swapping manifest audio codec "'+e.audioCodec+'" for "'+l+'"'),s.levelCodec=l,s.id="main",this.log("Init audio buffer, container:"+s.container+", codecs[selected/level/parsed]=["+(l||"")+"/"+(e.audioCodec||"")+"/"+s.codec+"]")}a&&(a.levelCodec=e.videoCodec,a.id="main",this.log("Init video buffer, container:"+a.container+", codecs[level/parsed]=["+(e.videoCodec||"")+"/"+a.codec+"]")),o&&this.log("Init audiovideo buffer, container:"+o.container+", codecs[level/parsed]=["+e.codecs+"/"+o.codec+"]"),this.hls.trigger(E.BUFFER_CODECS,t),Object.keys(t).forEach((function(e){var s=t[e].initSegment;null!=s&&s.byteLength&&n.hls.trigger(E.BUFFER_APPENDING,{type:e,data:s,frag:r,part:null,chunkMeta:i,parent:r.type})})),this.tickImmediate()}},r.getMainFwdBufferInfo=function(){return this.getFwdBufferInfo(this.mediaBuffer?this.mediaBuffer:this.media,Lt)},r.backtrack=function(e){this.couldBacktrack=!0,this.backtrackFragment=e,this.resetTransmuxer(),this.flushBufferGap(e),this.fragmentTracker.removeFragment(e),this.fragPrevious=null,this.nextLoadPosition=e.start,this.state=zr},r.checkFragmentChanged=function(){var e=this.media,t=null;if(e&&e.readyState>1&&!1===e.seeking){var r=e.currentTime;if(Mr.isBuffered(e,r)?t=this.getAppendedFrag(r):Mr.isBuffered(e,r+.1)&&(t=this.getAppendedFrag(r+.1)),t){this.backtrackFragment=null;var i=this.fragPlaying,n=t.level;i&&t.sn===i.sn&&i.level===n||(this.fragPlaying=t,this.hls.trigger(E.FRAG_CHANGED,{frag:t}),i&&i.level===n||this.hls.trigger(E.LEVEL_SWITCHED,{level:n}))}}},a(t,[{key:"nextLevel",get:function(){var e=this.nextBufferedFrag;return e?e.level:-1}},{key:"currentFrag",get:function(){var e=this.media;return e?this.fragPlaying||this.getAppendedFrag(e.currentTime):null}},{key:"currentProgramDateTime",get:function(){var e=this.media;if(e){var t=e.currentTime,r=this.currentFrag;if(r&&m(t)&&m(r.programDateTime)){var i=r.programDateTime+1e3*(t-r.start);return new Date(i)}}return null}},{key:"currentLevel",get:function(){var e=this.currentFrag;return e?e.level:-1}},{key:"nextBufferedFrag",get:function(){var e=this.currentFrag;return e?this.followingBufferedFrag(e):null}},{key:"forceStartLoad",get:function(){return this._forceStartLoad}}]),t}(ai),Da=function(){function e(t){void 0===t&&(t={}),this.config=void 0,this.userConfig=void 0,this.coreComponents=void 0,this.networkControllers=void 0,this.started=!1,this._emitter=new vn,this._autoLevelCapping=-1,this._maxHdcpLevel=null,this.abrController=void 0,this.bufferController=void 0,this.capLevelController=void 0,this.latencyController=void 0,this.levelController=void 0,this.streamController=void 0,this.audioTrackController=void 0,this.subtitleTrackController=void 0,this.emeController=void 0,this.cmcdController=void 0,this._media=null,this.url=null,this.triggeringException=void 0,R(t.debug||!1,"Hls instance");var r=this.config=function(e,t){if((t.liveSyncDurationCount||t.liveMaxLatencyDurationCount)&&(t.liveSyncDuration||t.liveMaxLatencyDuration))throw new Error("Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration");if(void 0!==t.liveMaxLatencyDurationCount&&(void 0===t.liveSyncDurationCount||t.liveMaxLatencyDurationCount<=t.liveSyncDurationCount))throw new Error('Illegal hls.js config: "liveMaxLatencyDurationCount" must be greater than "liveSyncDurationCount"');if(void 0!==t.liveMaxLatencyDuration&&(void 0===t.liveSyncDuration||t.liveMaxLatencyDuration<=t.liveSyncDuration))throw new Error('Illegal hls.js config: "liveMaxLatencyDuration" must be greater than "liveSyncDuration"');var r=ba(e),n=["TimeOut","MaxRetry","RetryDelay","MaxRetryTimeout"];return["manifest","level","frag"].forEach((function(e){var i=("level"===e?"playlist":e)+"LoadPolicy",s=void 0===t[i],a=[];n.forEach((function(n){var o=e+"Loading"+n,l=t[o];if(void 0!==l&&s){a.push(o);var h=r[i].default;switch(t[i]={default:h},n){case"TimeOut":h.maxLoadTimeMs=l,h.maxTimeToFirstByteMs=l;break;case"MaxRetry":h.errorRetry.maxNumRetry=l,h.timeoutRetry.maxNumRetry=l;break;case"RetryDelay":h.errorRetry.retryDelayMs=l,h.timeoutRetry.retryDelayMs=l;break;case"MaxRetryTimeout":h.errorRetry.maxRetryDelayMs=l,h.timeoutRetry.maxRetryDelayMs=l}}})),a.length&&A.warn('hls.js config: "'+a.join('", "')+'" setting(s) are deprecated, use "'+i+'": '+JSON.stringify(t[i]))})),i(i({},r),t)}(e.DefaultConfig,t);this.userConfig=t,r.progressive&&function(e){var t=e.loader;t!==ya&&t!==ma?(A.log("[config]: Custom loader detected, cannot enable progressive streaming"),e.progressive=!1):function(){if(self.fetch&&self.AbortController&&self.ReadableStream&&self.Request)try{return new self.ReadableStream({}),!0}catch(e){}return!1}()&&(e.loader=ya,e.progressive=!0,e.enableSoftwareAES=!0,A.log("[config]: Progressive streaming enabled, using FetchLoader"))}(r);var n=r.abrController,s=r.bufferController,a=r.capLevelController,o=r.errorController,l=r.fpsController,h=new o(this),u=this.abrController=new n(this),d=this.bufferController=new s(this),c=this.capLevelController=new a(this),f=new l(this),g=new Pt(this),p=new Gt(this),m=r.contentSteeringController,v=m?new m(this):null,y=this.levelController=new Ra(this,v),S=new Ir(this),T=new wa(this.config),_=this.streamController=new ka(this,S,T);c.setStreamController(_),f.setStreamController(_);var L=[g,y,_];v&&L.splice(1,0,v),this.networkControllers=L;var b=[u,d,c,f,p,S];this.audioTrackController=this.createController(r.audioTrackController,L);var w=r.audioStreamController;w&&L.push(new w(this,S,T)),this.subtitleTrackController=this.createController(r.subtitleTrackController,L);var P=r.subtitleStreamController;P&&L.push(new P(this,S,T)),this.createController(r.timelineController,b),T.emeController=this.emeController=this.createController(r.emeController,b),this.cmcdController=this.createController(r.cmcdController,b),this.latencyController=this.createController(Ht,b),this.coreComponents=b,L.push(h);var I=h.onErrorOut;"function"==typeof I&&this.on(E.ERROR,I,h)}e.isMSESupported=function(){return Ia()},e.isSupported=function(){return function(){if(!Ia())return!1;var e=ze();return"function"==typeof(null==e?void 0:e.isTypeSupported)&&(["avc1.42E01E,mp4a.40.2","av01.0.01M.08","vp09.00.50.08"].some((function(t){return e.isTypeSupported(Ze(t,"video"))}))||["mp4a.40.2","fLaC"].some((function(t){return e.isTypeSupported(Ze(t,"audio"))})))}()},e.getMediaSource=function(){return ze()};var t=e.prototype;return t.createController=function(e,t){if(e){var r=new e(this);return t&&t.push(r),r}return null},t.on=function(e,t,r){void 0===r&&(r=this),this._emitter.on(e,t,r)},t.once=function(e,t,r){void 0===r&&(r=this),this._emitter.once(e,t,r)},t.removeAllListeners=function(e){this._emitter.removeAllListeners(e)},t.off=function(e,t,r,i){void 0===r&&(r=this),this._emitter.off(e,t,r,i)},t.listeners=function(e){return this._emitter.listeners(e)},t.emit=function(e,t,r){return this._emitter.emit(e,t,r)},t.trigger=function(e,t){if(this.config.debug)return this.emit(e,e,t);try{return this.emit(e,e,t)}catch(t){if(A.error("An internal error happened while handling event "+e+'. Error message: "'+t.message+'". Here is a stacktrace:',t),!this.triggeringException){this.triggeringException=!0;var r=e===E.ERROR;this.trigger(E.ERROR,{type:S.OTHER_ERROR,details:T.INTERNAL_EXCEPTION,fatal:r,event:e,error:t}),this.triggeringException=!1}}return!1},t.listenerCount=function(e){return this._emitter.listenerCount(e)},t.destroy=function(){A.log("destroy"),this.trigger(E.DESTROYING,void 0),this.detachMedia(),this.removeAllListeners(),this._autoLevelCapping=-1,this.url=null,this.networkControllers.forEach((function(e){return e.destroy()})),this.networkControllers.length=0,this.coreComponents.forEach((function(e){return e.destroy()})),this.coreComponents.length=0;var e=this.config;e.xhrSetup=e.fetchSetup=void 0,this.userConfig=null},t.attachMedia=function(e){A.log("attachMedia"),this._media=e,this.trigger(E.MEDIA_ATTACHING,{media:e})},t.detachMedia=function(){A.log("detachMedia"),this.trigger(E.MEDIA_DETACHING,void 0),this._media=null},t.loadSource=function(e){this.stopLoad();var t=this.media,r=this.url,i=this.url=p.buildAbsoluteURL(self.location.href,e,{alwaysNormalize:!0});this._autoLevelCapping=-1,this._maxHdcpLevel=null,A.log("loadSource:"+i),t&&r&&(r!==i||this.bufferController.hasSourceTypes())&&(this.detachMedia(),this.attachMedia(t)),this.trigger(E.MANIFEST_LOADING,{url:e})},t.startLoad=function(e){void 0===e&&(e=-1),A.log("startLoad("+e+")"),this.started=!0,this.networkControllers.forEach((function(t){t.startLoad(e)}))},t.stopLoad=function(){A.log("stopLoad"),this.started=!1,this.networkControllers.forEach((function(e){e.stopLoad()}))},t.resumeBuffering=function(){this.started&&this.networkControllers.forEach((function(e){"fragmentLoader"in e&&e.startLoad(-1)}))},t.pauseBuffering=function(){this.networkControllers.forEach((function(e){"fragmentLoader"in e&&e.stopLoad()}))},t.swapAudioCodec=function(){A.log("swapAudioCodec"),this.streamController.swapAudioCodec()},t.recoverMediaError=function(){A.log("recoverMediaError");var e=this._media;this.detachMedia(),e&&this.attachMedia(e)},t.removeLevel=function(e){this.levelController.removeLevel(e)},t.setAudioOption=function(e){var t;return null==(t=this.audioTrackController)?void 0:t.setAudioOption(e)},t.setSubtitleOption=function(e){var t;return null==(t=this.subtitleTrackController)||t.setSubtitleOption(e),null},a(e,[{key:"levels",get:function(){return this.levelController.levels||[]}},{key:"currentLevel",get:function(){return this.streamController.currentLevel},set:function(e){A.log("set currentLevel:"+e),this.levelController.manualLevel=e,this.streamController.immediateLevelSwitch()}},{key:"nextLevel",get:function(){return this.streamController.nextLevel},set:function(e){A.log("set nextLevel:"+e),this.levelController.manualLevel=e,this.streamController.nextLevelSwitch()}},{key:"loadLevel",get:function(){return this.levelController.level},set:function(e){A.log("set loadLevel:"+e),this.levelController.manualLevel=e}},{key:"nextLoadLevel",get:function(){return this.levelController.nextLoadLevel},set:function(e){this.levelController.nextLoadLevel=e}},{key:"firstLevel",get:function(){return Math.max(this.levelController.firstLevel,this.minAutoLevel)},set:function(e){A.log("set firstLevel:"+e),this.levelController.firstLevel=e}},{key:"startLevel",get:function(){var e=this.levelController.startLevel;return-1===e&&this.abrController.forcedAutoLevel>-1?this.abrController.forcedAutoLevel:e},set:function(e){A.log("set startLevel:"+e),-1!==e&&(e=Math.max(e,this.minAutoLevel)),this.levelController.startLevel=e}},{key:"capLevelToPlayerSize",get:function(){return this.config.capLevelToPlayerSize},set:function(e){var t=!!e;t!==this.config.capLevelToPlayerSize&&(t?this.capLevelController.startCapping():(this.capLevelController.stopCapping(),this.autoLevelCapping=-1,this.streamController.nextLevelSwitch()),this.config.capLevelToPlayerSize=t)}},{key:"autoLevelCapping",get:function(){return this._autoLevelCapping},set:function(e){this._autoLevelCapping!==e&&(A.log("set autoLevelCapping:"+e),this._autoLevelCapping=e,this.levelController.checkMaxAutoUpdated())}},{key:"bandwidthEstimate",get:function(){var e=this.abrController.bwEstimator;return e?e.getEstimate():NaN},set:function(e){this.abrController.resetEstimator(e)}},{key:"ttfbEstimate",get:function(){var e=this.abrController.bwEstimator;return e?e.getEstimateTTFB():NaN}},{key:"maxHdcpLevel",get:function(){return this._maxHdcpLevel},set:function(e){(function(e){return $t.indexOf(e)>-1})(e)&&this._maxHdcpLevel!==e&&(this._maxHdcpLevel=e,this.levelController.checkMaxAutoUpdated())}},{key:"autoLevelEnabled",get:function(){return-1===this.levelController.manualLevel}},{key:"manualLevel",get:function(){return this.levelController.manualLevel}},{key:"minAutoLevel",get:function(){var e=this.levels,t=this.config.minAutoBitrate;if(!e)return 0;for(var r=e.length,i=0;i=t)return i;return 0}},{key:"maxAutoLevel",get:function(){var e,t=this.levels,r=this.autoLevelCapping,i=this.maxHdcpLevel;if(e=-1===r&&null!=t&&t.length?t.length-1:r,i)for(var n=e;n--;){var s=t[n].attrs["HDCP-LEVEL"];if(s&&s<=i)return n}return e}},{key:"firstAutoLevel",get:function(){return this.abrController.firstAutoLevel}},{key:"nextAutoLevel",get:function(){return this.abrController.nextAutoLevel},set:function(e){this.abrController.nextAutoLevel=e}},{key:"playingDate",get:function(){return this.streamController.currentProgramDateTime}},{key:"mainForwardBufferInfo",get:function(){return this.streamController.getMainFwdBufferInfo()}},{key:"allAudioTracks",get:function(){var e=this.audioTrackController;return e?e.allAudioTracks:[]}},{key:"audioTracks",get:function(){var e=this.audioTrackController;return e?e.audioTracks:[]}},{key:"audioTrack",get:function(){var e=this.audioTrackController;return e?e.audioTrack:-1},set:function(e){var t=this.audioTrackController;t&&(t.audioTrack=e)}},{key:"allSubtitleTracks",get:function(){var e=this.subtitleTrackController;return e?e.allSubtitleTracks:[]}},{key:"subtitleTracks",get:function(){var e=this.subtitleTrackController;return e?e.subtitleTracks:[]}},{key:"subtitleTrack",get:function(){var e=this.subtitleTrackController;return e?e.subtitleTrack:-1},set:function(e){var t=this.subtitleTrackController;t&&(t.subtitleTrack=e)}},{key:"media",get:function(){return this._media}},{key:"subtitleDisplay",get:function(){var e=this.subtitleTrackController;return!!e&&e.subtitleDisplay},set:function(e){var t=this.subtitleTrackController;t&&(t.subtitleDisplay=e)}},{key:"lowLatencyMode",get:function(){return this.config.lowLatencyMode},set:function(e){this.config.lowLatencyMode=e}},{key:"liveSyncPosition",get:function(){return this.latencyController.liveSyncPosition}},{key:"latency",get:function(){return this.latencyController.latency}},{key:"maxLatency",get:function(){return this.latencyController.maxLatency}},{key:"targetLatency",get:function(){return this.latencyController.targetLatency}},{key:"drift",get:function(){return this.latencyController.drift}},{key:"forceStartLoad",get:function(){return this.streamController.forceStartLoad}}],[{key:"version",get:function(){return"1.5.13"}},{key:"Events",get:function(){return E}},{key:"ErrorTypes",get:function(){return S}},{key:"ErrorDetails",get:function(){return T}},{key:"DefaultConfig",get:function(){return e.defaultConfig?e.defaultConfig:La},set:function(t){e.defaultConfig=t}}]),e}();return Da.defaultConfig=void 0,Da},e.exports=i()}(!1)},424:(e,t)=>{"use strict";t.h=n;var r=2147483647;function i(e){if(e>r)throw new RangeError('The value "'+e+'" is invalid for option "size"');var t=new Uint8Array(e);return t.__proto__=n.prototype,t}function n(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return o(e)}return s(e,t,r)}function s(e,t,r){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!n.isEncoding(t))throw new TypeError("Unknown encoding: "+t);var r=0|u(e,t),s=i(r),a=s.write(e,t);a!==r&&(s=s.slice(0,a));return s}(e,t);if(ArrayBuffer.isView(e))return l(e);if(null==e)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(v(e,ArrayBuffer)||e&&v(e.buffer,ArrayBuffer))return function(e,t,r){if(t<0||e.byteLength=r)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+r.toString(16)+" bytes");return 0|e}function u(e,t){if(n.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||v(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);var r=e.length,i=arguments.length>2&&!0===arguments[2];if(!i&&0===r)return 0;for(var s=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return m(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;default:if(s)return i?-1:m(e).length;t=(""+t).toLowerCase(),s=!0}}function d(e,t,r,i){r=Number(r)||0;const n=e.length-r;i?(i=Number(i))>n&&(i=n):i=n;const s=t.length;let a;for(i>s/2&&(i=s/2),a=0;a>8,n=r%256,s.push(n),s.push(i);return s}(t,e.length-r),e,r,i)}function p(e,t,r,i){let n;for(n=0;n=t.length||n>=e.length);++n)t[n+r]=e[n];return n}function m(e,t){var r;t=t||1/0;for(var i=e.length,n=null,s=[],a=0;a55295&&r<57344){if(!n){if(r>56319){(t-=3)>-1&&s.push(239,191,189);continue}if(a+1===i){(t-=3)>-1&&s.push(239,191,189);continue}n=r;continue}if(r<56320){(t-=3)>-1&&s.push(239,191,189),n=r;continue}r=65536+(n-55296<<10|r-56320)}else n&&(t-=3)>-1&&s.push(239,191,189);if(n=null,r<128){if((t-=1)<0)break;s.push(r)}else if(r<2048){if((t-=2)<0)break;s.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;s.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;s.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return s}function v(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function y(e){return e!=e}"undefined"!=typeof Symbol&&null!=Symbol.species&&n[Symbol.species]===n&&Object.defineProperty(n,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),n.from=function(e,t,r){return s(e,t,r)},n.prototype.__proto__=Uint8Array.prototype,n.__proto__=Uint8Array,n.alloc=function(e,t,r){return function(e,t,r){return a(e),e<=0?i(e):void 0!==t?"string"==typeof r?i(e).fill(t,r):i(e).fill(t):i(e)}(e,t,r)},n.allocUnsafe=function(e){return o(e)},n.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==n.prototype},n.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},n.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return n.alloc(0);var r;if(void 0===t)for(t=0,r=0;r=e.length&&(t=e.length),t||(t=0),i>0&&i=this.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-t=0;--a)e[a+t]=this[a+r];else Uint8Array.prototype.set.call(e,this.subarray(r,i),t);return s},n.prototype.write=function(e,t,r,i){if(void 0===t)i="utf8",r=this.length,t=0;else if(void 0===r&&"string"==typeof t)i=t,r=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t>>>=0,isFinite(r)?(r>>>=0,void 0===i&&(i="utf8")):(i=r,r=void 0)}const n=this.length-t;if((void 0===r||r>n)&&(r=n),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");let s=!1;for(;;)switch(i){case"hex":return d(this,e,t,r);case"utf8":case"utf-8":return c(this,e,t,r);case"ascii":case"latin1":case"binary":return f(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return g(this,e,t,r);default:if(s)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),s=!0}}},832:function(e,t,r){var i;!function(n){"use strict";function s(e,t){var r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function a(e,t,r,i,n,a){return s((o=s(s(t,e),s(i,a)))<<(l=n)|o>>>32-l,r);var o,l}function o(e,t,r,i,n,s,o){return a(t&r|~t&i,e,t,n,s,o)}function l(e,t,r,i,n,s,o){return a(t&i|r&~i,e,t,n,s,o)}function h(e,t,r,i,n,s,o){return a(t^r^i,e,t,n,s,o)}function u(e,t,r,i,n,s,o){return a(r^(t|~i),e,t,n,s,o)}function d(e,t){var r,i,n,a,d;e[t>>5]|=128<>>9<<4)]=t;var c=1732584193,f=-271733879,g=-1732584194,p=271733878;for(r=0;r>5]>>>t%32&255);return r}function f(e){var t,r=[];for(r[(e.length>>2)-1]=void 0,t=0;t>5]|=(255&e.charCodeAt(t/8))<>>4&15)+i.charAt(15&t);return n}function p(e){return unescape(encodeURIComponent(e))}function m(e){return function(e){return c(d(f(e),8*e.length))}(p(e))}function v(e,t){return function(e,t){var r,i,n=f(e),s=[],a=[];for(s[15]=a[15]=void 0,n.length>16&&(n=d(n,8*e.length)),r=0;r<16;r+=1)s[r]=909522486^n[r],a[r]=1549556828^n[r];return i=d(s.concat(f(t)),512+8*t.length),c(d(a.concat(i),640))}(p(e),p(t))}function y(e,t,r){return t?r?v(t,e):g(v(t,e)):r?m(e):g(m(e))}void 0===(i=function(){return y}.call(t,r,t,e))||(e.exports=i)}()},365:e=>{const t={ANDROID_WEB:"android-web",IOS_WEB:"iOS-web",PC_NATIVE:"PC-web",PC_WEB:"PC-web"};var r={getNetType:function(){let e=(new RegExp("nettype\\/(\\w*)").exec(i())||[,""])[1].toLowerCase();if(!e&&navigator.connection){switch(navigator.connection.type){case"ethernet":e="ethernet";break;case"cellular":e="cellular";break;default:e="wifi"}}return e},getPlatform:function(){return r.isAndroid()||r.isAndroidWebView()?t.ANDROID_WEB:r.isIOS()||r.isIpad()||r.isIOSWebView()?t.IOS_WEB:r.isElectron()?t.PC_NATIVE:t.PC_WEB},isX5:function(){return this.isAndroid()&&/\s(TBS|X5Core)\/[\w\.\-]+/i.test(i())},isPC:function(){return!s(n("os "))&&!s(n("android[/ ]"))},isIOS:function(){return s(n("os "))},isIpad:function(){return i().match(/(ipad)/)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1},isAndroid:function(){return s(n("android[/ ]"))},isIOSSafari:function(){return this.isIOS()&&this.isSafari()},isIpadSafari:function(){return this.isIpad()&&this.isSafari()},isElectron:function(){return/electron/i.test(i())},isMobile:function(){return r.isAndroid()||r.isIOS()},isSafari:function(){return/^((?!chrome|android).)*safari/i.test(i())},isFirefox:function(){return/firefox/i.test(i())},isChrome:function(){return/chrome/i.test(i())},isLocalHost:function(){return"localhost"===location.hostname},isAndroidWebView:function(){const e=i();return e.indexOf("wv")>-1&&e.indexOf("android")>-1},isIOSWebView:function(){const e=i();return/\b(ipad|iphone|macintosh).*applewebKit(?!.*safari)/i.test(e)},isWebView:function(){return r.isAndroidWebView()||r.isIOSWebView()},device:t,getBrowser:function(){return r.isX5()?"X5":r.isAndroidWebView()?"Android-WebView":r.isIOSWebView()?"iOS-WebView":r.isChrome()?"Chrome":r.isFirefox()?"Firefox":r.isIpadSafari()?"iPad-Safari":r.isIOSSafari()?"iPhone-Safari":r.isSafari()?"Mac-Safari":"Unknown"}};function i(){return navigator.userAgent.toLowerCase()}function n(e){return""+(new RegExp(e+"(\\d+((\\.|_)\\d+)*)").exec(i())||[,0])[1]||void 0}function s(e){return parseFloat((e||"").replace(/\_/g,"."))||0}e.exports=r}},t={};function r(i){var n=t[i];if(void 0!==n)return n.exports;var s=t[i]={exports:{}};return e[i].call(s.exports,s,s.exports,r),s.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var i={};return(()=>{"use strict";r.d(i,{default:()=>Or});const e={DC_SIGNAL:"SIGNAL",DC_SIGNAL_BATCH:"SIGNAL_BATCH",DC_OPEN:"OPEN",DC_REQUEST:"REQUEST",DC_PIECE_NOT_FOUND:"PIECE_NOT_FOUND",DC_PIECE_ABORT:"PIECE_ABORT",DC_PIECE_CANCEL:"PIECE_CANCEL",DC_CLOSE:"CLOSE",DC_DISCONNECT:"DISCONNECT",DC_RESPONSE:"RESPONSE",DC_ERROR:"ERROR",DC_PIECE:"PIECE",DC_PIECE_DATA:"PIECE_DATA",DC_TIMEOUT:"TIMEOUT",DC_PIECE_ACK:"PIECE_ACK",DC_METADATA:"METADATA",DC_PLAT_ANDROID:"ANDROID",DC_PLAT_IOS:"IOS",DC_PLAT_WEB:"WEB",DC_CHOKE:"CHOKE",DC_UNCHOKE:"UNCHOKE",DC_HAVE:"HAVE",DC_HAVE_REVERSE:"HAVE_REVERSE",DC_LOST:"LOST",DC_GET_PEERS:"GET_PEERS",DC_PEERS:"PEERS",DC_STATS:"STATS",DC_PEER_SIGNAL:"PEER_SIGNAL",DC_PLAYLIST:"PLAYLIST",BM_LOST:"lost",BM_ADDED_SEG_:"BM_ADDED_SEG_",BM_ADDED_SN_:"BM_ADDED_SN_",BM_SEG_ADDED:"BM_SEG_ADDED",BM_FATAL_ERROR:"BM_FATAL_ERROR",FRAG_CHANGED:"FRAG_CHANGED",FRAG_LOADED:"FRAG_LOADED",FRAG_LOADING:"FRAG_LOADING",RESTART_P2P:"RESTART_P2P",EXCEPTION:"exception",SYN_OUTPUT:"SYN_OUTPUT",SYN_ERROR:"SYN_ERROR",SYN_PROGRESS:"SYN_PROGRESS",MEDIA_REBUFFER:"MEDIA_REBUFFER"},t={...e,SCH_WAIT_PEER:"SCH_WAIT_PEER",SW_PLAYLIST:"SW_PLAYLIST",SW_GET_PLAYLIST:"SW_GET_PLAYLIST",SW_GET_MEDIA:"SW_GET_MEDIA",SW_DEBUG:"SW_DEBUG",LEVEL_LOADED:"LEVEL_LOADED",MANIFEST_PARSED:"MANIFEST_PARSED"};var n=r(415),s=r.n(n),a=r(424),o=r(558),l=r.n(o);const h="__PROXY_IDENTIFIER__";const u=64e3;function d(){return!0}function c(e){return new URL(location.href).searchParams.get(e)}function f(e,t,r){const i=new URL(e);return i.searchParams.append(t,r),i.href}function g(){return Date.parse(new Date)/1e3}function p(e,t){return parseInt(Math.random()*(t-e+1)+e,10)}function m(e){return new Promise((t=>setTimeout(t,e)))}function v(){if("object"!=typeof self)return null;var e={RTCPeerConnection:self.RTCPeerConnection||self.mozRTCPeerConnection||self.webkitRTCPeerConnection,RTCSessionDescription:self.RTCSessionDescription||self.mozRTCSessionDescription||self.webkitRTCSessionDescription,RTCIceCandidate:self.RTCIceCandidate||self.mozRTCIceCandidate||self.webkitRTCIceCandidate};return e.RTCPeerConnection&&e.RTCPeerConnection.prototype?e:null}function y(e){const t=a.h.from(e),r=new a.h(e.byteLength);return t.copy(r),r}function E(){return location.protocol.startsWith("https")}function S(e,t,r){if(e.size<=t)return;const i=[...e.keys()];do{const t=i.shift();r&&r(e.get(t)),e.delete(t)}while(e.size>t)}function T(e,t){if(e.size<=t)return;const r=[...e.values()];do{e.delete(r.shift())}while(e.size>t)}function _(e){return e instanceof ArrayBuffer&&0!==e.byteLength}function L(e){if(!e)return{};const t=(e=e.substring(6)).split("-");if(2!==t.length)return{};const r=Number(t[0]),i=t[1]?Number(t[1]):-1;return{rangeStart:r,rangeEnd:i>=0?i+1:void 0}}function b(e){return e.split("?")[0]}function R(){let e=new Date,t=e.getHours(),r=e.getMinutes(),i=e.getSeconds(),n=e.getMilliseconds();return`${t.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}:${i.toString().padStart(2,"0")}.${n}`}function A(e){return e&&"function"==typeof e}function w(e,t,r,i,n,s){e.sendPartialBuffer(r,i,{from:n,incompletes:s}),i.length{i?t.sendMsgPieceAbort(n,r,!0):t.uploading&&t.send(n),s&&(t.uploading=!1)}))}(t,e,!!r.reverse):e.uploading=!1}const P=e=>0===p(0,1)?[null,e]:[e,null];function I(e,t,r){return 1===e.length?t.length>=1&&r.length>=1?t[0].weight>r[0].weight?[t[0],e[0]]:[e[0],r[0]]:t.length>=1?[t[0],e[0]]:r.length>=1?[e[0],r[0]]:P(e[0]):[t.length>=1?t[0]:null,r.length>=1?r[0]:null]}function C(){const e=performance.now();return{trequest:e,tfirst:0,tload:0,aborted:!1,loaded:0,retry:0,total:0,chunkCount:0,bwEstimate:0,loading:{start:e,first:0,end:0},parsing:{start:0,end:0},buffering:{start:0,first:0,end:0}}}class k{constructor(e,t){this.target=t,this.type=e}}class D extends k{constructor(e,t){super("error",t),this.message=e.message,this.error=e}}class M extends k{constructor(e=1e3,t="",r){super("close",r),this.code=e,this.reason=t,this.wasClean=!0}}const x=()=>{if("undefined"!=typeof WebSocket)return WebSocket},O={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+4e3*Math.random(),minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1};class F{constructor(e,t,r={}){this._listeners={error:[],message:[],open:[],close:[]},this.onclose=null,this.onerror=null,this.onmessage=null,this.onopen=null,this._messageQueue=[],this._closeCalled=!1,this._connectLock=!1,this._shouldReconnect=!0,this._retryCount=-1,this._binaryType="blob",this._url=e,this._protocols=t,this._options=r,this._options.startClosed&&(this._shouldReconnect=!1),this._connect(),this._handleOpen=this._handleOpen.bind(this),this._handleClose=this._handleClose.bind(this),this._handleMessage=this._handleMessage.bind(this),this._handleError=this._handleError.bind(this)}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return F.CONNECTING}get OPEN(){return F.OPEN}get CLOSING(){return F.CLOSING}get CLOSED(){return F.CLOSED}get readyState(){return this._ws?this._ws.readyState:this._options.startClosed?F.CLOSED:F.CONNECTING}get url(){return this._ws?this._ws.url:""}close(e=1e3,t){this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),this._ws&&this._ws.readyState!==this.CLOSED&&this._ws.close(e,t)}reconnect(e,t){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,this._ws&&this._ws.readyState!==this.CLOSED?(this._disconnect(e,t),this._connect()):this._connect()}send(e){if(this._ws&&this._ws.readyState===this.OPEN)this._ws.send(e);else{const{maxEnqueuedMessages:t=O.maxEnqueuedMessages}=this._options;this._messageQueue.lengthe!==t)))}_getNextDelay(){const{reconnectionDelayGrowFactor:e=O.reconnectionDelayGrowFactor,minReconnectionDelay:t=O.minReconnectionDelay,maxReconnectionDelay:r=O.maxReconnectionDelay}=this._options;let i=0;return this._retryCount>0&&(i=t*Math.pow(e,this._retryCount-1),i>r&&(i=r)),i}_wait(){return new Promise((e=>{setTimeout(e,this._getNextDelay())}))}_getNextUrl(e){if("string"==typeof e)return Promise.resolve(e);if("function"==typeof e){const t=e();if("string"==typeof t)return Promise.resolve(t);if(t.then)return t}throw Error("Invalid URL")}_connect(){if(this._connectLock||!this._shouldReconnect)return;this._connectLock=!0;const{maxRetries:e=O.maxRetries,connectionTimeout:t=O.connectionTimeout,WebSocket:r=x()}=this._options;if(!(this._retryCount>=e)){if(this._retryCount++,this._removeListeners(),void 0===(i=r)||!i||2!==i.CLOSING)throw Error("No valid WebSocket class provided");var i;this._wait().then((()=>this._getNextUrl(this._url))).then((e=>{this._closeCalled?this._connectLock=!1:(this._ws=this._protocols?new r(e,this._protocols):new r(e),this._ws.binaryType=this._binaryType,this._connectLock=!1,this._addListeners(),this._connectTimeout=setTimeout((()=>this._handleTimeout()),t))})).catch((e=>{this._connectLock=!1,this._handleError(new D(Error(e.message),this))}))}}_handleTimeout(){this._handleError(new D(Error("TIMEOUT"),this))}_disconnect(e=1e3,t){if(this._clearTimeouts(),this._ws){this._removeListeners();try{this._ws.close(e,t),this._handleClose(new M(e,t,this))}catch(e){}}}_acceptOpen(){this._retryCount=0}_callEventListener(e,t){"handleEvent"in t?t.handleEvent(e):t(e)}_handleOpen(e){const{minUptime:t=O.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout((()=>this._acceptOpen()),t),this._ws.binaryType=this._binaryType,this._messageQueue.forEach((e=>this._ws.send(e))),this._messageQueue=[],this.onopen&&this.onopen(e),this._listeners.open.forEach((t=>this._callEventListener(e,t)))}_handleMessage(e){this.onmessage&&this.onmessage(e),this._listeners.message.forEach((t=>this._callEventListener(e,t)))}_handleError(e){this._disconnect(void 0,"TIMEOUT"===e.message?"timeout":void 0),this.onerror&&this.onerror(e),this._listeners.error.forEach((t=>this._callEventListener(e,t))),this._connect()}_handleClose(e){this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(e),this._listeners.close.forEach((t=>this._callEventListener(e,t)))}_removeListeners(){this._ws&&(this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError))}_addListeners(){this._ws&&(this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError))}_clearTimeouts(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)}}const N={debug:3,info:4,warn:5,error:6};class B{constructor(e,t,r,i){this.wsAddr=`${e}?app=${t}&id=${r}&v=${i}`,this.destroyed=!1;try{this._ws=this._init()}catch(e){console.error(e)}}_init(){const e={maxRetries:3,minReconnectionDelay:p(5e3,15e3),maxReconnectionDelay:6e5,maxEnqueuedMessages:200};return new F(this.wsAddr,void 0,e)}send(e,t){if(this.destroyed)return;const r=N[e];this._ws.send(JSON.stringify({records:[{level:r,text:`${R()}: ${t}`}]}))}sendBatch(e){const t=[];for(let r of e)t.push({level:N[r.levelKey],text:r.message});this._ws.send(JSON.stringify({records:t}))}destroy(){this._ws&&(this._ws.close(1e3),this._ws=null,this.destroyed=!0)}}const U=e=>{const t=localStorage.getItem(e);try{const e=JSON.parse(t);return e.value?e.value:e}catch(e){return t}},G=(e,t,r)=>{((e,t)=>{"object"==typeof t&&(t=JSON.stringify(t)),localStorage.setItem(e,t)})(e,{value:t,duration:r,startTime:Date.now()})},H={debug:0,info:1,warn:2,error:3,none:4};const $=class{constructor(e){this.logLevel=e,this.onlineDebug=!1,this.logCache=[];try{console.debug=console.log}catch(e){console.debug=console.info}"debug"!==e&&"info"!==e||(this.logLevel="error"),U("SW_DEBUG")&&(this.logLevel="debug"),!0===e?this.logLevel="warn":!1===e?this.logLevel="none":e in H||(this.logLevel="error"),this.resetLogger()}enableDebug(){this.onlineDebug=!0;for(let e in H)this[e]=console[e];this._hookLogFunc(((e,t)=>{this.logUploader&&this.logUploader.send(e,t)}))}enableReport(e){this.reportUrl=e,this._hookLogFunc(((e,t)=>{this.reportUrl?(this.logCache.push({levelKey:e,message:`${R()}: ${t}`}),this.logCache.length>350&&this.logCache.shift()):this.reporter&&this.reporter.send(e,t)}))}report(e,t,r,i,n=5e3){this.reportUrl&&(e&&this.logCache.unshift({levelKey:"info",message:e}),this.reporter=new B(this.reportUrl,t,r,i),this.reporter._ws.addEventListener("open",(()=>{this.reportUrl=void 0,this.reporter.sendBatch(this.logCache),setTimeout((()=>{this.reporter.destroy(),this.reporter=null}),n)}),{once:!0}))}_hookLogFunc(e){for(let t in H){const r=this[t];this[t]=i=>{e(t,i),r(i)}}}setUploader(e){this.logUploader=e}resetLogger(){this.onlineDebug=!1;for(let e in H)H[e](K||(K=Promise.resolve())).then(e).catch((e=>setTimeout((()=>{throw e}),0))),V=65536;function q(e){return e.replace(/a=ice-options:trickle\s\n/g,"")}class j extends(s()){constructor(e){super(),this.channelName=e.initiator?e.channelName:null,this.initiator=e.initiator||!1,this.channelConfig=e.channelConfig||j.channelConfig,this.channelNegotiated=this.channelConfig.negotiated,this.config=Object.assign({},j.config,e.config),this.offerOptions=e.offerOptions||{},this.answerOptions=e.answerOptions||{},this.sdpTransform=e.sdpTransform||(e=>e),this.trickle=void 0===e.trickle||e.trickle,this.allowHalfTrickle=void 0!==e.allowHalfTrickle&&e.allowHalfTrickle,this.iceCompleteTimeout=e.iceCompleteTimeout||5e3,this.destroyed=!1,this.destroying=!1,this._connected=!1,this.remoteAddress=void 0,this.remoteFamily=void 0,this.remotePort=void 0,this.localAddress=void 0,this.localFamily=void 0,this.localPort=void 0,this._wrtc=e.wrtc&&"object"==typeof e.wrtc?e.wrtc:v(),this._pcReady=!1,this._channelReady=!1,this._iceComplete=!1,this._iceCompleteTimer=null,this._channel=null,this._pendingCandidates=[],this._pendingData=[],this._isNegotiating=!1,this._firstNegotiation=!0,this._batchedNegotiation=!1,this._queuedNegotiation=!1,this._senderMap=new Map,this._closingInterval=null,this._chunk=null,this._cb=null,this._interval=null;try{this._pc=new this._wrtc.RTCPeerConnection(this.config)}catch(e){return void W((()=>this.destroy(e)))}this._pc.oniceconnectionstatechange=()=>{this._onIceStateChange()},this._pc.onicegatheringstatechange=()=>{this._onIceStateChange()},this._pc.onconnectionstatechange=()=>{this._onConnectionStateChange()},this._pc.onsignalingstatechange=()=>{this._onSignalingStateChange()},this._pc.onicecandidate=e=>{this._onIceCandidate(e)},this.initiator||this.channelNegotiated?this._setupData({channel:this._pc.createDataChannel(this.channelName,this.channelConfig)}):this._pc.ondatachannel=e=>{this._setupData(e)},this._needsNegotiation()}get bufferSize(){return this._channel&&this._channel.bufferedAmount||0}get connected(){return this._connected&&"open"===this._channel.readyState}signal(e){if(!this.destroyed&&this._pc){if("string"==typeof e)try{e=JSON.parse(e)}catch(t){e={}}if(e.renegotiate&&this.initiator&&this._needsNegotiation(),e.candidate)if(this._pc.remoteDescription&&this._pc.remoteDescription.type)try{this._addIceCandidate(e.candidate)}catch(e){}else this._pendingCandidates.push(e.candidate);e.sdp&&this._pc.setRemoteDescription(new this._wrtc.RTCSessionDescription(e)).then((()=>{this.destroyed||(this._pendingCandidates.forEach((e=>{try{this._addIceCandidate(e)}catch(e){}})),this._pendingCandidates=[],"offer"===this._pc.remoteDescription.type&&this._createAnswer())})).catch((e=>{this.destroy(e)})),e.sdp||e.candidate||e.renegotiate||e.transceiverRequest||this.destroy(new Error("signal() called with invalid signal data"))}}_addIceCandidate(e){const t=new this._wrtc.RTCIceCandidate(e);this._pc.addIceCandidate(t).catch((e=>{var r;!t.address||t.address.endsWith(".local")?(r="Ignoring unsupported ICE candidate.",console.warn(r)):this.destroy(e)}))}send(e){if("string"==typeof e){RTCDataChannel.prototype.send.toString().includes("[native code]")&&this._channel.send(e)}else this._channel.send(e)}_needsNegotiation(){this._batchedNegotiation||(this._batchedNegotiation=!0,W((()=>{this._batchedNegotiation=!1,!this.initiator&&this._firstNegotiation||this.negotiate(),this._firstNegotiation=!1})))}negotiate(){this.initiator?this._isNegotiating?this._queuedNegotiation=!0:setTimeout((()=>{this._createOffer()}),0):this._isNegotiating?this._queuedNegotiation=!0:this.emit("signal",{type:"renegotiate",renegotiate:!0}),this._isNegotiating=!0}destroy(e){this._destroy(e)}_destroy(e){this.destroyed||this.destroying||(this.destroying=!0,W((()=>{if(this.destroyed=!0,this.destroying=!1,this._connected=!1,this._pcReady=!1,this._channelReady=!1,this._senderMap=null,clearInterval(this._closingInterval),this._closingInterval=null,clearInterval(this._interval),this._interval=null,this._chunk=null,this._cb=null,this._channel){try{this._channel.close()}catch(e){}this._channel.onmessage=null,this._channel.onopen=null,this._channel.onclose=null,this._channel.onerror=null}if(this._pc){try{this._pc.close()}catch(e){}this._pc.oniceconnectionstatechange=null,this._pc.onicegatheringstatechange=null,this._pc.onsignalingstatechange=null,this._pc.onicecandidate=null,this._pc.ondatachannel=null}this._pc=null,this._channel=null,e&&this.emit("error",e),this.emit("close")})))}_setupData(e){if(!e.channel)return this.destroy(new Error("Data channel event is missing `channel` property"));this._channel=e.channel,this._channel.binaryType="arraybuffer","number"==typeof this._channel.bufferedAmountLowThreshold&&(this._channel.bufferedAmountLowThreshold=V),this.channelName=this._channel.label,this._channel.onmessage=e=>{this._onChannelMessage(e)},this._channel.onbufferedamountlow=()=>{this._onChannelBufferedAmountLow()},this._channel.onopen=()=>{this._onChannelOpen()},this._channel.onclose=()=>{this._onChannelClose()},this._channel.onerror=e=>{this.destroy(e)};let t=!1;this._closingInterval=setInterval((()=>{this._channel&&"closing"===this._channel.readyState?(t&&this._onChannelClose(),t=!0):t=!1}),5e3)}get isBufferedAmountHigh(){return this._channel.bufferedAmount>V}write(e,t){if(this.destroyed)return t(new Error("cannot write after peer is destroyed"));if(this._connected){try{this.send(e)}catch(e){return this.destroy(e)}this.isBufferedAmountHigh?this._cb=t:t(null)}else this._chunk=e,this._cb=t}_startIceCompleteTimeout(){this.destroyed||this._iceCompleteTimer||(this._iceCompleteTimer=setTimeout((()=>{this._iceComplete||(this._iceComplete=!0,this.emit("iceTimeout"),this.emit("_iceComplete"))}),this.iceCompleteTimeout))}_createOffer(){this.destroyed||this._pc.createOffer(this.offerOptions).then((e=>{if(this.destroyed)return;this.trickle||this.allowHalfTrickle||(e.sdp=q(e.sdp)),e.sdp=this.sdpTransform(e.sdp);const t=()=>{if(this.destroyed)return;const t=this._pc.localDescription||e;this.emit("signal",{type:t.type,sdp:t.sdp})};this._pc.setLocalDescription(e).then((()=>{this.destroyed||(this.trickle||this._iceComplete?t():this.once("_iceComplete",t))})).catch((e=>{this.destroy(e)}))})).catch((e=>{this.destroy(e)}))}_createAnswer(){this.destroyed||this._pc.createAnswer(this.answerOptions).then((e=>{if(this.destroyed)return;this.trickle||this.allowHalfTrickle||(e.sdp=q(e.sdp)),e.sdp=this.sdpTransform(e.sdp);const t=()=>{if(this.destroyed)return;const t=this._pc.localDescription||e;this.emit("signal",{type:t.type,sdp:t.sdp})};this._pc.setLocalDescription(e).then((()=>{this.destroyed||(this.trickle||this._iceComplete?t():this.once("_iceComplete",t))})).catch((e=>{this.destroy(e)}))})).catch((e=>{this.destroy(e)}))}_onConnectionStateChange(){this.destroyed||"failed"===this._pc.connectionState&&this.destroy(new Error("Connection failed."))}_onIceStateChange(){if(this.destroyed)return;const e=this._pc.iceConnectionState,t=this._pc.iceGatheringState;this.emit("iceStateChange",e,t),"connected"!==e&&"completed"!==e||(this._pcReady=!0,this._maybeReady()),"failed"===e&&this.destroy(new Error("Ice connection failed.")),"closed"===e&&this.destroy(new Error("Ice connection closed."))}getStats(e){const t=e=>("[object Array]"===Object.prototype.toString.call(e.values)&&e.values.forEach((t=>{Object.assign(e,t)})),e);0===this._pc.getStats.length?this._pc.getStats().then((r=>{const i=[];r.forEach((e=>{i.push(t(e))})),e(null,i)}),(t=>e(t))):this._pc.getStats.length>0?this._pc.getStats((r=>{if(this.destroyed)return;const i=[];r.result().forEach((e=>{const r={};e.names().forEach((t=>{r[t]=e.stat(t)})),r.id=e.id,r.type=e.type,r.timestamp=e.timestamp,i.push(t(r))})),e(null,i)}),(t=>e(t))):e(null,[])}_maybeReady(){if(this._connected||this._connecting||!this._pcReady||!this._channelReady)return;this._connecting=!0;const e=()=>{this.destroyed||this.getStats(((t,r)=>{if(this.destroyed)return;t&&(r=[]);const i={},n={},s={};let a=!1;r.forEach((e=>{"remotecandidate"!==e.type&&"remote-candidate"!==e.type||(i[e.id]=e),"localcandidate"!==e.type&&"local-candidate"!==e.type||(n[e.id]=e),"candidatepair"!==e.type&&"candidate-pair"!==e.type||(s[e.id]=e)}));const o=e=>{a=!0;let t=n[e.localCandidateId];t&&(t.ip||t.address)?(this.localAddress=t.ip||t.address,this.localPort=Number(t.port)):t&&t.ipAddress?(this.localAddress=t.ipAddress,this.localPort=Number(t.portNumber)):"string"==typeof e.googLocalAddress&&(t=e.googLocalAddress.split(":"),this.localAddress=t[0],this.localPort=Number(t[1])),this.localAddress&&(this.localFamily=this.localAddress.includes(":")?"IPv6":"IPv4");let r=i[e.remoteCandidateId];r&&(r.ip||r.address)?(this.remoteAddress=r.ip||r.address,this.remotePort=Number(r.port)):r&&r.ipAddress?(this.remoteAddress=r.ipAddress,this.remotePort=Number(r.portNumber)):"string"==typeof e.googRemoteAddress&&(r=e.googRemoteAddress.split(":"),this.remoteAddress=r[0],this.remotePort=Number(r[1])),this.remoteAddress&&(this.remoteFamily=this.remoteAddress.includes(":")?"IPv6":"IPv4")};if(r.forEach((e=>{"transport"===e.type&&e.selectedCandidatePairId&&o(s[e.selectedCandidatePairId]),("googCandidatePair"===e.type&&"true"===e.googActiveConnection||("candidatepair"===e.type||"candidate-pair"===e.type)&&e.selected)&&o(e)})),a||Object.keys(s).length&&!Object.keys(n).length){if(this._connecting=!1,this._connected=!0,this._chunk){try{this.send(this._chunk)}catch(t){return this.destroy(t)}this._chunk=null;const e=this._cb;this._cb=null,e(null)}"number"!=typeof this._channel.bufferedAmountLowThreshold&&(this._interval=setInterval((()=>this._onInterval()),150),this._interval.unref&&this._interval.unref()),this.emit("connect");for(let e of this._pendingData)this.emit("data",e);this._pendingData=[]}else setTimeout(e,100)}))};e()}_onInterval(){!this._cb||!this._channel||this._channel.bufferedAmount>V||this._onChannelBufferedAmountLow()}_onSignalingStateChange(){this.destroyed||("stable"===this._pc.signalingState&&(this._isNegotiating=!1,this._queuedNegotiation?(this._queuedNegotiation=!1,this._needsNegotiation()):this.emit("negotiated")),this.emit("signalingStateChange",this._pc.signalingState))}_onIceCandidate(e){this.destroyed||(e.candidate&&this.trickle?this.emit("signal",{type:"candidate",candidate:{candidate:e.candidate.candidate,sdpMLineIndex:e.candidate.sdpMLineIndex,sdpMid:e.candidate.sdpMid}}):e.candidate||this._iceComplete||(this._iceComplete=!0,this.emit("_iceComplete")),e.candidate&&this._startIceCompleteTimeout())}_onChannelMessage(e){if(this.destroyed)return;let t=e.data;t instanceof ArrayBuffer&&(t=a.h.from(t)),this._connected?this.emit("data",t):this._pendingData.length<10&&this._pendingData.push(t)}_onChannelBufferedAmountLow(){if(this.destroyed||!this._cb)return;const e=this._cb;this._cb=null,e(null)}_onChannelOpen(){this._connected||this.destroyed||(this._channelReady=!0,this._maybeReady())}_onChannelClose(){this.destroyed||this.destroy()}}j.config={iceServers:[{urls:["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478"]}],sdpSemantics:"unified-plan"},j.channelConfig={};const Y=j;class z{constructor(e,t,r,i,n=0,s=void 0){this.sn=e,this.segId=t,this.data=r,this.fromPeerId=i,this.level=n||0,this.ext=s}static fromSegment(e){const t=new z(e.sn,e.segId,e.data,e.fromPeerId,e.level,e.ext);return t.from=e.from,t}get size(){return this.data.byteLength}get isSequential(){return this.sn>=0}}var X=r(365),Q=r.n(X);class J extends(s()){static get defaultPacketSize(){return u}static get VERSION(){return"8"}constructor(e,t,r,i,n,s={}){super(),this.channel=e.fetcher.channelId,this.logger=e.logger,this.config=n,this.isInitiator=i,this.options=s,this.intermediator=s.intermediator||null,this.signalMsgs=[],this.assignPeerId(t,r),this.platform="unknown",this.super=!1,this.mobile=!1,this.mobileWeb=!1,this.mobileNet=!1,this.connected=!1,this.msgQueue=[],this.miss=0,this.notifySet=new Set,this.bufArr=[],this.packetSize=u,this.sendReqQueue=[],this.downloading=!1,this.uploading=!1,this.choked=!1,this.streamListeners=[],this.pieceMsg={},this.datasToSend=[],this.bytesUploaded=0,this.dataWriting=!1,this.timeSendRequest=0,this.timeReceivePiece=0,this.timeSendPiece=0,this.weight=0,this.peersConnected=1,this.uploadSpeed=0,this.currentLevel=0,this.currentPos=0,this.useBackupSignal=!1,this.gotPeersTS=0,this.gotAnswer=!1,this.gotOffer=!1,this.gotSignal=!1,this.sentSignal=!1,this.webRTCConfig={};const{stuns:a}=this.options;if(a&&a.length>0){const e=[];a.forEach((t=>{this.logger.info(`use stun ${t}`),e.push({urls:t})})),this.webRTCConfig.iceServers=e}this.config.webRTCConfig&&(this.webRTCConfig={...this.config.webRTCConfig,...this.webRTCConfig}),this.playlistMap=new Map,this._initPeerChannel(),this.notFatalClosed=!1,this.startSN=Number.MAX_SAFE_INTEGER,this.endSN=-1,this._loadedBytes=0}assignPeerId(t,r){this.remotePeerId=r,this.channelId=this.isInitiator?`${t}-${r}`:`${r}-${t}`,r&&this._startTimer(),setTimeout((()=>{this.signalMsgs.length>0&&this.emit(e.DC_SIGNAL_BATCH,this.signalMsgs)}),0)}_startTimer(){this.timeJoin=g(),this.dataExchangeTs=this.timeJoin,this.gotStatsTs=this.timeJoin,this.connTimeout=setTimeout((()=>{const{gotSignal:t,sentSignal:r,signalName:i}=this;this.logger.warn(`dc ${this.channelId} connection timeout, gotSignal ${t} sentSignal ${r} signalName ${i}`),this.emit(e.DC_TIMEOUT,{gotSignal:t,sentSignal:r,data:this.signalMsgs})}),this.isInitiator?15e3:12e3)}get isAvailable(){return this.downloadNum<2&&!this.choked}get isAvailableUrgently(){return!this.downloading&&!this.choked}cancelDownload(t,r,i){return!!this.downloading&&(!(this.bufSN>t)&&(!(this.streamListeners.length>0)&&(this.logger.info(`cancel download ${i} to ${this.remotePeerId} remain packets ${this.remainAttachments}`),this.timeReceivePiece=0,this.sendJson({event:e.DC_PIECE_CANCEL,sn:t,level:r,seg_id:i}))))}addStreamListener(e,t,r){this.streamListeners.push({handler:r,peerId:t})}removeStreamListener(e){this.streamListeners=this.streamListeners.filter((t=>t.peerId!==e||(t.handler(void 0,void 0,!0,"aborted by cancel"),!1)))}_initPeerChannel(){const t=new Y({initiator:this.isInitiator,trickle:this.options.trickle||!1,config:this.webRTCConfig});this._datachannel=t,t.on("error",(t=>{let r=!0;(this.connected||this.notFatalClosed)&&(r=!1),this.emit(e.DC_ERROR,r,t.message)})),t.on("signal",(t=>{t.candidate&&!t.candidate.candidate||(!this.useBackupSignal&&this.signalMsgs.length<10&&this.signalMsgs.push(t),this.sentSignal=!0,this.emit(e.DC_SIGNAL,t))}));t.on("connect",(()=>{for(this.logger.info(`datachannel CONNECTED from ${this.intermediator?"peer":"server "+this.signalName} to ${this.remotePeerId}`),this.connected=!0,clearTimeout(this.connTimeout),this.signalMsgs=[],this.emit(e.DC_OPEN);this.msgQueue.length>0;){let e=this.msgQueue.shift();this.emit(e.event,e)}})),t.on("data",(t=>{const{logger:r}=this;if("string"==typeof t){let i=JSON.parse(t);if(!i)return void r.error("dc received string is null");if(!this.connected)return void this.msgQueue.push(i);let n,s=i.event;switch(n=s!==e.DC_PLAYLIST&&s!==e.DC_PEER_SIGNAL?`string: ${t}`:`event: ${s}`,r.debug(`datachannel receive ${n} from ${this.remotePeerId}`),s){case e.DC_HAVE:if(this.emit(i.event,i),!i.sn)return;this.config.live||(i.snthis.endSN&&(this.endSN=i.sn));break;case e.DC_PIECE:this.downloading=!0,this.dataExchangeTs=g(),this.timeReceivePiece=performance.now(),this.pieceMsg=i,this._prepareForBinary(i.attachments,i.seg_id,i.sn,i.size),this.emit(i.event,i);break;case e.DC_PIECE_CANCEL:r.info(`send queue ${this.datasToSend.length}, uploading ${this.uploading}`),this.emit(i.event,i),this.sendMsgPieceAbort("transfer canceled",i.seg_id);break;case e.DC_PIECE_NOT_FOUND:this._sendNextReq()||(this.downloading=!1),this.emit(i.event,i);break;case e.DC_REQUEST:this._handleRequestMsg(i);break;case e.DC_PIECE_ACK:this._handlePieceAck(i.seg_id,i.size,i.miss);break;case e.DC_STATS:this._handleStats(i);break;case e.DC_PLAYLIST:this.config.sharePlaylist&&this._handlePlaylist(i);break;case e.DC_METADATA:this._handleMetadata(i);break;case e.DC_PIECE_ABORT:this.downloading&&(this._notifyDownloadListenersAbort("aborted by upstream peer"),this.emit(e.DC_PIECE_ABORT,i)),this.downloading=!1;break;case e.DC_CHOKE:r.info(`choke peer ${this.remotePeerId}`),this.choked=!0;break;case e.DC_UNCHOKE:r.info(`unchoke peer ${this.remotePeerId}`),this.choked=!1;break;case e.DC_CLOSE:this.emit(i.event,i.fatal||!1);break;default:this.emit(i.event,i)}}else{if(!t)return void r.error("datachannel on data is undefined!");if(!this.downloading)return void r.warn(`peer ${this.remotePeerId} not downloading, data size ${t.byteLength} pieceMsg ${JSON.stringify(this.pieceMsg)}`);this._handleBinaryMsg(t)}})),t.once("close",(()=>{this.emit(e.DC_CLOSE,!1)})),t.on("iceStateChange",((t,r)=>{this.connected&&"disconnected"===t&&(this.logger.warn(`${this.remotePeerId} disconnected`),this.emit(e.DC_DISCONNECT))}))}sendJson(t){if(!this.remotePeerId)return!1;t.event!==e.DC_PLAYLIST&&t.event!==e.DC_PEER_SIGNAL?this.logger.debug(`dc bufferSize ${this._datachannel.bufferSize} send ${JSON.stringify(t)} to ${this.remotePeerId}`):this.logger.debug(`dc send event ${t.event} to ${this.remotePeerId}`);const r=JSON.stringify(t);return r.length>u?(this.logger.error("string to send is too large"),!1):this.send(r,!1)}send(e,t=!0){return t?(this.datasToSend.push(e),this.dataWriting||this._sendDataSync(),!0):this.sendImmediately(e)}_sendDataSync(){if(!this._datachannel.connected||0===this.datasToSend.length)return void(this.dataWriting=!1);this.dataWriting=!0;const t=this.datasToSend.shift();t?("string"!=typeof t&&(this.bytesUploaded+=t.byteLength),this._datachannel.write(t,(t=>{if(t)return this.dataWriting=!1,void this.emit(e.DC_ERROR,!1,t.message);this._sendDataSync()}))):this.logger.error("sendDataSync data is undefined!")}sendImmediately(t){if(this._datachannel.connected)try{return this._datachannel.send(t),!0}catch(t){const r=`datachannel ${this.channelId} send data failed, close it`;this.emit(e.DC_ERROR,!1,r)}return!1}sendMsgHave(t,r,i={}){const n=i.reverse||void 0;delete i.reverse,this.sendJson({event:n?e.DC_HAVE_REVERSE:e.DC_HAVE,sn:t,seg_id:r,...i})}sendPieceNotFound(t,r,i={}){this.uploading=!1,this.sendJson({event:e.DC_PIECE_NOT_FOUND,seg_id:r||void 0,sn:t,...i})}sendPeers(t){this.sendJson({event:e.DC_PEERS,peers:t})}sendPeersRequest(){this.sendJson({event:e.DC_GET_PEERS})}sendMsgStats(t,r={}){const i={event:e.DC_STATS,total_conns:t,...r};this.sendJson(i)}sendMsgPlaylist(t,r,i){const n=this.playlistMap.get(t);if(n&&n.seq>=i)return;const s={event:e.DC_PLAYLIST,url:t,data:r,seq:i};this.playlistMap.set(t,{data:r,seq:i}),this.sendJson(s)}sendMsgSignal(t,r,i){return this.sendJson({event:e.DC_PEER_SIGNAL,action:"signal",to_peer_id:t,from_peer_id:r,data:i})}sendMsgSignalReject(t,r,i,n=!1){return this.sendJson({event:e.DC_PEER_SIGNAL,action:"reject",to_peer_id:t,from_peer_id:r,reason:i,fatal:n})}sendMetaData(t,r,i,n,s=!1){this.isInitiator&&(this.timeSendRequest=performance.now()),this.sendJson({event:e.DC_METADATA,field:t,platform:e.DC_PLAT_WEB,mobile:!!Q().isMobile(),mobile_net:s,channel:this.channel,version:"2.12.15",sequential:r,peers:i,region:n})}sendPartialBuffer(e,t,r={}){this.sendMsgPiece(e,r);for(let e=0;e=this.minRequiredSpeed(e))}close(t){t||(this.notFatalClosed=!0),this.emit(e.DC_CLOSE,t)}receiveSignal(e){if("answer"===e.type){if(this.gotAnswer||this.gotOffer)return;this.gotAnswer=!0}else if("offer"===e.type){if(this.gotOffer||this.gotAnswer)return;this.gotOffer=!0}this.gotSignal=!0,e&&this._datachannel.signal(e)}_notifyDownloadListenersAbort(e){for(let t of this.streamListeners){const{handler:r}=t;r(void 0,void 0,!0,e)}this.streamListeners=[]}destroy(t=!0){this.logger.info(`destroy datachannel ${this.channelId}`),clearTimeout(this.chokeTimer),clearTimeout(this.connTimeout),this._notifyDownloadListenersAbort("upstream peer is closed");let r={event:e.DC_CLOSE,fatal:t};this.sendJson(r),this._datachannel.removeAllListeners(),this.removeAllListeners(),this._datachannel.destroy()}_handleBinaryMsg(t){const{attachments:r,reverse:i}=this.pieceMsg;this.listenerCount(e.DC_RESPONSE)>0&&this.bufArr.push(t),this._loadedBytes+=t.byteLength,this.remainAttachments--;let n=i?this.remainAttachments+1:r-this.remainAttachments;const s=0===this.remainAttachments;if(this.emit(e.DC_PIECE_DATA,this.bufSN,this.segId,t,n,s,this.pieceMsg),this.streamListeners.length>0)for(let e of this.streamListeners){const{handler:r}=e;r(this.bufSN,this.segId,!1,t,s)}if(s){if(this.streamListeners=[],this.timeSendRequest>0)if(this.super)this.weight=1;else{const e=this.expectedSize/(performance.now()-this.timeSendRequest);this.weight=this.weight>0?.6*this.weight+.4*e:e}this.sendJson({event:e.DC_PIECE_ACK,seg_id:this.segId,size:this.expectedSize,miss:this.miss||void 0}),this.timeSendRequest=0,this.timeReceivePiece=0,this._sendNextReq()||(this.downloading=!1),this._handleBinaryData(i)}}_sendNextReq(){if(this.sendReqQueue.length>0){const e=this.sendReqQueue.shift();return this.logger.info(`get msg from sendReqQueue ${JSON.stringify(e)}`),this._realRequestData(e),!0}return!1}_handlePlaylist(e){const{url:t,data:r,seq:i}=e;this.playlistMap.set(t,{data:r,seq:i})}getLatestPlaylist(e,t){if(!this.playlistMap.has(e))return null;const r=this.playlistMap.get(e);return r.seq<=t||r.seq>t+2?null:r}_handleMetadata(t){const{logger:r}=this;if(this.isInitiator){const e=performance.now()-this.timeSendRequest;e>0&&(this.weight=1e5/e,r.info(`handle Metadata from ${this.remotePeerId} initial weight ${this.weight}`)),this.timeSendRequest=0}const i=t.channel;if(this.channel!==i){const t=`peer channel ${i} not matched!`;return r.error(t),void this.emit(e.DC_ERROR,!0,t)}if(t.super){r.info(`got super peer ${this.remotePeerId}`),this.super=!0;const{token:i}=this.config;if(i&&t.token!==i)return void this.emit(e.DC_ERROR,!0,`super peer token ${t.token} not matched!`)}t.region&&(this.region=t.region);switch(t.platform){case e.DC_PLAT_ANDROID:this.platform=e.DC_PLAT_ANDROID;break;case e.DC_PLAT_IOS:this.platform=e.DC_PLAT_IOS;break;case e.DC_PLAT_WEB:this.platform=e.DC_PLAT_WEB}if(this.mobile=t.mobile||!1,this.mobileNet=t.mobile_net||!1,this.mobileWeb=this.mobile&&this.platform===e.DC_PLAT_WEB||!1,this.sequential=t.sequential,r.info(`${this.remotePeerId} platform ${this.platform} sequential ${this.sequential}`),t.peers&&(this.peersConnected+=t.peers,r.info(`${this.remotePeerId} now has ${this.peersConnected} peers`)),this.emit(e.DC_METADATA,t),t.field&&!this.config.live&&t.sequential){const{field:e}=t;if(Array.isArray(e))this._handleField(e);else for(let t in e)this._handleField(e[t])}}_handleField(e){e.forEach((e=>{e>=0&&(ethis.endSN&&(this.endSN=e))}))}_handleStats(e){this.gotStatsTs=g();const t=e.total_conns;t>0&&this.peersConnected!==t&&(this.peersConnected=t,this.logger.info(`${this.remotePeerId} now has ${this.peersConnected} peers`)),e.level&&(this.currentLevel=e.level),e.pos&&(this.currentPos=e.pos)}_handleRequestMsg(t){if(this.dataExchangeTs=g(),this.uploading)return this.logger.warn(`${this.remotePeerId} is uploading when receive request`),void this.sendPieceNotFound(t.sn,t.seg_id,{level:t.level});this.uploading=!0,this.emit(e.DC_REQUEST,t)}_handlePieceAck(t,r,i){0!==this.timeSendPiece&&(this.uploadSpeed=Math.round(r/(performance.now()-this.timeSendPiece)*2),this.timeSendPiece=0,this.logger.info(`${this.remotePeerId} uploadSpeed is ${this.uploadSpeed}`)),i>0&&this.logger.warn(`peer ${this.remotePeerId} miss ${i}`),this.bytesUploaded>0&&this.emit(e.DC_PIECE_ACK,{seg_id:t,size:r})}_prepareForBinary(e,t,r,i){this.bufArr=[],this._loadedBytes=0,this.remainAttachments=e,this.segId=t,this.bufSN=r,this.expectedSize=i}_handleBinaryData(t=!1){if(this.listenerCount(e.DC_RESPONSE)>0){t&&this.bufArr.reverse();let r=a.h.concat(this.bufArr);const i=r.byteLength;if(i===this.expectedSize){let t=r.buffer;const i=new z(this.bufSN,this.segId,t,this.remotePeerId,this.pieceMsg.level);this.emit(e.DC_RESPONSE,i,this.weight)}else this.logger.error(`${this.segId} expectedSize ${this.expectedSize} != byteLength ${i}`)}this.bufArr=[]}checkIfNeedChoke(e=!1){const{logger:t}=this,r=performance.now()-this.timeSendRequest;if((e||!(r<1e3))&&(this.miss++,t.info(`${this.remotePeerId} miss ${this.miss}`),this.miss>=3&&!this.choked)){this.choked=!0;const e=30*this.miss;e<=150?(t.warn(`datachannel ${this.channelId} is choked`),this.chokeTimer=setTimeout((()=>{this.choked=!1,t.warn(`datachannel ${this.channelId} is unchoked`)}),1e3*e)):t.warn(`datachannel ${this.channelId} is choked permanently`)}}get bufArrSize(){return this.downloading?this.pieceMsg.attachments-this.remainAttachments:0}loadtimeout(){const{logger:e,pieceMsg:t}=this;return e.warn(`timeout while downloading from ${this.remotePeerId}, ${this.bufArrSize} of ${t.attachments} packets loaded`),this.checkIfNeedChoke(),!0}sendMsgPieceAbort(t,r,i=!1){if(!i&&!this.uploading&&0===this.datasToSend.length)return;this.uploading=!1,this.datasToSend=[],this._handlePieceAck(r,this.bytesUploaded,0),this.bytesUploaded=0;const n={event:e.DC_PIECE_ABORT,reason:t};return this.sendJson(n)}loadedBytes(){return this._loadedBytes}currentLoadSpeed(){return 0===this.timeReceivePiece?0:this.loadedBytes()/(performance.now()-this.timeReceivePiece)}minRequiredSpeed(e){return(this.pieceMsg.size-this.loadedBytes())/e}}const Z=J,ee={DPlayer:"dplayer",CBPlayer:"cbplayer",jwplayer:"jwplayer",videojs:"videojs",Clappr:"clappr",ckplayer:"ckplayer",MediaElementPlayer:"mediaelement",MediaElement:"mediaelement",TcPlayer:"tcplayer",flowplayer:"flowplayer",Chimee:"chimee",ChimeePlayer:"chimee",HlsJsPlayer:"xgplayer",fluidPlayer:"fluidplayer",OpenPlayer:"openplayer",Plyr:"plyr",Playerjs:"playerjs",Aliplayer:"aliplayer",shaka:"shakaplayer",RadiantMP:"rmp",bitmovin:"bitmovin"};const te="nllL",re="d3NzJ",ie="==",ne="TNBLy9z",se="aWduY",ae="mNvbQ",oe="WwuY2RuY",le={[e.EXCEPTION]:"onException",serverConnected:"onServerConnected",peerId:"getPeerId",p2pDownloaded:"onP2pDownloaded",p2pUploaded:"onP2pUploaded",httpDownloaded:"onHttpDownloaded",bufferStalled:"onBufferStalled",peers:"getPeersInfo"};class he extends(s()){constructor(e={}){if(super(),this.p2pEnabled=!(!1===e.p2pEnabled||"0"===c("_p2p")),e.tag&&e.tag.length>20)throw new Error("Tag is too long");if(e.appName&&e.appName.length>30)throw new Error("appName is too long");if(e.appId&&e.appId.length>30)throw new Error("appId is too long");if(e.token&&e.token.length>20)throw new Error("Token is too long");this.segmentLoadCount=0,this.rangeTested=!1,this.playerName=function(){let e;for(let t in ee)if(self[t]){e=ee[t];break}return e}()}startRangeRequestTimer(){const{config:e,logger:t}=this,r=()=>{this.curTsUri&&function(e,t,r,i=2e3,n=!1){const s=new XMLHttpRequest;let a=e;return n&&(a=f(e,h,!0)),t=t||"bytes=0-0",new Promise(((n,o)=>{s.open("GET",a,!0),s.responseType="arraybuffer",s.timeout=i,s.onreadystatechange=e=>{if(4===s.readyState){const e=s.status;206===e||200===e&&t?n(s.response):o(`status ${e} url ${a} range ${t}`)}},s.onerror=e=>{o("request error")},s.ontimeout=e=>{o("timeout")},s.setRequestHeader("Range",t),r&&r(s,e),s.send()}))}(this.curTsUri,void 0,e.xhrSetup).then((()=>{e.httpRangeSupported=!0,clearTimeout(this.rangeRequestTimer)})).catch((i=>{e.httpRangeSupported=!1,t.warn(i),this.rangeRequestTimer=setTimeout(r,6e4)})).finally((()=>{t.info(`http range is${e.httpRangeSupported?"":" not"} supported`)}))};this.rangeRequestTimer=setTimeout(r,0)}initLogger(){const{config:e}=this;e.showSlogan&&"en"==("zh-CN"===(navigator.language||navigator.userLanguage)?"cn":"en")&&console.log(`%cLet the browsers become your unlimitedly scalable CDN!\n%c${self.atob("aHR0cHM6Ly9zd2FybWNsb3VkLm5ldA==")}`,"color: dodgerblue; padding:20px 0; font-size: x-large","font-size: medium; padding-bottom:15px");const t=new $(e.logLevel);return e.logger=this.logger=t,t}getExtraForStats(){return{}}getExtraForPeersRequest(){const e={};return e.num_want=this._getNumWant(),e}_getNumWant(){const{tracker:e}=this;if(!e.scheduler)return;const t=e.scheduler.peersNum;return t>0&&e.maxConnsActive-t>0?e.maxConnsActive-t:void 0}makeChannelId(e,t){if(!e||"string"!=typeof e){const e="token is required while using customized channelId!";throw console.error(e),new Error(e)}return A(t)?(r,i)=>`${e}-${t(r,i)}`:()=>`${e}-${t}`}makeSignalId(){let e="";const{config:t}=this,r=decodeURIComponent(self.atob(re+ne+se+oe+te+ae+ie));t.signalConfig&&(t.wsSignalerAddr=t.signalConfig);const{wsSignalerAddr:i}=t;if(i){let n;"object"==typeof i?(i.main||(i.main=r),n=i.main):"string"==typeof i&&(n=i,t.wsSignalerAddr={main:n}),n===r&&(n=void 0),n&&!t.wsSignalerAddr.backup&&(e=l().parseURL(n).netLoc.substring(2))}else t.wsSignalerAddr={main:r,byDefault:!0};return e}get commonBrowserInfo(){const e=Q().getPlatform(),t=Q().getNetType()||"wifi";this.netType=t;const{main:r,backup:i,byDefault:n}=this.config.wsSignalerAddr||{};return{signal:n?void 0:r,signal2:i,device:e,netType:t,player:this.playerName}}get isMobileNet(){return"wifi"!==this.netType&&"ethernet"!==this.netType}setupWindowListeners(e){const t=["iPad","iPhone"].indexOf(navigator.platform)>=0?"pagehide":"beforeunload",r=()=>{this.fetcher&&this.fetcher.postStatsWithBeacon(),this.p2pEnabled&&this.disableP2P(),self.removeEventListener(t,r)};e?self.removeEventListener(t,r):self.addEventListener(t,r)}destroy(){clearTimeout(this.rangeRequestTimer),this.disableP2P(!0),this.removeAllListeners(),this.setupWindowListeners(!0)}enableP2P(){return this.p2pEnabled?null:(this.logger&&this.logger.info("enable P2P"),this.config.p2pEnabled=this.p2pEnabled=!0,this.browserInfo?(this._init(this.channel,this.browserInfo),this):null)}get version(){return he.version}static isSupported(){const e=v();return!(!e||void 0===e.RTCPeerConnection.prototype.createDataChannel)}static get TrackerZone(){return{EU:"eu",HK:"hk",USA:"us",CN:"cn"}}determineHttpLoadTime(e,t,r){this.logger&&this.logger.info(`segments in playlist: ${e.length}, targetDuration: ${t} startSN ${r}`);let i=3.5;return t<=2?i=1:t<=3?i=1.5:t<=4?i=2:t<=6?i=2.5:t<=8&&(i=3),i}emitEvent(e,...t){this.emit(e,...t);const r=le[e];r&&A(this.config[r])&&this.config[r](...t)}}he.version="2.12.15",he.protocolVersion=Z.VERSION;const ue=he;function de(){if(!function(){if("object"==typeof self)return self.ManagedMediaSource||self.MediaSource||self.WebKitMediaSource}())return!1;const e=self.SourceBuffer||self.WebKitSourceBuffer;return!e||e.prototype&&"function"==typeof e.prototype.appendBuffer&&"function"==typeof e.prototype.remove}function ce(e,t){let r;if(e&&("string"==typeof e?(r=document.querySelector(e),fe(r)||(r=function(e){const t=document.getElementById(e);if(fe(t))return t;const r=t.getElementsByTagName("*");for(let e=0;ee.src===t))),r||(r=e.find((e=>e.currentTime>0))))}return r}function fe(e){if(!e)return null;const t=e.tagName.toLowerCase();return"video"===t||"audio"===t}function ge(e,t,r,i=0,n=0){const s=u;let a=i,o=n||r-1;const l=Math.floor(r/s),h=r%s>0?l+1:l;if(e>=0&&(a+=(e+1)*s),t>=0&&t{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>r(e.error)})),r=(i=Te,n="indexedDB timeout",new Promise(((e,t)=>setTimeout((()=>{t(n)}),i))));var i,n;return Promise.race([t,r])}function Le(e,t){return t?t("readonly",(t=>_e(t.get(e)))):Promise.reject(Se)}function be(e,t,r){return r?r("readwrite",(r=>(r.put(t,e),_e(r.transaction)))):Promise.reject(Se)}function Re(e,t){return t?t("readwrite",(t=>(t.delete(e),_e(t.transaction)))):Promise.reject(Se)}function Ae(e){return e?e("readwrite",(e=>(e.clear(),_e(e.transaction)))):Promise.reject(Se)}function we(e,t){return e.openCursor().onsuccess=function(){this.result&&(t(this.result),this.result.continue())},_e(e.transaction)}const Pe="size";class Ie extends(s()){constructor(e,t){super(),this.name="SegmentStore",this.logger=t.logger,this.logger.info(`use ${this.name}`),this.engine=e,this.channel=e.channel;const r=e.browserInfo.device;this.isPC=r===Q().device.PC_WEB||r===Q().device.PC_NATIVE,this.maxBufSize=this.isPC?t.diskCacheLimit.pc:t.diskCacheLimit.mobile,this.overflowed=!1,this.countErrors=0,this.isCleared=!0,this.destroyed=!1}async setupStore(){if(navigator.storage&&navigator.storage.estimate){const e=await navigator.storage.estimate(),t=Math.floor(e.quota-e.usage);t{if(this.isPC&&this.maxBufSize<419430400||!this.isPC&&this.maxBufSize<104857600)return void t("disk storage not enough");const r=this.stores;let i;try{i=function(e,t){const r=indexedDB.open(e);r.onupgradeneeded=()=>{const e=r.result;t.forEach((t=>{e.createObjectStore(t)}))};const i=_e(r);return t.map((e=>(t,r)=>i.then((i=>r(i.transaction(e,t).objectStore(e))))))}(this.channel,r)}catch(e){return void t(e)}this._createStores(i),this._initMetaStore().then(e).catch(t)}))}_initMetaStore(){return be(Pe,0,this.metaStore)}currBufSize(){return new Promise((async(e,t)=>{try{const r=await Le(Pe,this.metaStore);if(isNaN(r))return void t("size is NaN");e(r)}catch(e){t(e)}}))}async putSeg(t){if(this.destroyed)return;this.isCleared=!1;const{logger:r}=this;if(_(t.data))return new Promise((i=>{this._addSeg(t).then((t=>{this._onSegPut(t),this.emit(e.BM_SEG_ADDED,t),i()})).catch((t=>{this._handleFataError(),t&&(r.warn(`putSeg ${t}`),("QuotaExceededError"===t.name||t.inner&&"QuotaExceededError"===t.inner.name)&&this.currBufSize().then((e=>{this._trimDisk(e,!0)})).catch((t=>{this.logger.error(`putSeg ${t}`),this.engine.emit(e.BM_FATAL_ERROR)}))),i()}))}));r.error(`putSeg ${t.segId} is not buffer`)}_handleFataError(){this.countErrors++,this.countErrors>=3&&(this.engine.emit(e.BM_FATAL_ERROR),this.countErrors=0)}_decreaseBufSize(e){this.currBufSize().then((t=>{t&&be(Pe,t-e,this.metaStore)})).catch((e=>{this.logger.warn(`decreaseBufSize ${e}`)}))}_increaseBufSize(t){this.destroyed||this.currBufSize().then((e=>{be(Pe,e+t,this.metaStore),this._trimDisk(e+t)})).catch((t=>{this.logger.warn(`increaseBufSize ${t}`),this.engine.emit(e.BM_FATAL_ERROR)}))}clear(e=!1){if(!this.isCleared){this.logger.warn("clear segment store");try{this._clearDisk(e)}catch(e){}this.isCleared=!0}}_clearDisk(e){Ae(this.segmentsStore),e?this._initMetaStore():Ae(this.metaStore),this.overflowed=!1}destroy(){this.clear(),this.removeAllListeners(),this.destroyed=!0}}const Ce=Ie;const ke=class extends Ce{constructor(e,t){super(e,t),this.loadingSN=-1,this.stores=["segments","id2Sn","metadata"]}_createStores(e){this.segmentsStore=e[0],this.id2SnStore=e[1],this.metaStore=e[2]}async hasSegOfId(e){if(!e)return Promise.resolve(!1);let t;try{t=await Le(e,this.id2SnStore)}catch(e){return Promise.resolve(!1)}return new Promise((r=>{void 0!==t?Le(t,this.segmentsStore).then((t=>{t&&t.length>0&&t.some((t=>t.segId===e))?r(!0):r(!1)})).catch((e=>{this.logger.warn(`hasSegOfId ${e}`),r(!1)})):r(!1)}))}async getSegById(e){if(!e)return null;const{logger:t}=this;let r;try{r=await Le(e,this.id2SnStore)}catch(e){return null}return new Promise((i=>{void 0!==r?Le(r,this.segmentsStore).then((r=>{if(r&&r.length>0){const n=r.find((t=>t.segId===e));if(!n)return void i(null);if(!_(n.data))return t.error(`getSegById ${n.sn} is not buffer`),void i(null);i(z.fromSegment(n))}else i(null)})).catch((e=>{t.warn(`getSegById ${e}`),this._handleFataError(),i(null)})):i(null)}))}getSegIdBySN(e){return new Promise((t=>{Le(e,this.segmentsStore).then((e=>{e&&e.length>0?t(e[0].segId):t(null)})).catch((e=>{this.logger.warn(`getSegIdBySN ${e}`),t(null)}))}))}_addSeg(e){const{segId:t,sn:r,size:i}=e;return be(t,r,this.id2SnStore),new Promise(((n,s)=>{Le(r,this.segmentsStore).then((a=>{a?0===a.filter((e=>e.segId===t)).length?(a.push(this._segmentToCache(e)),be(r,a,this.segmentsStore).then((()=>{this._increaseBufSize(i),n(e)})).catch((e=>{s(e)}))):n(e):be(r,[this._segmentToCache(e)],this.segmentsStore).then((()=>{this._increaseBufSize(i),n(e)})).catch((e=>{s(e)}))})).catch((e=>{s(e)}))}))}async _trimDisk(t,r=!1){if(this.isCleared||this.destroyed)return;let i=this.maxBufSize;const{logger:n}=this;var s;(r&&(i=t-104857600,i<0&&(i=0)),t{if(e.getAllKeys)return _e(e.getAllKeys());const t=[];return we(e,(e=>t.push(e.key))).then((()=>t))})):Promise.reject(Se)).then((async r=>{const s=r.sort(((e,t)=>e-t));let a=0;do{if(a++>10){n.warn("too much loops in SegmentStore");break}const r=s.shift();if(void 0===r){n.warn("lastSN not found");continue}if(r>=this.loadingSN){n.warn(`trimDisk failed, loadingSN ${this.loadingSN}`);break}const i=s[0],o=await Le(r,this.segmentsStore);if(!o){n.warn("lastSeg not found");continue}let l=0;o.forEach((e=>{l+=e.data.byteLength})),Re(r,this.segmentsStore).then((()=>{this._decreaseBufSize(parseInt(l))})),o.forEach((t=>{Re(t.segId,this.id2SnStore),n.info(`pop seg ${t.segId} size ${t.data.byteLength}`),this.emit(e.BM_LOST,{sn:r,segId:t.segId,next:i,level:t.level})})),t-=l,n.info(`pop sn ${r} size ${l} currBufSize ${t}`),this.overflowed||(this.overflowed=!0)}while(t>=i)})))}_segmentToCache(e){return{data:e.data,level:e.level,segId:e.segId,sn:e.sn}}_onSegPut(t){this.emit(`${e.BM_ADDED_SN_}${t.sn}`,t)}_clearDisk(e){try{super._clearDisk(e)}catch(e){}Ae(this.id2SnStore).catch((e=>{}))}};class De extends(s()){constructor(e,t){super(),this.name="SegmentCache",this.logger=t.logger,this.logger.info(`use ${this.name}`);const r=e.browserInfo.device;if(this.maxBufSize=r===Q().device.PC_WEB||r===Q().device.PC_NATIVE?t.memoryCacheLimit.pc:t.memoryCacheLimit.mobile,this.isLive=t.live,this.isLive)this.maxBufSize=47185920;else{if(0===this.maxBufSize)throw new Error("cannot use SegmentCache");const e=function(){const{memory:e}=performance;return e?e.jsHeapSizeLimit-e.usedJSHeapSize:-1}();e>=0&&e{t.forEach((t=>{e+=t.size}))})),e}async putSeg(e){this.destroyed||(this.isCleared=!1,this._currBufSize>=1.5*this.maxBufSize&&(this._currBufSize=this._calSegPoolSize(),this._currBufSize>=1.5*this.maxBufSize&&(this.clear(),this.overflowed=!1)),_(e.data)?this._addSeg(e):this.logger.error(`putSeg ${e.segId} is not buffer`))}clear(){this.isCleared||(this.logger.warn("clear segment cache"),this._segPool.clear(),this._currBufSize=0,this.isCleared=!0,this.overflowed=!1)}destroy(){this.clear(),this.removeAllListeners(),this.destroyed=!0}}const Me=De;const xe=class extends Me{constructor(e,t){super(e,t),this.id2Sn=new Map,this.loadingSN=-1}hasSegOfId(e){return new Promise(((t,r)=>{const i=this.id2Sn.get(e);this._segPool.has(i)?t(this._segPool.get(i).some((t=>t.segId===e))):t(!1)}))}getSegById(e){const t=this.id2Sn.get(e);return new Promise(((r,i)=>{if(!this._segPool.has(t))return void r(null);r(this._segPool.get(t).find((t=>t.segId===e)))}))}getSegIdBySN(e){return new Promise(((t,r)=>{if(this._segPool.has(e)){t(this._segPool.get(e)[0].segId)}else t(null)}))}_addSeg(t){const{logger:r}=this,{segId:i,sn:n,size:s}=t;if(this.id2Sn.set(i,n),this._segPool.has(n)){this._segPool.get(n).push(t)}else this._segPool.set(n,[t]);this._currBufSize+=parseInt(s);const a=this._segPool.size;if(this.emit(`${e.BM_ADDED_SN_}${t.sn}`,t),this.emit(e.BM_SEG_ADDED,t),this._currBufSizee-t)));let l=0;do{if(l++>10){r.error("too much loops in SegmentCache");break}const t=o.shift();if(void 0===t){r.error("lastSN not found");continue}const i=o[0],n=this._segPool.get(t);if(!n){r.error("lastSeg not found");continue}let s=0;n.forEach((e=>{s+=e.size})),this._currBufSize-=parseInt(s),this._segPool.delete(t),n.forEach((r=>{this.id2Sn.delete(r.segId),this.emit(e.BM_LOST,{sn:t,segId:r.segId,next:i,level:r.level})})),r.info(`pop sn ${t} size ${s} currBufSize ${this._currBufSize}`),this.overflowed||(this.overflowed=!0)}while(this._currBufSize>=this.maxBufSize&&this._segPool.size>5)}clear(){super.clear(),this.id2Sn.clear()}};var Oe=r(832),Fe=r.n(Oe);function Ne(e,t){for(const r in t)Object.defineProperty(e,r,{value:t[r],enumerable:!0,configurable:!0});return e}const Be=function(e,t,r){if(!e||"string"==typeof e)throw new TypeError("Please pass an Error to err-code");r||(r={}),"object"==typeof t&&(r=t,t=void 0),null!=t&&(r.code=t);try{return Ne(e,r)}catch(t){r.message=e.message,r.stack=e.stack;const i=function(){};return i.prototype=Object.create(Object.getPrototypeOf(e)),Ne(new i,r)}};class Ue{constructor(){this.p2p=0,this.share=0,this.http=0}recordP2p(e){this.p2p+=e}recordShare(e){this.share+=e}recordHttp(e){this.http+=e}resetTraffic(){this.p2p=0,this.share=0,this.http=0}get healthRatio(){if(0===this.http)return 1e3;let e=Math.round((this.p2p+this.share)/this.http*100);return e<=0&&(e=1),e}}const Ge="SW_GEOIP_KEY",He=2592e5,$e=432e5,Ke="TRACKER_EXPT",We="IPAPI_ERROR",Ve="ZXU",qe="uY2R",je="LmNv",Ye="uYnll",ze="bQ==",Xe="Z3o",Qe="aGsuc3d",Je="hcm1j",Ze="bG91ZC",et="5uZXQ=",tt=Symbol("httpDownloaded"),rt=Symbol("p2pDownloaded"),it=Symbol("p2pUploaded");class nt extends(s()){constructor(e,t,r,i,n){let s;super(),this.config=e.config;let a=this.config.announceLocation;switch(this.config.trackerZone&&(a=this.config.trackerZone),a){case"hk":s=Qe+Je+Ze+et;break;case"us":s="dXMuaGR0dmNsb3VkLmNvbQ==";break;case"cn":s=Xe+qe+Ye+je+ze;break;default:s=Ve+qe+Ye+je+ze}this.engine=e,this.key=t||void 0,this.baseUrl=i||`https://${self.atob(s)}/v1`,this.channelId=self.btoa(r),this.timestamp=g(),this.health=new Ue;const o=l().parseURL(this.baseUrl).netLoc;this.announce=o.replace(/\/\//,""),function(e,t){function r(e,t,r,i,n){return h(r-219,n)}var i,n,s=e();function a(e,t,r,i,n){return h(n- -994,e)}function o(e,t,r,i,n){return h(i-233,t)}function l(e,t,r,i,n){return h(n-305,r)}for(;;)try{if(156690===-parseInt(o(0,246,0,247))/1*(-parseInt(o(0,243,0,248))/2)+-parseInt(o(0,238,0,245))/3+parseInt(a(-1e3,0,0,0,-989))/4*(-parseInt(r(0,0,225,0,216))/5)+-parseInt((i=-180,n=-173,h(n- -181,i)))/6*(parseInt(l(0,0,324,0,324))/7)+-parseInt(a(-991,0,0,0,-990))/8*(parseInt(l(0,0,313,0,307))/9)+-parseInt(l(0,0,310,0,305))/10+-parseInt(a(-968,0,0,0,-974))/11*(-parseInt(r(0,0,226,0,216))/12))break;s.push(s.shift())}catch(e){s.push(s.shift())}}(d);function h(e,t){var r=d();return(h=function(e,t){return r[e-=0]})(e,t)}const u=function(e,t,r,i,n,s){let a=location.hostname;a===h(-922- -923,-915)&&s&&(a=s+"."+a);return 13,Fe()(a+"2.12.15"+r+i+n,e).substr(0,8)}(this.timestamp,0,this.announce,this.channelId,n.type,this.key);function d(){var e=["13055AgbnUs","2739cfXSxI","CxYEuy093515".split("").reverse().join(""),"localhost","OCXDId9".split("").reverse().join(""),"yek".split("").reverse().join(""),"QyapiZ8635101".split("").reverse().join(""),"scRrUF02".split("").reverse().join(""),"bNcslL58187".split("").reverse().join(""),"QEbZrW65772".split("").reverse().join(""),"12gYmKGR","emantsoh".split("").reverse().join(""),"dIlennahc".split("").reverse().join(""),"pmatsemit".split("").reverse().join(""),"676614MZdLCs","type","hpNRbU1".split("").reverse().join(""),"133332xoUKrS","announce","lmia","substr"];return(d=function(){return e})()}h(895-878,886),this.native=!!n.bundle,this.announceInfo={...n,channel:this.channelId,ts:this.timestamp,version:"2.12.15",v:u,announce:this.announce,k:lt(this.key)},this.announceURL=`${this.baseUrl}/channel`,this.reportFails=0,this.statsRequesting=!1,this.forbidden=!1,this.failConns=0,this.totalHTTPDownloaded=0,this.totalP2PDownloaded=0,this.totalP2PUploaded=0,this[tt]=0,this[rt]=0,this[it]=0,this.speed=0,this.offline=!1,this.errsBufStalled=0,this.mediaRequests=0,this.errsInternalExpt=0}geoipRequest(){const{logger:e}=this.engine;return new Promise(((t,r)=>{if((e=>{const t=localStorage.getItem(e);try{const e=JSON.parse(t);return!(!e.duration||!e.startTime)&&Date.now()-e.startTimee.json())).then((e=>{if("success"!==e.status){const t=new Error(`preflight status ${e.status}`);throw Be(t,We)}{const r=e.mobile?$e:He;G(Ge,e,r),t(e)}})).catch((e=>{r(e)}))}))}btAnnouncePreflight(){const{logger:e}=this.engine;return this.announceInfo.asn?this.btAnnounce():(e.info("preflight ip-api"),Promise.race([this.geoipRequest(),new Promise(((e,t)=>{setTimeout((()=>{t(Be(new Error("request timeout"),We))}),600)}))]).then((e=>(this._parseGeoResponse(e),this.btAnnounce()))).catch((t=>{if(t.code!==Ke){const t=U(Ge);return t&&(e.info("use expired ipData"),this._parseGeoResponse(t)),this.btAnnounce()}throw t})))}_parseGeoResponse(e){const{lat:t,lon:r,isp:i,as:n,mobile:s,countryCode:a,continentCode:o}=e;s&&(this.announceInfo.netType="cellular");const l=n.split(" ")[0].substr(2);this.announceInfo={...this.announceInfo,lat:t,lon:r,isp:i,asn:l,country:a}}btAnnounce(){const{logger:e}=this.engine;return new Promise(((t,r)=>{fetch(this.announceURL,{headers:this._requestHeader,method:"POST",body:JSON.stringify(this.announceInfo)}).then((e=>{if(!e.ok){const t=e.status>=500&&e.status<600;throw Be(new Error(`server response code is ${e.status}`),Ke,{retry:t})}return e.json()})).then((e=>{if(!this.engine)throw Be(new Error("runtime error"),Ke,{retry:!1});const r=e.data;if(r.f&&(this.forbidden=!0),-1===e.ret){const{code:t,msg:r}=e.data;throw Be(new Error(r),Ke,{retry:t>=5e3})}if(r.info&&console.info(`${r.info}`),r.warn&&console.warn(`${r.warn}`),r.min_conns||(r.min_conns=8),(!r.rejected||r.rejected&&r.share_only)&&r.id&&r.report_interval&&r.peers){if(this.peerId=this.id=r.id,r.report_interval<20&&(r.report_interval=20),this.btStats(r.report_interval),this.getPeersURL=`${this.baseUrl}/channel/${this.channelId}/node/${this.peerId}/peers`,this.statsURL=`${this.baseUrl}/channel/${this.channelId}/node/${this.peerId}/stats`,!this.announceInfo.asn&&r.asn){const{country:e,asn:t,mobile:i,isp:n,lat:s,lon:a}=r;this.announceInfo={...this.announceInfo,country:e,asn:t},G(Ge,{countryCode:e,as:`AS${t}`,mobile:i,isp:n,lat:s,lon:a,status:"success"},i?$e:He)}t(r)}else this.engine&&(this.engine.p2pEnabled=!1)})).catch((t=>{e.error(`btAnnounce error ${t}`);const i=t.code||Ke,n=!t.code||t.retry;r(Be(t,i,{retry:n}))}))}))}btStats(e=10){this.heartbeater=setInterval((()=>{this.postStats()}),1e3*e)}postStatsWithBeacon(){if(this.offline)return;this.offline=!0;let e={off:!0};this.statsRequesting||(e={...e,...this._makeStatsBody()}),this.statsURL&&navigator.sendBeacon&&navigator.sendBeacon(this.statsURL,JSON.stringify(e))}postStats(){const{logger:t}=this.engine;this.statsRequesting=!0,fetch(this.statsURL,{method:"POST",body:JSON.stringify(this._makeStatsBody())}).then((e=>(this.statsRequesting=!1,this.reportFails=0,e.text()))).then((r=>{let i;if(i=r?JSON.parse(r):{ret:0,data:{}},-1===i.ret)clearInterval(this.heartbeater),t.error(`${i.data.msg} code ${i.data.code}`),this.engine.emit(e.RESTART_P2P);else{const{http:e=0,p2p:t=0,share:r=0,failConns:i=0,rebuffers:n=0,requests:s=0,errsInternalExpt:a=0}=this.lastStats||{};this[tt]>=e&&(this[tt]-=e),this[rt]>=t&&(this[rt]-=t),this[it]>=r&&(this[it]-=r),this.failConns>=i&&(this.failConns-=i),this.errsBufStalled>=n&&(this.errsBufStalled-=n),this.mediaRequests>=s&&(this.mediaRequests-=s),this.errsInternalExpt>=a&&(this.errsInternalExpt-=a),this.exptMsg&&(this.exptMsg=void 0)}})).catch((e=>{t.error(`btStats error ${e}`),this.statsRequesting=!1,this.reportFails++,this.reportFails>=3&&clearInterval(this.heartbeater)}))}btGetPeers(e,t=!1){const{logger:r}=this.engine,{asn:i,country:n}=this.announceInfo;let s={exclusions:e,asn:i,country:n,ratio:this.health.healthRatio,urgent:t||void 0},a={};return this.engine.getExtraForPeersRequest&&(a=this.engine.getExtraForPeersRequest()),s=Object.assign({},s,a),new Promise(((e,t)=>{this.reportFails>=3?t(new Error("reportFails >= 3")):fetch(this.getPeersURL,{headers:this._requestHeader,method:"POST",body:JSON.stringify(s)}).then((e=>e.json())).then((r=>{-1===r.ret?t(r.data.msg):e(r.data)})).catch((e=>{r.error(`btGetPeers error ${e}`),t(e)})).finally((()=>{this.health.resetTraffic()}))}))}increFailConns(){this.failConns++}increRebuffers(){this.engine.emitEvent("bufferStalled"),this.errsBufStalled++}increMediaRequests(){this.mediaRequests++,this.engine.emit(e.MEDIA_REBUFFER,this.errsBufStalled>=2)}reportFlow(e){const t=Math.round(e/1024);this.engine.emitEvent("httpDownloaded",t),this[tt]+=t,this.totalHTTPDownloaded+=t,this.health.recordHttp(t),this._emitStats()}reportDCTraffic(e,t){const r=Math.round(e/1024);this[rt]+=r,this.totalP2PDownloaded+=r,this.health.recordP2p(r),this.speed=Math.round(t),this.engine.emitEvent("p2pDownloaded",r,this.speed),this._emitStats()}reportUploaded(e=0){const t=Math.round(e/1024);this.engine.emitEvent("p2pUploaded",t),this.totalP2PUploaded+=t,this.health.recordShare(t),this[it]+=t,this._emitStats()}destroy(){const{logger:e}=this.engine;e.warn("destroy fetcher"),this.removeAllListeners(),clearInterval(this.heartbeater)}_emitStats(){const{totalHTTPDownloaded:e,totalP2PDownloaded:t,totalP2PUploaded:r}=this;this.engine.emit("stats",{totalHTTPDownloaded:e,totalP2PDownloaded:t,totalP2PUploaded:r,p2pDownloadSpeed:this.speed});const{getStats:i}=this.config;A(i)&&i(t,r,e,this.speed)}_makeStatsBody(){const{asn:e,country:t}=this.announceInfo;let r={totalConns:this.engine.tracker.totalConns,failConns:this.failConns,rebuffers:this.errsBufStalled||void 0,requests:this.mediaRequests||void 0,errsInternalExpt:this.errsInternalExpt,http:Math.round(this[tt])||0,p2p:Math.round(this[rt])||0,share:Math.round(this[it])||0,asn:e,country:t},i={};this.engine.getExtraForStats&&(i=this.engine.getExtraForStats()),r=Object.assign({},r,i),this.lastStats=JSON.parse(JSON.stringify(r)),Object.keys(r).forEach((e=>{0===r[e]&&delete r[e]}));const{logger:n}=this.engine;return n.isDebugLevel&&n.info(`report ${JSON.stringify(r)}`),this.exptMsg&&(r.exptMsg="2.12.15 "+this.exptMsg),r}get _requestHeader(){let e={};return this.native&&(e={...e,"X-SW-Key":lt(this.key),"User-Agent":"electron","X-SW-ID":this.announceInfo.bundle}),e}}const st=nt;function at(e,t){const r=ot();return(at=function(e,t){return r[e-=0]})(e,t)}function ot(){const e=["CsLPpZ8932212".split("").reverse().join(""),"htgnel".split("").reverse().join(""),"UZpUzY5895021".split("").reverse().join(""),"yJZuxA9452121".split("").reverse().join(""),"tAedoCrahc".split("").reverse().join(""),"btoa","q#{this._longPolling()}))}_hello(e){fetch(this.addr+"&hello",{method:"POST"}).then((e=>{if(!e.ok)throw new Error("hello response was not ok");return e.json()})).then((t=>{this.connected=!0,e(),this.onopen&&this.onopen(t.ver)})).catch((e=>{this.closed=!0,this.onerror&&this.onerror(e)}))}send(e){this.msgQueue.push(e),this.posting||this._realSend([...this.msgQueue])}_realSend(e){0!==e.length&&(this.posting=!0,this.msgQueue=[],fetch(this.addr,{method:"POST",body:JSON.stringify(e)}).then((()=>{this.posting=!1,this.msgQueue.length>0&&this._realSend([...this.msgQueue])})).catch((e=>{this.logger.error(e),this.posting=!1})))}close(){this.connected&&(this.closed=!0,this.connected=!1,this.abortController&&(this.abortController.abort(),this.abortController=null),this.onclose&&this.onclose())}destroy(){this.close(),this.removeAllListeners()}_longPolling(){if(this.closed)return;this.abortController=new AbortController;const e=this.abortController.signal;fetch(this.addr,{signal:e}).then((e=>{if(!e.ok)throw new Error("polling response was not ok");return e.text()})).then((e=>{e&&this.onmessage&&this.onmessage(JSON.parse(e)),this.retryCount=0,this._longPolling()})).catch((e=>{this.connected&&(this.retryCount<=3?(this.retryCount++,this._longPolling()):(this.connected=!1,this.onerror&&this.onerror(e)))}))}}const ut=class{constructor(e,t,r,i="main"){this.logger=e,this.config=t,this.wsAddr=r,this.serverVersion=0,this.pingInterval=95e3,this.name=i,this.normalClosed=!1,this.lastSendTs=performance.now(),this.pollingClient=new ht(e,r);try{this._ws=this._init()}catch(t){e.error(t),this._startPolling()}}get batchSupported(){return this.serverVersion>=50}_init(){const e={maxRetries:this.config.wsMaxRetries,minReconnectionDelay:p(15e3,6e4),maxReconnectionDelay:6e5,maxEnqueuedMessages:20,connectionTimeout:7e3};let t=new F(this.wsAddr,void 0,e);return t.addEventListener("open",(()=>{this.logger.info(`signal ${this.name} ${this.wsAddr} connection opened`),this.normalClosed=!1,this.pollingClient.connected?this.pollingClient.close():this.onopen&&this.onopen(),this._startPing(this.pingInterval)})),t.push=t.send,t.send=e=>{this.lastSendTs=performance.now();let r=JSON.stringify(e);t.push(r)},t.addEventListener("message",(e=>{let t=e.data;const r=JSON.parse(t),i=r.action;if("pong"!==i){if("ver"!==i)return"close"===i?(this.logger.warn(`server close signal ${this.name} reason ${r.reason}`),void this.close()):void(this.onmessage&&this.onmessage(r,this.name));this.serverVersion=r.ver}else clearTimeout(this.pongTimer)})),t.addEventListener("close",(e=>{this.logger.warn(`signal ${this.name} ${this.wsAddr} closed ${e.code} ${e.reason}`),e.code>=5e3||e.code<4e3?(this.onclose&&this.onclose(),this._stopPing()):this.close()})),t.addEventListener("error",(e=>{this._stopPing(),this.onerror&&this.onerror(e),this._startPolling()})),t}forcePolling(){this.pollingClient.connected||(this.close(),this.pollingClient=new ht(this.logger,this.wsAddr),this._startPolling())}_startPolling(){this.pollingClient.connected||(this.logger.info(`${this.name} start polling`),this.pollingClient.start(),this._setupPolling(this.pollingClient))}sendDebug(e,t,r){this._send({action:"debug",details:t,ping:r||void 0,to:e})}sendSignal(e,t){const r={action:"signal",to:e,data:t};this._send(r)}sendSignalBatch(e,t){if(this.batchSupported&&t.length>1)this._send({action:"signals",to:e,data:t});else for(let r of t)this.sendSignal(e,r)}sendReject(e,t,r){if(this.rejectIdCache===e)return;this.rejectIdCache=e;const i={action:"reject",to:e,reason:t,fatal:r};this._send(i)}_send(e){this.pollingClient.connected?this.pollingClient.send(e):this._ws&&this._ws.send(e)}_startPing(e){this.connected&&(this.pingTimer=setTimeout((()=>{const e=95e3-(performance.now()-this.lastSendTs);if(e>=0)return this._startPing(e);const t={action:"ping"};this._ws&&this._ws.push(JSON.stringify(t)),this.pongTimer=setTimeout((()=>{this.logger.warn(`signal ${this.name} wait for pong timeout, reconnect`),this.close(),this.reconnect()}),15e3),this._startPing(this.pingInterval)}),e))}_stopPing(){clearTimeout(this.pingTimer),clearTimeout(this.pongTimer)}close(){this.logger.info(`close signal ${this.name}`),this._stopPing(),(()=>{this._ws&&this._ws.close(1e3)})(),this.pollingClient.close(),this.normalClosed=!0}reconnect(){this._ws&&(this.logger.info(`reconnect signal ${this.name}`),this._ws.reconnect())}destroy(){this.close(),this._ws=null,this.pollingClient.destroy()}get connected(){return!!this.pollingClient.connected||this._connected}get _connected(){return!!this._ws&&this._ws.readyState===F.OPEN}_setupPolling(e){e.onopen=e=>{e&&(this.serverVersion=e),this.logger.info(`${this.name} polling opened`),this.onopen&&this.onopen()},e.onerror=e=>{this._connected||this.onerror&&this.onerror(e)},e.onclose=()=>{this._connected||this.onclose&&this.onclose()},e.onmessage=e=>{if(this.onmessage)for(let t of e)this.onmessage(t,this.name)}}},dt=class{constructor(e,t,r,i){this.logger=e,this.config=t,this.mainAddr=r,this.backupAddr=i,this.mainWS=this._init(r),this.backupTimer=setTimeout((()=>{this.destroyed||(this.backupWS=this._init(i,"backup"))}),900),this._connected=!1,this.destroyed=!1,this.normalClosed=!1}_init(e,t){if(!e)return null;let r=new ut(this.logger,this.config,e,t);return r.onopen=()=>{this.normalClosed=!1,!this._connected&&this.onopen&&(this._connected=!0,this.onopen())},r.onmessage=e=>{this.onmessage&&this.onmessage(e,r.name)},r.onclose=()=>{this._connected&&!this.connected&&this.onclose&&(this._connected=!1,this.onclose())},r.onerror=e=>{this.onerror&&this.onerror(e)},r}sendSignalBatch(e,t,r){if(r){const i=this._getWSByName(r);i&&i.sendSignalBatch(e,t)}else this.mainConnected?this.mainWS.sendSignalBatch(e,t):this.backupConnected&&this.backupWS.sendSignalBatch(e,t)}sendSignal(e,t,r){this.sendSignalBatch(e,[t],r)}sendReject(e,t,r,i){if(i){const n=this._getWSByName(i);if(n)return void n.sendReject(e,t,r)}this.mainConnected?this.mainWS.sendReject(e,t,r):this.backupConnected?this.backupWS.sendReject(e,t,r):this.logger.warn("no signal available, send reject failed")}sendDebug(e,t,r){this.mainConnected&&this.mainWS.sendDebug(e,t,r)}close(){this.mainWS&&this.mainWS.close(),this.backupWS&&this.backupWS.close(),this.normalClosed=!0}_getWSByName(e){return this.mainWS&&this.mainWS.name===e?this.mainWS:this.backupWS&&this.backupWS.name===e?this.backupWS:null}reconnect(e){this.mainWS&&"backup"!==e&&this.mainWS.reconnect(),this.backupWS&&"main"!==e&&this.backupWS.reconnect()}forcePolling(e){this.mainWS&&"backup"!==e&&this.mainWS.forcePolling(),this.backupWS&&"main"!==e&&this.backupWS.forcePolling()}destroy(){this.close(),clearTimeout(this.backupTimer),this.mainWS=null,this.backupWS=null,this.destroyed=!0}get connected(){return this.mainConnected||this.backupConnected}get mainConnected(){return this.mainWS&&this.mainWS.connected}get backupConnected(){return this.backupWS&&this.backupWS.connected}};const ct=function(e,t,r=40){var i=null,n=!1,s=r;return function(r=!1){if(r)return clearTimeout(i),void(n=!1);n||(n=!0,i=setTimeout((function(){e.call(t,s),n=!1,i=null}),1e3*s),s*=1.1)}};class ft{constructor(e,t,r=10){this.engine=e,this.config=t,this.trickle=t.trickleICE,this.poolSize=r,this.pool=[],t.ICEPreflight&&this.reset(),this.trickle=!1}reset(){this.destroy();for(let e=0;e0}getPeer(){if(0===this.pool.length)return this._createPeer();const e=this.pool.shift();return this.pool.length<5&&this.pool.push(this._createPeer()),e}destroy(){for(let e of this.pool)e.destroy(!0);this.pool=[]}}const gt=class{static CHARSET="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";static BITS_PER_BYTE=8;static BITS_PER_BASE64_CHAR=6;static decode(e){let t=0,r=0,i="";for(const n of e){if("="===n)break;const e=this.CHARSET.indexOf(n);for(t=t<=this.BITS_PER_BYTE;){r-=this.BITS_PER_BYTE;i+=(t>>r&(1<(e.startsWith("C")&&(e="candidate:"+e.slice(1)),e.split(" ").map((e=>(e in Lt&&(e=Lt[e]),e))).join(" "));function Pt(e,t){let r=e.split("~"),i=[];r=r.map((e=>{let t=e.slice(0,1),r=e.slice(1);if(t in St&&(t=St[t]),"a="===t){let e=r.slice(0,1);const t=r.slice(1);e in Tt&&(e=Tt[e],r=e+t)}return t+r})),i.push("v=0"),i.push("s=-"),i.push("t=0 0"),i.push("a=msid-semantic: WMS");let n=0;r.forEach((e=>{if(e.startsWith("o=")){let t=e.slice(2).split(" "),r=[];r.push("-");const n=t.shift();if(n&&r.push(n),0===t.length)r.push("2 IN IP4 127.0.0.1");else{const e=t.shift();if(e&&r.push(e),0===t.length)r.push("IN IP4 127.0.0.1");else{r.push("IN");const e=t.shift();e&&r.push(e);const i=t.shift();i&&r.push(i)}}i.splice(1,0,`o=${r.join(" ")}`)}else{if(e.startsWith("m="))return e=function(e){return e.replace(It,(e=>bt[e]))}(e),i.push(e),i.push("a=setup:"+(t?"actpass":"active")),i.push(`a=mid:${n}`),void n++;if(e.startsWith("a=candidate:"))return e=wt(e),void i.push(e);if(e.startsWith("a=fingerprint:")){let[t,r]=e.slice(14).split(" ");return t in _t&&(t=_t[t]),r=gt.decode(r),void i.push(`a=fingerprint:${t} ${r}`)}if(e.startsWith("c=")){let[t,r]=e.slice(2).split(" ");return t in Rt&&(t=Rt[t]),r in At&&(r=At[r]),void i.push(`c=IN ${t} ${r}`)}"I"!==e?"Z"!==e?"B"!==e?i.push(e):i.push("a=sendrecv"):i.push("a=ice-options:ice2,trickle"):i.push("a=ice-options:trickle")}}));const s=i.length-1;return i.splice(s,0,`a=group:BUNDLE ${Array.from(Array(n).keys()).join(" ")}`),i.join("\r\n")}const It=new RegExp(Object.keys(bt).join("|"),"g");class Ct extends(s()){constructor(e,t,r,i){super(),this.engine=e,this.logger=e.logger,this.config=i,this.connected=!1,this.scheduler=r,this.sequential=this.scheduler.sequential,this.DCMap=new Map,this.failedDCMap=new Map,this.notFoundDCSet=new Set;const n=Q().isMobile();this.peerPool=new ft(e,i,15),this.signalerWs=null,this.fetcher=t,this.peers=[],this.requestPeersQueue=[],this.minConns=5,this.stuns=[],this.requestMorePeers=ct(this._requestMorePeers,this,p(35,45)),this.maxConns=n?15:22,this.maxConnsActive=n?10:13,this.peersIncrement=0,this.gotPeersFromTracker=!1,this.requestPeersWaitCount=0,this.gotSignalFails={main:0,backup:0,limit:5},this.fuseRate=-1,this.overloaded=!1}get totalConns(){return this.scheduler.peersNum+1}resumeP2P(){if(!this.fetcher)return;const{engine:t,config:r,fetcher:i}=this,{btAnnounce:n,btAnnouncePreflight:s}=i,{wsSignalerAddr:a,wifiOnly:o,geoIpPreflight:l}=r;(l?s:n).call(i).then((e=>{const{scheduler:r}=this;if(!r)return;t.peerId=this.peerId=e.id,this.minConns=e.min_conns,r.minConns=this.minConns;const n=e.peers;r.notifyPeersLoaded(n.length),n.length>this.gotSignalFails.limit&&(this.gotSignalFails.limit=n.length),t.netType=i.announceInfo.netType,(e.wifi_only||o)&&t.isMobileNet&&(r.downloadOnly=!0,this.logger.info("downloadOnly mode"));const s=a.main;let l=a.backup;function h(e,t){var r=u();return(h=function(e,t){return r[e-=0]})(e,t)}function u(){var e=["IHmzPt4745802".split("").reverse().join(""),"fqbpvJ65672".split("").reverse().join(""),"peerId","evitcAsnnoCxam".split("").reverse().join(""),"0r^EeI@*KS".split("").reverse().join(""),"yGChQi82100203".split("").reverse().join(""),"dIlennahc".split("").reverse().join(""),"qrZmAF0973735".split("").reverse().join(""),"qNTzkD6562665".split("").reverse().join(""),"timestamp","HaovMZ5303011".split("").reverse().join(""),"blnwIB1433257".split("").reverse().join(""),"39zAjEpC","substring"];return(u=function(){return e})()}var d,c;e.signal&&!e.signal2&&(l=void 0),this.signalerWs=this._initSignalerWs(e.signal||s,e.signal2||l,e.token,e.token2),0===n.length?this.requestMorePeers():this.peers=this._filterPeers(n),t.emitEvent("peerId",this.peerId),e.stun&&e.stun.length>0&&(this.stuns=e.stun),e.debug&&(this.logger.enableDebug(),e.log_url&&(this.logUploader=new B(e.log_url,this.fetcher.key||location.hostname,this.peerId,"2.12.15"),this.logger.setUploader(this.logUploader))),t.onTrackerResume&&t.onTrackerResume(e),e.fuse_rate&&(this.fuseRate=e.fuse_rate),e.overload&&(this.overloaded=!0,this.logger.warn("server overloaded, degrade signaling")),this.logger.info(`announce request response ${JSON.stringify(e,null,2)}`),function(e,t){function r(e,t,r,i,n){return h(t- -94,n)}var i=e();function n(e,t,r,i,n){return h(t-586,r)}function s(e,t,r,i,n){return h(i-742,n)}for(;;)try{if(595581===-parseInt(r(0,-83,0,0,-88))/1+-parseInt(n(0,587,588))/2+parseInt(n(0,599,592))/3*(-parseInt(n(0,588,591))/4)+parseInt(r(0,-86,0,0,-83))/5+-parseInt(s(0,0,0,751,751))/6+-parseInt(s(0,0,0,754,760))/7+parseInt(h(403-397,399))/8)break;i.push(i.shift())}catch(e){i.push(i.shift())}}(u),e.v!==Fe()(i.channelId+this.peerId+i.timestamp+(d=701,c=702,h(d-696,c)),"2.12.15").substring(0,8)&&(this.maxConnsActive=1)})).catch((r=>{if(this.scheduler&&("TRACKER_EXPT"===r.code&&t.emitEvent(e.EXCEPTION,r),this.scheduler.notifyPeersLoaded(0),r.retry)){const e=p(15e3,4e4);this.logger.warn(`announce retry after ${e}ms`),this.announceTimer=setTimeout((()=>{this.resumeP2P()}),e)}}))}stopP2P(){this.fetcher.postStatsWithBeacon(),this.fetcher.destroy(),this.fetcher=null,this.requestMorePeers(!0),this.scheduler.destroy(),this.scheduler=null,this.signalerWs&&(this.signalerWs.destroy(),this.signalerWs=null),this.peers=[];for(let e of this.DCMap.values())e.destroy(!0);this.DCMap.clear(),this.peerPool.destroy(),this.peerPool=null,this.failedDCMap.clear(),this.notFoundDCSet.clear(),this.logUploader&&(this.logUploader.destroy(),this.logUploader=null),this.logger.warn("tracker stop p2p")}destroy(){this.stopP2P(),this.removeAllListeners(),clearTimeout(this.announceTimer),clearTimeout(this.requestPeersTimer);const{config:e}=this;e.getStats=e.getPeerId=e.getPeersInfo=null,this.logger.warn("destroy tracker")}isPeerConnectedOrFailed(e){return!e||(this.DCMap.has(e)||this.failedDCMap.has(e)||e===this.peerId)}_filterPeers(e){const t=[];return e.filter((e=>!this.isPeerConnectedOrFailed(e.id))).forEach((e=>{t.push({id:e.id,intermediator:e.intermediator})})),t}_tryConnectToAllPeers(){const{logger:e}=this;if(0!==this.peers.length)for(this._checkDCMap(),e.info(`try connect to ${this.peers.length} peers, map size ${this.DCMap.size} limit ${this.maxConnsActive} peersNum ${this.scheduler.peersNum}`);this.peers.length>0&&!(this.DCMap.size>=this.maxConnsActive);){let t=this.peers.shift();if(this.isPeerConnectedOrFailed(t.id))continue;const r=t.intermediator;this.signalerWs.connected||r&&this.DCMap.has(r)?(e.debug(`create DataChannel ${t.id} intermediator ${r}`),this._createDatachannel(t.id,!0,r)):e.info(`skip peer ${t.id} without intermediator`)}else e.info("no peers after filter")}_handleSendSignal(e,t){const r=e.remotePeerId;if(e.intermediator){const i=this.DCMap.get(e.intermediator);if(i){let n=!0;for(let e of t)i.sendMsgSignal(r,this.peerId,e)||(n=!1);if(n)return;this.logger.warn(`intermediator ${e.intermediator} relay failed`)}}e.intermediator=void 0,this.signalerWs.sendSignalBatch(r,t,e.signalName)}_setupDC(t){t.on(e.DC_SIGNAL,(e=>{this._handleSendSignal(t,[e])})).on(e.DC_SIGNAL_BATCH,(e=>{this._handleSendSignal(t,e)})).on(e.DC_PEER_SIGNAL,(e=>{const r=e.to_peer_id||e.to,i=e.from_peer_id||e.from,n=e.action;if(r&&i&&n)if(r!==this.peerId){this.logger.info(`relay signal for ${i}`);const s=this.DCMap.get(r);if(s){if("signal"!==n)return void s.sendMsgSignalReject(r,i,e.reason,e.fatal);if(s.sendMsgSignal(r,i,e.data))return}t.sendMsgSignal(i,r)}else"signal"===n?this._handleSignalMsg(i,e,t.remotePeerId):this._handSignalRejected(i,e)})).on(e.DC_GET_PEERS,(()=>{const e=g(),r=this.scheduler.getPeers().filter((e=>e.peersConnected<(e.mobileWeb?15:22)&&!e.super));if(r&&r.length>0){const i=[];r.forEach((r=>{if(r.remotePeerId===t.remotePeerId||r.remotePeerId===this.peerId)return;if(!this.config.live&&(r.currentPos-t.currentPos>600||r.currentPos50&&i.push({id:r.remotePeerId,...r.region})})),this.logger.info(`send ${i.length} peers to ${t.remotePeerId}`),t.sendPeers(i)}})).on(e.DC_PEERS,(e=>{const r=e.peers;this.logger.info(`receive ${r.length} peers from ${t.remotePeerId}`),r&&r.length>0&&(r.forEach((e=>{e.intermediator=t.remotePeerId,e.region||(e.region={})})),this.requestPeersQueue.push(...r)),this.requestPeersWaitCount--,this.requestPeersWaitCount<=0&&this._handleRequestedPeers()})).once(e.DC_ERROR,((e,r)=>{this.logger.warn(`datachannel ${t.channelId} failed fatal ${e} ${r}`),this.scheduler&&(this.scheduler.deletePeer(t),this._destroyAndDeletePeer(t.remotePeerId,e),this.fetcher&&(t.connected||e&&this.fetcher.increFailConns(),e&&this.failedDCMap.set(t.remotePeerId,`DC_FAILED ${r}`),this._doSignalFusing(this.scheduler.peersNum),this._doPeersRequest()))})).once(e.DC_TIMEOUT,(({gotSignal:e,sentSignal:r,data:i})=>{const{logger:n,signalerWs:s,gotSignalFails:a}=this,{remotePeerId:o,useBackupSignal:l,isInitiator:h}=t,u=l?"backup":"main";if(e?a[u]=0:(a[u]++,a[u]>=a.limit&&(a[u]=0,n.warn("gotSignalFails many, forcePolling"),s.forcePolling(u))),r&&e&&h&&(this.failedDCMap.set(o,"DC_TIMEOUT"),this.fetcher&&this.fetcher.increFailConns()),!e&&h&&!l&&this._tryBackupSignal(t,o,i))return t._startTimer(),void n.warn(`${o} conn timeout, try backup signal`);this._destroyAndDeletePeer(o,!1),this._doPeersRequest()})).once(e.DC_CLOSE,(e=>{this.logger.info(`datachannel ${t.channelId} closed fatal ${e}`),this.scheduler&&(this.scheduler.deletePeer(t),this._doSignalFusing(this.scheduler.peersNum)),this._destroyAndDeletePeer(t.remotePeerId,e),e&&this.failedDCMap.set(t.remotePeerId,"DC_CLOSE"),this._doPeersRequest()})).once(e.DC_OPEN,(()=>{t.isInitiator&&this.scheduler.handshakePeer(t)})).once(e.DC_METADATA,(e=>{const{scheduler:r}=this;t.isInitiator||r.handshakePeer(t),r.handleMetaData(t,e);const i=this.DCMap.size>=this.maxConnsActive;this.requestMorePeers(i),t.intermediator&&this.peersIncrement++,this._doSignalFusing(r.peersNum)}))}_doPeersRequest(){const e=this.scheduler.peersNum;!this.signalerWs.connected||this.overloaded&&e>this.minConns?this._requestPeersFromPeers(e):this.requestMorePeers(),this._tryConnectToAllPeers()}_doSignalFusing(e){if(this.fuseRate<=0)return;const t=this.signalerWs.connected;t&&e>=this.fuseRate?(this.logger.warn("reach fuseRate, report stats close signaler"),this.totalConns-1>0&&this.fetcher.postStats(),this.signalerWs.close()):!t&&e<=this.minConns&&this.signalerWs.normalClosed&&(this.logger.warn(`low conns ${e}, reconnect signaler`),this.signalerWs.reconnect())}_initSignalerWs(t,r,i,n){const s=(e,t)=>{let r=`${e}?id=${this.peerId}&p=web&v=2.12.15`;return this.config.signalCompact&&(r=`${r}&c=1`),t&&(r=`${r}&token=${t}`),r};let a,o=s(t,i);if(r&&r!==t){let e=s(r,n);a=new dt(this.logger,this.config,o,e)}else a=new ut(this.logger,this.config,o);return a.onopen=()=>{this.connected=!0,this.engine.emitEvent("serverConnected",!0),this._tryConnectToAllPeers()},a.onmessage=(e,t)=>{let r=e.action;const i=e.from_peer_id||e.from;if(i)switch(r){case"signal":this._handleSignalMsg(i,e,null,t);break;case"reject":this._handSignalRejected(i,e);break;default:this.logger.warn(`Signal websocket unknown action ${r}`)}else this.logger.warn("fromPeerId is missed")},a.onclose=()=>{this.connected=!1,this.engine.emitEvent("serverConnected",!1)},a.onerror=t=>{t.message&&this.logger.warn(`signal err: ${t.message}`),t.message&&this.engine.emitEvent(e.EXCEPTION,Be(t,"SIGNAL_EXPT"))},a}_handSignalRejected(e,t){const r=`signaling ${e} rejected`;this.logger.warn(`${r}, reason ${t.reason}`);const i=this.DCMap.get(e);i&&!i.connected&&(i.destroy(t.fatal),this.DCMap.delete(e)),this.requestMorePeers(),t.fatal&&this.failedDCMap.set(e,r),this._tryConnectToAllPeers()}_tryBackupSignal(e,t,r,i="main"){return!(!(this.signalerWs.backupConnected&&e&&r.length>0&&"main"===i)||e.useBackupSignal)&&(e.useBackupSignal=!0,e.signalName="backup",e.intermediator=void 0,this.signalerWs.sendSignalBatch(t,r,"backup"),!0)}_handleSignalMsg(e,t,r,i){if(!this.scheduler)return;const{logger:n}=this;if(t.data){if(this.failedDCMap.has(e))return void this._sendSignalReject(e,`${e} ${this.failedDCMap.get(e)||"unknown"}`,r,i,!0);this._handleSignal(e,t.data,r,i)}else{const t=this.DCMap.get(e);if(!t)return;if(this._tryBackupSignal(t,e,t.signalMsgs,i))return void this.logger.warn(`${e} not found from main, try backup signal`);if(t.useBackupSignal)return;this._destroyAndDeletePeer(e),n.info(`signaling ${e} not found`);const{scheduler:s}=this;s.waitForPeer&&(s.waitingPeers--,0===s.waitingPeers&&s.notifyPeersLoaded(0)),this.requestMorePeers(),this._tryConnectToAllPeers(),r||this.notFoundDCSet.add(e)}}_handleSignal(e,t,r,i){"string"==typeof t&&(t=(e=>{if("C"===e[0])return{type:"candidate",candidate:{candidate:wt(e),sdpMLineIndex:0,sdpMid:"0"}};const t=e.slice(1),r="O"===e[0];return{type:r?"offer":"answer",sdp:Pt(t,r)}})(t));const n=t.type,{logger:s}=this;let a=this.DCMap.get(e);if(a){if(a.connected)return void s.info("datachannel had connected, signal ignored");if("offer"===n&&a.isInitiator){if(!(this.peerId>e))return void s.warn(`${e} signal type wrong ${n}, ignored`);s.warn(`${e} signal type wrong ${n}, convert to non initiator`),this._destroyAndDeletePeer(e,!1),a=this._createDatachannel(e,!1,r)}}else{if("answer"===n){const t=`${e} type wrong ${n}`;return s.warn(t),this._sendSignalReject(e,t,r,i),void this._destroyAndDeletePeer(e,!1)}if(s.debug(`receive node ${e} connection request`),this.DCMap.size>=this.maxConns){const t=`reach limit ${this.maxConns}`;return s.warn(t),void this._sendSignalReject(e,t,r,i)}a=this._createDatachannel(e,!1,r)}a&&(i&&(a.signalName=i),a.receiveSignal(t))}_createDatachannel(e,t,r){if(!this.fetcher)return;let i;if(t&&this.peerPool.available)i=this.peerPool.getPeer(),this.logger.info(`get peer from pool, signal size ${i.signalMsgs.length}`),i.intermediator=r,i.assignPeerId(this.peerId,e);else{let n=this.config.trickleICE;this.overloaded&&(n=!1),i=new Z(this.engine,this.peerId,e,t,this.config,{stuns:this.stuns,intermediator:r,trickle:!r&&n})}return this.DCMap.set(e,i),this._setupDC(i),i}_sendSignalReject(e,t,r,i,n){if(r){const i=this.DCMap.get(r);if(i&&i.sendMsgSignalReject(e,this.peerId,t,n))return}this.signalerWs.sendReject(e,t,n,i)}_requestMorePeers(e){if(!this.fetcher)return;const{logger:t}=this,r=this.scheduler.peersNum;r>=this.maxConnsActive||(t.info(`requestMorePeers after delay ${e}, peersIncrement ${this.peersIncrement}`),r<3||r50&&(this.failedDCMap=new Map([...this.failedDCMap].slice(-50))),this.notFoundDCSet.size>20&&(this.notFoundDCSet=new Set([...this.notFoundDCSet].slice(-20))),this.fetcher.btGetPeers([...this.DCMap.keys(),...this.failedDCMap.keys(),...this.notFoundDCSet.keys()],0===e).then((e=>{e&&e.peers&&(t.info(`requestMorePeers resp ${JSON.stringify(e,null,2)}`),this.peers=this._filterPeers(e.peers),this._tryConnectToAllPeers())})).catch((e=>{t.error(`requestMorePeers error ${e}`)})),this.gotPeersFromTracker=!0}_requestPeersFromPeers(e){return!!this.requestPeersTimer||(e>=this.maxConnsActive||(this.requestPeersWaitCount=this.scheduler.requestPeers(),0!==this.requestPeersWaitCount&&(this.gotPeersFromTracker=!1,this.requestPeersTimer=setTimeout((()=>{this.logger.warn("requestPeersTimer timeout"),this._handleRequestedPeers()}),1e4),!0)))}_handleRequestedPeers(){if(clearTimeout(this.requestPeersTimer),this.requestPeersTimer=void 0,this.fetcher){if(this.requestPeersQueue.length>0){const e=function(e,t){const r=[],i=new Set;for(let t of e)i.has(t.id)||(i.add(t.id),r.push(t));const{asn:n,country:s}=t;if(!n||!s||r.length<2)return r;const a=r.filter((e=>!e.asn&&!e.country)),o=r.filter((e=>e.country===s&&e.asn!==n)),l=r.filter((e=>e.asn===n&&e.country===s)),h=r.filter((e=>!a.includes(e)&&!l.includes(e)&&!o.includes(e)));return l.concat(o).concat(a).concat(h)}(this.requestPeersQueue,this.fetcher.announceInfo);this.peers=this._filterPeers(e),this.requestPeersQueue=[]}this._tryConnectToAllPeers()}}_destroyAndDeletePeer(e,t=!0){const r=this.DCMap.get(e);return!!r&&(r.destroy(t),this.DCMap.delete(e),!0)}_checkDCMap(){const e=g();for(let t of this.DCMap.values()){const r=e-t.timeJoin;e-t.timeJoin>30&&!t.connected&&(this.logger.warn(`delete ${t.remotePeerId} not connected for ${r} in DCMap`),this._destroyAndDeletePeer(t.remotePeerId,!1))}}}const kt=Ct;class Dt extends ue{constructor(e={},t=null){if(super(e),e.validateSegment||(e.validateSegment=function(e,t){return!0}),this.hlsjs=t,this.config=Object.assign({useDiskCache:!e.live},Ee,e),t){this.HLSEvents=t.constructor.Events;const e=t.constructor.version;this.hlsjsVersion=e,this.config.isHlsV0=e&&"0"===e.split(".")[0]}this.lastLevel=0,this.multiBitrate=!1}setup(){let{token:e,channelId:t}=this.config,r=e=>{const t=l().parseURL(e);return`${t.netLoc.substring(2)+t.path.substring(0,t.path.lastIndexOf("."))}`};t&&(r=this.makeChannelId(e,t));return{channelIdMaker:r,signalId:this.makeSignalId(),browserInfo:{...this.commonBrowserInfo}}}setupElectron(){this.browserInfo.device===X.device.PC_NATIVE&&(this.browserInfo={...this.browserInfo,app:this.config.appName,bundle:this.config.appId})}getExtraForStats(){const e=super.getExtraForStats();return!this.config.live&&this.media&&(e.pos=Math.round(this.media.currentTime)),this.multiBitrate&&this.currentLevel!==this.lastLevel&&(e.level=this.currentLevel+"",this.lastLevel=this.currentLevel),e}getExtraForPeersRequest(){const e=super.getExtraForPeersRequest();return this.multiBitrate&&(e.level=this.currentLevel+""),e}destroy(){super.destroy()}async initSegmentManager(e){const{logger:r,config:i}=this;if(self.indexedDB&&i.useDiskCache&&!i.live){const e=new ke(this,i);try{await e.setupStore(),this.bufMgr=e}catch(e){r.warn(e),this.bufMgr=new xe(this,i)}}else this.bufMgr=new xe(this,i);if(this.bufMgr.maxBufSize<=0)throw new Error("bufMgr state is invalid");"SegmentStore"===this.bufMgr.name&&(this.removeAllListeners(t.BM_FATAL_ERROR),this.once(t.BM_FATAL_ERROR,(()=>{const t="SegmentStoreFatalError";r.warn(`${t}, switch to SegmentCache`),this.bufMgr.destroy(),this.bufMgr=new xe(this,i),e&&e(this.bufMgr),r.report(JSON.stringify(this.browserInfo),t,this.peerId,"2.12.15",5e4)})))}generateTag(){let e=(0,X.getBrowser)();return e.includes("iPhone")&&"HlsSwP2pEngine"===this.engineName&&(e=`${e}_p`),this.playerName&&(e=`${e}_${this.playerName}`),e}onTrackerResume(e){e.report_url&&this.logger.enableReport(e.report_url)}async _init(e,t,r){const{logger:i,config:n}=this;await this.initSegmentManager((e=>{if(this.tracker){const{scheduler:t}=this.tracker;t.bufferManager=e,t.bitset.clear()}})),r.live||this.media&&(r.pos=Math.round(this.media.currentTime)),r.tag=void 0===n.tag?this.generateTag():n.tag;let s=new st(this,n.token,encodeURIComponent(e),n.announce||"",r);this.fetcher=s,this.tracker=new kt(this,s,t,n),t.bufferManager=this.bufMgr,this.setupWindowListeners()}_setupSegmentId(){this.config.segmentId||(this.config.segmentId=this.config.strictSegmentId?me:pe)}_onHlsError(e,r){if(!r||!this.hlsjs)return;const{logger:i,tracker:n}=this;if(!i)return;const s=`${r.type} details ${r.details} reason ${r.reason}`;if(r.fatal?i.error(s):i.warn(s),"networkError"===r.type&&"HlsjsP2pEngine"===this.engineName)return;const{player:a}=this.browserInfo,o=`${a||""} hlsjs ${this.hlsjsVersion} ${location.href}`,l=this.hlsjs.constructor.ErrorDetails;switch(r.details){case l.BUFFER_STALLED_ERROR:"HlsjsP2pEngine"===this.engineName&&this.fetcher&&this.fetcher.increRebuffers(),n&&n.scheduler&&i.warn("buffered: "+1e3*n.scheduler.getBufferedDuration());break;case l.INTERNAL_EXCEPTION:if(r.event&&"demuxerWorker"!==r.event){r.error||(r.error={});const e=`${r.error.message} event ${r.event} ${o}`;this.fetcher&&r.fatal&&(this.fetcher.errsInternalExpt++,this.fetcher.exptMsg=e),i.error(`INTERNAL_EXCEPTION event ${r.event} err ${r.error.message}`),this.emitEvent(t.EXCEPTION,Be(r.error,"HLSJS_EXPT")),i.report(e,r.event,this.peerId,"2.12.15")}break;default:if(r.fatal||r.details===l.FRAG_PARSING_ERROR){const e=`${r.type} ${r.details} ${r.err||""} ${o}`;i.report(e,r.details,this.peerId,"2.12.15"),"mediaError"===r.type&&this.tracker&&this.tracker.scheduler&&this.tracker.scheduler.clearCache()}}}}class Mt{constructor(){this.method=null,this.key=null,this.iv=null,this._uri=null}get uri(){return!this._uri&&this.reluri&&(this._uri=o.buildAbsoluteURL(this.baseuri,this.reluri,{alwaysNormalize:!0})),this._uri}}class xt{constructor(){this._url=null,this._byteRange=null,this._decryptdata=null,this.tagList=[],this.programDateTime=null,this.rawProgramDateTime=null,this._elementaryStreams={[xt.ElementaryStreamTypes.AUDIO]:!1,[xt.ElementaryStreamTypes.VIDEO]:!1}}static get ElementaryStreamTypes(){return{AUDIO:"audio",VIDEO:"video"}}get url(){return!this._url&&this.relurl&&(this._url=o.buildAbsoluteURL(this.baseurl,this.relurl,{alwaysNormalize:!0})),this._url}set url(e){this._url=e}get byteRange(){if(!this._byteRange&&!this.rawByteRange)return[];if(this._byteRange)return this._byteRange;let e=[];if(this.rawByteRange){const t=this.rawByteRange.split("@",2);if(1===t.length){const t=this.lastByteRangeEndOffset;e[0]=t||0}else e[0]=parseInt(t[1]);e[1]=parseInt(t[0])+e[0],this._byteRange=e}return e}get byteRangeStartOffset(){return this.byteRange[0]}get byteRangeEndOffset(){return this.byteRange[1]}get decryptdata(){return this._decryptdata||(this._decryptdata=this.fragmentDecryptdataFromLevelkey(this.levelkey,this.sn)),this._decryptdata}get endProgramDateTime(){if(!Number.isFinite(this.programDateTime))return null;let e=Number.isFinite(this.duration)?this.duration:0;return this.programDateTime+1e3*e}get encrypted(){return!(!this.decryptdata||null===this.decryptdata.uri||null!==this.decryptdata.key)}addElementaryStream(e){this._elementaryStreams[e]=!0}hasElementaryStream(e){return!0===this._elementaryStreams[e]}createInitializationVector(e){let t=new Uint8Array(16);for(let r=12;r<16;r++)t[r]=e>>8*(15-r)&255;return t}fragmentDecryptdataFromLevelkey(e,t){let r=e;return e&&e.method&&e.uri&&!e.iv&&(r=new Mt,r.method=e.method,r.baseuri=e.baseuri,r.reluri=e.reluri,r.iv=this.createInitializationVector(t)),r}}class Ot{constructor(e){this.endCC=0,this.endSN=0,this.fragments=[],this.initSegment=null,this.live=!0,this.needSidxRanges=!1,this.startCC=0,this.startSN=0,this.startTimeOffset=null,this.targetduration=0,this.totalduration=0,this.type=null,this.url=e,this.version=null}get hasProgramDateTime(){return!(!this.fragments[0]||!Number.isFinite(this.fragments[0].programDateTime))}}const Ft=/^(\d+)x(\d+)$/,Nt=/\s*(.+?)\s*=((?:\".*?\")|.*?)(?:,|$)/g;class Bt{constructor(e){"string"==typeof e&&(e=Bt.parseAttrList(e));for(let t in e)e.hasOwnProperty(t)&&(this[t]=e[t])}decimalInteger(e){const t=parseInt(this[e],10);return t>Number.MAX_SAFE_INTEGER?1/0:t}hexadecimalInteger(e){if(this[e]){let t=(this[e]||"0x").slice(2);t=(1&t.length?"0":"")+t;const r=new Uint8Array(t.length/2);for(let e=0;eNumber.MAX_SAFE_INTEGER?1/0:t}decimalFloatingPoint(e){return parseFloat(this[e])}enumeratedString(e){return this[e]}decimalResolution(e){const t=Ft.exec(this[e]);if(null!==t)return{width:parseInt(t[1],10),height:parseInt(t[2],10)}}static parseAttrList(e){let t,r={};for(Nt.lastIndex=0;null!==(t=Nt.exec(e));){let e=t[2],i='"';0===e.indexOf(i)&&e.lastIndexOf(i)===e.length-1&&(e=e.slice(1,-1)),r[t[1]]=e}return r}}const Ut=Bt,Gt={audio:{a3ds:!0,"ac-3":!0,"ac-4":!0,alac:!0,alaw:!0,dra1:!0,"dts+":!0,"dts-":!0,dtsc:!0,dtse:!0,dtsh:!0,"ec-3":!0,enca:!0,g719:!0,g726:!0,m4ae:!0,mha1:!0,mha2:!0,mhm1:!0,mhm2:!0,mlpa:!0,mp4a:!0,"raw ":!0,Opus:!0,samr:!0,sawb:!0,sawp:!0,sevc:!0,sqcp:!0,ssmv:!0,twos:!0,ulaw:!0},video:{avc1:!0,avc2:!0,avc3:!0,avc4:!0,avcp:!0,drac:!0,dvav:!0,dvhe:!0,encv:!0,hev1:!0,hvc1:!0,mjp2:!0,mp4v:!0,mvc1:!0,mvc2:!0,mvc3:!0,mvc4:!0,resv:!0,rv60:!0,s263:!0,svc1:!0,svc2:!0,"vc-1":!0,vp08:!0,vp09:!0}};const Ht=/#EXT-X-STREAM-INF:([^\n\r]*)[\r\n]+([^\r\n]+)/g,$t=/#EXT-X-MEDIA:(.*)/g,Kt=new RegExp([/#EXTINF:\s*(\d*(?:\.\d+)?)(?:,(.*)\s+)?/.source,/|(?!#)([\S+ ?]+)/.source,/|#EXT-X-BYTERANGE:*(.+)/.source,/|#EXT-X-PROGRAM-DATE-TIME:(.+)/.source,/|#.*/.source].join(""),"g"),Wt=/(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE): *(\d+))|(?:#EXT-X-(TARGETDURATION): *(\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DISCONTINUITY-SEQ)UENCE:(\d+))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(VERSION):(\d+))|(?:#EXT-X-(MAP):(.+))|(?:(#)([^:]*):(.*))|(?:(#)(.*))(?:.*)\r?\n?/,Vt=/\.(mp4|m4s|m4v|m4a)$/i;class qt{static findGroup(e,t){if(!e)return null;let r=null;for(let i=0;i2?(t=r.shift()+".",t+=parseInt(r.shift()).toString(16),t+=("000"+parseInt(r.shift()).toString(16)).substr(-4)):t=e,t}static resolve(e,t){return o.buildAbsoluteURL(t,e,{alwaysNormalize:!0})}static parseMasterPlaylist(e,t){let r,i=[];function n(e,t){["video","audio"].forEach((r=>{const i=e.filter((e=>function(e,t){const r=Gt[t];return!!r&&!0===r[e.slice(0,4)]}(e,r)));if(i.length){const n=i.filter((e=>0===e.lastIndexOf("avc1",0)||0===e.lastIndexOf("mp4a",0)));t[`${r}Codec`]=n.length>0?n[0]:i[0],e=e.filter((e=>-1===i.indexOf(e)))}})),t.unknownCodecs=e}for(Ht.lastIndex=0;null!=(r=Ht.exec(e));){const e={},s=e.attrs=new Ut(r[1]);e.url=qt.resolve(r[2],t);const a=s.decimalResolution("RESOLUTION");a&&(e.width=a.width,e.height=a.height),e.bitrate=s.decimalInteger("AVERAGE-BANDWIDTH")||s.decimalInteger("BANDWIDTH"),e.name=s.NAME,n([].concat((s.CODECS||"").split(/[ ,]+/)),e),e.videoCodec&&-1!==e.videoCodec.indexOf("avc1")&&(e.videoCodec=qt.convertAVC1ToAVCOTI(e.videoCodec)),i.push(e)}return i}static parseMasterPlaylistMedia(e,t,r,i=[]){let n,s=[],a=0;for($t.lastIndex=0;null!==(n=$t.exec(e));){const e={},o=new Ut(n[1]);if(o.TYPE===r){if(e.groupId=o["GROUP-ID"],e.name=o.NAME,e.type=r,e.default="YES"===o.DEFAULT,e.autoselect="YES"===o.AUTOSELECT,e.forced="YES"===o.FORCED,o.URI&&(e.url=qt.resolve(o.URI,t)),e.lang=o.LANGUAGE,e.name||(e.name=e.lang),i.length){const t=qt.findGroup(i,e.groupId);e.audioCodec=t?t.codec:i[0].codec}e.id=a++,s.push(e)}}return s}static parseLevelPlaylist(e,t){let r,i,n=0,s=0,a=new Ot(t),o=new Mt,l=0,h=null,u=new xt,d=null;for(Kt.lastIndex=0;null!==(r=Kt.exec(e));){const e=r[1];if(e){u.duration=parseFloat(e);const t=(" "+r[2]).slice(1);u.title=t||null,u.tagList.push(t?["INF",e,t]:["INF",e])}else if(r[3]){if(Number.isFinite(u.duration)){const e=n++;u.start=s,u.levelkey=o,u.sn=e,u.cc=l,u.baseurl=t,u.relurl=(" "+r[3]).slice(1),jt(u,h),a.fragments.push(u),h=u,s+=u.duration,u=new xt}}else if(r[4]){if(u.rawByteRange=(" "+r[4]).slice(1),h){const e=h.byteRangeEndOffset;e&&(u.lastByteRangeEndOffset=e)}}else if(r[5])u.rawProgramDateTime=(" "+r[5]).slice(1),u.tagList.push(["PROGRAM-DATE-TIME",u.rawProgramDateTime]),null===d&&(d=a.fragments.length);else{for(r=r[0].match(Wt),i=1;i=0&&(o.method=f,o.baseuri=t,o.reluri=g,o.key=null,o.iv=p));break;case"START":let i=new Ut(e).decimalFloatingPoint("TIME-OFFSET");Number.isFinite(i)&&(a.startTimeOffset=i);break;case"MAP":let h=new Ut(e);u.relurl=h.URI,u.rawByteRange=h.BYTERANGE,u.baseurl=t,u.sn="initSegment",a.initSegment=u,u=new xt,u.rawProgramDateTime=a.initSegment.rawProgramDateTime;break;default:console.warn(`line parsed but not handled: ${r}`)}}}return u=h,u&&!u.relurl&&(a.fragments.pop(),s-=u.duration),a.totalduration=s,a.averagetargetduration=s/a.fragments.length,a.endSN=n-1,a.startCC=a.fragments[0]?a.fragments[0].cc:0,a.endCC=l,!a.initSegment&&a.fragments.length&&a.fragments.every((e=>Vt.test(e.relurl)))&&(console.warn("MP4 fragments found but no init segment (probably no MAP, incomplete M3U8), trying to fetch SIDX"),u=new xt,u.relurl=a.fragments[0].relurl,u.baseurl=t,u.level=id,u.sn="initSegment",a.initSegment=u,a.needSidxRanges=!0),d&&function(e,t){let r=e[t];for(let i=t-1;i>=0;i--){const t=e[i];t.programDateTime=r.programDateTime-1e3*t.duration,r=t}}(a.fragments,d),a}}function jt(e,t){e.rawProgramDateTime?e.programDateTime=Date.parse(e.rawProgramDateTime):t&&t.programDateTime&&(e.programDateTime=t.endProgramDateTime),Number.isFinite(e.programDateTime)||(e.programDateTime=null,e.rawProgramDateTime=null)}const Yt={ANY:0,COMPLETE:1,PARTIAL_FORWARD:2,PARTIAL_REVERSE:3},zt=(e,t,r,i,n=!1)=>{const[s,a,o]=Xt(e,t,r,i);return n&&s.length>=1?P(s[0]):s.length>=2?[s[0],s[1]]:I(s,a,o)},Xt=(e,t,r,i)=>{const n=[],{COMPLETE:s,PARTIAL_FORWARD:a,PARTIAL_REVERSE:o}=Yt;return[s,a,o].forEach((s=>{n.push(Qt(e,s,t,r,i))})),n},Qt=(e,t,r,i,n)=>e.filter((e=>e.bitset.hasWithId(r,i,n,t)));class Jt{constructor(e=!1,t){this.isLive=e,this.levelMap=new Map;for(let e in t){const r=Number(e);if(r<0)continue;const i=new Map;if(t[e])for(let r of t[e])i.set(r,{state:Yt.COMPLETE,segId:void 0});this.levelMap.set(r,i)}}totalLevels(){return this.levelMap.size}hasWithId(e,t,r,i=Yt.ANY){if(t<0)return!1;const n=this._createOrGetSet(t).get(e);return!!n&&((!r||!n.segId||n.segId===r)&&(i===Yt.ANY||n.state===i))}has(e,t,r=Yt.ANY){return this.hasWithId(e,t,void 0,r)}hasCompleteOr(e,t,r=Yt.COMPLETE){const i=this._createOrGetSet(t).get(e);return!!i&&(i.state===Yt.COMPLETE||i.state===r)}getObj(e,t){let r=this._createOrGetSet(t).get(e);return r||(r={}),r}getSegId(e,t){return this.getObj(e,t).segId}getState(e,t){return this.getObj(e,t).state}delete(e,t){return this._createOrGetSet(t).delete(e)}add(e,t,r,i){if("number"!=typeof(n=e)||n%1!=0)return;var n;this._createOrGetSet(t).set(e,{state:i,segId:r}),this.isLive&&this._trimBitset(e)}array(e){const t=this._createOrGetSet(e);return this._keysForStateComplete(t)}allArray(){let e={};return this.levelMap.forEach(((t,r)=>{e[r]=this._keysForStateComplete(t)})),e}clear(){this.levelMap.forEach((e=>{e.clear()}))}size(e){return this._createOrGetSet(e).size}_createOrGetSet(e){"number"!=typeof e&&(e=Number(e));let t=this.levelMap.get(e);return t||(t=new Map,this.levelMap.set(e,t)),t}_trimBitset(e){const t=e-20;t>0&&this.levelMap.forEach((e=>{e.delete(t)}))}_keysForStateComplete(e){const t=[];for(let[r,i]of e)i.state===Yt.COMPLETE&&t.push(r);return t}}class Zt{constructor(){this.levelMap=new Map}totalLevels(){return this.levelMap.size}has(e,t){return this._createOrGetMap(t).has(e)}delete(e,t){return this._createOrGetMap(t).delete(e)}decre(e,t){const r=this._createOrGetMap(t);if(r.has(e)){let t=r.get(e);1===t?r.delete(e):r.set(e,t-1)}}incre(e,t){const r=this._createOrGetMap(t);if(r.has(e)){let t=r.get(e);r.set(e,t+1)}else r.set(e,1)}clear(){this.levelMap.forEach((e=>{e.clear()}))}size(e){return this._createOrGetMap(e).size}_createOrGetMap(e){"number"!=typeof e&&(e=Number(e));let t=this.levelMap.get(e);return t||(t=new Map,this.levelMap.set(e,t)),t}}const er=class{constructor(){this.peerMap=new Map}isEmpty(){return 0===this.peerMap.size}size(){return this.peerMap.size}clear(){this.peerMap.clear()}getPeers(){return[...this.peerMap.values()]}getPeerValues(){return this.peerMap.values()}hasPeer(e){return this.peerMap.has(e)}addPeer(e,t){this.peerMap.set(e,t)}getPeerIds(){return[...this.peerMap.keys()]}removePeer(e){this.peerMap.delete(e)}getPeersOrderByWeight(){const e=this.getAvailablePeers();return e.sort(((e,t)=>0===t.weight?1:0===e.weight?-1:t.weight-e.weight)),e}getPeer(e){return this.peerMap.get(e)}getAvailablePeers(){return this.getPeers().filter((e=>e.isAvailableUrgently))}},tr=Symbol("shareOnly");class rr extends(s()){constructor(e,t){super(),this.engine=e,this.config=t,this.logger=e.logger,this.bufMgr=null,this.peerManager=new er,this.fragLoading=!1,this._setupEngine&&this._setupEngine(),this.startCheckConnsTimer(),this.dcDownloadTimeout=t.dcDownloadTimeout,this[tr]=!1,this.downloadOnly=!1,this.loadedPeerNum=0,this.minConns=5}get isMobileNet(){return this.engine.isMobileNet}startCheckConnsTimer(){this.checkConnsTimer=setInterval((()=>{this.logger.info("start check conns");const e=this.getStatsForPeer();let t=this.peersNum;const r=g();this.getPeers().forEach((i=>{t>this.minConns+1&&(r-i.dataExchangeTs>120||r-i.gotStatsTs>=83)?(this.logger.warn(`close dead peer ${i.remotePeerId} level ${i.currentLevel}`),i.close(!1),t--):i.connected&&i.sendMsgStats(t,e)}))}),4e4)}get httpRangeSupported(){return this.config.httpRangeSupported}getStatsForPeer(){return{}}_handlePieceAborted(){}requestPeers(){const e=g();let t=0;for(let r of this.getPeers())r.mobileNet||r.super||(e-r.gotPeersTS<60?this.logger.warn(`${r.remotePeerId} just got peers, ignored`):(r.sendPeersRequest(),r.gotPeersTS=e,t++));return t}chokePeerRequest(t){const r={event:e.DC_CHOKE};t?t.sendJson(r):this._broadcastToPeers(r)}unchokePeerRequest(t){const r={event:e.DC_UNCHOKE};t?t.sendJson(r):this._broadcastToPeers(r)}stopRequestFromPeers(){for(let e of this.getPeers())e.choked=!0}resumeRequestFromPeers(){for(let e of this.getPeers())e.choked=!1}setShareOnly(){this[tr]=!0}deletePeer(e){e.downloading&&this._handlePieceAborted(e.remotePeerId),this.peerManager.hasPeer(e.remotePeerId)&&this.peerManager.removePeer(e.remotePeerId),this._peersStats(this.peerManager.getPeerIds())}getPeers(){return[...this.peerManager.getPeerValues()]}addPeer(e){const{logger:t}=this;this.peerManager.addPeer(e.remotePeerId,e),this[tr]&&(e.choked=!0);const r=this.peerManager.getPeerIds();this._peersStats(r);const{asn:i,country:n}=e.region||{};t.info(`add peer ${e.remotePeerId} country ${n||""} asn ${i||""}, now has ${r.length} peers`)}hasPeer(e){return this.peerManager.hasPeer(e)}get hasPeers(){return this.peersNum>0}get peersNum(){return this.peerManager.size()}get hasIdlePeers(){const{logger:e}=this,t=this.getIdlePeer().length;if(e.info(`peers: ${this.peersNum} idle peers: ${t}`),te.downloading));e.warn(`downloading: ${r.length} choked: ${t.filter((e=>e.choked)).length}`);for(let t of r)e.warn(`${t.remotePeerId} loading ${t.segId} remains ${t.remainAttachments} total ${t.pieceMsg.attachments}`)}return t>0}getIdlePeer(){return this.peerManager.getAvailablePeers()}set bufferManager(t){this.bufMgr=t,t.on(e.BM_LOST,(({sn:e,segId:t,next:r,level:i})=>{this._broadcastLost(e,t,i),this.onBufferManagerLost(e,t,r,i)})).on(e.BM_SEG_ADDED,(e=>{this.onBufferManagerSegAdded(e)}))}onBufferManagerSegAdded(e){}_broadcastLost(t,r,i,n){this.config.live||this._broadcastToPeers({event:e.DC_LOST,sn:t,seg_id:r||void 0,level:i},n)}destroy(){const{logger:e}=this;this.peersNum>0&&this.peerManager.clear(),this.removeAllListeners(),clearInterval(this.checkConnsTimer),clearTimeout(this.checkTimer),e.warn("destroy BtScheduler")}notifyPeersLoaded(e){}_setupDC(t){const{logger:r}=this;t.on(e.DC_PIECE_ACK,(e=>{e.size&&(this.engine.fetcher.reportUploaded(e.size),r.info(`uploaded ${e.seg_id} size ${e.size} to ${t.remotePeerId}`))})).on(e.DC_PIECE_ABORT,(e=>{r.warn(`peer ${t.remotePeerId} download aborted, reason ${e.reason}`),this._handlePieceAborted(t.remotePeerId),this.config.live&&this.checkPeers&&this.checkPeers()})).on(e.DC_DISCONNECT,(()=>{this.peersNum>=this.minConns&&(this.logger.warn(`close disconnected peer ${t.remotePeerId}`),t.close(!1))}))}_broadcastToPeers(e,t){for(let r of this.getPeers())t&&r===t||r.sendJson(e)}_peersStats(e){this.engine.emitEvent("peers",e);const t=this.engine.config.getPeersInfo;A(t)&&t(e)}startCheckPeersTimer(){this.logger.info("startCheckPeersTimer");const e=()=>{this.checkPeers();const t=1e3*(0===(r=this.loadedPeerNum)?3:.5*r+1.67);var r;this.loadedPeerNum=0,this.checkTimer=setTimeout(e,t)};this.checkTimer=setTimeout(e,15e3)}removeStreamListener(e,t){const r=this.requestingMap.get(e);if(r)return void r.removeStreamListener(t);const i=this.segmentBuilderMap.get(e);i&&i.removeStreamListener(t)}setTargetPeersFromGroup(e,t,r,i){if(e.hasReversePeer){if((r=t.concat(r)).length>0)return this.targetPeers.forwardPeer=r[0],!0}else if(e.hasForwardPeer&&(i=t.concat(i)).length>0)return this.targetPeers.reversePeer=i[0],!0;return t.length>0?(e.hasForwardBuffer?this.targetPeers.reversePeer=t[0]:this.targetPeers.forwardPeer=t[0],!0):(this.targetPeers=I(t,r,i),this.targetPeers.some((e=>!!e)))}}const ir=rr;class nr extends(s()){constructor(){super(),this.internalMap=new Map}has(e){return this.internalMap.has(e)}set(e,t){this.internalMap.set(e,t),S(this.internalMap,13,(e=>{e&&e.destroy()}))}get(e){return this.internalMap.get(e)}delete(e){const t=this.internalMap.get(e);t&&(t.destroy(),this.internalMap.delete(e))}get size(){return this.internalMap.size}clear(){this.internalMap.clear(),this.removeAllListeners()}}const sr=0,ar=1,or=2,lr=3;class hr extends(s()){constructor(){super(),this.UNSENT=0,this.OPENED=1,this.HEADERS_RECEIVED=2,this.LOADING=3,this.DONE=4,this.timeout=0,this.withCredentials=!1,this.status=0,this.readyState=this.UNSENT,this.headers=new Map,this.responseHeaders=null,this.on("load",(e=>{this.onload&&this.onload(e)})),this.on("abort",(e=>{this.onabort&&this.onabort(e)})),this.on("error",(e=>{this.onerror&&this.onerror(e)})),this.on("loadstart",(e=>{this.onloadstart&&this.onloadstart(e)})),this.on("progress",(e=>{this.onprogress&&this.onprogress(e)})),this.on("timeout",(e=>{this.ontimeout&&this.ontimeout(e)})),this.on("loadend",(e=>{this.onloadend&&this.onloadend(e)})),this.on("readystatechange",(()=>{this.onreadystatechange&&this.onreadystatechange()}))}setRequestHeader(e,t){this.headers.set(e,t)}addEventListener(e,t){this.addListener(e,t)}removeEventListener(e,t){this.removeListener(e,t)}overrideMimeType(){}getAllResponseHeaders(){if(!this.responseHeaders)return null;let e="";return this.responseHeaders.forEach(((t,r)=>{e+=`${r}: ${t}\n`})),e}getResponseHeader(e){return this.responseHeaders?this.responseHeaders.get(e):null}open(){this.readyState=this.OPENED,this.emit("loadstart")}abort(){this.readyState=this.DONE,this.status=0,this.emit("loadend")}send(){}_emitEvent(e){this.emit(e,{type:e,target:this})}}function ur(){if(self.fetch&&self.AbortController&&self.ReadableStream&&self.Request)try{return new self.ReadableStream({}),!0}catch(e){}return!1}class dr{constructor(e){this.fetchSetup=e.fetchSetup||cr,this.xhrSetup=e.xhrSetup,function(e){try{new e}catch(e){return!1}return!0}(self.AbortController)&&(this.controller=new self.AbortController),this.stats=C(),this.packetSize=u,this.fakeXhr=new hr}destroy(){this.loader=this.callbacks=null,this.abortInternal()}abortInternal(){const e=this.response;e&&e.ok||(this.stats.aborted=!0,this.callbacks&&this.callbacks.onUpdate&&this.callbacks.onUpdate(void 0,!1,!0),this.controller&&this.controller.abort())}abort(){this.abortInternal(),this.callbacks&&this.callbacks.onAbort&&this.callbacks.onAbort(this.stats,this.context,this.response)}load(e,t,r){const i=this.stats;i.trequest=i.loading.start=performance.now();let n=function(e,t){const r={method:"GET",mode:"cors",credentials:"same-origin",signal:t,headers:new self.Headers(Object.assign({},e.headers))};e.rangeEnd&&r.headers.set("Range","bytes="+e.rangeStart+"-"+String(e.rangeEnd-1));return r}(e,this.controller?this.controller.signal:void 0);const s="arraybuffer"===e.responseType,a=s?"byteLength":"length",o=r.onUpdate,l=r.onBodyStart;this.context=e,this.config=t,this.callbacks=r,this.xhrSetup&&(this.xhrSetup(this.fakeXhr,e.url),n=function(e,t){e.withCredentials&&(t.credentials="include");for(let[r,i]of e.headers)t.headers.set(r,i);return t}(this.fakeXhr,n)),this.request=this.fetchSetup(e,n),clearTimeout(this.requestTimeout),this.requestTimeout=setTimeout((()=>{this.abortInternal(),this.fakeXhr._emitEvent("timeout"),this.fakeXhr._emitEvent("loadend"),r.onTimeout&&r.onTimeout(i,e,this.response)}),this.fakeXhr.timeout||t.timeout);const h="then"in(u=this.request)&&u.then instanceof Function?this.request.then(self.fetch):self.fetch(this.request);var u;const{fakeXhr:d}=this;d.readyState=d.OPENED,d.emit("readystatechange"),d._emitEvent("loadstart"),h.then((t=>{if(this.response=this.loader=t,!t.ok){const{status:e,statusText:i}=t,n=i||"fetch, bad network response";throw r.onError&&r.onError({text:n}),new fr(n,e,t)}i.tfirst=i.loading.first=Math.max(performance.now(),i.loading.start),i.total=parseInt(t.headers.get("Content-Length")||"0");let n=0;try{const e=t.headers.get("Content-Range").split("/");2===e.length&&(n=parseInt(e[1],10))}catch(e){}const{fakeXhr:a}=this;return a.readyState=a.HEADERS_RECEIVED,a.responseHeaders=t.headers,a.emit("readystatechange"),o&&"0"!==i.total?(l&&l(i.total,n),this.loadProgressively(t,i,e,o)):(a.emit("progress",new ProgressEvent("progress",{lengthComputable:!1})),s?t.arrayBuffer():t.text())})).then((t=>{const{response:n}=this;clearTimeout(this.requestTimeout),i.tload=i.loading.end=Math.max(performance.now(),i.loading.first),i.loaded=i.total=t[a];const s={url:n.url,data:t};r.onProgress&&r.onProgress(i,e,t,n),r.onSuccess&&r.onSuccess(s,i,e,n)})).catch((t=>{if(clearTimeout(this.requestTimeout),i.aborted)return;const n=t&&t.code||0,s=t?t.message:null;r.onError&&r.onError({code:n,text:s},e,t?t.details:null)}))}loadProgressively(e,t,r,i){const n=e.body.getReader();let s=0,o=0,l=(0,a.h)(0),h=!1;const d=()=>n.read().then((({value:r,done:n})=>{const{fakeXhr:c}=this;if(c.readyState!==c.LOADING&&(c.readyState=c.LOADING,c.emit("readystatechange")),r&&(s+=r.length),n){if(l.byteLength>0)if(s<=this.packetSize){const e=(0,a.h)(s);l.copy(e,0,o*this.packetSize,l.byteLength),i(e,!0)}else{const e=function(e,t){const r=e.byteLength-t,i=[];let n=t,s=Math.floor(r/u),o=r%u;for(let t=0;t0){const t=(0,a.h)(o);e.copy(t,0,n,n+o),i.push(t)}return i}(l,o*this.packetSize);for(let t=0;t=this.packetSize){s-=this.packetSize;const e=(0,a.h)(this.packetSize);l.copy(e,0,o*this.packetSize,(o+1)*this.packetSize),o++,i(e,!1)}return d()})).catch((()=>(this.fakeXhr._emitEvent("abort"),this.fakeXhr._emitEvent("loadend"),Promise.reject())));return d()}}function cr(e,t){return new self.Request(e.url,t)}class fr extends Error{constructor(e,t,r){super(e),this.code=t,this.details=r}}class gr extends(s()){constructor(e,t,r=!1){super(),this.coordinator=e,this.logger=t,this.rangeSupported=r,this.rangeStart=0,this.rangeEnd=0,this.httpLoadTime=2e3,this.proxied=!1,this.forwardPeer=null,this.reversePeer=null,this.bufArr=[],this.forwardBufList=[],this.reverseBufList=[],this.forwardOffset=-1,this.reverseOffset=1e4,this.timeStart=0,this.timeReceivePiece=0,this.destroyed=!1,this.forwardStreamListeners=[],this.reverseStreamListeners=[],this.rangeRequesting=!1,this.waitingRemain=!1,this.httpLoaded=0,this.p2pLoaded=0,this.deadline=0,this.forwardCanceled=!1,this.reverseCanceled=!1,this.firstReceived=!1}get isDownloading(){return this.timeReceivePiece>0}get isAlmostDeadline(){if(this.rangeRequesting)return!0;if(this.isEmpty)return!1;if(0===this.deadline)return!0;const e=this.deadline-performance.now();return e<=0||(this.p2pSpeed>3*this.minRequiredSpeed(e)||e<500)}hasPeer(e){return!!e&&(e===this.forwardPeer||e===this.reversePeer)}get streamListeners(){return[...this.reverseStreamListeners,...this.forwardStreamListeners].length}_notifyStreamListenersAbort(){const{sn:e,seg_id:t}=this.pieceMsg,r=[...this.reverseStreamListeners,...this.forwardStreamListeners];for(let i of r){const{handler:r}=i;r(e,t,!0,"aborted by synthesizer")}this._resetStreamListeners()}_resetStreamListeners(){this.reverseStreamListeners.length=0,this.forwardStreamListeners.length=0}_notifyStreamListenersRemain(){if(this.forwardStreamListeners.length>0){for(let e=this.forwardOffset+1;e0){for(let e=this.reverseOffset-1;e>=0;e--)this._notifyStreamListeners(!0,this.bufArr[e],e);this.reverseStreamListeners=[]}}addStreamListener(e,t,r){(e?this.reverseStreamListeners:this.forwardStreamListeners).push({handler:r,peerId:t})}removeStreamListener(e){const{sn:t,seg_id:r}=this.pieceMsg,i=i=>i.filter((i=>i.peerId!==e||(i.handler(t,r,!0,"aborted by cancel"),!1)));this.forwardStreamListeners=i(this.forwardStreamListeners),this.reverseStreamListeners=i(this.reverseStreamListeners)}setTimeout(e=0,t=!1){this.logger.info(`syn setTimeout ${e}`);let r=performance.now();e<=0?setTimeout((()=>{this._handleTimeout(!1,!1)}),0):(this.firstPieceTimer=setTimeout((()=>{if(this.firstReceived)return;const e=()=>{this.logger.warn(`switch to http, firstReceived ${this.firstReceived}`),this._handleTimeout(!1)};if(this.timeReceivePiece>0){const t=(this.timeReceivePiece-r)/2;t>0?this.firstPieceTimer=setTimeout((()=>{this.firstReceived&&!this._shouldSwitch()||e()}),t):e()}else e()}),e/2),this.deadline=r+e,this._startTimer(e,t))}setExtra(e={}){e.url&&(this.url=e.url),e.rangeStart&&(this.rangeStart=e.rangeStart),e.rangeEnd&&(this.rangeEnd=e.rangeEnd),e.httpLoadTime&&(this.httpLoadTime=e.httpLoadTime),e.proxied&&(this.proxied=!0),e.xhrSetup&&(this.xhrSetup=e.xhrSetup),e.headers&&(this.headers=e.headers),e.segId&&!this.pieceMsg.seg_id&&(this.pieceMsg.seg_id=e.segId)}get hasForwardPeer(){return!!this.forwardPeer}get hasReversePeer(){return!!this.reversePeer}hasPeerId(e){return this.forwardPeer&&this.forwardPeer.remotePeerId===e||this.reversePeer&&this.reversePeer.remotePeerId===e}get isEmpty(){return null===this.forwardPeer&&null===this.reversePeer}get isFull(){return this.forwardPeer&&this.reversePeer}setForwardPeer(e){this.forwardPeer=e,this.reversePeer&&this._print(),this._setupPeer(e,!1)}setReversePeer(e){this.reversePeer=e,this.forwardPeer&&this._print(),this._setupPeer(e,!0)}setPeer(e,t){t?this.setReversePeer(e):this.setForwardPeer(e)}deletePeer(e){const t=e===this.reversePeer;this._detachPeer(e),t?this.reversePeer=null:this.forwardPeer=null,(this.isEmpty||this.deadline>0)&&this._handleTimeout(!1,!1)}terminate(){this._handleTimeout(!1,!1)}get hasPartialBuffer(){return this.hasForwardBuffer||this.hasReverseBuffer}get hasForwardBuffer(){return this.forwardOffset>=0}get hasReverseBuffer(){return this.pieceMsg&&this.reverseOffset=this.pieceMsg.attachments-1}get isReverseBufferFull(){return this.reverseOffset<=0}_cancelP2p(e=!1){const{seg_id:t,sn:r,level:i}=this.pieceMsg;!this.forwardPeer||this.isForwardBufferFull||this.forwardCanceled||(this.forwardPeer.cancelDownload(r,i,t),this.forwardCanceled=!0),e||!this.reversePeer||this.isReverseBufferFull||this.reverseCanceled||(this.reversePeer.cancelDownload(r,i,t),this.reverseCanceled=!0)}detachPeers(){this._detachPeer(this.forwardPeer),this._detachPeer(this.reversePeer)}destroy(){clearTimeout(this.timer),clearTimeout(this.firstPieceTimer),this._notifyStreamListenersAbort(),this._cancelP2p(),this.removeAllListeners(),this.destroyed=!0,this._detachPeer(this.forwardPeer),this.forwardPeer=null,this.forwardOffset=-1,this._detachPeer(this.reversePeer),this.reversePeer=null,this.reverseOffset=1e4,this.bufArr=[],this.forwardStreamListeners=[],this.reverseStreamListeners=[],this.httpLoader&&(this.logger.warn("abort syn httpLoader"),this.httpLoader.abort())}_detachPeer(t){if(!t)return;const r=t===this.reversePeer?this.reverseEvents:this.forwardEvents;r&&r&&t.off(e.DC_PIECE_DATA,r.onPieceData).off(e.DC_PIECE,r.onPiece).off(e.DC_PIECE_NOT_FOUND,r.onPieceNotFound).off(e.DC_PIECE_ABORT,r.onPieceAbort)}_receivePacket(t,r,i,n=!0){const{seg_id:s,sn:o,level:l,size:h,attachments:u}=this.pieceMsg,d=r-1;if(this.bufArr[d]?(this.logger.warn(`syn bufArr ${s} already has ${d} size ${i.byteLength}`),this.bufArr[d]=i):(n?this.p2pLoaded+=i.byteLength:this.httpLoaded+=i.byteLength,this.emit(e.SYN_PROGRESS,{total:h,loaded:this.p2pLoaded+this.httpLoaded,first:!this.firstReceived,segId:s,sn:o}),this.firstReceived=!0,this.bufArr[d]=i,t?this.reverseOffset=d:this.forwardOffset=d,this._notifyStreamListeners(t,i,d)),this.forwardOffset!==this.reverseOffset-1)return!0;this.rangeRequesting||(this.forwardPeer&&(this.forwardPeer.miss=0),this.reversePeer&&(this.reversePeer.miss=0)),clearTimeout(this.timer),this._notifyStreamListenersRemain();const c=h/(performance.now()-this.timeStart);let f=a.h.concat(this.bufArr);const g=f.byteLength;if(g===h){let t=f.buffer;const r=new z(o,s,t,this.getFromPeerId(),l,this.pieceMsg.ext);this.emit(e.SYN_OUTPUT,r,{speed:c,p2p:this.p2pLoaded,http:this.httpLoaded})}else{this.logger.error(`${s} expectedSize ${h} != byteLength ${g} forward ${this.forwardOffset} reverse ${this.reverseOffset}`);for(let e=0;e{t&&t.emit(e.DC_ERROR,!0)}))}_setupPeer(t,r){const{logger:i}=this;0===this.timeStart&&(this.timeStart=performance.now());const n=(r,n,s,a,o,l)=>{if(this.destroyed)return;if(!this._validateMsg(r,l.level,n))return void i.error(`onPieceData ${n||r} not match ${JSON.stringify(this.pieceMsg)} from ${t.remotePeerId}`);if(a0&&this._shouldSwitch()&&(i.warn("should switch to http"),clearTimeout(this.timer),clearTimeout(this.firstPieceTimer),this._handleTimeout(!1,!1))},s=e=>{if(this.destroyed)return;const{attachments:r,size:n,sn:s,level:a,seg_id:o,ext:l}=e;return n&&this._validateMsg(s,a,o)?this.pieceMsg.size&&n!==this.pieceMsg.size?(i.warn(`onPiece ${o} size not match`),t.cancelDownload(s,a,o),void this.deletePeer(t)):void(0===this.bufArr.length&&(this.pieceMsg={...this.pieceMsg,seg_id:o,size:n,attachments:r,ext:l},this.reverseOffset=r,this.bufArr=new Array(r),this.timeReceivePiece=performance.now())):(i.warn(`onPiece ${JSON.stringify(e)} not match ${JSON.stringify(this.pieceMsg)}`),t.cancelDownload(s,a,o),void this.deletePeer(t))},a=e=>{this.destroyed||this.deletePeer(t)},o=()=>{this.destroyed||this.deletePeer(t)},l={onPieceData:n,onPiece:s,onPieceNotFound:a,onPieceAbort:o};r?this.reverseEvents=l:this.forwardEvents=l,t.on(e.DC_PIECE_DATA,n).once(e.DC_PIECE,s).once(e.DC_PIECE_NOT_FOUND,a).once(e.DC_PIECE_ABORT,o)}_shouldSwitch(){const e=u,t=this.pieceMsg.size-e*this.loadedPackets;return this.coordinator.shouldSwitchToHttp(t,this.deadline,this.p2pSpeed,e,this.httpLoadTime)}_startTimer(e,t=!0){this.timer=setTimeout(this._handleTimeout.bind(this,t),e)}get loadedPackets(){return this.pieceMsg.attachments-(this.reverseOffset-this.forwardOffset-1)}_handleTimeout(t=!1,r=!0){if(this.destroyed||this.rangeRequesting)return;const{seg_id:i,size:n,attachments:s}=this.pieceMsg;if(!n||0===this.timeReceivePiece)return this.logger.warn(`syn load timeout ${i} url ${this.url}`),void this.emit(e.SYN_ERROR,this.pieceMsg,sr);if(t&&this.timeReceivePiece>0&&s){this.logger.warn(`syn ${this.loadedPackets} of ${s} packets loaded`);const e=this.httpLoadTime>3e3?3e3:this.httpLoadTime;if(this.shouldWaitForRemain(e))return this.waitingRemain=!0,this.logger.info(`syn wait for remain ${e}`),void this._startTimer(e,!1)}if(r){const e=[this.forwardPeer,this.reversePeer].filter((e=>!!e)).sort(((e,t)=>{const r=e.currentLoadSpeed(),i=t.currentLoadSpeed();return r===i?e.timeSendRequest-t.timeSendRequest:r-i})).shift();e&&e.loadtimeout()}if(this.rangeSupported&&this.url&&(this.hasPartialBuffer||this.hasReversePeer))return this._cancelP2p(!0),this._loadRemainBufferByHttp();this._notifyStreamListenersAbort(),this.emit(e.SYN_ERROR,this.pieceMsg,lr)}shouldWaitForRemain(e){return!this.isEmpty&&this.shouldWaitForRemainUrgent(e)}shouldWaitForRemainUrgent(e){if(0===this.timeReceivePiece||e<=0)return!1;const t=this.p2pSpeed,r=this.minRequiredSpeed(e);return this.logger.info(`syn remainTime ${e} speed ${t} required ${r}`),t>=r}minRequiredSpeed(e){let t=0;return[this.forwardPeer,this.reversePeer].forEach((e=>{e&&(t+=e.loadedBytes())})),(this.pieceMsg.size-t)/e}get p2pSpeed(){let e=0;return[this.forwardPeer,this.reversePeer].forEach((t=>{t&&(e+=t.currentLoadSpeed())})),e}getFromPeerId(){const{forwardPeer:e,reversePeer:t}=this;return this.isFull&&e!==t?`${e.remotePeerId}:${t.remotePeerId}`:e?`${e.remotePeerId}`:t?`${t.remotePeerId}`:""}getStreamInfo(e){const t=e?this.reverseBufList:this.forwardBufList;let r,i;return t.length0?this.rangeEnd-1:0;let s=this.forwardOffset;const a=performance.now();this.rangeRequesting=!0;let o=ge(s,this.reverseOffset,t,this.rangeStart,n);const l=o.rangeEnd-o.rangeStart;i.info(`listeners ${this.streamListeners} continue download ${r} from ${this.url} range: ${o.rangeStart}-${o.rangeEnd}`),this.hasPartialBuffer||(o={});const u=new dr({xhrSetup:this.xhrSetup});this.httpLoader=u;let d={url:this.proxied?f(this.url,h,!0):this.url,...o};let c,g=s+1;const p={onUpdate:(t,r,n)=>{if(!this.destroyed){if(n)return i.warn("httpLoader aborted"),void this.emit(e.SYN_ERROR,this.pieceMsg,ar);if(r){const e=c/(performance.now()-a);this.coordinator.addHttpSpeed(e),this.httpLoader=void 0}this.bufArr[g]||this._receivePacket(!1,g+1,t,!1),g++}},onBodyStart:(t,n)=>{if(0===n&&i.warn(`range request fileSize ${n}`),this.destroyed)return;const{size:s}=this.pieceMsg;if(c=t,t!==s||0!==n&&n!==s){let r=!1;n>0&&n!==s?(i.error(`onBodyStart fileSize ${n} != ${s}`),r=!0):t!==l&&(i.error(`onBodyStart size ${t} != expectedSize ${l}`),r=!0),r&&this.emit(e.SYN_ERROR,this.pieceMsg,ar)}else i.warn(`syn range request ${r} resp whole ts`),g=0},onError:t=>{this.destroyed||(i.error(`httpLoader error ${t.text}`),this.emit(e.SYN_ERROR,this.pieceMsg,ar))},onTimeout:()=>{this.destroyed||(i.warn("httpLoader timeout"),this.emit(e.SYN_ERROR,this.pieceMsg,or))}};u.load(d,{timeout:15e3},p)}_print(){const{seg_id:e,sn:t}=this.pieceMsg;this.logger.info(`syn parallel loading ${e||t}`)}}class pr extends gr{constructor(e,r,i,n,s,a=!1,o){super(e,r,a,o),this.pieceMsg={event:t.DC_PIECE,sn:i,level:n,seg_id:s},o&&this.setExtra(o)}get segId(){return this.pieceMsg.seg_id}_notifyStreamListeners(e,t,r){const{sn:i,seg_id:n,attachments:s}=this.pieceMsg,a=e&&0===r||!e&&r===s-1,o=e?this.reverseStreamListeners:this.forwardStreamListeners;e?this.reverseBufList.push(t):this.forwardBufList.push(t),a&&(this.forwardBufList.push([...this.reverseBufList].reverse()),this.reverseBufList.push([...this.forwardBufList].reverse()));for(let e of o){const{handler:r}=e;r(i,n,!1,t,a)}a&&this._resetStreamListeners()}_validateMsg(e,t,r){return(!this.pieceMsg.seg_id||r===this.pieceMsg.seg_id)&&(e===this.pieceMsg.sn&&t===this.pieceMsg.level)}}class mr{constructor(){this.meanHttpSpeed=0}addHttpSpeed(e){this.meanHttpSpeed=.4*this.meanHttpSpeed+.6*e}shouldSwitchToHttp(e,t,r,i,n){if(this.meanHttpSpeed<=0)return!1;if(r>=this.meanHttpSpeed)return!1;if(this.meanHttpSpeed*n>=e)return!1;return((n+t-performance.now())*this.meanHttpSpeed-e)/(this.meanHttpSpeed-r)*r{if(e.bitset&&t.sn>=0){const{sn:r,level:i,complete:n,seg_id:s}=t,a=n?Yt.COMPLETE:Yt.PARTIAL_FORWARD;e.bitset.add(r,i,s,a),this._receiveDCHave(r,i,s,e),e.isAvailableUrgently&&this._handleDCHave(e,r,i,s,a)}})).on(t.DC_HAVE_REVERSE,(t=>{if(e.bitset&&t.sn>=0){const{sn:r,level:i,seg_id:n}=t;e.bitset.hasCompleteOr(r,i,Yt.PARTIAL_REVERSE)||e.bitset.add(r,i,n,Yt.PARTIAL_REVERSE),this._receiveDCHave(r,i,n,e),e.isAvailableUrgently&&this._handleDCHave(e,r,i,n,Yt.PARTIAL_REVERSE)}})).on(t.DC_LOST,(t=>{if(!e.bitset)return;const{sn:r,level:i}=t;e.bitset.has(r,i)&&(e.bitset.delete(r,i),this.bitCounts.decre(r,i))})).on(t.DC_PIECE,(e=>{e.ext&&e.ext.incompletes>=7||this.notifyAllPeers(e.sn,e.level,e.seg_id,e.reverse?Yt.PARTIAL_REVERSE:Yt.PARTIAL_FORWARD)})).on(t.DC_PIECE_CANCEL,(t=>{const{sn:r,level:i}=t,n=ve(r,i);this.removeStreamListener(n,e.remotePeerId)})).on(t.DC_PIECE_NOT_FOUND,(t=>{const{sn:r,level:i}=t;e.bitset.delete(r,i),this.bitCounts.decre(r,i),e.checkIfNeedChoke(!0)})).on(t.DC_DISCONNECT,(()=>{this.cleanRequestingMap(e.remotePeerId)})).on(t.DC_REQUEST,(async t=>{const{logger:r}=this,{sn:i,level:n,reverse:s}=t;let a=t.seg_id;a||(a=await this.bufMgr.getSegIdBySN(i));const o=()=>{this.bitset.delete(i,n),e.sendPieceNotFound(i,a,{level:n}),this._broadcastLost(i,a,n,e)},l=await this.bufMgr.getSegById(a),h=ve(i,n),u=this.requestingMap.get(h);let d=!1;u&&u.isDownloading&&(d=!0);const c=this.segmentBuilderMap.get(h);if(l)if(r.info(`found seg ${a} from bufMgr`),l.level===n){let t="SegmentStore"===this.bufMgr.name?"Disk":"Cache";l.ext&&l.ext.from&&l.ext.from.length<2500&&(t=`${l.ext.from}-${t}`),e.sendBuffer(l.sn,l.segId,l.data,{from:t,level:l.level,reverse:s})}else o();else if(!s&&c)r.info(`peer request ${i} wait from builder, sent ${c.bufferList.length}`),w(e,c,c.pieceMsg,c.bufferList,c.source,1);else if(d){r.info(`syn had ${u.loadedPackets} packets, wait remain from upstream ${u.getFromPeerId()}`);const t={...u.pieceMsg,reverse:s},{from:i,incompletes:n,bufferList:a}=u.getStreamInfo(s);w(e,u,t,a,i,n)}else o()}))}handleMetaData(e,t){if(t.field){e.bitset=new Jt(this.config.live,t.field);for(let e in t.field){const r=Number(e);if(r<0)continue;t.field[r].forEach((e=>{this.bitset.has(e,r)||this.bitCounts.incre(e,r)}))}this.addPeer(e),this.downloadOnly&&this.chokePeerRequest(e)}}peersHas(e,t){return this.bitCounts.has(e,t)}deletePeer(e){if(this.peerManager.hasPeer(e.remotePeerId)&&e.bitset){const t=e.bitset.allArray();for(let e in t){const r=Number(e),i=t[r];i&&i.forEach((e=>{this.bitCounts.decre(e,r)}))}}this.cleanRequestingMap(e.remotePeerId),super.deletePeer(e)}hasAndSetTargetPeer(e,t,r,i){const{logger:n,config:s}=this;let a=1e3*(i-s.httpLoadTime);this.allowP2pLimit=s.httpLoadTime+1.5,n.info(`bufferedDuration ${1e3*i} remainLoadTime ${a} allowP2pLimit ${1e3*this.allowP2pLimit}`);const o=ve(e,t),l=this.requestingMap.get(o);if(l){const s=l.segId;if(s&&s!==r)return n.warn(`syn segId ${s} not match ${r}`),this.requestingMap.delete(o),this._searchAvailablePeers(e,t,r,i);if(!l.shouldWaitForRemain(a)){if(n.warn(`syn prefetch timeout at ${e}`),l.prefetchTimeout=!0,l.isFull)return this.httpRangeSupported;const i=this.peerManager.getPeersOrderByWeight();let[s,o,h]=Xt(i,e,t,r);return!!this.setTargetPeersFromGroup(l,s,o,h)||(l.hasReversePeer||l.hasPartialBuffer||a>1e3*(this.allowP2pLimit+1))&&this.httpRangeSupported}return n.info(`prefetch ${e} wait for remain`),!0}return this._searchAvailablePeers(e,t,r,i)}_searchAvailablePeers(e,t,r,i){if(i<=this.allowP2pLimit)return!1;if(!this.hasIdlePeers||!this.peersHas(e,t))return!1;const n=this.peerManager.getPeersOrderByWeight(),[s,a]=zt(n,e,t,r);return this.targetPeers={forwardPeer:s,reversePeer:a},[s,a].some((e=>!!e))}reportTraffic(e,t,r){const{fetcher:i}=this.engine;i&&(e>0&&i.reportFlow(e),t>0&&i.reportDCTraffic(t,r))}notifyAllPeers(e,t,r,i=Yt.COMPLETE){if(!r)return void this.logger.error("segId is required");if(this.downloadOnly)return;const{live:n}=this.config;if(this.bitset.has(e,t,i))return;const s=((e,t,r)=>`${e}-${t}-${r}`)(e,t,i);let a;i!==Yt.PARTIAL_REVERSE&&(a=i===Yt.COMPLETE);const o=this.requestingMap.get(ve(e,t));for(let l of this.getPeers())o&&o.hasPeer(l)||l.notifySet.has(s)||l.bitset.hasCompleteOr(e,t,i)||l.uploading||(l.sendMsgHave(e,r,{level:t,reverse:i===Yt.PARTIAL_REVERSE,complete:a}),l.notifySet.add(s),n&&T(l.notifySet,20))}checkPeers(){const{logger:e,config:t,engine:r}=this,i=this.requestingMap.size;if(i>5&&(e.warn(`requestingMap size ${i}`),i>9))return;if(!this.hasPeers)return;const n=t.live;if(this.fragLoading&&!n)return void e.warn("loading urgently, skip prefetch");const{currentLevel:s}=r;if(0===this.bitCounts.size(s))return;if(!n&&this.nextLostSN>=0&&this.nextLostSN>=this.currPlaySN-10)return;let a=this.peerManager.getPeersOrderByWeight();if(0===a.length)return;let o=0,{prefetchNum:l,endSN:h,startSN:u}=t;if(n&&(l=3),this.getBufferedDuration()=h&&!this.bufMgr.overflowed)c=u;else{const e=Math.min(...a.filter((e=>e.endSN>=c)).map((e=>e?e.startSN:1/0)));if(!isFinite(e))return;ch))&&!(n&&c>this.loadingSN+2);){if(this.bitset.has(c,s)){c++;continue}const t=ve(c,s);if(this.bitCounts.has(c,s)&&!this.requestingMap.has(t)){let r=[null,null];if(n)r=zt(a,c,s,void 0,!0);else for(let e of a)if(e.bitset.has(c,s)){const t=e.bitset.getState(c,s);let i;i=t===Yt.COMPLETE?0===p(0,1):t===Yt.PARTIAL_REVERSE,r[i?1:0]=e;break}if(r.some((e=>!!e))){const i=new pr(this.coordinator,this.logger,c,s,void 0,this.httpRangeSupported);this._setupSynthesizer(i),this.requestingMap.set(t,i),r.forEach(((t,r)=>{if(t&&o{for(let r of this.getPeers()){const i=r.getLatestPlaylist(e,t);if(i)return this.playlistInfo.set(e,i),this.gotPlaylist=!0,i}return null};let n=i();return!n&&this.gotPlaylist&&(this.logger.info("getPlaylist wait 240ms"),await m(240),this.gotPlaylist=!1,n=i()),n}getBufferedDuration(){const{config:e}=this;if(this.waitForPeer)return e.waitForPeerTimeout+e.httpLoadTime;let{media:t,currentSrc:r}=this.engine;if(!t||t.src!==r&&0===t.currentTime){if(this.logger.info("try get video element"),t=ce(this.config.mediaElem,r),!t)return 4;this.engine.media=t}let i=function(e){let t=0,r=e.currentTime,i=e.buffered;for(let e=i.length-1;e>=0;e--)if(r>=i.start(e)&&r<=i.end(e)){t=i.end(e)-r;break}return e.playbackRate&&(t/=e.playbackRate),t>0?t:0}(t);return i}destroy(){super.destroy(),this.requestingMap.clear(),this.segmentBuilderMap.clear(),this.engine.removeAllListeners(t.MEDIA_REBUFFER)}clearCache(){"SegmentStore"===this.bufMgr.name?this.engine.emit(t.BM_FATAL_ERROR):this.bufMgr.clear(),this.bitset.clear()}_handleSynOutput(e,t,r,i){this.logger.info(`syn output ${e} http ${t} p2p ${r}`)}_handleSynError(e,t,r,i){const{logger:n,config:s}=this;n.warn(`SYN_ERROR ${t}-${r} code ${i}`),i!==sr&&e.hasPartialBuffer&&r>this.loadingSN?n.warn(`syn abort ${r} with partial buffer`):this.requestingMap.delete(ve(r,t)),s.live&&this.checkPeers()}_notifySynthesizer(e,t,r,i,n,s=!0){const{logger:a}=this,o=this.requestingMap.get(ve(r,i));if(!o)return;const l=o.segId;function h(n,s){s?e.requestDataById(t,r,!0,{level:i,reverse:n}):e.requestDataBySN(r,!1,{level:i,reverse:n})}function u(){return n===Yt.PARTIAL_FORWARD||n===Yt.COMPLETE}function d(){return n===Yt.PARTIAL_REVERSE||n===Yt.COMPLETE}t&&l&&t!==l?a.warn(`notifySynthesizer segId ${t} not match ${l}`):o.isFull||!this.prefetchOnly&&o.isAlmostDeadline||(o.isEmpty?o.hasForwardBuffer&&d()?(o.setReversePeer(e),h(!0,s)):o.hasReverseBuffer&&u()&&(o.setForwardPeer(e),h(!1,s)):!o.hasForwardPeer&&u()?(o.setForwardPeer(e),h(!1,s)):!o.hasReversePeer&&d()&&(o.setReversePeer(e),h(!0,s)))}_setupEngine(){this.engine.on(t.MEDIA_REBUFFER,(e=>{const{prefetchOnly:t,live:r}=this.config;t||r||(e&&!this.prefetchOnly&&this.logger.warn("rebuffer reach limit"),this.prefetchOnly=e)}))}getStatsForPeer(){const{currentLevel:e,media:t}=this.engine,r={level:e};if(t&&!this.config.live){const{currentTime:e}=t;r.pos=Math.round(e)}return r}checkSynthesizer(e,t){const r=ve(e,t),i=this.requestingMap.get(r);i&&(0===i.streamListeners?(this.logger.info(`destroy syn ${r} without listeners`),this.requestingMap.delete(r)):this.logger.info(`keep syn ${r} with listeners`))}setupSynForLoad(e,t,r,i,n){const{forwardPeer:s,reversePeer:a}=this.targetPeers,o=ve(e,t);let l=this.requestingMap.get(o);if(l?l.setExtra(i):(l=new pr(this.coordinator,this.logger,e,t,r,this.httpRangeSupported,i),this._setupSynthesizer(l),this.requestingMap.set(o,l)),l.prefetchTimeout&&n<1e3*this.allowP2pLimit&&!s&&!a)return l.setTimeout(0);let h=!1;n>700&&(s&&(l.setForwardPeer(s),s.requestDataById(r,e,!0,{level:t}),h=!0),a&&(l.setReversePeer(a),a.requestDataById(r,e,!0,{level:t,reverse:!0}),h=!0)),l.setTimeout(l.isEmpty?0:n,h)}}class yr{constructor(t,r,i,n){this.bufferList=[],this.streamListeners=[],this.finished=!1,this.packetSize=u,this.attachments=n%this.packetSize==0?n/this.packetSize:Math.floor(n/this.packetSize)+1,this.pieceMsg={event:e.DC_PIECE,attachments:this.attachments,seg_id:i,sn:t,level:r,size:n,reverse:!1},this.sink=(0,a.h)(0),this.source="HttpStream"}receiveBytes(e,t){e.byteLength&&(this.sink=a.h.concat([this.sink,e]),this.bufferList.push(e),t&&(this.finished=!0),this._notifyStreamListeners(e))}getCompleteBuffer(){return this.sink.buffer}destroy(){this.finished||this._notifyStreamListenersAbort()}addStreamListener(e,t,r){this.streamListeners.push({handler:r,peerId:t})}removeStreamListener(e){const{sn:t,seg_id:r}=this.pieceMsg;this.streamListeners=this.streamListeners.filter((i=>i.peerId!==e||(i.handler(t,r,!0,"aborted by cancel"),!1)))}_notifyStreamListenersAbort(){const{sn:e,seg_id:t}=this.pieceMsg;for(let r of this.streamListeners){const{handler:i}=r;i(e,t,!0,"aborted by httpLoader")}this.streamListeners.length=0}_notifyStreamListeners(e){const{sn:t,seg_id:r}=this.pieceMsg;for(let i of this.streamListeners){const{handler:n}=i;n(t,r,!1,e,this.finished)}this.finished&&(this.streamListeners.length=0)}}const Er=class extends vr{constructor(e,t){super(e,t),this.fragloadTimeout=e.hlsjs?10:6.8,this.resolveMap=new Map,this.segmentBypass=A(t.segmentBypass)?t.segmentBypass:()=>!1,!0===this.config.httpStreamEnabled?this.streamEnabled=ur():this.streamEnabled=!1}async handleGetMediaData(e,r){const{logger:i,engine:n,config:s}=this;let{url:a,range:o}=e;const l=this._getFrag(a,o);if(!l)return i.warn(`cannot get frag ${a}`),r.postMessage({action:t.SW_GET_MEDIA});if(n.segmentLoadCount++,this.segmentBypass(a,l.tagList)||n.segmentLoadCountthis.fragloadTimeout&&(g=this.fragloadTimeout),i.info(`handleGetMediaData sn ${h} bufferedDuration ${g}`);let p=1e3*(g-this.config.httpLoadTime);p<0?p=0:p>4e3&&(p=4e3);const m=ve(h,u);if(this.resolveMap.has(h)||c){let e=this.requestingMap.get(m);if(e||c){e&&this.httpRangeSupported&&(i.warn(`${h} is requesting, terminate syn wait for seg`),e.terminate());let n=setTimeout((()=>{i.info(`notify seg ${h} timeout`),n=-1,r.postMessage({action:t.SW_GET_MEDIA})}),p);this.bufMgr.once(`${t.BM_ADDED_SN_}${h}`,(e=>{n<0||e&&e.level===u&&(clearTimeout(n),i.info(`notify seg ${e.sn}`),r.postMessage({action:t.SW_GET_MEDIA,data:{url:a,buffer:e.data}}))}))}else i.warn(`${h} is requesting, fallback`),r.postMessage({action:t.SW_GET_MEDIA})}else if(this.hasAndSetTargetPeer(h,u,d,g)){await this._loadFragByP2p(l,r,h,d,a,u,o,p)||(i.warn(`p2p timeout switch to http load ${d}`),this._loadFragByHttp(l,r,h,d,a,u,o,1e3*this.fragloadTimeout))}else this._loadFragByHttp(l,r,h,d,a,u,o,1e3*this.fragloadTimeout)}_loadFragByHttp(e,r,i,n,s,a,o,l){const u=ve(i,a),d=f(s,h,!0),c=new dr({});let g={url:d,...L(o)};const p={timeout:l},m={onError:e=>{e.text&&this.logger.warn(e.text),this.fragLoading=!1,r.postMessage({action:t.SW_GET_MEDIA})},onTimeout:()=>{this.logger.warn("http load timeout"),this.fragLoading=!1,r.postMessage({action:t.SW_GET_MEDIA})},onSuccess:async(o,l)=>{this.fragLoading=!1,this.notifyAllPeers(i,a,n);const{data:h}=o;let d=l.tload-l.trequest;if(this.logger.info(`HTTP loaded ${n} time ${d} speed ${h.byteLength/d}`),!await this.bufMgr.hasSegOfId(n)){const e=y(h).buffer,t=new z(i,n,e,"",a);await this.bufMgr.putSeg(t),this.reportTraffic(h.byteLength,0,0)}this.segmentBuilderMap.delete(u),e.segId=n,e.loaded=h.byteLength,this.engine.emit(t.FRAG_LOADED,{url:s,sn:i,level:a,segId:n,loaded:e.loaded,duration:e.duration,byP2p:!1}),this._onFragLoaded(s,e),r.postMessage({action:t.SW_GET_MEDIA,data:{url:s,buffer:h}})}};if(this.streamEnabled){let e;m.onBodyStart=t=>{!e&&t>0&&(this.isMobileNet||this.notifyAllPeers(i,a,n,Yt.PARTIAL_FORWARD),e=new yr(i,a,n,t),this.segmentBuilderMap.has(u)||this.segmentBuilderMap.set(u,e))},m.onUpdate=(t,r,i)=>{if(i)return this.logger.warn(`loadFragByHttp ${n} aborted`),void this.segmentBuilderMap.delete(u);e&&e.receiveBytes(t,r)}}c.load(g,p,m)}async _loadFragByP2p(e,r,i,n,s,a,o,l){const{logger:h}=this;h.info(`p2p load sn ${i} segId ${n} level ${a}`);const u=await this.load(i,n,a,s,o,l);if(u&&u.data){const{data:o,fromPeerId:l,size:d}=u;if(h.info(`p2p loaded segId ${n} level ${a} size ${o.byteLength}`),!await this.bufMgr.hasSegOfId(n)){const e=new z(i,n,o,l,a);h.info(`bufMgr putSeg ${i} level ${a}`),await this.bufMgr.putSeg(e)}return e.loaded=o.byteLength,e.fromPeerId=l,this.engine.emit(t.FRAG_LOADED,{url:s,sn:i,level:a,segId:n,loaded:e.loaded,duration:e.duration,byP2p:!0,fromPeerId:l}),this._onFragLoaded(s,e),r.postMessage({action:t.SW_GET_MEDIA,data:{url:s,buffer:o,size:d}}),!0}h.warn(`P2P timeout load segId ${n}`);const d=await this.bufMgr.getSegById(n);return!!d&&(this.fragLoading=!1,h.info(`already loaded seg sn ${i} segId ${n}`),r.postMessage({action:t.SW_GET_MEDIA,data:{url:s,buffer:d.data}}),!0)}notifySWMessage(e,r,i){if(e===t.SW_GET_MEDIA)this.engine.fetcher&&this.engine.fetcher.increMediaRequests(),this.handleGetMediaData(r,i);else this.logger.warn(`unknown action ${e}`)}_getFrag(e,t){return t&&(e=`${e}|${t}`),this.fragMap.get(e)}destroy(){super.destroy(),this.logger.warn("destroy HlsSwScheduler")}_onFragLoaded(e,t){if(this.updateLoaded(t.sn,t.level,t.segId),!this.engine)return;const{media:r,targetDuration:i}=this.engine;!this.config.live&&r&&i&&(this.currPlaySN=Math.ceil(r.currentTime/i))}load(e,t,r,i,n,s){const{logger:a,config:o}=this;let l={...L(n),proxied:!0,url:i,segId:t,httpLoadTime:1e3*o.httpLoadTime};this.setupSynForLoad(e,r,t,l,s);const h=new Promise((i=>{const n={resolve:i,sn:e,level:r,segId:t};this.resolveMap.set(e,n)}));return this.targetPeers={},h}_setupSynthesizer(e){e.on(t.SYN_OUTPUT,(async(t,r)=>{const{config:i,logger:n}=this,{segId:s,sn:a,data:o,level:l}=t,{speed:h,http:u,p2p:d,underused:c}=r;this._handleSynOutput(s,u,d,c);const f=this.resolveMap.has(a);f&&(this.fragLoading=!1);if(i.validateSegment(s,new Uint8Array(o))){this.notifyAllPeers(a,l,s),this.bitset.has(a,l)||this.reportTraffic(u,d,h);const r=e.getFromPeerId();if(f){n.info(`receive criticalSeg seg_id ${s}`);const e=this.resolveMap.get(a);this.resolveMap.delete(a),e.resolve({data:o,fromPeerId:r})}else this.bitset.has(a,l)||(e.detachPeers(),await this.bufMgr.putSeg(t),this.updateLoaded(a,l,s))}else if(n.error(`segment ${s} validate failed`),f){const e=this.resolveMap.get(a);this.resolveMap.delete(a),e.resolve()}this.requestingMap.delete(ve(a,l)),i.live&&this.checkPeers()})).on(t.SYN_ERROR,((t,r)=>{const{sn:i,level:n}=t;if(this.resolveMap.has(i)){const e=this.resolveMap.get(i);this.resolveMap.delete(i),e.resolve()}this._handleSynError(e,n,i,r)}))}_handleDCHave(e,t,r,i,n){this._notifySynthesizer(e,i,t,r,n,this.resolveMap.has(t)),this.config.live&&W((()=>{this.checkPeers()}))}},Sr="2.7.10";class Tr extends Dt{static get name(){return"HlsSwP2pEngine"}static isServiceWorkerSupported(){return"serviceWorker"in navigator}constructor(e={},r=null){super(e,r),this.swSupported=self.isSecureContext,this.levels=[],this.bypassLevels=[],this.currentLevelIndex=0,this.currentSrc="",this.swVersion="",this.media=ce(this.config.mediaElem),this.workerKeepAliveInterval=null,this.fragMap=new Map,this.engineName=Tr.name,Tr.isServiceWorkerSupported()||(this.swSupported=!1,console.warn("service worker is not supported")),r&&(r.once("hlsDestroying",(()=>{this.destroy(),this.hlsjs=null})),r.on(this.HLSEvents.ERROR,this._onHlsError.bind(this)));const{channelIdMaker:i,signalId:n,browserInfo:s}=this.setup();if(this.onLevelLoaded=e=>{const{config:r}=this,a=e.live;r.live=a,this.targetDuration=e.averagetargetduration,this.browserInfo={...s,live:a,abr:this.multiBitrate||void 0,type:"hls_sw"},this.channel=`${i(this.currentSrc)}|${n}[${Z.VERSION}]`,this.setupElectron();const o=this.initLogger();o.info("use HlsSwP2pEngine"),o.info(`engine version: ${ue.version} hls-proxy version: ${this.swVersion}`),o.info(`channel ${this.channel}`),a||(r.startSN=e.startSN,r.endSN=e.endSN,o.info(`startSN ${e.startSN} endSN ${e.endSN}`)),this._init(this.channel,this.browserInfo),this.off(t.LEVEL_LOADED,this.onLevelLoaded)},0===this.config.httpLoadTime&&(this.config.live?this.on(t.LEVEL_LOADED,(e=>{const{fragments:t,averagetargetduration:r,startSN:i}=e;this.config.httpLoadTime=this.determineHttpLoadTime(t,r,i)})):this.config.httpLoadTime=3.5),this.on(t.LEVEL_LOADED,this.onLevelLoaded),this.onManifestParsed=(e,r)=>{this.multiBitrate=e.length>1,this.currentSrc=r,this.off(t.MANIFEST_PARSED,this.onManifestParsed)},this.on(t.MANIFEST_PARSED,this.onManifestParsed),this.onFragLoaded=({url:e})=>{this.curTsUri=e;const{config:t}=this;!this.rangeTested&&t.useHttpRange&&(this.startRangeRequestTimer(),this.rangeTested=!0,t.logger&&t.logger.info(JSON.stringify({engine:this.engineName,...this.browserInfo})))},this.on(t.FRAG_LOADED,this.onFragLoaded),this.swSupported){const{serviceWorker:e}=navigator;e.onmessage=e=>{const{action:r,data:i}=e.data;if(!r)return;if(r===t.SW_DEBUG){const{level:e,text:t}=i;return void(this.logger&&this.logger[e](`hls-proxy: ${t}`))}const n=e.ports[0];if(n){if(this.logger&&this.logger.info(`engine onmessage action ${r}`),n.postMessage({action:r,pong:!0}),!this.p2pEnabled||!i)return n.postMessage({action:r});switch(r){case t.SW_PLAYLIST:this.handlePlaylist(i,n);break;case t.SW_GET_PLAYLIST:this.handleGetPlaylist(i,n);break;default:if(!this.scheduler)return n.postMessage({action:r});this.scheduler.notifySWMessage(r,i,n)}}else this.logger&&this.logger.error(`sender not found in action ${r}`)}}this.config.swAutoRegister&&this.registerServiceWorker().then((function(e){})).catch((e=>{console.warn("ServiceWorker registration failed ",e)}))}get currentLevel(){return this.currentLevelIndex}watchRebuffering(e){this.offEventRebuffer=function(e,t){let r=null;const i=()=>{r||(r=setTimeout((()=>{t()}),2500))},n=()=>{null!=r&&(clearTimeout(r),r=null)};return e.addEventListener("waiting",i),e.addEventListener("playing",n),()=>{e.removeEventListener("waiting",i),e.removeEventListener("playing",n)}}(e,(()=>{this.fetcher&&this.fetcher.increRebuffers()}))}handlePlaylist(e,r){const{config:i,logger:n}=this,{url:s,redirectedUrl:a,text:o,ver:l}=e;return this.swVersion=l,-1===function(e,t){for(var r=e.split("."),i=t.split("."),n=0;na)return 1}return 0}(l,Sr)?(console.warn(`hls-proxy.js version should >= ${Sr}`),r.postMessage({action:t.SW_PLAYLIST})):this.bypassLevels.indexOf(b(s))>=0?(n&&n.warn("bypass audio track"),r.postMessage({action:t.SW_PLAYLIST})):(r.postMessage({action:t.SW_PLAYLIST,data:{active:!0,debug:n&&n.isDebugLevel,sharePlaylist:!!i.sharePlaylist}}),this._parsePlaylist(o,b(s),a),void(this.workerKeepAliveInterval||navigator.serviceWorker.getRegistration().then((e=>{const t=()=>e&&e.active&&"activated"===e.active.state;if(!i.live&&t()){const r=new URL(e.scope);this.pathname=r.pathname+h;const i=e=>{clearInterval(this.workerKeepAliveInterval),this.workerKeepAliveInterval=null;const t=`keep alive failed ${e}`;n&&(n.error(t),n.report(t,"SWKeepAlive",this.peerId,"2.12.15"))};this.workerKeepAliveInterval=setInterval((()=>{var e;t()?(e=this.pathname,new Promise(((t,r)=>{fetch(`${e}/keepalive/`).then((e=>{if(e.ok)return e.text();throw new Error("keepalive failed")})).then((e=>{if(""!==e.trim())throw new Error("not valid keepalive response");t()})).catch((e=>{r(e)}))}))).catch((e=>{i(e)})):i("sw not activated`")}),15e3)}}))))}_parsePlaylist(e,r,i,n=!1){const s=r;i&&(r=i);const{config:a,logger:o}=this;if(e.indexOf("#EXTINF:")>0||e.indexOf("#EXT-X-TARGETDURATION:")>0){let i=0;const o=qt.parseLevelPlaylist(e,r);this.levels.length>0?(i=this.levels.indexOf(b(o.url)),-1===i?(this.restartP2p(),this.currentSrc=s,i=0):this.currentLevelIndex=i):(""!==this.currentSrc&&s!==this.currentSrc&&this.restartP2p(),this.currentSrc=s,this.levels=[b(r)]),this.emit(t.LEVEL_LOADED,o),a.live&&S(this.fragMap,200),o.fragments.forEach((e=>{e.level=i;let t=l().buildAbsoluteURL(e.baseurl,e.relurl,{alwaysNormalize:!0});const r=e.byteRange;2===r.length&&(t=`${t}|bytes=${r[0]}-${r[1]-1}`),this.fragMap.set(t,e)})),!n&&a.sharePlaylist&&this.scheduler&&!this.scheduler.isMobileNet&&this.scheduler.broadcastPlaylist(b(r),e)}else{const i=qt.parseMasterPlaylist(e,r);""!==this.currentSrc&&this.restartP2p(),i.length>0&&(i.sort(((e,t)=>e.bitrate-t.bitrate)),this.levels=i.map((e=>b(e.url))),["AUDIO","SUBTITLES","CLOSED-CAPTIONS"].forEach((t=>{qt.parseMasterPlaylistMedia(e,r,t).forEach((e=>{e.url&&this.bypassLevels.push(b(e.url))}))}))),this.emit(t.MANIFEST_PARSED,i,s)}this._setupSegmentId()}async handleGetPlaylist(e,r){const{config:i,logger:n}=this;if(!n)return r.postMessage({action:t.SW_GET_PLAYLIST});const{scheduler:s}=this;if(!s)return void n.warn("scheduler not found");const{url:a}=e,o=b(a);if(s.playlistInfo.has(o)){const e=await s.getPlaylistFromPeer(o);if(e&&e.data){const{data:i,seq:s}=e;return n.info(`got playlist from peer seq ${s}`),r.postMessage({action:t.SW_GET_PLAYLIST,data:{text:i}}),void this._parsePlaylist(i,b(a),void 0,!0)}}return r.postMessage({action:t.SW_GET_PLAYLIST})}async registerServiceWorker(){const{logger:e,config:t}=this;if(!this.swSupported){let e="sw is not supported";return E||(e="https is required when using ServiceWorker",console.warn(e)),Promise.reject(e)}return this.media=ce(t.mediaElem),this.media||e&&e.warn("no video element found"),Ir.registerServiceWorker(t)}async unregisterServiceWorker(){clearInterval(this.workerKeepAliveInterval),this.workerKeepAliveInterval=null;const e="serviceWorker is not registered";return new Promise(((t,r)=>{const{serviceWorker:i}=navigator;i||r(e),i.getRegistration().then((i=>{i?i.unregister().then(t).catch(r):r(e)}))}))}async _init(e,t){const{logger:r,config:i}=this;if(!this.p2pEnabled||"object"!=typeof self)return;this.mediaTimer=setInterval((()=>{const e=()=>this.hlsjs&&this.hlsjs.media;if(this.media){const t=e();t&&this.media!==t&&(this.media=t),clearInterval(this.mediaTimer),this.rubufferTimer=setTimeout((()=>{this.watchRebuffering(this.media)}),15e3)}else this.media=e()||ce(i.mediaElem)}),3e3);let n=new Er(this,i);n.fragMap=this.fragMap;try{await super._init(e,n,t)}catch(e){return void(r&&r.error(e))}n.server=this.fetcher,this.scheduler=n,this.p2pEnabled&&!this.tracker.connected&&this.tracker.resumeP2P()}restartP2p(){this.logger&&this.logger.warn("restart P2P"),this.disableP2P(),this.enableP2P(),this.on(t.LEVEL_LOADED,this.onLevelLoaded),this.on(t.MANIFEST_PARSED,this.onManifestParsed),this.on(t.FRAG_LOADED,this.onFragLoaded)}enableP2P(){return this.p2pEnabled?null:(this.logger&&this.logger.info("enable P2P"),this.config.p2pEnabled=this.p2pEnabled=!0,this)}disableP2P(){this.logger&&this.logger.warn("disable P2P"),clearInterval(this.mediaTimer),clearTimeout(this.rubufferTimer),this.offEventRebuffer&&this.offEventRebuffer(),this.p2pEnabled&&(this.config.p2pEnabled=this.p2pEnabled=!1,this.tracker&&this.tracker instanceof kt&&(this.tracker.stopP2P(),this.tracker={},this.fetcher=null,this.bufMgr.destroy(),this.bufMgr=null)),this.levels=[],this.currentLevelIndex=0,this.lastLevel=0,this.multiBitrate=!1,this.rangeTested=!1,this.currentSrc="",this.media=void 0,this.config.live=!1,this.removeAllListeners(t.MANIFEST_PARSED),this.removeAllListeners(t.LEVEL_LOADED),this.removeAllListeners(t.FRAG_LOADED),clearInterval(this.workerKeepAliveInterval),this.workerKeepAliveInterval=null}destroy(){this.swSupported&&(navigator.serviceWorker.onmessage=void 0),super.destroy()}}const _r=Tr;function Lr(e,t,r="main"){return"main"!==r}function br(e,t){let r,i,n,s,a;const o=performance.now();r=o-300,i=o-200,n=o,e.trequest=r,e.tfirst=i,e.tload=n,e.loading={first:r,start:i,end:n},s=a=t,e.loaded=s,e.total=a}const Rr=class extends vr{constructor(e,t){super(e,t),this.isHlsjs=!0,this.waitForPeer=t.waitForPeer||!1,this.waitForPeerTimeout=t.waitForPeerTimeout,this.waitingPeers=0,this.waitingSeg={},this.requestedSet=new Set}startWaitPeerTimer(){this.waitForPeer&&(this.waitForPeerTimer=setTimeout((()=>{this.waitForPeer&&(this.waitForPeer=!1,this.emit(t.SCH_WAIT_PEER))}),1e3*(this.waitForPeerTimeout+0)))}updatePlaySN(e){this.currPlaySN=e}load(e,t,r){const{logger:i,config:n}=this;this.context=e;const{rangeStart:s,rangeEnd:a,url:o}=e,l=e.frag,{segId:h,sn:u,level:d}=l;this.callbacks=r,this.stats=C(),this.criticalSeg={sn:u,level:d,segId:h};let c=e.defaultTimeout-1e3*n.httpLoadTime;const f={rangeStart:Number(s),rangeEnd:Number(a),url:o,httpLoadTime:1e3*n.httpLoadTime,xhrSetup:n.xhrSetup,segId:h,headers:Object.keys(e.headers||{}).length>0?e.headers:void 0};this.setupSynForLoad(u,d,h,f,c),this.targetPeers={}}waitPeerNotifier(){return new Promise((e=>{this.waitForPeer||e(),setTimeout(e,1e3*this.waitForPeerTimeout),this.once(t.SCH_WAIT_PEER,e)}))}addPeer(e){if(super.addPeer(e),this.waitForPeer){const{level:r,sn:i}=this.waitingSeg,n=e.remotePeerId;e.bitset.has(i,r)&&i>0?(this.logger.info(`found initial seg ${r}-${i} from peer ${n}`),this.emit(t.SCH_WAIT_PEER)):this.waitingPeers===this.peersNum&&this.emit(t.SCH_WAIT_PEER)}}notifyPeersLoaded(e){this.logger.info(`notifyPeersLoaded ${e}`),this.waitForPeer&&(0===e?(this.waitForPeer=!1,this.emit(t.SCH_WAIT_PEER)):this.waitingPeers=e)}destroy(){super.destroy(),this.logger.warn("destroy HlsjsScheduler"),clearTimeout(this.waitForPeerTimer)}_setupDC(e){super._setupDC(e)}_setupSynthesizer(e){e.on(t.SYN_OUTPUT,(async(t,r)=>{const{config:i,logger:n}=this,{segId:s,sn:a,data:o,level:l}=t,{speed:h,http:u,p2p:d,underused:c}=r;this._handleSynOutput(s,u,d,c);const f=this.criticalSeg&&this.criticalSeg.segId===s;if(i.validateSegment(s,new Uint8Array(o))){this.notifyAllPeers(a,l,s),this.bitset.has(a,l)||this.reportTraffic(u,d,h);const r=e.getFromPeerId();if(f){n.info(`receive criticalSeg seg_id ${s}`);let{stats:e}=this;e.tload=e.loading.end=performance.now(),e.loaded=e.total=o.byteLength,this.criticalSeg=null;const{frag:t}=this.context;t.fromPeerId=r,t.loadByP2P=!0,this.callbacks.onSuccess({data:o,url:this.context.url},e,this.context),this.callbacks=void 0}else this.bitset.has(a,l)||(e.detachPeers(),await this.bufMgr.putSeg(t),this.updateLoaded(a,l,s))}else n.error(`segment ${s} validate failed`),f&&this.callbacks.onTimeout(this.stats,this.context,null);this.requestingMap.delete(ve(a,l)),i.live&&this.checkPeers()})).on(t.SYN_ERROR,((t,r)=>{const{sn:i,level:n}=t;this.criticalSeg&&this.criticalSeg.sn===i&&(this.criticalSeg=null,this.callbacks.onTimeout(this.stats,this.context,null)),this._handleSynError(e,n,i,r)})).on(t.SYN_PROGRESS,(({total:e,loaded:t,first:r,segId:i})=>{let{stats:n}=this;r&&n&&(n.tfirst=n.loading.first=Math.max(n.trequest,performance.now()));this.criticalSeg&&this.criticalSeg.segId===i&&this.callbacks&&this.callbacks.onLoaded&&this.callbacks.onLoaded({total:e,loaded:t,first:r},this.context)}))}_setupEngine(){super._setupEngine(),this.engine.on(t.FRAG_LOADING,(({sn:e,segId:t,byHttp:r,level:i})=>{this.loadingSN=e,this.loadingSegId=t,this.fragLoading=!0,r&&this.checkSynthesizer(e,i)})).on(t.FRAG_LOADED,(({sn:e,segId:t,byP2p:r,level:i})=>{this.fragLoading=!1,r||this.checkSynthesizer(e,i),this.updateLoaded(e,i,t)})).on(t.FRAG_CHANGED,(({sn:e})=>{this.updatePlaySN(e)}))}_handleDCHave(e,t,r,i,n){this._notifySynthesizer(e,i,t,r,n,this.criticalSeg&&this.criticalSeg.segId===i),this.config.live&&W((()=>{this.checkPeers()}))}};class Ar extends Dt{static get name(){return"HlsjsP2pEngine"}constructor(e,t={}){if(super(t,e),!e)throw new TypeError("hlsjs instance is null");this.config.xhrSetup=e.config.xhrSetup,this.engineName=Ar.name,this._onFragLoading=this._onFragLoading.bind(this),this._onFragLoaded=this._onFragLoaded.bind(this),this._onFragChanged=this._onFragChanged.bind(this),this._onHlsError=this._onHlsError.bind(this),this._onLevelUpdated=this._onLevelUpdated.bind(this);const{channelIdMaker:r,signalId:i,browserInfo:n}=this.setup();this.config.waitForPeer&&this.config.sourceUrl?(this.config.trickleICE=!0,this.config.httpRangeSupported=!0,this._startEngine(this.config.sourceUrl,this.config.live,n,r,i)):this.config.waitForPeer=!1;const s=(t,a)=>{if(!a)return;const{config:o}=this,l=a.details,h=l.live;o.waitForPeer?(this.tracker&&this.tracker.scheduler&&this.tracker.scheduler.startWaitPeerTimer(),this.logger.info("waitForPeer mode")):this._startEngine(this.hlsjs.url,h,n,r,i,l),e.off(this.HLSEvents.LEVEL_LOADED,s)};e.on(this.HLSEvents.LEVEL_LOADED,s);const a=(e,t)=>{if(!t)return;const{config:r}=this,{fragments:i,averagetargetduration:n,startSN:s}=t.details;r.httpLoadTime=this.determineHttpLoadTime(i,n,s)};0===this.config.httpLoadTime&&(this.config.live?e.on(this.HLSEvents.LEVEL_LOADED,a):this.config.httpLoadTime=3.5);const o=(t,r)=>{this._setupSegmentId();const i=r.levels.length;this.multiBitrate=i>1,e.off(this.HLSEvents.MANIFEST_PARSED,o)};e.on(this.HLSEvents.MANIFEST_PARSED,o),e.on(this.HLSEvents.DESTROYING,(()=>{e.off(this.HLSEvents.LEVEL_LOADED,a),this.destroy()}))}_startEngine(e,t,r,i,n,s={}){const{config:a}=this;a.live=t,this.browserInfo={...r,live:t,abr:this.multiBitrate||void 0,type:"hls"},this.channel=`${i(e)}|${n}[${Z.VERSION}]`,this.setupElectron();const o=this.initLogger();o.info("use HlsjsP2pEngine"),this.logger=o,o.info(`channel ${this.channel}`),t||(a.startSN=s.startSN,a.endSN=s.endSN,o.info(`startSN ${s.startSN} endSN ${s.endSN}`)),this.eventListened=!1,this._init(this.channel,this.browserInfo)}async _init(e,t){const{logger:r,config:i}=this;if(!this.p2pEnabled||"object"!=typeof self)return;this.media=this.hlsjs.media,this.media&&(this.currentSrc=this.media.src);const n=new Rr(this,i);this.eventListened||(this._updateHlsEventsHandlers(),this.eventListened=!0);try{await super._init(e,n,t)}catch(e){return void r.error(e)}this.hlsjs.config.fLoader=function(e,t,r,i){return class extends(s()){constructor(n){super(),this.logger=r,this.isHlsV0=i.isHlsV0,this.bufMgr=e.bufMgr,this.streamEnabled=i.httpStreamEnabled&&ur(),this.httpLoader=this.streamEnabled?new dr(n):new n.loader(n),this.p2pEnabled=i.p2pEnabled,this.isLive=i.live,this.scheduler=e,this.fetcher=t,this.segmentId=i.segmentId,this.blockTypes=i.p2pBlackList,this.stats=this.httpLoader.stats||C(),this.enableWorker=n.enableWorker,this.segmentBypass=A(i.segmentBypass)?i.segmentBypass:()=>!1,this.prefetchOnly=i.prefetchOnly,this.startFromSegmentOffset=i.startFromSegmentOffset,e.engine.segmentLoadCount++,this.segmentLoadCount=e.engine.segmentLoadCount}destroy(){this.httpLoader.destroy()}abort(){this.httpLoader.abort()}async load(e,t,r){const{logger:i,scheduler:n}=this,{url:s,frag:a}=e;this.isHlsV0||(a.stats=this.stats);const{level:o,sn:l,type:h,tagList:u}=a;let d=a.segId;if(!d){let t;e.rangeEnd&&(t="bytes="+e.rangeStart+"-"+(e.rangeEnd-1)),d=a.segId=this.segmentId(String(o),l,s,t)}const c=()=>(a.loadByHTTP=!0,this.httpLoader.load(e,t,r));if(!s||!Number.isInteger(l)||Lr(0,this.blockTypes,h)||this.segmentBypass(s,u))return i.info(`HTTP load blockType ${s}`),c();if(this.fetcher.increMediaRequests(),this.isLive&&n.requestedSet.has(d))return i.warn(`HTTP load duplicated ${s}`),c();if(this.segmentLoadCount{!this.isHlsV0&&r.onProgress&&r.onProgress(this.stats,e,n.data),r.onSuccess(n,this.stats,e)}))}!this.prefetchOnly&&this.p2pEnabled&&n.hasAndSetTargetPeer(l,o,d,f)||!this.prefetchOnly&&n.waitForPeer&&(i.warn("waitPeerNotifier start"),n.waitingSeg={sn:l,level:o},await n.waitPeerNotifier(),i.warn("waitPeerNotifier end"),n.waitingSeg={},this.p2pEnabled&&n.hasAndSetTargetPeer(l,o,d,f))?this.loadFragByP2p(e,t,r,d,f):(i.info(`fragLoader load ${d} at ${l} level ${o} buffered ${1e3*f}`),this.loadFragByHttp(e,t,r,d))}loadFragByHttp(e,t,r,i){const{logger:n,scheduler:s}=this,{segmentBuilderMap:a}=s,o=e.frag,{sn:l,level:h}=o,u=ve(l,h);if(this.streamEnabled){let e;r.onUpdate=(t,r,s)=>{if(s)return n.warn(`loadFragByHttp ${i} aborted`),void a.delete(u);e&&e.receiveBytes(t,r)},r.onBodyStart=t=>{!e&&t>0&&(e=new yr(l,h,i,t),a.has(u)||a.set(u,e),s.isMobileNet||s.notifyAllPeers(l,h,i,Yt.PARTIAL_FORWARD))}}const d=r.onSuccess;r.onSuccess=async(e,t,r)=>{const{data:o}=e;let c=t.tload-t.trequest;if(n.info(`HTTP loaded ${i} time ${c} speed ${o.byteLength/c}`),!await this.bufMgr.hasSegOfId(i)){const e=y(o).buffer,t=new z(l,i,e,this.fetcher.peerId,h);await this.bufMgr.putSeg(t)}a.delete(u),this.fetcher.reportFlow(t.total),s.notifyAllPeers(l,h,i),d(e,t,r)};const c=r.onProgress;c&&(r.onProgress=(e,t,r)=>{o.loaded=e.total,c(e,t,r&&this.enableWorker?y(r).buffer:r)}),e.frag.loadByHTTP=!0,this.httpLoader.load(e,t,r)}loadFragByP2p(e,t,r,i,n){const{logger:s}=this,a=e.frag;let o;o=t.loadPolicy?t.loadPolicy.maxTimeToFirstByteMs:t.timeout,(!o||o>1e3*n)&&(o=1e3*n),e.defaultTimeout=o,this.scheduler.load(e,t,r);const l=r.onSuccess,h=r.onTimeout;r.onTimeout=(e,n)=>{s.warn(`P2P timeout switched to HTTP load ${a.relurl} at ${a.sn}`),r.onSuccess=l,this.loadFragByHttp(n,t,r,i),r.onTimeout=h},r.onSuccess=async(e,t,n)=>{if(!await this.bufMgr.hasSegOfId(i)){const t=y(e.data).buffer,r=new z(a.sn,i,t,a.fromPeerId||this.fetcher.peerId,a.level);await this.bufMgr.putSeg(r)}a.loadByP2P||this.fetcher.reportFlow(t.total),a.loaded=t.loaded,s.info(`${a.loadByP2P?"P2P":"HTTP"} loaded segment id ${i}`),!this.isHlsV0&&r.onProgress&&r.onProgress(t,n,e.data),l(e,t,n)}}}}(n,this.fetcher,r,i),i.sharePlaylist&&(this.hlsjs.config.pLoader=function(e,t,r){return class extends(s()){constructor(i){super(),this.logger=t,this.xhrLoader=new i.loader(i),this.p2pEnabled=r.p2pEnabled,this.scheduler=e,this.stats=this.xhrLoader.stats||C()}destroy(){this.xhrLoader.destroy()}abort(){this.xhrLoader.abort()}async load(e,t,r){const{logger:i}=this,{url:n}=e,s=b(n),a=r.onSuccess;if(r.onSuccess=(e,t,r)=>{this.scheduler&&!r.loadedByPeer&&this.scheduler.broadcastPlaylist(s,e.data),a(e,t,r)},this.scheduler&&this.scheduler.playlistInfo.has(s)){const t=await this.scheduler.getPlaylistFromPeer(s);if(t&&t.data){const{data:s,seq:a}=t;i.info(`got playlist from peer seq ${a}`),br(this.stats,s.length);let o={url:n,data:s};return e.loadedByPeer=!0,void W((()=>{r.onSuccess(o,this.stats,e)}))}}this.xhrLoader.load(e,t,r)}}}(n,r,i)),this.trackerTried=!1,this.trackerTried||this.tracker.connected||!i.p2pEnabled||(this.tracker.resumeP2P(),this.trackerTried=!0)}_onFragLoading(e,r){const i=r.frag;let{sn:n,level:s,segId:a}=i;if(!Lr(i.url,this.config.p2pBlackList,i.type)&&Number.isInteger(n)){if(this.logger.info("loading frag "+n),this.bufMgr&&(this.bufMgr.loadingSN=n),!a){let e;i._byteRange&&(e="bytes="+i._byteRange[0]+"-"+i._byteRange[1]);let t=i.url;this._setupSegmentId(),a=i.segId=this.config.segmentId(String(s),i.sn,t,e)}this.emit(t.FRAG_LOADING,{sn:n,segId:a,byHttp:i.loadByHTTP,level:s})}}_onLevelUpdated(e,t){const{details:r}=t,{hlsjs:i,config:n}=this;if(!r.live)return;const s=r.fragments.length,a=s-1;i&&i.config.liveSyncDurationCount!==a&&"main"===r.fragments[0].type&&s>4&&(n.isHlsV0||!i.userConfig.liveSyncDuration&&!i.userConfig.liveSyncDurationCount)&&(this.logger.info(`set liveSyncDurationCount ${a}`),i.config.liveSyncDurationCount=a)}_onFragLoaded(e,r){if(!this.p2pEnabled)return;const{frag:i}=r;this.curTsUri=i.url;const{sn:n,segId:s,loaded:a,duration:o,level:l,fromPeerId:h,loadByP2P:u,url:d}=i,{config:c,logger:f}=this;this.tracker&&this.tracker.scheduler&&(T(this.tracker.scheduler.requestedSet,50),this.tracker.scheduler.requestedSet.add(s)),Lr(i.url,c.p2pBlackList,i.type)||(this.bufMgr&&this.bufMgr.loadingSN>=0&&this.emit(t.FRAG_LOADED,{url:d,sn:n,level:l,segId:s,loaded:a,duration:o,byP2p:!!u,fromPeerId:h}),!this.rangeTested&&c.useHttpRange&&(this.startRangeRequestTimer(),this.rangeTested=!0,f.info(JSON.stringify({engine:this.engineName,hlsjs:this.hlsjsVersion,...this.browserInfo}))))}_onFragChanged(e,r){const{frag:i}=r;if(!Lr(i.url,this.config.p2pBlackList,i.type)){this.logger.info("frag changed: "+i.sn);const{sn:e,duration:r}=i;this.emit(t.FRAG_CHANGED,{sn:e,duration:r})}}get currentLevel(){const{currentLevel:e}=this.hlsjs;return e>=0?e:0}disableP2P(){this.logger&&this.logger.warn("disable P2P"),this.p2pEnabled&&(this.p2pEnabled=!1,this.config.p2pEnabled=this.p2pEnabled,this.tracker&&(this.tracker.stopP2P(),this.tracker={},this.fetcher=null,this.bufMgr.destroy(),this.bufMgr=null,this.hlsjs.config.fLoader=this.hlsjs.config.pLoader=this.hlsjs.constructor.DefaultConfig.loader))}_updateHlsEventsHandlers(e=!1){const t=this.hlsjs;if(!t)return;const r=e?"off":"on";t[r](this.HLSEvents.FRAG_LOADING,this._onFragLoading),t[r](this.HLSEvents.FRAG_LOADED,this._onFragLoaded),t[r](this.HLSEvents.FRAG_CHANGED,this._onFragChanged),t[r](this.HLSEvents.ERROR,this._onHlsError),t[r](this.HLSEvents.LEVEL_UPDATED,this._onLevelUpdated)}destroy(){this._updateHlsEventsHandlers(!0),super.destroy()}}const wr=Ar;class Pr{static get Events(){return t}static get TrackerZone(){return ue.TrackerZone}static isSupported(){return ue.isSupported()&&(de()||_r.isServiceWorkerSupported())}static isServiceWorkerSupported(){return _r.isServiceWorkerSupported()}static isMSESupported(){return de()}static getBrowser(){return Q().getBrowser()}static get ServiceWorkerEngine(){return _r}static get HlsjsEngine(){return wr}static async tryRegisterServiceWorker({swFile:e="./sw.js",swScope:t="./"}={}){return Pr.registerServiceWorker({swFile:e,swScope:t})}static async registerServiceWorker({swFile:e="./sw.js",swScope:t="./",hlsjsInstance:r}={}){const{serviceWorker:i}=navigator;return!i||r?Promise.resolve():i.getRegistration().then((r=>r||Promise.race([i.register(e,{scope:t}).then((e=>function(e){return new Promise(((t,r)=>{const i=e.installing||e.waiting||e.active,n=()=>"activated"===i.state&&(i.removeEventListener("statechange",n),t(e),!0);n()||i.addEventListener("statechange",n)}))}(e))),m(300)]))).catch((()=>{Promise.resolve()}))}constructor(e={}){const{hlsjsInstance:t}=e;delete e.hlsjsInstance;const r=()=>{this._realEngine=new wr(t,e)},i=()=>{this._realEngine=new _r(e,t)};"1"!==c("_sw")?e.proxyFirst&&t?_r.isServiceWorkerSupported()?i():r():!e.proxyOnly&&de()&&t?r():i():i()}get realEngine(){return this._realEngine}get engineName(){return this._realEngine.constructor.name}once(e,t){return this._realEngine.once(e,t)}on(e,t){return this._realEngine.on(e,t)}off(e,t){return this._realEngine.off(e,t)}removeListener(e,t){return this._realEngine.removeListener(e,t)}removeAllListeners(e){return this._realEngine.removeAllListeners(e)}set p2pEnabled(e){this._realEngine.p2pEnabled=e}get p2pEnabled(){return this._realEngine.p2pEnabled}enableP2P(){this._realEngine.enableP2P()}disableP2P(){this._realEngine.disableP2P()}destroy(){this._realEngine.destroy()}async registerServiceWorker(){return A(this._realEngine.registerServiceWorker)?this._realEngine.registerServiceWorker():Promise.reject("Not supported by this engine")}async unregisterServiceWorker(){return A(this._realEngine.unregisterServiceWorker)?this._realEngine.unregisterServiceWorker():Promise.reject("Not supported by this engine")}get version(){return ue.version}}Pr.version=ue.version,Pr.protocolVersion=Z.VERSION,"object"==typeof self&&(self.P2PEngineHls=Pr);const Ir=Pr;var Cr=r(251),kr=r.n(Cr);const Dr={maxBufferLength:12},Mr={maxBufferLength:40};class xr extends(kr()){static get P2PEvents(){return Ir.Events}static get P2pEngine(){return Ir}constructor(e={}){let t=e.p2pConfig||{};const r=!1===t.live?Mr:Dr;let i=JSON.parse(JSON.stringify(r));i.maxBufferSize=0,i.enableWorker=!1;for(let t in e)"p2pConfig"!==t&&(i[t]=e[t]);super(i),this._restartEvent=()=>{this.restartP2P()},Ir.isSupported()&&(this._p2pEngine=new Ir({...t,hlsjsInstance:this}),this._p2pEngine.on(Ir.Events.RESTART_P2P,this._restartEvent)),this.on(kr().Events.DESTROYING,(()=>{this._p2pEngine&&(this._p2pEngine.removeListener(Ir.Events.RESTART_P2P,this._restartEvent),this._p2pEngine.hlsjs=null,this._p2pEngine=null)}))}get p2pEngine(){return this._p2pEngine}enableP2P(){this._p2pEngine&&(this._p2pEngine=this._p2pEngine.enableP2P())}disableP2P(){this._p2pEngine&&this._p2pEngine.disableP2P()}restartP2P(){this._p2pEngine&&(this._p2pEngine.disableP2P(),setTimeout((()=>{this.enableP2P()}),2e3),this._p2pEngine.removeListener(Ir.Events.RESTART_P2P,this._restartEvent))}}xr.engineVersion=Ir.version,xr.protocolVersion=Ir.protocolVersion,xr.WEBRTC_SUPPORT=Ir.isSupported();const Or=xr})(),i=i.default})()));
\ No newline at end of file